summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2024-02-01 03:00:51 +0000
committerNorbert Preining <norbert@preining.info>2024-02-01 03:00:51 +0000
commita494a509f3f4a13a450c898488155f7aa5353bd3 (patch)
treeab11a3116dfe36f273b0eefe1a7abb556253a9c8
parent79e1bbc1ad6b308aa2074540b2afd43b6a72ce03 (diff)
CTAN sync 202402010300
-rw-r--r--FILES.byname1216
-rw-r--r--FILES.byname.gzbin2594469 -> 2594948 bytes
-rw-r--r--FILES.last07days445
-rw-r--r--biblio/ctan-bibdata/ctan.bib94
-rw-r--r--fonts/heuristica/README5
-rw-r--r--fonts/heuristica/tex/heuristica.sty6
l---------info/examples/tex-in-practice1
-rw-r--r--info/examples/tex-in-practice/absdimen.tip (renamed from info/examples/tip/absdimen.tip)0
-rw-r--r--info/examples/tex-in-practice/absval.tip (renamed from info/examples/tip/absval.tip)0
-rw-r--r--info/examples/tex-in-practice/acronym.tip (renamed from info/examples/tip/acronym.tip)0
-rw-r--r--info/examples/tex-in-practice/advtabst.tip (renamed from info/examples/tip/advtabst.tip)0
-rw-r--r--info/examples/tex-in-practice/aevpar.tip (renamed from info/examples/tip/aevpar.tip)0
-rw-r--r--info/examples/tex-in-practice/alldate.tip (renamed from info/examples/tip/alldate.tip)0
-rw-r--r--info/examples/tex-in-practice/allocat.tip (renamed from info/examples/tip/allocat.tip)0
-rw-r--r--info/examples/tex-in-practice/alwbase.tip (renamed from info/examples/tip/alwbase.tip)0
-rw-r--r--info/examples/tex-in-practice/angt.tip (renamed from info/examples/tip/angt.tip)0
-rw-r--r--info/examples/tex-in-practice/arbday.tip (renamed from info/examples/tip/arbday.tip)0
-rw-r--r--info/examples/tex-in-practice/arraymac.tip (renamed from info/examples/tip/arraymac.tip)0
-rw-r--r--info/examples/tex-in-practice/atpos.tip (renamed from info/examples/tip/atpos.tip)0
-rw-r--r--info/examples/tex-in-practice/be-env.tip (renamed from info/examples/tip/be-env.tip)0
-rw-r--r--info/examples/tex-in-practice/bletpar.tip (renamed from info/examples/tip/bletpar.tip)0
-rw-r--r--info/examples/tex-in-practice/box-bb.tip (renamed from info/examples/tip/box-bb.tip)0
-rw-r--r--info/examples/tex-in-practice/box-bul.tip (renamed from info/examples/tip/box-bul.tip)0
-rw-r--r--info/examples/tex-in-practice/box-larg.tip (renamed from info/examples/tip/box-larg.tip)0
-rw-r--r--info/examples/tex-in-practice/box-mac.tip (renamed from info/examples/tip/box-mac.tip)0
-rw-r--r--info/examples/tex-in-practice/box-thck.tip (renamed from info/examples/tip/box-thck.tip)0
-rw-r--r--info/examples/tex-in-practice/box-zero.tip (renamed from info/examples/tip/box-zero.tip)0
-rw-r--r--info/examples/tex-in-practice/boxing1.tip (renamed from info/examples/tip/boxing1.tip)0
-rw-r--r--info/examples/tex-in-practice/boxing2.tip (renamed from info/examples/tip/boxing2.tip)0
-rw-r--r--info/examples/tex-in-practice/boxing3.tip (renamed from info/examples/tip/boxing3.tip)0
-rw-r--r--info/examples/tex-in-practice/boxing4.tip (renamed from info/examples/tip/boxing4.tip)0
-rw-r--r--info/examples/tex-in-practice/boxing5.tip (renamed from info/examples/tip/boxing5.tip)0
-rw-r--r--info/examples/tex-in-practice/boxing6.tip (renamed from info/examples/tip/boxing6.tip)0
-rw-r--r--info/examples/tex-in-practice/boxing7.tip (renamed from info/examples/tip/boxing7.tip)0
-rw-r--r--info/examples/tex-in-practice/boxrelim.tip (renamed from info/examples/tip/boxrelim.tip)0
-rw-r--r--info/examples/tex-in-practice/boxrqu.tip (renamed from info/examples/tip/boxrqu.tip)0
-rw-r--r--info/examples/tex-in-practice/centerlp.tip (renamed from info/examples/tip/centerlp.tip)0
-rw-r--r--info/examples/tex-in-practice/centerng.tip (renamed from info/examples/tip/centerng.tip)0
-rw-r--r--info/examples/tex-in-practice/centpar.tip (renamed from info/examples/tip/centpar.tip)0
-rw-r--r--info/examples/tex-in-practice/charbo.tip (renamed from info/examples/tip/charbo.tip)0
-rw-r--r--info/examples/tex-in-practice/chboxd.tip (renamed from info/examples/tip/chboxd.tip)0
-rw-r--r--info/examples/tex-in-practice/clearb.tip (renamed from info/examples/tip/clearb.tip)0
-rw-r--r--info/examples/tex-in-practice/collect.tip (renamed from info/examples/tip/collect.tip)0
-rw-r--r--info/examples/tex-in-practice/coltok.tip (renamed from info/examples/tip/coltok.tip)0
-rw-r--r--info/examples/tex-in-practice/comfiles.tip (renamed from info/examples/tip/comfiles.tip)0
-rw-r--r--info/examples/tex-in-practice/compst.tip (renamed from info/examples/tip/compst.tip)0
-rw-r--r--info/examples/tex-in-practice/compstca.tip (renamed from info/examples/tip/compstca.tip)0
-rw-r--r--info/examples/tex-in-practice/condltr.tip (renamed from info/examples/tip/condltr.tip)0
-rw-r--r--info/examples/tex-in-practice/conval.tip (renamed from info/examples/tip/conval.tip)0
-rw-r--r--info/examples/tex-in-practice/copydate.tip (renamed from info/examples/tip/copydate.tip)0
-rw-r--r--info/examples/tex-in-practice/counters.tip (renamed from info/examples/tip/counters.tip)0
-rw-r--r--info/examples/tex-in-practice/countl.tip (renamed from info/examples/tip/countl.tip)0
-rw-r--r--info/examples/tex-in-practice/cref-1.tip (renamed from info/examples/tip/cref-1.tip)0
-rw-r--r--info/examples/tex-in-practice/cref-2.tip (renamed from info/examples/tip/cref-2.tip)0
-rw-r--r--info/examples/tex-in-practice/cref-2a.tip (renamed from info/examples/tip/cref-2a.tip)0
-rw-r--r--info/examples/tex-in-practice/cref-3.tip (renamed from info/examples/tip/cref-3.tip)0
-rw-r--r--info/examples/tex-in-practice/cref-3a.tip (renamed from info/examples/tip/cref-3a.tip)0
-rw-r--r--info/examples/tex-in-practice/cref-4.tip (renamed from info/examples/tip/cref-4.tip)0
-rw-r--r--info/examples/tex-in-practice/cref-5.tip (renamed from info/examples/tip/cref-5.tip)0
-rw-r--r--info/examples/tex-in-practice/crline.tip (renamed from info/examples/tip/crline.tip)0
-rw-r--r--info/examples/tex-in-practice/csar.tip (renamed from info/examples/tip/csar.tip)0
-rw-r--r--info/examples/tex-in-practice/cssprint.tip (renamed from info/examples/tip/cssprint.tip)0
-rw-r--r--info/examples/tex-in-practice/cstostr.tip (renamed from info/examples/tip/cstostr.tip)0
-rw-r--r--info/examples/tex-in-practice/cstostrc.tip (renamed from info/examples/tip/cstostrc.tip)0
-rw-r--r--info/examples/tex-in-practice/ctestcs.tip (renamed from info/examples/tip/ctestcs.tip)0
-rw-r--r--info/examples/tex-in-practice/dateofw.tip (renamed from info/examples/tip/dateofw.tip)0
-rw-r--r--info/examples/tex-in-practice/dblarg.tip (renamed from info/examples/tip/dblarg.tip)0
-rw-r--r--info/examples/tex-in-practice/defauarg.tip (renamed from info/examples/tip/defauarg.tip)0
-rw-r--r--info/examples/tex-in-practice/dicentry.tip (renamed from info/examples/tip/dicentry.tip)0
-rw-r--r--info/examples/tex-in-practice/doloop.tip (renamed from info/examples/tip/doloop.tip)0
-rw-r--r--info/examples/tex-in-practice/droppre.tip (renamed from info/examples/tip/droppre.tip)0
-rw-r--r--info/examples/tex-in-practice/droppt.tip (renamed from info/examples/tip/droppt.tip)0
-rw-r--r--info/examples/tex-in-practice/dumppars.tip (renamed from info/examples/tip/dumppars.tip)0
-rw-r--r--info/examples/tex-in-practice/earliest.tip (renamed from info/examples/tip/earliest.tip)0
-rw-r--r--info/examples/tex-in-practice/emprubox.tip (renamed from info/examples/tip/emprubox.tip)0
-rw-r--r--info/examples/tex-in-practice/emptybox.tip (renamed from info/examples/tip/emptybox.tip)0
-rw-r--r--info/examples/tex-in-practice/endn-mac.tip (renamed from info/examples/tip/endn-mac.tip)0
-rw-r--r--info/examples/tex-in-practice/endrec.tip (renamed from info/examples/tip/endrec.tip)0
-rw-r--r--info/examples/tex-in-practice/enum.tip (renamed from info/examples/tip/enum.tip)0
-rw-r--r--info/examples/tex-in-practice/enumlist.tip (renamed from info/examples/tip/enumlist.tip)0
-rw-r--r--info/examples/tex-in-practice/errmess.tip (renamed from info/examples/tip/errmess.tip)0
-rw-r--r--info/examples/tex-in-practice/evenprin.tip (renamed from info/examples/tip/evenprin.tip)0
-rw-r--r--info/examples/tex-in-practice/everyequ.tip (renamed from info/examples/tip/everyequ.tip)0
-rw-r--r--info/examples/tex-in-practice/everypar.tip (renamed from info/examples/tip/everypar.tip)0
-rw-r--r--info/examples/tex-in-practice/evhvbox.tip (renamed from info/examples/tip/evhvbox.tip)0
-rw-r--r--info/examples/tex-in-practice/ex-out2.tip (renamed from info/examples/tip/ex-out2.tip)0
-rw-r--r--info/examples/tex-in-practice/fexist.tip (renamed from info/examples/tip/fexist.tip)0
-rw-r--r--info/examples/tex-in-practice/figbox.tip (renamed from info/examples/tip/figbox.tip)0
-rw-r--r--info/examples/tex-in-practice/figinpar.tip (renamed from info/examples/tip/figinpar.tip)0
-rw-r--r--info/examples/tex-in-practice/firstldi.tip (renamed from info/examples/tip/firstldi.tip)0
-rw-r--r--info/examples/tex-in-practice/fo-char.tip (renamed from info/examples/tip/fo-char.tip)0
-rw-r--r--info/examples/tex-in-practice/font-cpp.tip (renamed from info/examples/tip/font-cpp.tip)0
-rw-r--r--info/examples/tex-in-practice/fontsam.tip (renamed from info/examples/tip/fontsam.tip)0
-rw-r--r--info/examples/tex-in-practice/fonttab.tip (renamed from info/examples/tip/fonttab.tip)0
-rw-r--r--info/examples/tex-in-practice/formline.tip (renamed from info/examples/tip/formline.tip)0
-rw-r--r--info/examples/tex-in-practice/fotable.tip (renamed from info/examples/tip/fotable.tip)0
-rw-r--r--info/examples/tex-in-practice/fotok.tip (renamed from info/examples/tip/fotok.tip)0
-rw-r--r--info/examples/tex-in-practice/frac.tip (renamed from info/examples/tip/frac.tip)0
-rw-r--r--info/examples/tex-in-practice/freespac.tip (renamed from info/examples/tip/freespac.tip)0
-rw-r--r--info/examples/tex-in-practice/fsized.tip (renamed from info/examples/tip/fsized.tip)0
-rw-r--r--info/examples/tex-in-practice/funospac.tip (renamed from info/examples/tip/funospac.tip)0
-rw-r--r--info/examples/tex-in-practice/futlet.tip (renamed from info/examples/tip/futlet.tip)0
-rw-r--r--info/examples/tex-in-practice/futpar.tip (renamed from info/examples/tip/futpar.tip)0
-rw-r--r--info/examples/tex-in-practice/genaeol.tip (renamed from info/examples/tip/genaeol.tip)0
-rw-r--r--info/examples/tex-in-practice/genhead.tip (renamed from info/examples/tip/genhead.tip)0
-rw-r--r--info/examples/tex-in-practice/genostr.tip (renamed from info/examples/tip/genostr.tip)0
-rw-r--r--info/examples/tex-in-practice/getnuml.tip (renamed from info/examples/tip/getnuml.tip)0
-rw-r--r--info/examples/tex-in-practice/gobble.tip (renamed from info/examples/tip/gobble.tip)0
-rw-r--r--info/examples/tex-in-practice/gobblemo.tip (renamed from info/examples/tip/gobblemo.tip)0
-rw-r--r--info/examples/tex-in-practice/graphmac.tip (renamed from info/examples/tip/graphmac.tip)0
-rw-r--r--info/examples/tex-in-practice/hex.tip (renamed from info/examples/tip/hex.tip)0
-rw-r--r--info/examples/tex-in-practice/ifeven.tip (renamed from info/examples/tip/ifeven.tip)0
-rw-r--r--info/examples/tex-in-practice/ifx-def.tip (renamed from info/examples/tip/ifx-def.tip)0
-rw-r--r--info/examples/tex-in-practice/ifx-mac.tip (renamed from info/examples/tip/ifx-mac.tip)0
-rw-r--r--info/examples/tex-in-practice/imodn.tip (renamed from info/examples/tip/imodn.tip)0
-rw-r--r--info/examples/tex-in-practice/index-or.tip (renamed from info/examples/tip/index-or.tip)0
-rw-r--r--info/examples/tex-in-practice/input-at.tip (renamed from info/examples/tip/input-at.tip)0
-rw-r--r--info/examples/tex-in-practice/inputc.tip (renamed from info/examples/tip/inputc.tip)0
-rw-r--r--info/examples/tex-in-practice/inputd.tip (renamed from info/examples/tip/inputd.tip)0
-rw-r--r--info/examples/tex-in-practice/inputdl.tip (renamed from info/examples/tip/inputdl.tip)0
-rw-r--r--info/examples/tex-in-practice/isleapyr.tip (renamed from info/examples/tip/isleapyr.tip)0
-rw-r--r--info/examples/tex-in-practice/isprefix.tip (renamed from info/examples/tip/isprefix.tip)0
-rw-r--r--info/examples/tex-in-practice/issuffix.tip (renamed from info/examples/tip/issuffix.tip)0
-rw-r--r--info/examples/tex-in-practice/itemizel.tip (renamed from info/examples/tip/itemizel.tip)0
-rw-r--r--info/examples/tex-in-practice/itemltw.tip (renamed from info/examples/tip/itemltw.tip)0
-rw-r--r--info/examples/tex-in-practice/itemplan.tip (renamed from info/examples/tip/itemplan.tip)0
-rw-r--r--info/examples/tex-in-practice/ivpyr.tip (renamed from info/examples/tip/ivpyr.tip)0
-rw-r--r--info/examples/tex-in-practice/largdp.tip (renamed from info/examples/tip/largdp.tip)0
-rw-r--r--info/examples/tex-in-practice/lbpar.tip (renamed from info/examples/tip/lbpar.tip)0
-rw-r--r--info/examples/tex-in-practice/lc0to9.tip (renamed from info/examples/tip/lc0to9.tip)0
-rw-r--r--info/examples/tex-in-practice/leadingz.tip (renamed from info/examples/tip/leadingz.tip)0
-rw-r--r--info/examples/tex-in-practice/leadline.tip (renamed from info/examples/tip/leadline.tip)0
-rw-r--r--info/examples/tex-in-practice/leftdm.tip (renamed from info/examples/tip/leftdm.tip)0
-rw-r--r--info/examples/tex-in-practice/legdate.tip (renamed from info/examples/tip/legdate.tip)0
-rw-r--r--info/examples/tex-in-practice/legmonth.tip (renamed from info/examples/tip/legmonth.tip)0
-rw-r--r--info/examples/tex-in-practice/legyear.tip (renamed from info/examples/tip/legyear.tip)0
-rw-r--r--info/examples/tex-in-practice/lfondem.tip (renamed from info/examples/tip/lfondem.tip)0
-rw-r--r--info/examples/tex-in-practice/linesr.tip (renamed from info/examples/tip/linesr.tip)0
-rw-r--r--info/examples/tex-in-practice/list-mac.tip (renamed from info/examples/tip/list-mac.tip)0
-rw-r--r--info/examples/tex-in-practice/loadedla.tip (renamed from info/examples/tip/loadedla.tip)0
-rw-r--r--info/examples/tex-in-practice/lpagetg.tip (renamed from info/examples/tip/lpagetg.tip)0
-rw-r--r--info/examples/tex-in-practice/macvntip.tex (renamed from info/examples/tip/macvntip.tex)0
-rw-r--r--info/examples/tex-in-practice/mathenv.tip (renamed from info/examples/tip/mathenv.tip)0
-rw-r--r--info/examples/tex-in-practice/maxmindi.tip (renamed from info/examples/tip/maxmindi.tip)0
-rw-r--r--info/examples/tex-in-practice/mocal.tip (renamed from info/examples/tip/mocal.tip)0
-rw-r--r--info/examples/tex-in-practice/mocal3.tip (renamed from info/examples/tip/mocal3.tip)0
-rw-r--r--info/examples/tex-in-practice/modonead.tip (renamed from info/examples/tip/modonead.tip)0
-rw-r--r--info/examples/tex-in-practice/mondofda.tip (renamed from info/examples/tip/mondofda.tip)0
-rw-r--r--info/examples/tex-in-practice/mrdel.tip (renamed from info/examples/tip/mrdel.tip)0
-rw-r--r--info/examples/tex-in-practice/mspaces.tip (renamed from info/examples/tip/mspaces.tip)0
-rw-r--r--info/examples/tex-in-practice/namedef.tip (renamed from info/examples/tip/namedef.tip)0
-rw-r--r--info/examples/tex-in-practice/nathd.tip (renamed from info/examples/tip/nathd.tip)0
-rw-r--r--info/examples/tex-in-practice/nctest.tip (renamed from info/examples/tip/nctest.tip)0
-rw-r--r--info/examples/tex-in-practice/ndaysmo.tip (renamed from info/examples/tip/ndaysmo.tip)0
-rw-r--r--info/examples/tex-in-practice/new-midi.tip (renamed from info/examples/tip/new-midi.tip)0
-rw-r--r--info/examples/tex-in-practice/newdef.tip (renamed from info/examples/tip/newdef.tip)0
-rw-r--r--info/examples/tex-in-practice/newfont.tip (renamed from info/examples/tip/newfont.tip)0
-rw-r--r--info/examples/tex-in-practice/newinput.tip (renamed from info/examples/tip/newinput.tip)0
-rw-r--r--info/examples/tex-in-practice/newoutfr.tip (renamed from info/examples/tip/newoutfr.tip)0
-rw-r--r--info/examples/tex-in-practice/newpage.tip (renamed from info/examples/tip/newpage.tip)0
-rw-r--r--info/examples/tex-in-practice/nextday.tip (renamed from info/examples/tip/nextday.tip)0
-rw-r--r--info/examples/tex-in-practice/nextmon.tip (renamed from info/examples/tip/nextmon.tip)0
-rw-r--r--info/examples/tex-in-practice/nlm.tip (renamed from info/examples/tip/nlm.tip)0
-rw-r--r--info/examples/tex-in-practice/norpweek.tip (renamed from info/examples/tip/norpweek.tip)0
-rw-r--r--info/examples/tex-in-practice/npright.tip (renamed from info/examples/tip/npright.tip)0
-rw-r--r--info/examples/tex-in-practice/ntotext.tip (renamed from info/examples/tip/ntotext.tip)0
-rw-r--r--info/examples/tex-in-practice/numcond.tip (renamed from info/examples/tip/numcond.tip)0
-rw-r--r--info/examples/tex-in-practice/numdyr.tip (renamed from info/examples/tip/numdyr.tip)0
-rw-r--r--info/examples/tex-in-practice/numwhile.tip (renamed from info/examples/tip/numwhile.tip)0
-rw-r--r--info/examples/tex-in-practice/oblines.tip (renamed from info/examples/tip/oblines.tip)0
-rw-r--r--info/examples/tex-in-practice/obspaces.tip (renamed from info/examples/tip/obspaces.tip)0
-rw-r--r--info/examples/tex-in-practice/oct.tip (renamed from info/examples/tip/oct.tip)0
-rw-r--r--info/examples/tex-in-practice/oddprin.tip (renamed from info/examples/tip/oddprin.tip)0
-rw-r--r--info/examples/tex-in-practice/oeprin.tip (renamed from info/examples/tip/oeprin.tip)0
-rw-r--r--info/examples/tex-in-practice/ola-1p.tip (renamed from info/examples/tip/ola-1p.tip)0
-rw-r--r--info/examples/tex-in-practice/ola-2p.tip (renamed from info/examples/tip/ola-2p.tip)0
-rw-r--r--info/examples/tex-in-practice/ola-comm.tip (renamed from info/examples/tip/ola-comm.tip)0
-rw-r--r--info/examples/tex-in-practice/op-endin.tip (renamed from info/examples/tip/op-endin.tip)0
-rw-r--r--info/examples/tex-in-practice/op-pagec.tip (renamed from info/examples/tip/op-pagec.tip)0
-rw-r--r--info/examples/tex-in-practice/optargx.tip (renamed from info/examples/tip/optargx.tip)0
-rw-r--r--info/examples/tex-in-practice/orcards.tip (renamed from info/examples/tip/orcards.tip)0
-rw-r--r--info/examples/tex-in-practice/ordbrule.tip (renamed from info/examples/tip/ordbrule.tip)0
-rw-r--r--info/examples/tex-in-practice/orsimple.tip (renamed from info/examples/tip/orsimple.tip)0
-rw-r--r--info/examples/tex-in-practice/out-ds.tip (renamed from info/examples/tip/out-ds.tip)0
-rw-r--r--info/examples/tex-in-practice/out2-or.tip (renamed from info/examples/tip/out2-or.tip)0
-rw-r--r--info/examples/tex-in-practice/outf-rad.tip (renamed from info/examples/tip/outf-rad.tip)0
-rw-r--r--info/examples/tex-in-practice/outpsel.tip (renamed from info/examples/tip/outpsel.tip)0
-rw-r--r--info/examples/tex-in-practice/par-fl.tip (renamed from info/examples/tip/par-fl.tip)0
-rw-r--r--info/examples/tex-in-practice/par-lab.tip (renamed from info/examples/tip/par-lab.tip)0
-rw-r--r--info/examples/tex-in-practice/par-lcl.tip (renamed from info/examples/tip/par-lcl.tip)0
-rw-r--r--info/examples/tex-in-practice/parin.tip (renamed from info/examples/tip/parin.tip)0
-rw-r--r--info/examples/tex-in-practice/part-cr.tip (renamed from info/examples/tip/part-cr.tip)0
-rw-r--r--info/examples/tex-in-practice/part-lab.tip (renamed from info/examples/tip/part-lab.tip)0
-rw-r--r--info/examples/tex-in-practice/part-mac.tip (renamed from info/examples/tip/part-mac.tip)0
-rw-r--r--info/examples/tex-in-practice/parv-1.tip (renamed from info/examples/tip/parv-1.tip)0
-rw-r--r--info/examples/tex-in-practice/pdollars.tip (renamed from info/examples/tip/pdollars.tip)0
-rw-r--r--info/examples/tex-in-practice/pickfs.tip (renamed from info/examples/tip/pickfs.tip)0
-rw-r--r--info/examples/tex-in-practice/pm-4.tip (renamed from info/examples/tip/pm-4.tip)0
-rw-r--r--info/examples/tex-in-practice/pm-auxco.tip (renamed from info/examples/tip/pm-auxco.tip)0
-rw-r--r--info/examples/tex-in-practice/pm-bas.tip (renamed from info/examples/tip/pm-bas.tip)0
-rw-r--r--info/examples/tex-in-practice/pm-main.tip (renamed from info/examples/tip/pm-main.tip)0
-rw-r--r--info/examples/tex-in-practice/pm-pagen.tip (renamed from info/examples/tip/pm-pagen.tip)0
-rw-r--r--info/examples/tex-in-practice/pm-wrc.tip (renamed from info/examples/tip/pm-wrc.tip)0
-rw-r--r--info/examples/tex-in-practice/pmtime.tip (renamed from info/examples/tip/pmtime.tip)0
-rw-r--r--info/examples/tex-in-practice/poorbold.tip (renamed from info/examples/tip/poorbold.tip)0
-rw-r--r--info/examples/tex-in-practice/pralph.tip (renamed from info/examples/tip/pralph.tip)0
-rw-r--r--info/examples/tex-in-practice/prevday.tip (renamed from info/examples/tip/prevday.tip)0
-rw-r--r--info/examples/tex-in-practice/prevmon.tip (renamed from info/examples/tip/prevmon.tip)0
-rw-r--r--info/examples/tex-in-practice/prhyph.tip (renamed from info/examples/tip/prhyph.tip)0
-rw-r--r--info/examples/tex-in-practice/primmark.tip (renamed from info/examples/tip/primmark.tip)0
-rw-r--r--info/examples/tex-in-practice/printast.tip (renamed from info/examples/tip/printast.tip)0
-rw-r--r--info/examples/tex-in-practice/printco.tip (renamed from info/examples/tip/printco.tip)0
-rw-r--r--info/examples/tex-in-practice/printreg.tip (renamed from info/examples/tip/printreg.tip)0
-rw-r--r--info/examples/tex-in-practice/prmode.tip (renamed from info/examples/tip/prmode.tip)0
-rw-r--r--info/examples/tex-in-practice/prmonth.tip (renamed from info/examples/tip/prmonth.tip)0
-rw-r--r--info/examples/tex-in-practice/prot.tip (renamed from info/examples/tip/prot.tip)0
-rw-r--r--info/examples/tex-in-practice/rangetst.tip (renamed from info/examples/tip/rangetst.tip)0
-rw-r--r--info/examples/tex-in-practice/rboxt.tip (renamed from info/examples/tip/rboxt.tip)0
-rw-r--r--info/examples/tex-in-practice/readme (renamed from info/examples/tip/readme)0
-rw-r--r--info/examples/tex-in-practice/readnu.tip (renamed from info/examples/tip/readnu.tip)0
-rw-r--r--info/examples/tex-in-practice/redtost.tip (renamed from info/examples/tip/redtost.tip)0
-rw-r--r--info/examples/tex-in-practice/remtlsp.tip (renamed from info/examples/tip/remtlsp.tip)0
-rw-r--r--info/examples/tex-in-practice/restring.tip (renamed from info/examples/tip/restring.tip)0
-rw-r--r--info/examples/tex-in-practice/reverses.tip (renamed from info/examples/tip/reverses.tip)0
-rw-r--r--info/examples/tex-in-practice/rh-dict.tip (renamed from info/examples/tip/rh-dict.tip)0
-rw-r--r--info/examples/tex-in-practice/robust.tip (renamed from info/examples/tip/robust.tip)0
-rw-r--r--info/examples/tex-in-practice/samplepa.tip (renamed from info/examples/tip/samplepa.tip)0
-rw-r--r--info/examples/tex-in-practice/setstrut.tip (renamed from info/examples/tip/setstrut.tip)0
-rw-r--r--info/examples/tex-in-practice/shboxes.tip (renamed from info/examples/tip/shboxes.tip)0
-rw-r--r--info/examples/tex-in-practice/shiftudb.tip (renamed from info/examples/tip/shiftudb.tip)0
-rw-r--r--info/examples/tex-in-practice/showpll.tip (renamed from info/examples/tip/showpll.tip)0
-rw-r--r--info/examples/tex-in-practice/showx.tip (renamed from info/examples/tip/showx.tip)0
-rw-r--r--info/examples/tex-in-practice/sigline.tip (renamed from info/examples/tip/sigline.tip)0
-rw-r--r--info/examples/tex-in-practice/spacefac.tip (renamed from info/examples/tip/spacefac.tip)0
-rw-r--r--info/examples/tex-in-practice/splitpar.tip (renamed from info/examples/tip/splitpar.tip)0
-rw-r--r--info/examples/tex-in-practice/ssmath.tip (renamed from info/examples/tip/ssmath.tip)0
-rw-r--r--info/examples/tex-in-practice/strleng.tip (renamed from info/examples/tip/strleng.tip)0
-rw-r--r--info/examples/tex-in-practice/stswitch.tip (renamed from info/examples/tip/stswitch.tip)0
-rw-r--r--info/examples/tex-in-practice/substf.tip (renamed from info/examples/tip/substf.tip)0
-rw-r--r--info/examples/tex-in-practice/sumhd.tip (renamed from info/examples/tip/sumhd.tip)0
-rw-r--r--info/examples/tex-in-practice/swapbox.tip (renamed from info/examples/tip/swapbox.tip)0
-rw-r--r--info/examples/tex-in-practice/tabcent.tip (renamed from info/examples/tip/tabcent.tip)0
-rw-r--r--info/examples/tex-in-practice/tabswb.tip (renamed from info/examples/tip/tabswb.tip)0
-rw-r--r--info/examples/tex-in-practice/testdef.tip (renamed from info/examples/tip/testdef.tip)0
-rw-r--r--info/examples/tex-in-practice/testsubs.tip (renamed from info/examples/tip/testsubs.tip)0
-rw-r--r--info/examples/tex-in-practice/texip.idx (renamed from info/examples/tip/texip.idx)0
-rw-r--r--info/examples/tex-in-practice/texipexp.tex (renamed from info/examples/tip/texipexp.tex)0
-rw-r--r--info/examples/tex-in-practice/tip-bugs.tex (renamed from info/examples/tip/tip-bugs.tex)0
-rw-r--r--info/examples/tex-in-practice/toc-mac.tip (renamed from info/examples/tip/toc-mac.tip)0
-rw-r--r--info/examples/tex-in-practice/today.tip (renamed from info/examples/tip/today.tip)0
-rw-r--r--info/examples/tex-in-practice/todayx.tip (renamed from info/examples/tip/todayx.tip)0
-rw-r--r--info/examples/tex-in-practice/topinfix.tip (renamed from info/examples/tip/topinfix.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-brefm.tip (renamed from info/examples/tip/ts-brefm.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-bul.tip (renamed from info/examples/tip/ts-bul.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-chap.tip (renamed from info/examples/tip/ts-chap.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-chhe.tip (renamed from info/examples/tip/ts-chhe.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-crm.tip (renamed from info/examples/tip/ts-crm.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-dime1.tip (renamed from info/examples/tip/ts-dime1.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-dime2.tip (renamed from info/examples/tip/ts-dime2.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-dime3.tip (renamed from info/examples/tip/ts-dime3.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-enum.tip (renamed from info/examples/tip/ts-enum.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-float.tip (renamed from info/examples/tip/ts-float.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-fonts.tip (renamed from info/examples/tip/ts-fonts.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-foot.tip (renamed from info/examples/tip/ts-foot.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-gnot.tip (renamed from info/examples/tip/ts-gnot.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-hall.tip (renamed from info/examples/tip/ts-hall.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-hmore.tip (renamed from info/examples/tip/ts-hmore.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-hyph.tip (renamed from info/examples/tip/ts-hyph.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-itize.tip (renamed from info/examples/tip/ts-itize.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-lazy.tip (renamed from info/examples/tip/ts-lazy.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-loft.tip (renamed from info/examples/tip/ts-loft.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-logo.tip (renamed from info/examples/tip/ts-logo.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-main.tip (renamed from info/examples/tip/ts-main.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-outpu.tip (renamed from info/examples/tip/ts-outpu.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-page2.tip (renamed from info/examples/tip/ts-page2.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-pager.tip (renamed from info/examples/tip/ts-pager.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-robst.tip (renamed from info/examples/tip/ts-robst.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-set.tip (renamed from info/examples/tip/ts-set.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-shead.tip (renamed from info/examples/tip/ts-shead.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-subst.tip (renamed from info/examples/tip/ts-subst.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-toc.tip (renamed from info/examples/tip/ts-toc.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-verb.tip (renamed from info/examples/tip/ts-verb.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-verb1.tip (renamed from info/examples/tip/ts-verb1.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-verb2.tip (renamed from info/examples/tip/ts-verb2.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-vers.tip (renamed from info/examples/tip/ts-vers.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-vol.tip (renamed from info/examples/tip/ts-vol.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-wind.tip (renamed from info/examples/tip/ts-wind.tip)0
-rw-r--r--info/examples/tex-in-practice/ts-writc.tip (renamed from info/examples/tip/ts-writc.tip)0
-rw-r--r--info/examples/tex-in-practice/valdecpo.tip (renamed from info/examples/tip/valdecpo.tip)0
-rw-r--r--info/examples/tex-in-practice/vcentx.tip (renamed from info/examples/tip/vcentx.tip)0
-rw-r--r--info/examples/tex-in-practice/verb-bas.tip (renamed from info/examples/tip/verb-bas.tip)0
-rw-r--r--info/examples/tex-in-practice/verb-mac.tip (renamed from info/examples/tip/verb-mac.tip)0
-rw-r--r--info/examples/tex-in-practice/verb.tip (renamed from info/examples/tip/verb.tip)0
-rw-r--r--info/examples/tex-in-practice/verbdisp.tip (renamed from info/examples/tip/verbdisp.tip)0
-rw-r--r--info/examples/tex-in-practice/verbwr.tip (renamed from info/examples/tip/verbwr.tip)0
-rw-r--r--info/examples/tex-in-practice/vsmax.tip (renamed from info/examples/tip/vsmax.tip)0
-rw-r--r--info/examples/tex-in-practice/vtbox.tip (renamed from info/examples/tip/vtbox.tip)0
-rw-r--r--info/examples/tex-in-practice/vwrt-mac.tip (renamed from info/examples/tip/vwrt-mac.tip)0
-rw-r--r--info/examples/tex-in-practice/weekofyr.tip (renamed from info/examples/tip/weekofyr.tip)0
-rw-r--r--info/examples/tex-in-practice/widestc.tip (renamed from info/examples/tip/widestc.tip)0
-rw-r--r--info/examples/tex-in-practice/wl-parcp.tip (renamed from info/examples/tip/wl-parcp.tip)0
-rw-r--r--info/examples/tex-in-practice/wrtoc.tip (renamed from info/examples/tip/wrtoc.tip)0
-rw-r--r--info/examples/tex-in-practice/wrverbar.tip (renamed from info/examples/tip/wrverbar.tip)0
-rw-r--r--info/examples/tex-in-practice/wtolist.tip (renamed from info/examples/tip/wtolist.tip)0
-rw-r--r--info/examples/tex-in-practice/x-parsh.tip (renamed from info/examples/tip/x-parsh.tip)0
-rw-r--r--info/examples/tex-in-practice/yearcal.tip (renamed from info/examples/tip/yearcal.tip)0
-rw-r--r--macros/latex/contrib/easybook/easybook.dtx34
-rw-r--r--macros/latex/contrib/easybook/easybook.pdfbin599182 -> 598552 bytes
-rw-r--r--macros/latex/contrib/easybook/easybook.tex10
-rw-r--r--macros/latex/contrib/hvextern/Changes1
-rw-r--r--macros/latex/contrib/hvextern/doc/hvextern.pdfbin1498836 -> 1481699 bytes
-rw-r--r--macros/latex/contrib/hvextern/doc/hvextern.tex59
-rw-r--r--macros/latex/contrib/hvextern/latex/hvextern.sty107
-rwxr-xr-x[-rw-r--r--]macros/latex/contrib/hvextern/script/hvextern-checkfile.lua0
-rw-r--r--macros/latex/contrib/leftindex/README.md3
-rw-r--r--macros/latex/contrib/leftindex/leftindex.pdfbin72581 -> 89885 bytes
-rw-r--r--macros/latex/contrib/leftindex/leftindex.sty29
-rw-r--r--macros/latex/contrib/leftindex/leftindex.tex43
-rw-r--r--macros/latex/contrib/litetable/doc/favicon.pngbin0 -> 17761 bytes
-rw-r--r--macros/latex/contrib/litetable/doc/litetable-demo.pdfbin30108 -> 46294 bytes
-rw-r--r--macros/latex/contrib/litetable/doc/litetable-demo.tex86
-rw-r--r--macros/latex/contrib/litetable/doc/litetable-doc-cn.pdfbin0 -> 193124 bytes
-rw-r--r--macros/latex/contrib/litetable/doc/litetable-doc-cn.tex210
-rw-r--r--macros/latex/contrib/litetable/doc/litetable-doc-en.pdfbin0 -> 103291 bytes
-rw-r--r--macros/latex/contrib/litetable/doc/litetable-doc-en.tex (renamed from macros/latex/contrib/litetable/doc/litetable-doc.tex)87
-rw-r--r--macros/latex/contrib/litetable/doc/litetable-doc.pdfbin79686 -> 0 bytes
-rw-r--r--macros/latex/contrib/litetable/tex/litetable.cls210
-rw-r--r--macros/latex/contrib/refstyle/README140
-rw-r--r--macros/latex/contrib/refstyle/refconfig.dtx2421
-rw-r--r--macros/latex/contrib/refstyle/refconfig.pdfbin292980 -> 303725 bytes
-rw-r--r--macros/latex/contrib/refstyle/refstyle.cfg571
-rw-r--r--macros/latex/contrib/refstyle/refstyle.dtx3591
-rw-r--r--macros/latex/contrib/refstyle/refstyle.ins189
-rw-r--r--macros/latex/contrib/refstyle/refstyle.pdfbin484262 -> 485427 bytes
-rw-r--r--macros/latex/contrib/refstyle/refstyle.sty327
-rw-r--r--macros/latex/contrib/schooldocs/schooldocs-examples.pdfbin390596 -> 270592 bytes
-rw-r--r--macros/latex/contrib/schooldocs/schooldocs-examples.tex327
-rw-r--r--macros/latex/contrib/schooldocs/schooldocs.dtx151
-rw-r--r--macros/latex/contrib/schooldocs/schooldocs.ins4
-rw-r--r--macros/latex/contrib/schooldocs/schooldocs.pdfbin156752 -> 157543 bytes
-rw-r--r--macros/luatex/latex/novel/README.md13
-rw-r--r--macros/luatex/latex/novel/doc/extras/CPmodified.otfbin52088 -> 0 bytes
-rw-r--r--macros/luatex/latex/novel/doc/extras/novel-Gallery-ChapterStart.pdfbin311166 -> 0 bytes
-rw-r--r--macros/luatex/latex/novel/doc/extras/novel-example.pdf1125
-rw-r--r--macros/luatex/latex/novel/doc/extras/novel-example.tex2
-rw-r--r--macros/luatex/latex/novel/doc/extras/novel-extras-README.html10
-rw-r--r--macros/luatex/latex/novel/doc/extras/novel-testimage.jpgbin1990 -> 0 bytes
-rw-r--r--macros/luatex/latex/novel/doc/extras/novel-testimage.pngbin1908 -> 0 bytes
-rw-r--r--macros/luatex/latex/novel/doc/extras/novel-testscript.jpgbin2456 -> 0 bytes
-rw-r--r--macros/luatex/latex/novel/doc/extras/novel-testscript.pngbin2064 -> 0 bytes
-rw-r--r--macros/luatex/latex/novel/doc/extras/novel-testsuite.pdfbin69116 -> 0 bytes
-rw-r--r--macros/luatex/latex/novel/doc/extras/novel-testsuite.tex318
-rw-r--r--macros/luatex/latex/novel/doc/needed-packages11
-rw-r--r--macros/luatex/latex/novel/doc/novel-documentation.html298
-rw-r--r--macros/luatex/latex/novel/doc/novel.pdf642
-rw-r--r--macros/luatex/latex/novel/doc/novel.tex120
-rw-r--r--macros/luatex/latex/novel/lualatex/novel-CGATSTR001.clo2
-rw-r--r--macros/luatex/latex/novel/lualatex/novel-CalculateLayout.sty2
-rw-r--r--macros/luatex/latex/novel/lualatex/novel-ChapterScene.sty2
-rw-r--r--macros/luatex/latex/novel/lualatex/novel-DropCap.sty2
-rw-r--r--macros/luatex/latex/novel/lualatex/novel-FOGRA39.clo2
-rw-r--r--macros/luatex/latex/novel/lualatex/novel-FileData.sty2
-rw-r--r--macros/luatex/latex/novel/lualatex/novel-Fonts.sty2
-rw-r--r--macros/luatex/latex/novel/lualatex/novel-Footnotes.sty2
-rw-r--r--macros/luatex/latex/novel/lualatex/novel-HeadFootStyles.sty2
-rw-r--r--macros/luatex/latex/novel/lualatex/novel-Images.sty2
-rw-r--r--macros/luatex/latex/novel/lualatex/novel-JC200103.clo2
-rw-r--r--macros/luatex/latex/novel/lualatex/novel-LayoutSettings.sty2
-rw-r--r--macros/luatex/latex/novel/lualatex/novel-PostLayout.sty2
-rw-r--r--macros/luatex/latex/novel/lualatex/novel-Sandbox.sty2
-rw-r--r--macros/luatex/latex/novel/lualatex/novel-TextMacros.sty2
-rw-r--r--macros/luatex/latex/novel/lualatex/novel-microtype.cfg2
-rw-r--r--macros/luatex/latex/novel/lualatex/novel-pdfx.sty2
-rw-r--r--macros/luatex/latex/novel/lualatex/novel-xmppacket.sty2
-rw-r--r--macros/luatex/latex/novel/lualatex/novel.cls23
l---------macros/tex-in-practice1
l---------macros/tip1
l---------obsolete/info/whatstex/lit.dat (renamed from info/whatstex/lit.dat)0
-rw-r--r--obsolete/info/whatstex/lit.sel (renamed from info/whatstex/lit.sel)0
-rw-r--r--obsolete/info/whatstex/wots.tex (renamed from info/whatstex/wots.tex)0
-rw-r--r--obsolete/macros/ec-plain/00readme.doc (renamed from macros/ec-plain/00readme.doc)0
l---------obsolete/macros/ec-plain/README (renamed from macros/ec-plain/README)0
-rw-r--r--obsolete/macros/ec-plain/acmacros.sty (renamed from macros/ec-plain/acmacros.sty)0
-rw-r--r--obsolete/macros/ec-plain/dybx10.mf (renamed from macros/ec-plain/dybx10.mf)0
-rw-r--r--obsolete/macros/ec-plain/dybx12.mf (renamed from macros/ec-plain/dybx12.mf)0
-rw-r--r--obsolete/macros/ec-plain/dybx5.mf (renamed from macros/ec-plain/dybx5.mf)0
-rw-r--r--obsolete/macros/ec-plain/dybx6.mf (renamed from macros/ec-plain/dybx6.mf)0
-rw-r--r--obsolete/macros/ec-plain/dybx7.mf (renamed from macros/ec-plain/dybx7.mf)0
-rw-r--r--obsolete/macros/ec-plain/dybx8.mf (renamed from macros/ec-plain/dybx8.mf)0
-rw-r--r--obsolete/macros/ec-plain/dybx9.mf (renamed from macros/ec-plain/dybx9.mf)0
-rw-r--r--obsolete/macros/ec-plain/dymi10.mf (renamed from macros/ec-plain/dymi10.mf)0
-rw-r--r--obsolete/macros/ec-plain/dymi12.mf (renamed from macros/ec-plain/dymi12.mf)0
-rw-r--r--obsolete/macros/ec-plain/dymi5.mf (renamed from macros/ec-plain/dymi5.mf)0
-rw-r--r--obsolete/macros/ec-plain/dymi6.mf (renamed from macros/ec-plain/dymi6.mf)0
-rw-r--r--obsolete/macros/ec-plain/dymi7.mf (renamed from macros/ec-plain/dymi7.mf)0
-rw-r--r--obsolete/macros/ec-plain/dymi8.mf (renamed from macros/ec-plain/dymi8.mf)0
-rw-r--r--obsolete/macros/ec-plain/dymi9.mf (renamed from macros/ec-plain/dymi9.mf)0
-rw-r--r--obsolete/macros/ec-plain/ec-pdfplain.fmt (renamed from macros/ec-plain/ec-pdfplain.fmt)bin346835 -> 346835 bytes
-rw-r--r--obsolete/macros/ec-plain/ec-pdfplain.tex (renamed from macros/ec-plain/ec-pdfplain.tex)0
-rw-r--r--obsolete/macros/ec-plain/ec-plain.fmt (renamed from macros/ec-plain/ec-plain.fmt)bin337483 -> 337483 bytes
-rw-r--r--obsolete/macros/ec-plain/ec-plain.tex (renamed from macros/ec-plain/ec-plain.tex)0
-rw-r--r--obsolete/macros/ec-plain/ec-plfmt.bat (renamed from macros/ec-plain/ec-plfmt.bat)0
-rw-r--r--obsolete/macros/ec-plain/ecbxmath.mf (renamed from macros/ec-plain/ecbxmath.mf)0
-rw-r--r--obsolete/macros/ec-plain/ecmathit.mf (renamed from macros/ec-plain/ecmathit.mf)0
-rw-r--r--obsolete/macros/ec-plain/enhyph.tex (renamed from macros/ec-plain/enhyph.tex)0
-rw-r--r--obsolete/macros/ec-plain/enhyphex.tex (renamed from macros/ec-plain/enhyphex.tex)0
-rw-r--r--obsolete/macros/ec-plain/eshyph.tex (renamed from macros/ec-plain/eshyph.tex)0
-rw-r--r--obsolete/macros/ec-plain/exmi.mf (renamed from macros/ec-plain/exmi.mf)0
-rw-r--r--obsolete/macros/ec-plain/exmi10.mf (renamed from macros/ec-plain/exmi10.mf)0
-rw-r--r--obsolete/macros/ec-plain/exmi10.tfm (renamed from macros/ec-plain/exmi10.tfm)bin2272 -> 2272 bytes
-rw-r--r--obsolete/macros/ec-plain/exmi12.mf (renamed from macros/ec-plain/exmi12.mf)0
-rw-r--r--obsolete/macros/ec-plain/exmi12.tfm (renamed from macros/ec-plain/exmi12.tfm)bin2272 -> 2272 bytes
-rw-r--r--obsolete/macros/ec-plain/exmi5.mf (renamed from macros/ec-plain/exmi5.mf)0
-rw-r--r--obsolete/macros/ec-plain/exmi5.tfm (renamed from macros/ec-plain/exmi5.tfm)bin2232 -> 2232 bytes
-rw-r--r--obsolete/macros/ec-plain/exmi6.mf (renamed from macros/ec-plain/exmi6.mf)0
-rw-r--r--obsolete/macros/ec-plain/exmi6.tfm (renamed from macros/ec-plain/exmi6.tfm)bin2256 -> 2256 bytes
-rw-r--r--obsolete/macros/ec-plain/exmi7.mf (renamed from macros/ec-plain/exmi7.mf)0
-rw-r--r--obsolete/macros/ec-plain/exmi7.tfm (renamed from macros/ec-plain/exmi7.tfm)bin2284 -> 2284 bytes
-rw-r--r--obsolete/macros/ec-plain/exmi8.mf (renamed from macros/ec-plain/exmi8.mf)0
-rw-r--r--obsolete/macros/ec-plain/exmi8.tfm (renamed from macros/ec-plain/exmi8.tfm)bin2264 -> 2264 bytes
-rw-r--r--obsolete/macros/ec-plain/exmi9.mf (renamed from macros/ec-plain/exmi9.mf)0
-rw-r--r--obsolete/macros/ec-plain/exmi9.tfm (renamed from macros/ec-plain/exmi9.tfm)bin2280 -> 2280 bytes
-rw-r--r--obsolete/macros/ec-plain/f8hyph1.tex (renamed from macros/ec-plain/f8hyph1.tex)0
-rw-r--r--obsolete/macros/ec-plain/frhyphx1.tex (renamed from macros/ec-plain/frhyphx1.tex)0
-rw-r--r--obsolete/macros/ec-plain/ghyph31.tex (renamed from macros/ec-plain/ghyph31.tex)0
-rw-r--r--obsolete/macros/ec-plain/hyacceur.tex (renamed from macros/ec-plain/hyacceur.tex)0
-rw-r--r--obsolete/macros/ec-plain/hyconfig.ptx (renamed from macros/ec-plain/hyconfig.ptx)0
-rw-r--r--obsolete/macros/ec-plain/ithyph.tex (renamed from macros/ec-plain/ithyph.tex)0
-rw-r--r--obsolete/macros/ec-plain/language.dat (renamed from macros/ec-plain/language.dat)0
-rw-r--r--obsolete/macros/ec-plain/make-musixtex-format.bat (renamed from macros/ec-plain/make-musixtex-format.bat)0
-rw-r--r--obsolete/macros/ec-plain/ofgreekl.mf (renamed from macros/ec-plain/ofgreekl.mf)0
-rw-r--r--obsolete/macros/ec-plain/ofgreeku.mf (renamed from macros/ec-plain/ofgreeku.mf)0
-rw-r--r--support/TeX4ht/source/ChangeLog9
-rw-r--r--support/TeX4ht/source/tex4ht-html4.tex6
-rw-r--r--support/TeX4ht/source/tex4ht-mathml.tex4
-rw-r--r--support/latexmk/CHANGES11
-rw-r--r--support/latexmk/INSTALL2
-rw-r--r--support/latexmk/README4
-rw-r--r--support/latexmk/latexmk.114
-rw-r--r--support/latexmk/latexmk.pdfbin230284 -> 230287 bytes
-rwxr-xr-xsupport/latexmk/latexmk.pl1143
-rw-r--r--support/latexmk/latexmk.txt3362
-rw-r--r--support/splint/INSTALL10
-rw-r--r--support/splint/Makefile33
-rw-r--r--support/splint/README7
-rw-r--r--support/splint/TODO22
-rw-r--r--support/splint/VERSION2
-rw-r--r--support/splint/cweb/Makefile131
-rw-r--r--support/splint/cweb/bo.w582
-rw-r--r--support/splint/cweb/bs.w60
-rw-r--r--support/splint/cweb/checklists.w2
-rw-r--r--support/splint/cweb/common.w38
-rw-r--r--support/splint/cweb/fk.w4
-rw-r--r--support/splint/cweb/fo.w185
-rw-r--r--support/splint/cweb/lo.w100
-rw-r--r--support/splint/cweb/mkeparser.w8
-rw-r--r--support/splint/cweb/mkscanner.w2
-rw-r--r--support/splint/cweb/np.w34
-rw-r--r--support/splint/cweb/philosophy.w37
-rw-r--r--support/splint/cweb/references.w2
-rw-r--r--support/splint/cweb/so.w133
-rw-r--r--support/splint/cweb/splint.w258
-rw-r--r--support/splint/cweb/ssffo.w123
-rw-r--r--support/splint/doc/ldman.pdfbin718042 -> 745685 bytes
-rw-r--r--support/splint/doc/splint.pdfbin1141608 -> 1157534 bytes
-rw-r--r--support/splint/examples/count/count.sty2
-rw-r--r--support/splint/examples/expression/Makefile4
-rw-r--r--support/splint/examples/expression/etoks.sty2
-rw-r--r--support/splint/examples/expression/expression.sty2
-rw-r--r--support/splint/examples/expression/expression.w18
-rw-r--r--support/splint/examples/ld/Makefile47
-rw-r--r--support/splint/examples/ld/ldexample.hw16
-rw-r--r--support/splint/examples/ld/ldgram.w108
-rw-r--r--support/splint/examples/ld/ldgramo.w9
-rw-r--r--support/splint/examples/ld/ldint.sty9
-rw-r--r--support/splint/examples/ld/ldlex.w519
-rw-r--r--support/splint/examples/ld/ldlexo.w14
-rw-r--r--support/splint/examples/ld/ldman.w297
-rw-r--r--support/splint/examples/ld/ldnp.w49
-rw-r--r--support/splint/examples/ld/ldnump.w10
-rw-r--r--support/splint/examples/ld/ldtexlex.sty4
-rw-r--r--support/splint/examples/ld/ldunion.sty242
-rw-r--r--support/splint/examples/ld/lstokenset.sty2
-rw-r--r--support/splint/examples/ld/ltokenset.sty2
-rw-r--r--support/splint/examples/symbols/Makefile8
-rw-r--r--support/splint/examples/symbols/slimbo.sty2
-rw-r--r--support/splint/examples/symbols/symbols.w46
-rw-r--r--support/splint/examples/symbols/symfm.sty2
-rw-r--r--support/splint/examples/symbols/symmap.sty5
-rw-r--r--support/splint/examples/symbols/symtoks.sty2
-rw-r--r--support/splint/examples/symbols/symtricks.sty2
-rw-r--r--support/splint/examples/types/Makefile2
-rw-r--r--support/splint/examples/types/basic.sty2
-rw-r--r--support/splint/examples/types/test.sty2
-rw-r--r--support/splint/examples/types/tree.sty2
-rw-r--r--support/splint/examples/xxpression/Makefile8
-rw-r--r--support/splint/examples/xxpression/xtoks.sty3
-rw-r--r--support/splint/examples/xxpression/xxpression.sty2
-rw-r--r--support/splint/examples/xxpression/xxpression.w39
-rw-r--r--support/splint/examples/xxpression/xymmap.sty5
-rw-r--r--support/splint/makefile.inc60
-rw-r--r--support/splint/other/texmf/macros/protcode.tex (renamed from support/splint/extras/texmf/macros/protcode.tex)0
-rwxr-xr-xsupport/splint/scripts/bindx.pl30
-rwxr-xr-xsupport/splint/scripts/brack.pl213
-rwxr-xr-xsupport/splint/scripts/cslist.pl2
-rwxr-xr-xsupport/splint/scripts/misccw.pl2
-rwxr-xr-xsupport/splint/scripts/unline.pl21
-rw-r--r--support/splint/tex/btokenset.sty8
-rw-r--r--support/splint/tex/dcols.sty454
-rw-r--r--support/splint/tex/flex.sty124
-rw-r--r--support/splint/tex/fonts/idssbx10.vpl911
-rw-r--r--support/splint/tex/fonts/idssbx12.vpl908
-rw-r--r--support/splint/tex/fonts/idssbx5.vpl908
-rw-r--r--support/splint/tex/fonts/idssbx6.tfmbin0 -> 1280 bytes
-rw-r--r--support/splint/tex/fonts/idssbx6.vfbin0 -> 828 bytes
-rw-r--r--support/splint/tex/fonts/idssbx6.vpl1310
-rw-r--r--support/splint/tex/fonts/idssbx7.tfmbin0 -> 1296 bytes
-rw-r--r--support/splint/tex/fonts/idssbx7.vfbin0 -> 828 bytes
-rw-r--r--support/splint/tex/fonts/idssbx7.vpl913
-rw-r--r--support/splint/tex/fonts/idssbx8.tfmbin0 -> 1280 bytes
-rw-r--r--support/splint/tex/fonts/idssbx8.vfbin0 -> 828 bytes
-rw-r--r--support/splint/tex/fonts/idssbx8.vpl1310
-rw-r--r--support/splint/tex/fonts/idssbx9.tfmbin0 -> 1296 bytes
-rw-r--r--support/splint/tex/fonts/idssbx9.vfbin0 -> 828 bytes
-rw-r--r--support/splint/tex/fonts/idssbx9.vpl1310
-rw-r--r--support/splint/tex/fretokenset.sty2
-rw-r--r--support/splint/tex/ftokenset.sty3
-rw-r--r--support/splint/tex/gindex.sty164
-rw-r--r--support/splint/tex/grabstates.sty16
-rw-r--r--support/splint/tex/hext.sty16
-rw-r--r--support/splint/tex/limbo.sty454
-rw-r--r--support/splint/tex/noweb.sty186
-rw-r--r--support/splint/tex/stokenset.sty3
-rw-r--r--support/splint/tex/trt1.sty4
-rw-r--r--support/splint/tex/xarithm.sty4
-rw-r--r--support/splint/tex/yxunion.sty33
-rw-r--r--support/splint/tex/yy.sty26
-rw-r--r--support/splint/tex/yybootstrap.sty7
-rw-r--r--support/splint/tex/yycommon.sty716
-rw-r--r--support/splint/tex/yydebug.sty18
-rw-r--r--support/splint/tex/yyfaststack.sty94
-rw-r--r--support/splint/tex/yyinit.sty520
-rw-r--r--support/splint/tex/yyinput.sty219
-rw-r--r--support/splint/tex/yymisc.sty435
-rw-r--r--support/splint/tex/yynested.sty2
-rw-r--r--support/splint/tex/yyparse.sty78
-rw-r--r--support/splint/tex/yypretty.sty7
-rw-r--r--support/splint/tex/yystype.sty5
-rw-r--r--support/splint/tex/yytexlex.sty208
-rw-r--r--support/splint/tex/yyunion.sty1314
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl5
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb113
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.md52
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha5122
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc16
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.xzbin2525028 -> 2523732 bytes
-rw-r--r--timestamp2
557 files changed, 20829 insertions, 13112 deletions
diff --git a/FILES.byname b/FILES.byname
index 099e9cda72..705094ff2d 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -2077,12 +2077,12 @@
2023/10/05 | 1710 | biblio/citation-style-language/README.md
2023/10/05 | 12878 | biblio/citation-style-language/vancouver.csl
2023/10/05 | 4531754 | biblio/citation-style-language.zip
-2024/01/30 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2024/01/31 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2022/10/08 | 127 | biblio/ctan-bibdata/biblatex-ctan/ctan.cbx
-2024/01/30 | 2843081 | biblio/ctan-bibdata/ctan.bib
-2024/01/30 | 3708800 | biblio/ctan-bibdata/ctan.pdf
+2024/01/31 | 2843275 | biblio/ctan-bibdata/ctan.bib
+2024/01/31 | 3708800 | biblio/ctan-bibdata/ctan.pdf
2023/01/16 | 1489 | biblio/ctan-bibdata/README
-2024/01/30 | 4116249 | biblio/ctan-bibdata.zip
+2024/01/31 | 4116357 | biblio/ctan-bibdata.zip
2023/02/23 | 3126 | biblio/pbibtex/pbibtex-base/cpp.awk
2023/02/23 | 1009 | biblio/pbibtex/pbibtex-base/generate.sh
2023/02/23 | 22362 | biblio/pbibtex/pbibtex-base/jabbrv.bst
@@ -5444,7 +5444,7 @@
1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp
1990/10/02 | 812 | dviware/vutex/vaxvms.ins
1990/10/02 | 127576 | dviware/vutex/vutex.web
-2024/01/30 | 94810 | FILES.last07days
+2024/01/31 | 100934 | FILES.last07days
2021/07/24 | 1139410 | fonts/aboensis/Aboensis.glyphs
2021/07/24 | 18907382 | fonts/aboensis/aboensis.pdf
2021/07/24 | 137860 | fonts/aboensis/Aboensis-Regular.otf
@@ -53957,7 +53957,7 @@
1991/03/08 | 7824 | fonts/hershey/xhershey.c
1991/11/27 | 17421 | fonts/hershey/xhershey.exe
2019/06/09 | 132708 | fonts/hershey.zip
-2014/06/05 | 6461 | fonts/heuristica/doc/FontLog.txt
+2014/06/06 | 6461 | fonts/heuristica/doc/FontLog.txt
2017/03/14 | 203162 | fonts/heuristica/doc/heuristica-doc.pdf
2017/03/14 | 5516 | fonts/heuristica/doc/heuristica-doc.tex
2014/04/17 | 43780 | fonts/heuristica/doc/OFL-FAQ.txt
@@ -54008,31 +54008,31 @@
2015/01/04 | 164476 | fonts/heuristica/opentype/Heuristica-Bold.otf
2015/01/04 | 152144 | fonts/heuristica/opentype/Heuristica-Italic.otf
2015/01/04 | 205372 | fonts/heuristica/opentype/Heuristica-Regular.otf
-2019/06/10 | 5148 | fonts/heuristica/README
+2024/01/30 | 5258 | fonts/heuristica/README
2015/01/04 | 203 | fonts/heuristica/tex/heuristica.fontspec
-2017/03/14 | 3768 | fonts/heuristica/tex/heuristica.sty
-2019/06/10 | 1354 | fonts/heuristica/tex/LY1Heuristica-Inf.fd
-2019/06/10 | 1354 | fonts/heuristica/tex/LY1Heuristica-Sup.fd
-2019/06/10 | 1465 | fonts/heuristica/tex/LY1Heuristica-TLF.fd
-2019/06/10 | 1488 | fonts/heuristica/tex/LY1Heuristica-TOsF.fd
-2019/06/10 | 1338 | fonts/heuristica/tex/T1Heuristica-Inf.fd
-2019/06/10 | 1338 | fonts/heuristica/tex/T1Heuristica-Sup.fd
-2019/06/10 | 1447 | fonts/heuristica/tex/T1Heuristica-TLF.fd
-2019/06/10 | 1470 | fonts/heuristica/tex/T1Heuristica-TOsF.fd
-2019/06/10 | 1354 | fonts/heuristica/tex/T2AHeuristica-Inf.fd
-2019/06/10 | 1354 | fonts/heuristica/tex/T2AHeuristica-Sup.fd
-2019/06/10 | 1465 | fonts/heuristica/tex/T2AHeuristica-TLF.fd
-2019/06/10 | 1488 | fonts/heuristica/tex/T2AHeuristica-TOsF.fd
-2019/06/10 | 1354 | fonts/heuristica/tex/T2BHeuristica-Inf.fd
-2019/06/10 | 1354 | fonts/heuristica/tex/T2BHeuristica-Sup.fd
-2019/06/10 | 1465 | fonts/heuristica/tex/T2BHeuristica-TLF.fd
-2019/06/10 | 1488 | fonts/heuristica/tex/T2BHeuristica-TOsF.fd
-2019/06/10 | 1354 | fonts/heuristica/tex/T2CHeuristica-Inf.fd
-2019/06/10 | 1354 | fonts/heuristica/tex/T2CHeuristica-Sup.fd
-2019/06/10 | 1465 | fonts/heuristica/tex/T2CHeuristica-TLF.fd
-2019/06/10 | 1488 | fonts/heuristica/tex/T2CHeuristica-TOsF.fd
-2019/06/10 | 1354 | fonts/heuristica/tex/TS1Heuristica-TLF.fd
-2019/06/10 | 1375 | fonts/heuristica/tex/TS1Heuristica-TOsF.fd
+2024/01/30 | 3774 | fonts/heuristica/tex/heuristica.sty
+2019/06/11 | 1354 | fonts/heuristica/tex/LY1Heuristica-Inf.fd
+2019/06/11 | 1354 | fonts/heuristica/tex/LY1Heuristica-Sup.fd
+2019/06/11 | 1465 | fonts/heuristica/tex/LY1Heuristica-TLF.fd
+2019/06/11 | 1488 | fonts/heuristica/tex/LY1Heuristica-TOsF.fd
+2019/06/11 | 1338 | fonts/heuristica/tex/T1Heuristica-Inf.fd
+2019/06/11 | 1338 | fonts/heuristica/tex/T1Heuristica-Sup.fd
+2019/06/11 | 1447 | fonts/heuristica/tex/T1Heuristica-TLF.fd
+2019/06/11 | 1470 | fonts/heuristica/tex/T1Heuristica-TOsF.fd
+2019/06/11 | 1354 | fonts/heuristica/tex/T2AHeuristica-Inf.fd
+2019/06/11 | 1354 | fonts/heuristica/tex/T2AHeuristica-Sup.fd
+2019/06/11 | 1465 | fonts/heuristica/tex/T2AHeuristica-TLF.fd
+2019/06/11 | 1488 | fonts/heuristica/tex/T2AHeuristica-TOsF.fd
+2019/06/11 | 1354 | fonts/heuristica/tex/T2BHeuristica-Inf.fd
+2019/06/11 | 1354 | fonts/heuristica/tex/T2BHeuristica-Sup.fd
+2019/06/11 | 1465 | fonts/heuristica/tex/T2BHeuristica-TLF.fd
+2019/06/11 | 1488 | fonts/heuristica/tex/T2BHeuristica-TOsF.fd
+2019/06/11 | 1354 | fonts/heuristica/tex/T2CHeuristica-Inf.fd
+2019/06/11 | 1354 | fonts/heuristica/tex/T2CHeuristica-Sup.fd
+2019/06/11 | 1465 | fonts/heuristica/tex/T2CHeuristica-TLF.fd
+2019/06/11 | 1488 | fonts/heuristica/tex/T2CHeuristica-TOsF.fd
+2019/06/11 | 1354 | fonts/heuristica/tex/TS1Heuristica-TLF.fd
+2019/06/11 | 1375 | fonts/heuristica/tex/TS1Heuristica-TOsF.fd
2015/01/04 | 1744 | fonts/heuristica/tfm/Heuristica-Bold-inf-ly1.tfm
2015/01/04 | 1712 | fonts/heuristica/tfm/Heuristica-Bold-inf-t1--base.tfm
2015/01/04 | 1728 | fonts/heuristica/tfm/Heuristica-Bold-inf-t1.tfm
@@ -54159,10 +54159,10 @@
2015/01/04 | 8312 | fonts/heuristica/tfm/Heuristica-Regular-tosf-t2c.tfm
2015/01/04 | 1384 | fonts/heuristica/tfm/Heuristica-Regular-tosf-ts1--base.tfm
2015/01/04 | 1416 | fonts/heuristica/tfm/Heuristica-Regular-tosf-ts1.tfm
-2015/01/04 | 176381 | fonts/heuristica/type1/Heuristica-BoldItalic.pfb
+2015/01/05 | 176381 | fonts/heuristica/type1/Heuristica-BoldItalic.pfb
2015/01/04 | 195989 | fonts/heuristica/type1/Heuristica-Bold.pfb
-2015/01/04 | 172743 | fonts/heuristica/type1/Heuristica-Italic.pfb
-2015/01/04 | 241013 | fonts/heuristica/type1/Heuristica-Regular.pfb
+2015/01/05 | 172743 | fonts/heuristica/type1/Heuristica-Italic.pfb
+2015/01/05 | 241013 | fonts/heuristica/type1/Heuristica-Regular.pfb
2015/01/04 | 1732 | fonts/heuristica/vf/Heuristica-Bold-inf-t1.vf
2015/01/04 | 1736 | fonts/heuristica/vf/Heuristica-BoldItalic-inf-t1.vf
2015/01/04 | 1736 | fonts/heuristica/vf/Heuristica-BoldItalic-sup-t1.vf
@@ -54191,7 +54191,7 @@
2015/01/04 | 1760 | fonts/heuristica/vf/Heuristica-Regular-tosf-sc-t1.vf
2015/01/04 | 1764 | fonts/heuristica/vf/Heuristica-Regular-tosf-t1.vf
2015/01/04 | 556 | fonts/heuristica/vf/Heuristica-Regular-tosf-ts1.vf
-2019/06/11 | 1753643 | fonts/heuristica.zip
+2024/01/31 | 1753682 | fonts/heuristica.zip
2012/01/01 | 1453 | fonts/hfoldsty/ChangeLog
2003/10/15 | 18007 | fonts/hfoldsty/gpl.txt
2012/01/01 | 31771 | fonts/hfoldsty/hfoldsty-src-v1_15.zip
@@ -190136,306 +190136,306 @@
2011/01/24 | 2054 | info/examples/tabulars-e/din8.eps
2011/01/24 | 433 | info/examples/tabulars-e/README
2011/01/24 | 247846 | info/examples/tabulars-e.zip
-1993/09/16 | 835 | info/examples/tip/absdimen.tip
-1993/09/16 | 827 | info/examples/tip/absval.tip
-1993/09/16 | 823 | info/examples/tip/acronym.tip
-1993/09/16 | 991 | info/examples/tip/advtabst.tip
-1993/09/16 | 1008 | info/examples/tip/aevpar.tip
-1993/09/16 | 1150 | info/examples/tip/alldate.tip
-1993/09/16 | 1063 | info/examples/tip/allocat.tip
-1993/09/16 | 788 | info/examples/tip/alwbase.tip
-1993/09/16 | 816 | info/examples/tip/angt.tip
-1993/09/16 | 1643 | info/examples/tip/arbday.tip
-1993/09/16 | 7186 | info/examples/tip/arraymac.tip
-1993/09/16 | 1120 | info/examples/tip/atpos.tip
-1993/09/16 | 1382 | info/examples/tip/be-env.tip
-1993/09/16 | 1580 | info/examples/tip/bletpar.tip
-1993/09/16 | 800 | info/examples/tip/box-bb.tip
-1993/09/16 | 922 | info/examples/tip/box-bul.tip
-1993/09/16 | 873 | info/examples/tip/boxing1.tip
-1993/09/16 | 993 | info/examples/tip/boxing2.tip
-1993/09/16 | 1078 | info/examples/tip/boxing3.tip
-1993/09/16 | 1488 | info/examples/tip/boxing4.tip
-1993/09/16 | 3497 | info/examples/tip/boxing5.tip
-1993/09/16 | 1369 | info/examples/tip/boxing6.tip
-1993/09/16 | 2569 | info/examples/tip/boxing7.tip
-1993/09/16 | 906 | info/examples/tip/box-larg.tip
-1993/09/16 | 853 | info/examples/tip/box-mac.tip
-1993/09/16 | 918 | info/examples/tip/boxrelim.tip
-1993/09/16 | 3808 | info/examples/tip/boxrqu.tip
-1993/09/16 | 775 | info/examples/tip/box-thck.tip
-1993/09/16 | 844 | info/examples/tip/box-zero.tip
-1993/09/16 | 777 | info/examples/tip/centerlp.tip
-1993/09/16 | 955 | info/examples/tip/centerng.tip
-1993/09/16 | 937 | info/examples/tip/centpar.tip
-1993/09/16 | 924 | info/examples/tip/charbo.tip
-1993/09/16 | 903 | info/examples/tip/chboxd.tip
-1993/09/16 | 807 | info/examples/tip/clearb.tip
-1993/09/16 | 860 | info/examples/tip/collect.tip
-1993/09/16 | 905 | info/examples/tip/coltok.tip
-1993/09/16 | 2228 | info/examples/tip/comfiles.tip
-1993/09/16 | 1590 | info/examples/tip/compstca.tip
-1993/09/16 | 1278 | info/examples/tip/compst.tip
-1993/09/16 | 1324 | info/examples/tip/condltr.tip
-1993/09/16 | 1237 | info/examples/tip/conval.tip
-1993/09/16 | 814 | info/examples/tip/copydate.tip
-1993/09/16 | 2530 | info/examples/tip/counters.tip
-1993/09/16 | 1468 | info/examples/tip/countl.tip
-1993/09/16 | 1024 | info/examples/tip/cref-1.tip
-1993/09/16 | 965 | info/examples/tip/cref-2a.tip
-1993/09/16 | 849 | info/examples/tip/cref-2.tip
-1993/09/16 | 1399 | info/examples/tip/cref-3a.tip
-1993/09/16 | 1244 | info/examples/tip/cref-3.tip
-1993/09/16 | 934 | info/examples/tip/cref-4.tip
-1993/09/16 | 1628 | info/examples/tip/cref-5.tip
-1993/09/16 | 917 | info/examples/tip/crline.tip
-1993/09/16 | 3577 | info/examples/tip/csar.tip
-1993/09/16 | 892 | info/examples/tip/cssprint.tip
-1993/09/16 | 1111 | info/examples/tip/cstostrc.tip
-1993/09/16 | 821 | info/examples/tip/cstostr.tip
-1993/09/16 | 1253 | info/examples/tip/ctestcs.tip
-1993/09/16 | 1533 | info/examples/tip/dateofw.tip
-1993/09/16 | 924 | info/examples/tip/dblarg.tip
-1993/09/16 | 1273 | info/examples/tip/defauarg.tip
-1993/09/16 | 889 | info/examples/tip/dicentry.tip
-1993/09/16 | 2364 | info/examples/tip/doloop.tip
-1993/09/16 | 1316 | info/examples/tip/droppre.tip
-1993/09/16 | 858 | info/examples/tip/droppt.tip
-1993/09/16 | 3895 | info/examples/tip/dumppars.tip
-1993/09/16 | 1452 | info/examples/tip/earliest.tip
-1993/09/16 | 985 | info/examples/tip/emprubox.tip
-1993/09/16 | 877 | info/examples/tip/emptybox.tip
-1993/09/16 | 1823 | info/examples/tip/endn-mac.tip
-1993/09/16 | 941 | info/examples/tip/endrec.tip
-1993/09/16 | 2755 | info/examples/tip/enumlist.tip
-1993/09/16 | 1135 | info/examples/tip/enum.tip
-1993/09/16 | 784 | info/examples/tip/errmess.tip
-1993/09/16 | 819 | info/examples/tip/evenprin.tip
-1993/09/16 | 1035 | info/examples/tip/everyequ.tip
-1993/09/16 | 1166 | info/examples/tip/everypar.tip
-1993/09/16 | 981 | info/examples/tip/evhvbox.tip
-1993/09/16 | 976 | info/examples/tip/ex-out2.tip
-1993/09/16 | 1039 | info/examples/tip/fexist.tip
-1993/09/16 | 823 | info/examples/tip/figbox.tip
-1993/09/16 | 1833 | info/examples/tip/figinpar.tip
-1993/09/16 | 1433 | info/examples/tip/firstldi.tip
-1993/09/16 | 1022 | info/examples/tip/fo-char.tip
-1993/09/16 | 1657 | info/examples/tip/font-cpp.tip
-1993/09/16 | 5056 | info/examples/tip/fontsam.tip
-1993/09/16 | 2687 | info/examples/tip/fonttab.tip
-1993/09/16 | 1076 | info/examples/tip/formline.tip
-1993/09/16 | 5534 | info/examples/tip/fotable.tip
-1993/09/16 | 1197 | info/examples/tip/fotok.tip
-1993/09/16 | 763 | info/examples/tip/frac.tip
-1993/09/16 | 1112 | info/examples/tip/freespac.tip
-1993/09/16 | 1323 | info/examples/tip/fsized.tip
-1993/09/16 | 1642 | info/examples/tip/funospac.tip
-1993/09/16 | 1103 | info/examples/tip/futlet.tip
-1993/09/16 | 840 | info/examples/tip/futpar.tip
-1993/09/16 | 1110 | info/examples/tip/genaeol.tip
-1993/09/16 | 2824 | info/examples/tip/genhead.tip
-1993/09/16 | 1394 | info/examples/tip/genostr.tip
-1993/09/16 | 949 | info/examples/tip/getnuml.tip
-1993/09/16 | 860 | info/examples/tip/gobblemo.tip
-1993/09/16 | 992 | info/examples/tip/gobble.tip
-1993/09/16 | 2251 | info/examples/tip/graphmac.tip
-1993/09/16 | 1285 | info/examples/tip/hex.tip
-1993/09/16 | 938 | info/examples/tip/ifeven.tip
-1993/09/16 | 927 | info/examples/tip/ifx-def.tip
-1993/09/16 | 921 | info/examples/tip/ifx-mac.tip
-1993/09/16 | 1263 | info/examples/tip/imodn.tip
-1993/09/16 | 1370 | info/examples/tip/index-or.tip
-1993/09/16 | 800 | info/examples/tip/input-at.tip
-1993/09/16 | 1007 | info/examples/tip/inputc.tip
-1993/09/16 | 1024 | info/examples/tip/inputdl.tip
-1993/09/16 | 1282 | info/examples/tip/inputd.tip
-1993/09/16 | 1314 | info/examples/tip/isleapyr.tip
-1993/09/16 | 1679 | info/examples/tip/isprefix.tip
-1993/09/16 | 1019 | info/examples/tip/issuffix.tip
-1993/09/16 | 1410 | info/examples/tip/itemizel.tip
-1993/09/16 | 996 | info/examples/tip/itemltw.tip
-1993/09/16 | 1078 | info/examples/tip/itemplan.tip
-1993/09/16 | 2472 | info/examples/tip/ivpyr.tip
-1993/09/16 | 1370 | info/examples/tip/largdp.tip
-1993/09/16 | 940 | info/examples/tip/lbpar.tip
-1993/09/16 | 1090 | info/examples/tip/lc0to9.tip
-1993/09/16 | 908 | info/examples/tip/leadingz.tip
-1993/09/16 | 935 | info/examples/tip/leadline.tip
-1993/09/16 | 859 | info/examples/tip/leftdm.tip
-1993/09/16 | 1108 | info/examples/tip/legdate.tip
-1993/09/16 | 863 | info/examples/tip/legmonth.tip
-1993/09/16 | 949 | info/examples/tip/legyear.tip
-1993/09/16 | 923 | info/examples/tip/lfondem.tip
-1993/09/16 | 885 | info/examples/tip/linesr.tip
-1993/09/16 | 4418 | info/examples/tip/list-mac.tip
-1993/09/16 | 842 | info/examples/tip/loadedla.tip
-1993/09/16 | 865 | info/examples/tip/lpagetg.tip
-1993/09/16 | 12068 | info/examples/tip/macvntip.tex
-1993/09/16 | 2208 | info/examples/tip/mathenv.tip
-1993/09/16 | 966 | info/examples/tip/maxmindi.tip
-1993/09/16 | 1143 | info/examples/tip/mocal3.tip
-1993/09/16 | 2937 | info/examples/tip/mocal.tip
-1993/09/16 | 869 | info/examples/tip/modonead.tip
-1993/09/16 | 1341 | info/examples/tip/mondofda.tip
-1993/09/16 | 1631 | info/examples/tip/mrdel.tip
-1993/09/16 | 815 | info/examples/tip/mspaces.tip
-1993/09/16 | 1777 | info/examples/tip/namedef.tip
-1993/09/16 | 944 | info/examples/tip/nathd.tip
-1993/09/16 | 947 | info/examples/tip/nctest.tip
-1993/09/16 | 1266 | info/examples/tip/ndaysmo.tip
-1993/09/16 | 1532 | info/examples/tip/newdef.tip
-1993/09/16 | 917 | info/examples/tip/newfont.tip
-1993/09/16 | 903 | info/examples/tip/newinput.tip
-1993/09/16 | 1810 | info/examples/tip/new-midi.tip
-1993/09/16 | 1614 | info/examples/tip/newoutfr.tip
-1993/09/16 | 756 | info/examples/tip/newpage.tip
-1993/09/16 | 1178 | info/examples/tip/nextday.tip
-1993/09/16 | 963 | info/examples/tip/nextmon.tip
-1993/09/16 | 812 | info/examples/tip/nlm.tip
-1993/09/16 | 1275 | info/examples/tip/norpweek.tip
-1993/09/16 | 1190 | info/examples/tip/npright.tip
-1993/09/16 | 3508 | info/examples/tip/ntotext.tip
-1993/09/16 | 1131 | info/examples/tip/numcond.tip
-1993/09/16 | 868 | info/examples/tip/numdyr.tip
-1993/09/16 | 1228 | info/examples/tip/numwhile.tip
-1993/09/16 | 990 | info/examples/tip/oblines.tip
-1993/09/16 | 928 | info/examples/tip/obspaces.tip
-1993/09/16 | 1016 | info/examples/tip/oct.tip
-1993/09/16 | 806 | info/examples/tip/oddprin.tip
-1993/09/16 | 852 | info/examples/tip/oeprin.tip
-1993/09/16 | 2365 | info/examples/tip/ola-1p.tip
-1993/09/16 | 3461 | info/examples/tip/ola-2p.tip
-1993/09/16 | 1874 | info/examples/tip/ola-comm.tip
-1993/09/16 | 1719 | info/examples/tip/op-endin.tip
-1993/09/16 | 1536 | info/examples/tip/op-pagec.tip
-1993/09/16 | 987 | info/examples/tip/optargx.tip
-1993/09/16 | 3074 | info/examples/tip/orcards.tip
-1993/09/16 | 1095 | info/examples/tip/ordbrule.tip
-1993/09/16 | 2639 | info/examples/tip/orsimple.tip
-1993/09/16 | 1899 | info/examples/tip/out2-or.tip
-1993/09/16 | 15340 | info/examples/tip/out-ds.tip
-1993/09/16 | 2252 | info/examples/tip/outf-rad.tip
-1993/09/16 | 1341 | info/examples/tip/outpsel.tip
-1993/09/16 | 951 | info/examples/tip/par-fl.tip
-1993/09/16 | 1103 | info/examples/tip/parin.tip
-1993/09/16 | 1809 | info/examples/tip/par-lab.tip
-1993/09/16 | 1221 | info/examples/tip/par-lcl.tip
-1993/09/16 | 2798 | info/examples/tip/part-cr.tip
-1993/09/16 | 2416 | info/examples/tip/part-lab.tip
-1993/09/16 | 893 | info/examples/tip/part-mac.tip
-1993/09/16 | 2100 | info/examples/tip/parv-1.tip
-1993/09/16 | 1120 | info/examples/tip/pdollars.tip
-1993/09/16 | 788 | info/examples/tip/pickfs.tip
-1993/09/16 | 3911 | info/examples/tip/pm-4.tip
-1993/09/16 | 876 | info/examples/tip/pm-auxco.tip
-1993/09/16 | 1573 | info/examples/tip/pm-bas.tip
-1993/09/16 | 3343 | info/examples/tip/pm-main.tip
-1993/09/16 | 1227 | info/examples/tip/pm-pagen.tip
-1993/09/16 | 988 | info/examples/tip/pmtime.tip
-1993/09/16 | 1045 | info/examples/tip/pm-wrc.tip
-1993/09/16 | 892 | info/examples/tip/poorbold.tip
-1993/09/16 | 858 | info/examples/tip/pralph.tip
-1993/09/16 | 1147 | info/examples/tip/prevday.tip
-1993/09/16 | 967 | info/examples/tip/prevmon.tip
-1993/09/16 | 1646 | info/examples/tip/prhyph.tip
-1993/09/16 | 825 | info/examples/tip/primmark.tip
-1993/09/16 | 1112 | info/examples/tip/printast.tip
-1993/09/16 | 1985 | info/examples/tip/printco.tip
-1993/09/16 | 895 | info/examples/tip/printreg.tip
-1993/09/16 | 1152 | info/examples/tip/prmode.tip
-1993/09/16 | 1516 | info/examples/tip/prmonth.tip
-1993/09/16 | 2179 | info/examples/tip/prot.tip
-1993/09/16 | 1267 | info/examples/tip/rangetst.tip
-1993/09/16 | 972 | info/examples/tip/rboxt.tip
-1993/09/16 | 913 | info/examples/tip/readme
-1993/09/16 | 1214 | info/examples/tip/readnu.tip
-1993/09/16 | 958 | info/examples/tip/redtost.tip
-1993/09/16 | 1539 | info/examples/tip/remtlsp.tip
-1993/09/16 | 1714 | info/examples/tip/restring.tip
-1993/09/16 | 1328 | info/examples/tip/reverses.tip
-1993/09/16 | 964 | info/examples/tip/rh-dict.tip
-1993/09/16 | 1079 | info/examples/tip/robust.tip
-1993/09/16 | 1499 | info/examples/tip/samplepa.tip
-1993/09/16 | 1683 | info/examples/tip/setstrut.tip
-1993/09/16 | 1153 | info/examples/tip/shboxes.tip
-1993/09/16 | 980 | info/examples/tip/shiftudb.tip
-1993/09/16 | 1610 | info/examples/tip/showpll.tip
-1993/09/16 | 867 | info/examples/tip/showx.tip
-1993/09/16 | 961 | info/examples/tip/sigline.tip
-1993/09/16 | 915 | info/examples/tip/spacefac.tip
-1993/09/16 | 1562 | info/examples/tip/splitpar.tip
-1993/09/16 | 1256 | info/examples/tip/ssmath.tip
-1993/09/16 | 1066 | info/examples/tip/strleng.tip
-1993/09/16 | 1873 | info/examples/tip/stswitch.tip
-1993/09/16 | 959 | info/examples/tip/substf.tip
-1993/09/16 | 798 | info/examples/tip/sumhd.tip
-1993/09/16 | 882 | info/examples/tip/swapbox.tip
-1993/09/16 | 977 | info/examples/tip/tabcent.tip
-1993/09/16 | 956 | info/examples/tip/tabswb.tip
-1993/09/16 | 934 | info/examples/tip/testdef.tip
-1993/09/16 | 1307 | info/examples/tip/testsubs.tip
-1993/09/16 | 183279 | info/examples/tip/texipexp.tex
-1993/09/16 | 97702 | info/examples/tip/texip.idx
-1993/09/16 | 95690 | info/examples/tip/tip-bugs.tex
-1993/09/16 | 1461 | info/examples/tip/toc-mac.tip
-1993/09/16 | 778 | info/examples/tip/today.tip
-1993/09/16 | 1065 | info/examples/tip/todayx.tip
-1993/09/16 | 1316 | info/examples/tip/topinfix.tip
-1993/09/16 | 772 | info/examples/tip/ts-brefm.tip
-1993/09/16 | 837 | info/examples/tip/ts-bul.tip
-1993/09/16 | 2350 | info/examples/tip/ts-chap.tip
-1993/09/16 | 1464 | info/examples/tip/ts-chhe.tip
-1993/09/16 | 2572 | info/examples/tip/ts-crm.tip
-1993/09/16 | 882 | info/examples/tip/ts-dime1.tip
-1993/09/16 | 1473 | info/examples/tip/ts-dime2.tip
-1993/09/16 | 821 | info/examples/tip/ts-dime3.tip
-1993/09/16 | 2182 | info/examples/tip/ts-enum.tip
-1993/09/16 | 3716 | info/examples/tip/ts-float.tip
-1993/09/16 | 3738 | info/examples/tip/ts-fonts.tip
-1993/09/16 | 1284 | info/examples/tip/ts-foot.tip
-1993/09/16 | 2261 | info/examples/tip/ts-gnot.tip
-1993/09/16 | 785 | info/examples/tip/ts-hall.tip
-1993/09/16 | 1285 | info/examples/tip/ts-hmore.tip
-1993/09/16 | 938 | info/examples/tip/ts-hyph.tip
-1993/09/16 | 1271 | info/examples/tip/ts-itize.tip
-1993/09/16 | 800 | info/examples/tip/ts-lazy.tip
-1993/09/16 | 1056 | info/examples/tip/ts-loft.tip
-1993/09/16 | 1100 | info/examples/tip/ts-logo.tip
-1993/09/16 | 1716 | info/examples/tip/ts-main.tip
-1993/09/16 | 5132 | info/examples/tip/ts-outpu.tip
-1993/09/16 | 4623 | info/examples/tip/ts-page2.tip
-1993/09/16 | 1332 | info/examples/tip/ts-pager.tip
-1993/09/16 | 1245 | info/examples/tip/ts-robst.tip
-1993/09/16 | 1030 | info/examples/tip/ts-set.tip
-1993/09/16 | 3165 | info/examples/tip/ts-shead.tip
-1993/09/16 | 1193 | info/examples/tip/ts-subst.tip
-1993/09/16 | 1423 | info/examples/tip/ts-toc.tip
-1993/09/16 | 1342 | info/examples/tip/ts-verb1.tip
-1993/09/16 | 1027 | info/examples/tip/ts-verb2.tip
-1993/09/16 | 2286 | info/examples/tip/ts-verb.tip
-1993/09/16 | 754 | info/examples/tip/ts-vers.tip
-1993/09/16 | 960 | info/examples/tip/ts-vol.tip
-1993/09/16 | 5533 | info/examples/tip/ts-wind.tip
-1993/09/16 | 906 | info/examples/tip/ts-writc.tip
-1993/09/16 | 1263 | info/examples/tip/valdecpo.tip
-1993/09/16 | 1934 | info/examples/tip/vcentx.tip
-1993/09/16 | 3678 | info/examples/tip/verb-bas.tip
-1993/09/16 | 5648 | info/examples/tip/verbdisp.tip
-1993/09/16 | 1221 | info/examples/tip/verb-mac.tip
-1993/09/16 | 1341 | info/examples/tip/verb.tip
-1993/09/16 | 2320 | info/examples/tip/verbwr.tip
-1993/09/16 | 1001 | info/examples/tip/vsmax.tip
-1993/09/16 | 1055 | info/examples/tip/vtbox.tip
-1993/09/16 | 2127 | info/examples/tip/vwrt-mac.tip
-1993/09/16 | 1913 | info/examples/tip/weekofyr.tip
-1993/09/16 | 1115 | info/examples/tip/widestc.tip
-1993/09/16 | 2335 | info/examples/tip/wl-parcp.tip
-1993/09/16 | 972 | info/examples/tip/wrtoc.tip
-1993/09/16 | 1167 | info/examples/tip/wrverbar.tip
-1993/09/16 | 1285 | info/examples/tip/wtolist.tip
-1993/09/16 | 1940 | info/examples/tip/x-parsh.tip
-1993/09/16 | 2007 | info/examples/tip/yearcal.tip
-2006/03/19 | 315656 | info/examples/tip.zip
+1993/09/16 | 835 | info/examples/tex-in-practice/absdimen.tip
+1993/09/16 | 827 | info/examples/tex-in-practice/absval.tip
+1993/09/16 | 823 | info/examples/tex-in-practice/acronym.tip
+1993/09/16 | 991 | info/examples/tex-in-practice/advtabst.tip
+1993/09/16 | 1008 | info/examples/tex-in-practice/aevpar.tip
+1993/09/16 | 1150 | info/examples/tex-in-practice/alldate.tip
+1993/09/16 | 1063 | info/examples/tex-in-practice/allocat.tip
+1993/09/16 | 788 | info/examples/tex-in-practice/alwbase.tip
+1993/09/16 | 816 | info/examples/tex-in-practice/angt.tip
+1993/09/16 | 1643 | info/examples/tex-in-practice/arbday.tip
+1993/09/16 | 7186 | info/examples/tex-in-practice/arraymac.tip
+1993/09/16 | 1120 | info/examples/tex-in-practice/atpos.tip
+1993/09/16 | 1382 | info/examples/tex-in-practice/be-env.tip
+1993/09/16 | 1580 | info/examples/tex-in-practice/bletpar.tip
+1993/09/16 | 800 | info/examples/tex-in-practice/box-bb.tip
+1993/09/16 | 922 | info/examples/tex-in-practice/box-bul.tip
+1993/09/16 | 873 | info/examples/tex-in-practice/boxing1.tip
+1993/09/16 | 993 | info/examples/tex-in-practice/boxing2.tip
+1993/09/16 | 1078 | info/examples/tex-in-practice/boxing3.tip
+1993/09/16 | 1488 | info/examples/tex-in-practice/boxing4.tip
+1993/09/16 | 3497 | info/examples/tex-in-practice/boxing5.tip
+1993/09/16 | 1369 | info/examples/tex-in-practice/boxing6.tip
+1993/09/16 | 2569 | info/examples/tex-in-practice/boxing7.tip
+1993/09/16 | 906 | info/examples/tex-in-practice/box-larg.tip
+1993/09/16 | 853 | info/examples/tex-in-practice/box-mac.tip
+1993/09/16 | 918 | info/examples/tex-in-practice/boxrelim.tip
+1993/09/16 | 3808 | info/examples/tex-in-practice/boxrqu.tip
+1993/09/16 | 775 | info/examples/tex-in-practice/box-thck.tip
+1993/09/16 | 844 | info/examples/tex-in-practice/box-zero.tip
+1993/09/16 | 777 | info/examples/tex-in-practice/centerlp.tip
+1993/09/16 | 955 | info/examples/tex-in-practice/centerng.tip
+1993/09/16 | 937 | info/examples/tex-in-practice/centpar.tip
+1993/09/16 | 924 | info/examples/tex-in-practice/charbo.tip
+1993/09/16 | 903 | info/examples/tex-in-practice/chboxd.tip
+1993/09/16 | 807 | info/examples/tex-in-practice/clearb.tip
+1993/09/16 | 860 | info/examples/tex-in-practice/collect.tip
+1993/09/16 | 905 | info/examples/tex-in-practice/coltok.tip
+1993/09/16 | 2228 | info/examples/tex-in-practice/comfiles.tip
+1993/09/16 | 1590 | info/examples/tex-in-practice/compstca.tip
+1993/09/16 | 1278 | info/examples/tex-in-practice/compst.tip
+1993/09/16 | 1324 | info/examples/tex-in-practice/condltr.tip
+1993/09/16 | 1237 | info/examples/tex-in-practice/conval.tip
+1993/09/16 | 814 | info/examples/tex-in-practice/copydate.tip
+1993/09/16 | 2530 | info/examples/tex-in-practice/counters.tip
+1993/09/16 | 1468 | info/examples/tex-in-practice/countl.tip
+1993/09/16 | 1024 | info/examples/tex-in-practice/cref-1.tip
+1993/09/16 | 965 | info/examples/tex-in-practice/cref-2a.tip
+1993/09/16 | 849 | info/examples/tex-in-practice/cref-2.tip
+1993/09/16 | 1399 | info/examples/tex-in-practice/cref-3a.tip
+1993/09/16 | 1244 | info/examples/tex-in-practice/cref-3.tip
+1993/09/16 | 934 | info/examples/tex-in-practice/cref-4.tip
+1993/09/16 | 1628 | info/examples/tex-in-practice/cref-5.tip
+1993/09/16 | 917 | info/examples/tex-in-practice/crline.tip
+1993/09/16 | 3577 | info/examples/tex-in-practice/csar.tip
+1993/09/16 | 892 | info/examples/tex-in-practice/cssprint.tip
+1993/09/16 | 1111 | info/examples/tex-in-practice/cstostrc.tip
+1993/09/16 | 821 | info/examples/tex-in-practice/cstostr.tip
+1993/09/16 | 1253 | info/examples/tex-in-practice/ctestcs.tip
+1993/09/16 | 1533 | info/examples/tex-in-practice/dateofw.tip
+1993/09/16 | 924 | info/examples/tex-in-practice/dblarg.tip
+1993/09/16 | 1273 | info/examples/tex-in-practice/defauarg.tip
+1993/09/16 | 889 | info/examples/tex-in-practice/dicentry.tip
+1993/09/16 | 2364 | info/examples/tex-in-practice/doloop.tip
+1993/09/16 | 1316 | info/examples/tex-in-practice/droppre.tip
+1993/09/16 | 858 | info/examples/tex-in-practice/droppt.tip
+1993/09/16 | 3895 | info/examples/tex-in-practice/dumppars.tip
+1993/09/16 | 1452 | info/examples/tex-in-practice/earliest.tip
+1993/09/16 | 985 | info/examples/tex-in-practice/emprubox.tip
+1993/09/16 | 877 | info/examples/tex-in-practice/emptybox.tip
+1993/09/16 | 1823 | info/examples/tex-in-practice/endn-mac.tip
+1993/09/16 | 941 | info/examples/tex-in-practice/endrec.tip
+1993/09/16 | 2755 | info/examples/tex-in-practice/enumlist.tip
+1993/09/16 | 1135 | info/examples/tex-in-practice/enum.tip
+1993/09/16 | 784 | info/examples/tex-in-practice/errmess.tip
+1993/09/16 | 819 | info/examples/tex-in-practice/evenprin.tip
+1993/09/16 | 1035 | info/examples/tex-in-practice/everyequ.tip
+1993/09/16 | 1166 | info/examples/tex-in-practice/everypar.tip
+1993/09/16 | 981 | info/examples/tex-in-practice/evhvbox.tip
+1993/09/16 | 976 | info/examples/tex-in-practice/ex-out2.tip
+1993/09/16 | 1039 | info/examples/tex-in-practice/fexist.tip
+1993/09/16 | 823 | info/examples/tex-in-practice/figbox.tip
+1993/09/16 | 1833 | info/examples/tex-in-practice/figinpar.tip
+1993/09/16 | 1433 | info/examples/tex-in-practice/firstldi.tip
+1993/09/16 | 1022 | info/examples/tex-in-practice/fo-char.tip
+1993/09/16 | 1657 | info/examples/tex-in-practice/font-cpp.tip
+1993/09/16 | 5056 | info/examples/tex-in-practice/fontsam.tip
+1993/09/16 | 2687 | info/examples/tex-in-practice/fonttab.tip
+1993/09/16 | 1076 | info/examples/tex-in-practice/formline.tip
+1993/09/16 | 5534 | info/examples/tex-in-practice/fotable.tip
+1993/09/16 | 1197 | info/examples/tex-in-practice/fotok.tip
+1993/09/16 | 763 | info/examples/tex-in-practice/frac.tip
+1993/09/16 | 1112 | info/examples/tex-in-practice/freespac.tip
+1993/09/16 | 1323 | info/examples/tex-in-practice/fsized.tip
+1993/09/16 | 1642 | info/examples/tex-in-practice/funospac.tip
+1993/09/16 | 1103 | info/examples/tex-in-practice/futlet.tip
+1993/09/16 | 840 | info/examples/tex-in-practice/futpar.tip
+1993/09/16 | 1110 | info/examples/tex-in-practice/genaeol.tip
+1993/09/16 | 2824 | info/examples/tex-in-practice/genhead.tip
+1993/09/16 | 1394 | info/examples/tex-in-practice/genostr.tip
+1993/09/16 | 949 | info/examples/tex-in-practice/getnuml.tip
+1993/09/16 | 860 | info/examples/tex-in-practice/gobblemo.tip
+1993/09/16 | 992 | info/examples/tex-in-practice/gobble.tip
+1993/09/16 | 2251 | info/examples/tex-in-practice/graphmac.tip
+1993/09/16 | 1285 | info/examples/tex-in-practice/hex.tip
+1993/09/16 | 938 | info/examples/tex-in-practice/ifeven.tip
+1993/09/16 | 927 | info/examples/tex-in-practice/ifx-def.tip
+1993/09/16 | 921 | info/examples/tex-in-practice/ifx-mac.tip
+1993/09/16 | 1263 | info/examples/tex-in-practice/imodn.tip
+1993/09/16 | 1370 | info/examples/tex-in-practice/index-or.tip
+1993/09/16 | 800 | info/examples/tex-in-practice/input-at.tip
+1993/09/16 | 1007 | info/examples/tex-in-practice/inputc.tip
+1993/09/16 | 1024 | info/examples/tex-in-practice/inputdl.tip
+1993/09/16 | 1282 | info/examples/tex-in-practice/inputd.tip
+1993/09/16 | 1314 | info/examples/tex-in-practice/isleapyr.tip
+1993/09/16 | 1679 | info/examples/tex-in-practice/isprefix.tip
+1993/09/16 | 1019 | info/examples/tex-in-practice/issuffix.tip
+1993/09/16 | 1410 | info/examples/tex-in-practice/itemizel.tip
+1993/09/16 | 996 | info/examples/tex-in-practice/itemltw.tip
+1993/09/16 | 1078 | info/examples/tex-in-practice/itemplan.tip
+1993/09/16 | 2472 | info/examples/tex-in-practice/ivpyr.tip
+1993/09/16 | 1370 | info/examples/tex-in-practice/largdp.tip
+1993/09/16 | 940 | info/examples/tex-in-practice/lbpar.tip
+1993/09/16 | 1090 | info/examples/tex-in-practice/lc0to9.tip
+1993/09/16 | 908 | info/examples/tex-in-practice/leadingz.tip
+1993/09/16 | 935 | info/examples/tex-in-practice/leadline.tip
+1993/09/16 | 859 | info/examples/tex-in-practice/leftdm.tip
+1993/09/16 | 1108 | info/examples/tex-in-practice/legdate.tip
+1993/09/16 | 863 | info/examples/tex-in-practice/legmonth.tip
+1993/09/16 | 949 | info/examples/tex-in-practice/legyear.tip
+1993/09/16 | 923 | info/examples/tex-in-practice/lfondem.tip
+1993/09/16 | 885 | info/examples/tex-in-practice/linesr.tip
+1993/09/16 | 4418 | info/examples/tex-in-practice/list-mac.tip
+1993/09/16 | 842 | info/examples/tex-in-practice/loadedla.tip
+1993/09/16 | 865 | info/examples/tex-in-practice/lpagetg.tip
+1993/09/16 | 12068 | info/examples/tex-in-practice/macvntip.tex
+1993/09/16 | 2208 | info/examples/tex-in-practice/mathenv.tip
+1993/09/16 | 966 | info/examples/tex-in-practice/maxmindi.tip
+1993/09/16 | 1143 | info/examples/tex-in-practice/mocal3.tip
+1993/09/16 | 2937 | info/examples/tex-in-practice/mocal.tip
+1993/09/16 | 869 | info/examples/tex-in-practice/modonead.tip
+1993/09/16 | 1341 | info/examples/tex-in-practice/mondofda.tip
+1993/09/16 | 1631 | info/examples/tex-in-practice/mrdel.tip
+1993/09/16 | 815 | info/examples/tex-in-practice/mspaces.tip
+1993/09/16 | 1777 | info/examples/tex-in-practice/namedef.tip
+1993/09/16 | 944 | info/examples/tex-in-practice/nathd.tip
+1993/09/16 | 947 | info/examples/tex-in-practice/nctest.tip
+1993/09/16 | 1266 | info/examples/tex-in-practice/ndaysmo.tip
+1993/09/16 | 1532 | info/examples/tex-in-practice/newdef.tip
+1993/09/16 | 917 | info/examples/tex-in-practice/newfont.tip
+1993/09/16 | 903 | info/examples/tex-in-practice/newinput.tip
+1993/09/16 | 1810 | info/examples/tex-in-practice/new-midi.tip
+1993/09/16 | 1614 | info/examples/tex-in-practice/newoutfr.tip
+1993/09/16 | 756 | info/examples/tex-in-practice/newpage.tip
+1993/09/16 | 1178 | info/examples/tex-in-practice/nextday.tip
+1993/09/16 | 963 | info/examples/tex-in-practice/nextmon.tip
+1993/09/16 | 812 | info/examples/tex-in-practice/nlm.tip
+1993/09/16 | 1275 | info/examples/tex-in-practice/norpweek.tip
+1993/09/16 | 1190 | info/examples/tex-in-practice/npright.tip
+1993/09/16 | 3508 | info/examples/tex-in-practice/ntotext.tip
+1993/09/16 | 1131 | info/examples/tex-in-practice/numcond.tip
+1993/09/16 | 868 | info/examples/tex-in-practice/numdyr.tip
+1993/09/16 | 1228 | info/examples/tex-in-practice/numwhile.tip
+1993/09/16 | 990 | info/examples/tex-in-practice/oblines.tip
+1993/09/16 | 928 | info/examples/tex-in-practice/obspaces.tip
+1993/09/16 | 1016 | info/examples/tex-in-practice/oct.tip
+1993/09/16 | 806 | info/examples/tex-in-practice/oddprin.tip
+1993/09/16 | 852 | info/examples/tex-in-practice/oeprin.tip
+1993/09/16 | 2365 | info/examples/tex-in-practice/ola-1p.tip
+1993/09/16 | 3461 | info/examples/tex-in-practice/ola-2p.tip
+1993/09/16 | 1874 | info/examples/tex-in-practice/ola-comm.tip
+1993/09/16 | 1719 | info/examples/tex-in-practice/op-endin.tip
+1993/09/16 | 1536 | info/examples/tex-in-practice/op-pagec.tip
+1993/09/16 | 987 | info/examples/tex-in-practice/optargx.tip
+1993/09/16 | 3074 | info/examples/tex-in-practice/orcards.tip
+1993/09/16 | 1095 | info/examples/tex-in-practice/ordbrule.tip
+1993/09/16 | 2639 | info/examples/tex-in-practice/orsimple.tip
+1993/09/16 | 1899 | info/examples/tex-in-practice/out2-or.tip
+1993/09/16 | 15340 | info/examples/tex-in-practice/out-ds.tip
+1993/09/16 | 2252 | info/examples/tex-in-practice/outf-rad.tip
+1993/09/16 | 1341 | info/examples/tex-in-practice/outpsel.tip
+1993/09/16 | 951 | info/examples/tex-in-practice/par-fl.tip
+1993/09/16 | 1103 | info/examples/tex-in-practice/parin.tip
+1993/09/16 | 1809 | info/examples/tex-in-practice/par-lab.tip
+1993/09/16 | 1221 | info/examples/tex-in-practice/par-lcl.tip
+1993/09/16 | 2798 | info/examples/tex-in-practice/part-cr.tip
+1993/09/16 | 2416 | info/examples/tex-in-practice/part-lab.tip
+1993/09/16 | 893 | info/examples/tex-in-practice/part-mac.tip
+1993/09/16 | 2100 | info/examples/tex-in-practice/parv-1.tip
+1993/09/16 | 1120 | info/examples/tex-in-practice/pdollars.tip
+1993/09/16 | 788 | info/examples/tex-in-practice/pickfs.tip
+1993/09/16 | 3911 | info/examples/tex-in-practice/pm-4.tip
+1993/09/16 | 876 | info/examples/tex-in-practice/pm-auxco.tip
+1993/09/16 | 1573 | info/examples/tex-in-practice/pm-bas.tip
+1993/09/16 | 3343 | info/examples/tex-in-practice/pm-main.tip
+1993/09/16 | 1227 | info/examples/tex-in-practice/pm-pagen.tip
+1993/09/16 | 988 | info/examples/tex-in-practice/pmtime.tip
+1993/09/16 | 1045 | info/examples/tex-in-practice/pm-wrc.tip
+1993/09/16 | 892 | info/examples/tex-in-practice/poorbold.tip
+1993/09/16 | 858 | info/examples/tex-in-practice/pralph.tip
+1993/09/16 | 1147 | info/examples/tex-in-practice/prevday.tip
+1993/09/16 | 967 | info/examples/tex-in-practice/prevmon.tip
+1993/09/16 | 1646 | info/examples/tex-in-practice/prhyph.tip
+1993/09/16 | 825 | info/examples/tex-in-practice/primmark.tip
+1993/09/16 | 1112 | info/examples/tex-in-practice/printast.tip
+1993/09/16 | 1985 | info/examples/tex-in-practice/printco.tip
+1993/09/16 | 895 | info/examples/tex-in-practice/printreg.tip
+1993/09/16 | 1152 | info/examples/tex-in-practice/prmode.tip
+1993/09/16 | 1516 | info/examples/tex-in-practice/prmonth.tip
+1993/09/16 | 2179 | info/examples/tex-in-practice/prot.tip
+1993/09/16 | 1267 | info/examples/tex-in-practice/rangetst.tip
+1993/09/16 | 972 | info/examples/tex-in-practice/rboxt.tip
+1993/09/16 | 913 | info/examples/tex-in-practice/readme
+1993/09/16 | 1214 | info/examples/tex-in-practice/readnu.tip
+1993/09/16 | 958 | info/examples/tex-in-practice/redtost.tip
+1993/09/16 | 1539 | info/examples/tex-in-practice/remtlsp.tip
+1993/09/16 | 1714 | info/examples/tex-in-practice/restring.tip
+1993/09/16 | 1328 | info/examples/tex-in-practice/reverses.tip
+1993/09/16 | 964 | info/examples/tex-in-practice/rh-dict.tip
+1993/09/16 | 1079 | info/examples/tex-in-practice/robust.tip
+1993/09/16 | 1499 | info/examples/tex-in-practice/samplepa.tip
+1993/09/16 | 1683 | info/examples/tex-in-practice/setstrut.tip
+1993/09/16 | 1153 | info/examples/tex-in-practice/shboxes.tip
+1993/09/16 | 980 | info/examples/tex-in-practice/shiftudb.tip
+1993/09/16 | 1610 | info/examples/tex-in-practice/showpll.tip
+1993/09/16 | 867 | info/examples/tex-in-practice/showx.tip
+1993/09/16 | 961 | info/examples/tex-in-practice/sigline.tip
+1993/09/16 | 915 | info/examples/tex-in-practice/spacefac.tip
+1993/09/16 | 1562 | info/examples/tex-in-practice/splitpar.tip
+1993/09/16 | 1256 | info/examples/tex-in-practice/ssmath.tip
+1993/09/16 | 1066 | info/examples/tex-in-practice/strleng.tip
+1993/09/16 | 1873 | info/examples/tex-in-practice/stswitch.tip
+1993/09/16 | 959 | info/examples/tex-in-practice/substf.tip
+1993/09/16 | 798 | info/examples/tex-in-practice/sumhd.tip
+1993/09/16 | 882 | info/examples/tex-in-practice/swapbox.tip
+1993/09/16 | 977 | info/examples/tex-in-practice/tabcent.tip
+1993/09/16 | 956 | info/examples/tex-in-practice/tabswb.tip
+1993/09/16 | 934 | info/examples/tex-in-practice/testdef.tip
+1993/09/16 | 1307 | info/examples/tex-in-practice/testsubs.tip
+1993/09/16 | 183279 | info/examples/tex-in-practice/texipexp.tex
+1993/09/16 | 97702 | info/examples/tex-in-practice/texip.idx
+1993/09/16 | 95690 | info/examples/tex-in-practice/tip-bugs.tex
+1993/09/16 | 1461 | info/examples/tex-in-practice/toc-mac.tip
+1993/09/16 | 778 | info/examples/tex-in-practice/today.tip
+1993/09/16 | 1065 | info/examples/tex-in-practice/todayx.tip
+1993/09/16 | 1316 | info/examples/tex-in-practice/topinfix.tip
+1993/09/16 | 772 | info/examples/tex-in-practice/ts-brefm.tip
+1993/09/16 | 837 | info/examples/tex-in-practice/ts-bul.tip
+1993/09/16 | 2350 | info/examples/tex-in-practice/ts-chap.tip
+1993/09/16 | 1464 | info/examples/tex-in-practice/ts-chhe.tip
+1993/09/16 | 2572 | info/examples/tex-in-practice/ts-crm.tip
+1993/09/16 | 882 | info/examples/tex-in-practice/ts-dime1.tip
+1993/09/16 | 1473 | info/examples/tex-in-practice/ts-dime2.tip
+1993/09/16 | 821 | info/examples/tex-in-practice/ts-dime3.tip
+1993/09/16 | 2182 | info/examples/tex-in-practice/ts-enum.tip
+1993/09/16 | 3716 | info/examples/tex-in-practice/ts-float.tip
+1993/09/16 | 3738 | info/examples/tex-in-practice/ts-fonts.tip
+1993/09/16 | 1284 | info/examples/tex-in-practice/ts-foot.tip
+1993/09/16 | 2261 | info/examples/tex-in-practice/ts-gnot.tip
+1993/09/16 | 785 | info/examples/tex-in-practice/ts-hall.tip
+1993/09/16 | 1285 | info/examples/tex-in-practice/ts-hmore.tip
+1993/09/16 | 938 | info/examples/tex-in-practice/ts-hyph.tip
+1993/09/16 | 1271 | info/examples/tex-in-practice/ts-itize.tip
+1993/09/16 | 800 | info/examples/tex-in-practice/ts-lazy.tip
+1993/09/16 | 1056 | info/examples/tex-in-practice/ts-loft.tip
+1993/09/16 | 1100 | info/examples/tex-in-practice/ts-logo.tip
+1993/09/16 | 1716 | info/examples/tex-in-practice/ts-main.tip
+1993/09/16 | 5132 | info/examples/tex-in-practice/ts-outpu.tip
+1993/09/16 | 4623 | info/examples/tex-in-practice/ts-page2.tip
+1993/09/16 | 1332 | info/examples/tex-in-practice/ts-pager.tip
+1993/09/16 | 1245 | info/examples/tex-in-practice/ts-robst.tip
+1993/09/16 | 1030 | info/examples/tex-in-practice/ts-set.tip
+1993/09/16 | 3165 | info/examples/tex-in-practice/ts-shead.tip
+1993/09/16 | 1193 | info/examples/tex-in-practice/ts-subst.tip
+1993/09/16 | 1423 | info/examples/tex-in-practice/ts-toc.tip
+1993/09/16 | 1342 | info/examples/tex-in-practice/ts-verb1.tip
+1993/09/16 | 1027 | info/examples/tex-in-practice/ts-verb2.tip
+1993/09/16 | 2286 | info/examples/tex-in-practice/ts-verb.tip
+1993/09/16 | 754 | info/examples/tex-in-practice/ts-vers.tip
+1993/09/16 | 960 | info/examples/tex-in-practice/ts-vol.tip
+1993/09/16 | 5533 | info/examples/tex-in-practice/ts-wind.tip
+1993/09/16 | 906 | info/examples/tex-in-practice/ts-writc.tip
+1993/09/16 | 1263 | info/examples/tex-in-practice/valdecpo.tip
+1993/09/16 | 1934 | info/examples/tex-in-practice/vcentx.tip
+1993/09/16 | 3678 | info/examples/tex-in-practice/verb-bas.tip
+1993/09/16 | 5648 | info/examples/tex-in-practice/verbdisp.tip
+1993/09/16 | 1221 | info/examples/tex-in-practice/verb-mac.tip
+1993/09/16 | 1341 | info/examples/tex-in-practice/verb.tip
+1993/09/16 | 2320 | info/examples/tex-in-practice/verbwr.tip
+1993/09/16 | 1001 | info/examples/tex-in-practice/vsmax.tip
+1993/09/16 | 1055 | info/examples/tex-in-practice/vtbox.tip
+1993/09/16 | 2127 | info/examples/tex-in-practice/vwrt-mac.tip
+1993/09/16 | 1913 | info/examples/tex-in-practice/weekofyr.tip
+1993/09/16 | 1115 | info/examples/tex-in-practice/widestc.tip
+1993/09/16 | 2335 | info/examples/tex-in-practice/wl-parcp.tip
+1993/09/16 | 972 | info/examples/tex-in-practice/wrtoc.tip
+1993/09/16 | 1167 | info/examples/tex-in-practice/wrverbar.tip
+1993/09/16 | 1285 | info/examples/tex-in-practice/wtolist.tip
+1993/09/16 | 1940 | info/examples/tex-in-practice/x-parsh.tip
+1993/09/16 | 2007 | info/examples/tex-in-practice/yearcal.tip
+2006/03/19 | 315656 | info/examples/tex-in-practice.zip
2004/10/19 | 1492 | info/examples/tlc2/10-1-10.ltx
2004/10/19 | 946 | info/examples/tlc2/10-1-11.ltx
2004/10/19 | 1045 | info/examples/tlc2/10-1-12.ltx
@@ -198610,8 +198610,6 @@
2000/03/10 | 271365 | info/webguide/webguide.ps
2000/03/10 | 26023 | info/webguide/webguide.tex
2006/03/12 | 293493 | info/webguide.zip
-1994/01/24 | 1628 | info/whatstex/lit.sel
-1994/01/24 | 108404 | info/whatstex/wots.tex
1999/08/06 | 135039 | info/win-help/english/LaTeX_Symbols_Help.zip
1999/08/06 | 112 | info/win-help/english/readme.txt
1999/08/06 | 135039 | info/win-help/latex/english/LaTeX_Symbols_Help.zip
@@ -198683,7 +198681,6 @@
2022/10/30 | 1721181 | install/fonts/gillius.tds.zip
2022/09/12 | 2337829 | install/fonts/gofonts.tds.zip
2012/09/06 | 467812 | install/fonts/hacm.tds.zip
-2019/06/10 | 1774481 | install/fonts/heuristica.tds.zip
2023/04/18 | 1740393 | install/fonts/ibarra.tds.zip
2022/10/01 | 4152828 | install/fonts/imfellEnglish.tds.zip
2012/08/14 | 329590 | install/fonts/imprintmtshadow.tds.zip
@@ -206486,58 +206483,6 @@
2007/03/01 | 18007 | macros/cstex/lic-gpl.eng
2007/03/01 | 1068 | macros/cstex/README
2012/12/03 | 12004 | macros/cstex/zmeny.txt
-2002/05/30 | 1545 | macros/ec-plain/00readme.doc
-1996/09/06 | 12874 | macros/ec-plain/acmacros.sty
-1993/03/13 | 3513 | macros/ec-plain/dybx10.mf
-1993/03/13 | 3531 | macros/ec-plain/dybx12.mf
-1993/03/13 | 3517 | macros/ec-plain/dybx5.mf
-1993/03/13 | 3526 | macros/ec-plain/dybx6.mf
-1993/03/13 | 3530 | macros/ec-plain/dybx7.mf
-1993/03/13 | 3521 | macros/ec-plain/dybx8.mf
-1993/03/13 | 3525 | macros/ec-plain/dybx9.mf
-1993/03/13 | 3518 | macros/ec-plain/dymi10.mf
-1993/03/13 | 3539 | macros/ec-plain/dymi12.mf
-1993/03/13 | 3531 | macros/ec-plain/dymi5.mf
-1993/03/13 | 3539 | macros/ec-plain/dymi6.mf
-1993/03/13 | 3536 | macros/ec-plain/dymi7.mf
-1993/03/13 | 3528 | macros/ec-plain/dymi8.mf
-1993/03/13 | 3524 | macros/ec-plain/dymi9.mf
-1993/03/13 | 345 | macros/ec-plain/ecbxmath.mf
-1993/03/13 | 3634 | macros/ec-plain/ecmathit.mf
-2002/05/30 | 346835 | macros/ec-plain/ec-pdfplain.fmt
-2002/05/30 | 30 | macros/ec-plain/ec-pdfplain.tex
-2002/05/30 | 337483 | macros/ec-plain/ec-plain.fmt
-1998/04/18 | 44838 | macros/ec-plain/ec-plain.tex
-2002/02/02 | 1117 | macros/ec-plain/ec-plfmt.bat
-1994/08/17 | 463 | macros/ec-plain/enhyphex.tex
-1994/08/17 | 27576 | macros/ec-plain/enhyph.tex
-1997/05/29 | 3431 | macros/ec-plain/eshyph.tex
-1998/03/25 | 224 | macros/ec-plain/exmi10.mf
-1998/04/15 | 2272 | macros/ec-plain/exmi10.tfm
-1998/03/25 | 224 | macros/ec-plain/exmi12.mf
-1998/04/15 | 2272 | macros/ec-plain/exmi12.tfm
-1998/03/25 | 221 | macros/ec-plain/exmi5.mf
-1998/04/15 | 2232 | macros/ec-plain/exmi5.tfm
-1998/03/25 | 221 | macros/ec-plain/exmi6.mf
-1998/04/15 | 2256 | macros/ec-plain/exmi6.tfm
-1998/03/25 | 221 | macros/ec-plain/exmi7.mf
-1998/04/15 | 2284 | macros/ec-plain/exmi7.tfm
-1998/03/25 | 221 | macros/ec-plain/exmi8.mf
-1998/04/15 | 2264 | macros/ec-plain/exmi8.tfm
-1998/03/25 | 221 | macros/ec-plain/exmi9.mf
-1998/04/15 | 2280 | macros/ec-plain/exmi9.tfm
-1998/03/25 | 227 | macros/ec-plain/exmi.mf
-2002/05/30 | 30336 | macros/ec-plain/f8hyph1.tex
-2002/05/30 | 936 | macros/ec-plain/frhyphx1.tex
-1995/03/10 | 48658 | macros/ec-plain/ghyph31.tex
-1993/03/23 | 7670 | macros/ec-plain/hyacceur.tex
-1997/10/14 | 4335 | macros/ec-plain/hyconfig.ptx
-1995/03/10 | 4301 | macros/ec-plain/ithyph.tex
-1997/07/16 | 1378 | macros/ec-plain/language.dat
-2002/05/30 | 31 | macros/ec-plain/make-musixtex-format.bat
-1998/04/15 | 22889 | macros/ec-plain/ofgreekl.mf
-1998/04/09 | 11977 | macros/ec-plain/ofgreeku.mf
-2006/03/20 | 364314 | macros/ec-plain.zip
2022/10/16 | 657 | macros/eplain/doc/AUTHORS
2022/10/16 | 90093 | macros/eplain/doc/ChangeLog
2022/10/16 | 18011 | macros/eplain/doc/COPYING
@@ -224601,12 +224546,12 @@
2008/02/10 | 19110 | macros/latex/contrib/ean13isbn/License.txt
2021/01/24 | 422 | macros/latex/contrib/ean13isbn/README
2021/01/24 | 322624 | macros/latex/contrib/ean13isbn.zip
-2024/01/30 | 75435 | macros/latex/contrib/easybook/easybook.dtx
+2024/01/31 | 75050 | macros/latex/contrib/easybook/easybook.dtx
2024/01/04 | 2081 | macros/latex/contrib/easybook/easybook.ins
-2024/01/30 | 599182 | macros/latex/contrib/easybook/easybook.pdf
-2024/01/30 | 88362 | macros/latex/contrib/easybook/easybook.tex
+2024/01/31 | 598552 | macros/latex/contrib/easybook/easybook.pdf
+2024/01/31 | 88420 | macros/latex/contrib/easybook/easybook.tex
2024/01/03 | 801 | macros/latex/contrib/easybook/README.md
-2024/01/30 | 642129 | macros/latex/contrib/easybook.zip
+2024/01/31 | 641513 | macros/latex/contrib/easybook.zip
2009/06/17 | 82589 | macros/latex/contrib/easy/doc/docbib.pdf
2009/06/17 | 78378 | macros/latex/contrib/easy/doc/docbmat.pdf
2009/06/17 | 99132 | macros/latex/contrib/easy/doc/doceqn.pdf
@@ -230161,15 +230106,15 @@
2021/06/01 | 2164 | macros/latex/contrib/hvarabic/latex/hvarabic.sty
2020/06/08 | 548 | macros/latex/contrib/hvarabic/README.md
2021/06/01 | 153159 | macros/latex/contrib/hvarabic.zip
-2023/12/08 | 2342 | macros/latex/contrib/hvextern/Changes
+2024/01/30 | 2402 | macros/latex/contrib/hvextern/Changes
2022/05/27 | 3998 | macros/latex/contrib/hvextern/doc/hvdoctools.sty
-2023/12/08 | 1498836 | macros/latex/contrib/hvextern/doc/hvextern.pdf
-2023/12/08 | 53005 | macros/latex/contrib/hvextern/doc/hvextern.tex
-2023/12/08 | 45501 | macros/latex/contrib/hvextern/latex/hvextern.sty
+2024/01/31 | 1481699 | macros/latex/contrib/hvextern/doc/hvextern.pdf
+2024/01/31 | 52572 | macros/latex/contrib/hvextern/doc/hvextern.tex
+2024/01/31 | 45891 | macros/latex/contrib/hvextern/latex/hvextern.sty
2022/06/20 | 727 | macros/latex/contrib/hvextern/lualatex/hvextern.lua
-2023/08/29 | 711 | macros/latex/contrib/hvextern/README
-2023/08/29 | 1040 | macros/latex/contrib/hvextern/script/hvextern-checkfile.lua
-2023/12/08 | 1391706 | macros/latex/contrib/hvextern.zip
+2023/09/19 | 711 | macros/latex/contrib/hvextern/README
+2022/07/21 | 1040 | macros/latex/contrib/hvextern/script/hvextern-checkfile.lua
+2024/01/31 | 1391882 | macros/latex/contrib/hvextern.zip
2023/10/16 | 5030 | macros/latex/contrib/hvfloat/Changes
2023/10/16 | 80278 | macros/latex/contrib/hvfloat/doc/examples/after1s1c.pdf
2021/11/20 | 2379 | macros/latex/contrib/hvfloat/doc/examples/after1s1c.tex
@@ -233461,11 +233406,11 @@
2003/09/24 | 1609 | macros/latex/contrib/leftidx/Makefile
2003/09/24 | 587 | macros/latex/contrib/leftidx/README
2007/01/08 | 56335 | macros/latex/contrib/leftidx.zip
-2020/08/25 | 72581 | macros/latex/contrib/leftindex/leftindex.pdf
-2020/08/25 | 4014 | macros/latex/contrib/leftindex/leftindex.sty
-2020/08/25 | 4787 | macros/latex/contrib/leftindex/leftindex.tex
-2020/08/25 | 1113 | macros/latex/contrib/leftindex/README.md
-2020/08/25 | 75674 | macros/latex/contrib/leftindex.zip
+2024/01/31 | 89885 | macros/latex/contrib/leftindex/leftindex.pdf
+2024/01/31 | 4368 | macros/latex/contrib/leftindex/leftindex.sty
+2024/01/31 | 5416 | macros/latex/contrib/leftindex/leftindex.tex
+2024/01/31 | 1114 | macros/latex/contrib/leftindex/README.md
+2024/01/31 | 91213 | macros/latex/contrib/leftindex.zip
2020/02/09 | 62145 | macros/latex/contrib/leiletter/leiden-logo.pdf
2020/02/09 | 52221 | macros/latex/contrib/leiletter/LEIletter.dtx
2020/02/09 | 383019 | macros/latex/contrib/leiletter/LEIletter.pdf
@@ -233872,14 +233817,17 @@
2023/11/14 | 1019 | macros/latex/contrib/litesolution/README.md
2023/12/13 | 17696 | macros/latex/contrib/litesolution/tex/litesolution.cls
2023/12/13 | 1421214 | macros/latex/contrib/litesolution.zip
-2023/11/05 | 30108 | macros/latex/contrib/litetable/doc/litetable-demo.pdf
-2023/11/05 | 1903 | macros/latex/contrib/litetable/doc/litetable-demo.tex
-2023/11/05 | 79686 | macros/latex/contrib/litetable/doc/litetable-doc.pdf
-2023/11/05 | 8871 | macros/latex/contrib/litetable/doc/litetable-doc.tex
+2024/01/31 | 17761 | macros/latex/contrib/litetable/doc/favicon.png
+2024/01/31 | 46294 | macros/latex/contrib/litetable/doc/litetable-demo.pdf
+2024/01/31 | 3133 | macros/latex/contrib/litetable/doc/litetable-demo.tex
+2024/01/31 | 193124 | macros/latex/contrib/litetable/doc/litetable-doc-cn.pdf
+2024/01/31 | 9632 | macros/latex/contrib/litetable/doc/litetable-doc-cn.tex
+2024/01/31 | 103291 | macros/latex/contrib/litetable/doc/litetable-doc-en.pdf
+2024/01/31 | 10600 | macros/latex/contrib/litetable/doc/litetable-doc-en.tex
2023/11/05 | 19101 | macros/latex/contrib/litetable/License
2023/11/05 | 573 | macros/latex/contrib/litetable/README.md
-2023/11/05 | 12851 | macros/latex/contrib/litetable/tex/litetable.cls
-2023/11/05 | 119826 | macros/latex/contrib/litetable.zip
+2024/01/31 | 10187 | macros/latex/contrib/litetable/tex/litetable.cls
+2024/01/31 | 368321 | macros/latex/contrib/litetable.zip
2008/02/04 | 1184 | macros/latex/contrib/liturg/liturg.ins
2008/06/28 | 125813 | macros/latex/contrib/liturg/liturg.pdf
2008/02/17 | 17363 | macros/latex/contrib/liturg/liturg.sty
@@ -240517,15 +240465,13 @@
2006/11/13 | 301000 | macros/latex/contrib/refman/refman.pdf
2006/11/18 | 6834 | macros/latex/contrib/refman/refman.upl
2012/09/27 | 704807 | macros/latex/contrib/refman.zip
-2010/10/21 | 2036 | macros/latex/contrib/refstyle/README
-2010/11/03 | 41243 | macros/latex/contrib/refstyle/refconfig.dtx
-2010/11/03 | 292980 | macros/latex/contrib/refstyle/refconfig.pdf
-2010/11/03 | 20486 | macros/latex/contrib/refstyle/refstyle.cfg
-2010/11/03 | 68122 | macros/latex/contrib/refstyle/refstyle.dtx
-2010/10/21 | 3850 | macros/latex/contrib/refstyle/refstyle.ins
-2010/11/03 | 484262 | macros/latex/contrib/refstyle/refstyle.pdf
-2010/11/03 | 11662 | macros/latex/contrib/refstyle/refstyle.sty
-2010/11/03 | 728404 | macros/latex/contrib/refstyle.zip
+2024/01/31 | 1966 | macros/latex/contrib/refstyle/README
+2024/01/31 | 39974 | macros/latex/contrib/refstyle/refconfig.dtx
+2024/01/31 | 303725 | macros/latex/contrib/refstyle/refconfig.pdf
+2024/01/31 | 66217 | macros/latex/contrib/refstyle/refstyle.dtx
+2024/01/31 | 3574 | macros/latex/contrib/refstyle/refstyle.ins
+2024/01/31 | 485427 | macros/latex/contrib/refstyle/refstyle.pdf
+2024/01/31 | 786905 | macros/latex/contrib/refstyle.zip
1999/08/03 | 178 | macros/latex/contrib/regcount/readme
1999/08/03 | 8899 | macros/latex/contrib/regcount/regcount.dtx
1999/08/03 | 1386 | macros/latex/contrib/regcount/regcount.ins
@@ -241299,11 +241245,12 @@
2019/08/01 | 243693 | macros/latex/contrib/schedule/schedule.pdf
2019/08/01 | 250009 | macros/latex/contrib/schedule.zip
2023/08/28 | 940 | macros/latex/contrib/schooldocs/README.md
-2023/12/29 | 40482 | macros/latex/contrib/schooldocs/schooldocs.dtx
-2023/12/29 | 390596 | macros/latex/contrib/schooldocs/schooldocs-examples.pdf
-2023/08/28 | 1997 | macros/latex/contrib/schooldocs/schooldocs.ins
-2023/12/29 | 156752 | macros/latex/contrib/schooldocs/schooldocs.pdf
-2023/12/29 | 520731 | macros/latex/contrib/schooldocs.zip
+2024/01/31 | 42017 | macros/latex/contrib/schooldocs/schooldocs.dtx
+2024/01/31 | 270592 | macros/latex/contrib/schooldocs/schooldocs-examples.pdf
+2024/01/31 | 8446 | macros/latex/contrib/schooldocs/schooldocs-examples.tex
+2024/01/31 | 1997 | macros/latex/contrib/schooldocs/schooldocs.ins
+2024/01/31 | 157543 | macros/latex/contrib/schooldocs/schooldocs.pdf
+2024/01/31 | 416395 | macros/latex/contrib/schooldocs.zip
2021/01/05 | 866 | macros/latex/contrib/schule/data/xsim-style/xsim.style.schule-binnen.code.tex
2023/03/19 | 1786 | macros/latex/contrib/schule/data/xsim-style/xsim.style.schule-default.code.tex
2021/01/05 | 1200 | macros/latex/contrib/schule/data/xsim-style/xsim.style.schule-keinenummer.code.tex
@@ -251462,19 +251409,10 @@
2018/12/02 | 4020 | macros/luatex/latex/makecookbook/README.old
2018/12/03 | 4028 | macros/luatex/latex/makecookbook/README.txt
2018/12/03 | 511848 | macros/luatex/latex/makecookbook.zip
-2023/08/25 | 52088 | macros/luatex/latex/novel/doc/extras/CPmodified.otf
2023/08/25 | 42202 | macros/luatex/latex/novel/doc/extras/NovelDeco-glyphs.pdf
-2023/11/09 | 98506 | macros/luatex/latex/novel/doc/extras/novel-example.pdf
-2023/11/09 | 3939 | macros/luatex/latex/novel/doc/extras/novel-example.tex
-2023/11/09 | 2335 | macros/luatex/latex/novel/doc/extras/novel-extras-README.html
-2023/08/25 | 311166 | macros/luatex/latex/novel/doc/extras/novel-Gallery-ChapterStart.pdf
-2023/08/26 | 1495202 | macros/luatex/latex/novel/doc/extras/novel-scripts.zip
-2023/08/25 | 1990 | macros/luatex/latex/novel/doc/extras/novel-testimage.jpg
-2023/08/25 | 1908 | macros/luatex/latex/novel/doc/extras/novel-testimage.png
-2023/08/25 | 2456 | macros/luatex/latex/novel/doc/extras/novel-testscript.jpg
-2023/08/25 | 2064 | macros/luatex/latex/novel/doc/extras/novel-testscript.png
-2023/11/09 | 69116 | macros/luatex/latex/novel/doc/extras/novel-testsuite.pdf
-2023/11/09 | 15612 | macros/luatex/latex/novel/doc/extras/novel-testsuite.tex
+2023/12/28 | 3939 | macros/luatex/latex/novel/doc/extras/novel-example.tex
+2023/12/28 | 1254 | macros/luatex/latex/novel/doc/extras/novel-extras-README.html
+2023/12/16 | 1290872 | macros/luatex/latex/novel/doc/extras/novel-scripts.zip
2023/08/25 | 563 | macros/luatex/latex/novel/doc/html-resources/10transold.png
2023/08/25 | 608 | macros/luatex/latex/novel/doc/html-resources/10trueold.png
2023/08/25 | 5475 | macros/luatex/latex/novel/doc/html-resources/acronym2.png
@@ -251577,32 +251515,31 @@
2023/08/25 | 10690 | macros/luatex/latex/novel/doc/html-resources/win10libser.png
2023/08/25 | 62302 | macros/luatex/latex/novel/doc/html-resources/workedforme.png
2023/08/25 | 4256 | macros/luatex/latex/novel/doc/html-resources/wrapme.png
-2023/08/25 | 418 | macros/luatex/latex/novel/doc/needed-packages
-2023/11/09 | 332404 | macros/luatex/latex/novel/doc/novel-documentation.html
-2023/11/09 | 60185 | macros/luatex/latex/novel/doc/novel.pdf
-2023/11/09 | 7264 | macros/luatex/latex/novel/doc/novel.tex
-2023/11/09 | 13085 | macros/luatex/latex/novel/lualatex/novel-CalculateLayout.sty
-2023/11/09 | 946 | macros/luatex/latex/novel/lualatex/novel-CGATSTR001.clo
-2023/11/09 | 14281 | macros/luatex/latex/novel/lualatex/novel-ChapterScene.sty
-2023/11/09 | 24132 | macros/luatex/latex/novel/lualatex/novel.cls
-2023/11/09 | 7562 | macros/luatex/latex/novel/lualatex/novel-DropCap.sty
-2023/11/09 | 6947 | macros/luatex/latex/novel/lualatex/novel-FileData.sty
-2023/11/09 | 947 | macros/luatex/latex/novel/lualatex/novel-FOGRA39.clo
-2023/11/09 | 17156 | macros/luatex/latex/novel/lualatex/novel-Fonts.sty
-2023/11/09 | 15781 | macros/luatex/latex/novel/lualatex/novel-Footnotes.sty
-2023/11/09 | 18082 | macros/luatex/latex/novel/lualatex/novel-HeadFootStyles.sty
-2023/11/09 | 19795 | macros/luatex/latex/novel/lualatex/novel-Images.sty
-2023/11/09 | 959 | macros/luatex/latex/novel/lualatex/novel-JC200103.clo
-2023/11/09 | 17236 | macros/luatex/latex/novel/lualatex/novel-LayoutSettings.sty
-2023/11/09 | 6336 | macros/luatex/latex/novel/lualatex/novel-microtype.cfg
-2023/11/09 | 16911 | macros/luatex/latex/novel/lualatex/novel-pdfx.sty
-2023/11/09 | 8821 | macros/luatex/latex/novel/lualatex/novel-PostLayout.sty
-2023/11/09 | 3819 | macros/luatex/latex/novel/lualatex/novel-Sandbox.sty
-2023/11/09 | 21698 | macros/luatex/latex/novel/lualatex/novel-TextMacros.sty
-2023/11/09 | 3358 | macros/luatex/latex/novel/lualatex/novel-xmppacket.sty
+2024/01/31 | 327224 | macros/luatex/latex/novel/doc/novel-documentation.html
+2024/01/31 | 32644 | macros/luatex/latex/novel/doc/novel.pdf
+2024/01/31 | 2830 | macros/luatex/latex/novel/doc/novel.tex
+2024/01/31 | 13085 | macros/luatex/latex/novel/lualatex/novel-CalculateLayout.sty
+2024/01/31 | 946 | macros/luatex/latex/novel/lualatex/novel-CGATSTR001.clo
+2024/01/31 | 14281 | macros/luatex/latex/novel/lualatex/novel-ChapterScene.sty
+2024/01/31 | 24694 | macros/luatex/latex/novel/lualatex/novel.cls
+2024/01/31 | 7562 | macros/luatex/latex/novel/lualatex/novel-DropCap.sty
+2024/01/31 | 6947 | macros/luatex/latex/novel/lualatex/novel-FileData.sty
+2024/01/31 | 947 | macros/luatex/latex/novel/lualatex/novel-FOGRA39.clo
+2024/01/31 | 17156 | macros/luatex/latex/novel/lualatex/novel-Fonts.sty
+2024/01/31 | 15781 | macros/luatex/latex/novel/lualatex/novel-Footnotes.sty
+2024/01/31 | 18082 | macros/luatex/latex/novel/lualatex/novel-HeadFootStyles.sty
+2024/01/31 | 19795 | macros/luatex/latex/novel/lualatex/novel-Images.sty
+2024/01/31 | 959 | macros/luatex/latex/novel/lualatex/novel-JC200103.clo
+2024/01/31 | 17236 | macros/luatex/latex/novel/lualatex/novel-LayoutSettings.sty
+2024/01/31 | 6336 | macros/luatex/latex/novel/lualatex/novel-microtype.cfg
+2024/01/31 | 16911 | macros/luatex/latex/novel/lualatex/novel-pdfx.sty
+2024/01/31 | 8821 | macros/luatex/latex/novel/lualatex/novel-PostLayout.sty
+2024/01/31 | 3819 | macros/luatex/latex/novel/lualatex/novel-Sandbox.sty
+2024/01/31 | 21698 | macros/luatex/latex/novel/lualatex/novel-TextMacros.sty
+2024/01/31 | 3358 | macros/luatex/latex/novel/lualatex/novel-xmppacket.sty
2023/08/25 | 132008 | macros/luatex/latex/novel/opentype/NovelDeco.otf
-2023/11/09 | 647 | macros/luatex/latex/novel/README.md
-2023/11/09 | 5066471 | macros/luatex/latex/novel.zip
+2024/01/26 | 517 | macros/luatex/latex/novel/README.md
+2024/01/31 | 4450424 | macros/luatex/latex/novel.zip
2023/09/07 | 9681 | macros/luatex/latex/odsfile/odsfile.lua
2023/09/07 | 97289 | macros/luatex/latex/odsfile/odsfile.pdf
2023/09/07 | 8392 | macros/luatex/latex/odsfile/odsfile.sty
@@ -276281,6 +276218,8 @@
2011/03/18 | 570813 | obsolete/info/translations/microtype/de/microtype-DE.dtx
2011/11/08 | 1272263 | obsolete/info/translations/microtype/de/microtype-DE.pdf
2011/11/08 | 1398327 | obsolete/info/translations/microtype/de.zip
+1994/01/24 | 1628 | obsolete/info/whatstex/lit.sel
+1994/01/24 | 108404 | obsolete/info/whatstex/wots.tex
1997/06/25 | 1742 | obsolete/language/armtex/v1.0/arm10.tex
1997/06/25 | 1822 | obsolete/language/armtex/v1.0/arm11.tex
1997/06/25 | 1822 | obsolete/language/armtex/v1.0/arm12.tex
@@ -277439,6 +277378,58 @@
2006/12/22 | 1764 | obsolete/macros/context/contrib/context-urwgothic/tex/context/third/urwgothic/type-urwgothic.tex
2018/03/05 | 11 | obsolete/macros/context/contrib/context-urwgothic/VERSION
2023/06/19 | 141955 | obsolete/macros/context/contrib/context-urwgothic.zip
+2002/05/30 | 1545 | obsolete/macros/ec-plain/00readme.doc
+1996/09/06 | 12874 | obsolete/macros/ec-plain/acmacros.sty
+1993/03/13 | 3513 | obsolete/macros/ec-plain/dybx10.mf
+1993/03/13 | 3531 | obsolete/macros/ec-plain/dybx12.mf
+1993/03/13 | 3517 | obsolete/macros/ec-plain/dybx5.mf
+1993/03/13 | 3526 | obsolete/macros/ec-plain/dybx6.mf
+1993/03/13 | 3530 | obsolete/macros/ec-plain/dybx7.mf
+1993/03/13 | 3521 | obsolete/macros/ec-plain/dybx8.mf
+1993/03/13 | 3525 | obsolete/macros/ec-plain/dybx9.mf
+1993/03/13 | 3518 | obsolete/macros/ec-plain/dymi10.mf
+1993/03/13 | 3539 | obsolete/macros/ec-plain/dymi12.mf
+1993/03/13 | 3531 | obsolete/macros/ec-plain/dymi5.mf
+1993/03/13 | 3539 | obsolete/macros/ec-plain/dymi6.mf
+1993/03/13 | 3536 | obsolete/macros/ec-plain/dymi7.mf
+1993/03/13 | 3528 | obsolete/macros/ec-plain/dymi8.mf
+1993/03/13 | 3524 | obsolete/macros/ec-plain/dymi9.mf
+1993/03/13 | 345 | obsolete/macros/ec-plain/ecbxmath.mf
+1993/03/13 | 3634 | obsolete/macros/ec-plain/ecmathit.mf
+2002/05/30 | 346835 | obsolete/macros/ec-plain/ec-pdfplain.fmt
+2002/05/30 | 30 | obsolete/macros/ec-plain/ec-pdfplain.tex
+2002/05/30 | 337483 | obsolete/macros/ec-plain/ec-plain.fmt
+1998/04/18 | 44838 | obsolete/macros/ec-plain/ec-plain.tex
+2002/02/02 | 1117 | obsolete/macros/ec-plain/ec-plfmt.bat
+1994/08/17 | 463 | obsolete/macros/ec-plain/enhyphex.tex
+1994/08/17 | 27576 | obsolete/macros/ec-plain/enhyph.tex
+1997/05/29 | 3431 | obsolete/macros/ec-plain/eshyph.tex
+1998/03/25 | 224 | obsolete/macros/ec-plain/exmi10.mf
+1998/04/15 | 2272 | obsolete/macros/ec-plain/exmi10.tfm
+1998/03/25 | 224 | obsolete/macros/ec-plain/exmi12.mf
+1998/04/15 | 2272 | obsolete/macros/ec-plain/exmi12.tfm
+1998/03/25 | 221 | obsolete/macros/ec-plain/exmi5.mf
+1998/04/15 | 2232 | obsolete/macros/ec-plain/exmi5.tfm
+1998/03/25 | 221 | obsolete/macros/ec-plain/exmi6.mf
+1998/04/15 | 2256 | obsolete/macros/ec-plain/exmi6.tfm
+1998/03/25 | 221 | obsolete/macros/ec-plain/exmi7.mf
+1998/04/15 | 2284 | obsolete/macros/ec-plain/exmi7.tfm
+1998/03/25 | 221 | obsolete/macros/ec-plain/exmi8.mf
+1998/04/15 | 2264 | obsolete/macros/ec-plain/exmi8.tfm
+1998/03/25 | 221 | obsolete/macros/ec-plain/exmi9.mf
+1998/04/15 | 2280 | obsolete/macros/ec-plain/exmi9.tfm
+1998/03/25 | 227 | obsolete/macros/ec-plain/exmi.mf
+2002/05/30 | 30336 | obsolete/macros/ec-plain/f8hyph1.tex
+2002/05/30 | 936 | obsolete/macros/ec-plain/frhyphx1.tex
+1995/03/10 | 48658 | obsolete/macros/ec-plain/ghyph31.tex
+1993/03/23 | 7670 | obsolete/macros/ec-plain/hyacceur.tex
+1997/10/14 | 4335 | obsolete/macros/ec-plain/hyconfig.ptx
+1995/03/10 | 4301 | obsolete/macros/ec-plain/ithyph.tex
+1997/07/16 | 1378 | obsolete/macros/ec-plain/language.dat
+2002/05/30 | 31 | obsolete/macros/ec-plain/make-musixtex-format.bat
+1998/04/15 | 22889 | obsolete/macros/ec-plain/ofgreekl.mf
+1998/04/09 | 11977 | obsolete/macros/ec-plain/ofgreeku.mf
+2006/03/20 | 364314 | obsolete/macros/ec-plain.zip
1999/08/01 | 35 | obsolete/macros/fotex/fotex.ini
1999/12/21 | 26327 | obsolete/macros/fotex/fotex.ltx
1999/12/09 | 3275 | obsolete/macros/fotex/mathml.ltx
@@ -289480,7 +289471,7 @@
2021/10/26 | 246523 | support/latex-make/texdepends.pdf
2021/10/26 | 1069049 | support/latex-make.zip
2006/03/12 | 5889 | support/latexmake.zip
-2024/01/10 | 42887 | support/latexmk/CHANGES
+2024/01/30 | 43527 | support/latexmk/CHANGES
2013/12/03 | 17993 | support/latexmk/COPYING
2022/01/28 | 2881 | support/latexmk/example_rcfiles/asymptote_latexmkrc
2017/11/20 | 853 | support/latexmk/example_rcfiles/bib2gls_latexmkrc
@@ -289525,14 +289516,14 @@
2007/09/29 | 1492 | support/latexmk/extra-scripts/pst2pdf_for_latexmk_README.txt
2016/10/13 | 4828 | support/latexmk/extra-scripts/README-latexmk-scripts
2006/01/14 | 5588 | support/latexmk/extra-scripts/startacroread
-2024/01/10 | 17976 | support/latexmk/INSTALL
-2024/01/10 | 195651 | support/latexmk/latexmk.1
+2024/01/31 | 17975 | support/latexmk/INSTALL
+2024/01/31 | 195651 | support/latexmk/latexmk.1
2022/03/15 | 1219 | support/latexmk/latexmk.cmd
-2024/01/10 | 230284 | support/latexmk/latexmk.pdf
-2024/01/10 | 513497 | support/latexmk/latexmk.pl
-2024/01/10 | 242842 | support/latexmk/latexmk.txt
-2024/01/10 | 2525 | support/latexmk/README
-2024/01/10 | 538726 | support/latexmk.zip
+2024/01/31 | 230287 | support/latexmk/latexmk.pdf
+2024/01/31 | 516745 | support/latexmk/latexmk.pl
+2024/01/31 | 242840 | support/latexmk/latexmk.txt
+2024/01/31 | 2523 | support/latexmk/README
+2024/01/31 | 539823 | support/latexmk.zip
1997/11/24 | 7551 | support/latexn/latexn
2023/02/27 | 22923 | support/latexpand/latexpand
2023/02/24 | 1529 | support/latexpand/LICENCE
@@ -291487,105 +291478,118 @@
2022/11/18 | 1526423 | support/spix/spix.pdf
2022/11/18 | 4251 | support/spix/spix.py
2022/11/18 | 1538860 | support/spix.zip
-2020/10/11 | 35147 | support/splint/COPYING
-2020/10/11 | 52867 | support/splint/cweb/bo.w
-2020/10/11 | 21366 | support/splint/cweb/bs.w
-2020/10/11 | 3095 | support/splint/cweb/checklists.w
-2020/10/11 | 28408 | support/splint/cweb/common.w
-2020/10/11 | 15385 | support/splint/cweb/fk.w
-2020/10/11 | 26331 | support/splint/cweb/fo.w
-2020/10/11 | 33507 | support/splint/cweb/lo.w
-2020/10/11 | 4980 | support/splint/cweb/Makefile
-2020/10/11 | 3493 | support/splint/cweb/mkeparser.w
-2020/10/11 | 2878 | support/splint/cweb/mkscanner.w
-2020/10/11 | 19039 | support/splint/cweb/np.w
-2020/10/11 | 23851 | support/splint/cweb/philosophy.w
-2020/10/11 | 4730 | support/splint/cweb/references.w
-2020/10/11 | 36843 | support/splint/cweb/so.w
-2020/10/11 | 98316 | support/splint/cweb/splint.w
-2020/10/11 | 4449 | support/splint/cweb/ssffo.w
-2020/10/11 | 718042 | support/splint/doc/ldman.pdf
-2020/10/11 | 1141608 | support/splint/doc/splint.pdf
-2020/10/11 | 265118 | support/splint/doc/tb109shibakov.pdf
-2020/10/11 | 15652 | support/splint/examples/count/count.sty
-2020/10/11 | 835 | support/splint/examples/expression/etoks.sty
-2020/10/11 | 1689 | support/splint/examples/expression/expression.sty
-2020/10/11 | 7703 | support/splint/examples/expression/expression.w
-2020/10/11 | 2053 | support/splint/examples/expression/Makefile
-2020/10/11 | 1792 | support/splint/examples/ld/ldexample.hw
-2020/10/11 | 161 | support/splint/examples/ld/ldfrontmatter.sty
-2020/10/11 | 36678 | support/splint/examples/ld/ldgramo.w
-2020/10/11 | 43549 | support/splint/examples/ld/ldgram.w
-2020/10/11 | 8273 | support/splint/examples/ld/ldint.sty
-2020/10/11 | 27961 | support/splint/examples/ld/ldlexo.w
-2020/10/11 | 31472 | support/splint/examples/ld/ldlex.w
-2020/10/11 | 21063 | support/splint/examples/ld/ldman.w
-2020/10/11 | 13828 | support/splint/examples/ld/ldnp.w
-2020/10/11 | 9545 | support/splint/examples/ld/ldnump.w
-2020/10/11 | 1713 | support/splint/examples/ld/ldtexlex.sty
-2020/10/11 | 21560 | support/splint/examples/ld/ldunion.sty
-2020/10/11 | 1282 | support/splint/examples/ld/lstokenset.sty
-2020/10/11 | 4796 | support/splint/examples/ld/ltokenset.sty
-2020/10/11 | 4437 | support/splint/examples/ld/Makefile
-2020/10/11 | 1934 | support/splint/examples/symbols/Makefile
-2020/10/11 | 691 | support/splint/examples/symbols/slimbo.sty
-2020/10/11 | 19437 | support/splint/examples/symbols/symbols.w
-2020/10/11 | 2301 | support/splint/examples/symbols/symfm.sty
-2020/10/11 | 10866 | support/splint/examples/symbols/symmap.sty
-2020/10/11 | 1051 | support/splint/examples/symbols/symtoks.sty
-2020/10/11 | 899 | support/splint/examples/symbols/symtricks.sty
-2020/10/11 | 11508 | support/splint/examples/types/basic.sty
-2020/10/11 | 1048 | support/splint/examples/types/Makefile
-2020/10/11 | 1799 | support/splint/examples/types/test.sty
-2020/10/11 | 4700 | support/splint/examples/types/tree.sty
-2020/10/11 | 2913 | support/splint/examples/xxpression/Makefile
-2020/10/11 | 839 | support/splint/examples/xxpression/xtoks.sty
-2020/10/11 | 1532 | support/splint/examples/xxpression/xxpression.sty
-2020/10/11 | 13366 | support/splint/examples/xxpression/xxpression.w
-2020/10/11 | 8902 | support/splint/examples/xxpression/xymmap.sty
-2020/10/11 | 1856 | support/splint/extras/texmf/macros/protcode.tex
-2020/10/11 | 4356 | support/splint/INSTALL
-2020/10/11 | 1941 | support/splint/Makefile
-2020/10/11 | 3238 | support/splint/makefile.inc
-2020/10/11 | 242 | support/splint/makefile.loc
-2020/10/11 | 3752 | support/splint/README
-2020/10/11 | 8287 | support/splint/scripts/bindx.pl
-2020/10/11 | 5681 | support/splint/scripts/brack.pl
-2020/10/11 | 2609 | support/splint/scripts/cslist.pl
-2020/10/11 | 2295 | support/splint/scripts/misccw.pl
-2020/10/11 | 2176 | support/splint/scripts/unline.pl
-2020/10/11 | 1683 | support/splint/tex/btokenset.sty
-2020/10/11 | 27195 | support/splint/tex/dcols.sty
-2020/10/11 | 31237 | support/splint/tex/flex.sty
-2020/10/11 | 890 | support/splint/tex/fretokenset.sty
-2020/10/11 | 158 | support/splint/tex/frontmatter.sty
-2020/10/11 | 3547 | support/splint/tex/ftokenset.sty
-2020/10/11 | 15567 | support/splint/tex/gindex.sty
-2020/10/11 | 2921 | support/splint/tex/grabstates.sty
-2020/10/11 | 10501 | support/splint/tex/hext.sty
-2020/10/11 | 37833 | support/splint/tex/limbo.sty
-2020/10/11 | 13261 | support/splint/tex/noweb.sty
-2020/10/11 | 1638 | support/splint/tex/stokenset.sty
-2020/10/11 | 1095 | support/splint/tex/trt1.sty
-2020/10/11 | 8685 | support/splint/tex/xarithm.sty
-2020/10/11 | 1317 | support/splint/tex/yxunion.sty
-2020/10/11 | 2668 | support/splint/tex/yybootstrap.sty
-2020/10/11 | 26390 | support/splint/tex/yycommon.sty
-2020/10/11 | 3993 | support/splint/tex/yydebug.sty
-2020/10/11 | 12990 | support/splint/tex/yyfaststack.sty
-2020/10/11 | 30710 | support/splint/tex/yyinit.sty
-2020/10/11 | 16146 | support/splint/tex/yyinput.sty
-2020/10/11 | 48110 | support/splint/tex/yymisc.sty
-2020/10/11 | 2630 | support/splint/tex/yynested.sty
-2020/10/11 | 11742 | support/splint/tex/yyparse.sty
-2020/10/11 | 1157 | support/splint/tex/yypretty.sty
-2020/10/11 | 3158 | support/splint/tex/yy.sty
-2020/10/11 | 4804 | support/splint/tex/yystype.sty
-2020/10/11 | 31438 | support/splint/tex/yytexlex.sty
-2020/10/11 | 85733 | support/splint/tex/yyunion.sty
-2020/10/11 | 1703 | support/splint/TODO
-2020/10/11 | 6 | support/splint/VERSION
-2020/10/11 | 2420396 | support/splint.zip
+2024/01/30 | 35147 | support/splint/COPYING
+2024/01/30 | 59121 | support/splint/cweb/bo.w
+2024/01/30 | 23404 | support/splint/cweb/bs.w
+2024/01/30 | 3095 | support/splint/cweb/checklists.w
+2024/01/30 | 29508 | support/splint/cweb/common.w
+2024/01/30 | 15528 | support/splint/cweb/fk.w
+2024/01/30 | 32049 | support/splint/cweb/fo.w
+2024/01/30 | 33108 | support/splint/cweb/lo.w
+2024/01/30 | 5712 | support/splint/cweb/Makefile
+2024/01/30 | 3588 | support/splint/cweb/mkeparser.w
+2024/01/30 | 2878 | support/splint/cweb/mkscanner.w
+2024/01/30 | 19605 | support/splint/cweb/np.w
+2024/01/30 | 25490 | support/splint/cweb/philosophy.w
+2024/01/30 | 4730 | support/splint/cweb/references.w
+2024/01/30 | 38032 | support/splint/cweb/so.w
+2024/01/30 | 101601 | support/splint/cweb/splint.w
+2024/01/30 | 745685 | support/splint/doc/ldman.pdf
+2024/01/30 | 1157534 | support/splint/doc/splint.pdf
+2024/01/30 | 265118 | support/splint/doc/tb109shibakov.pdf
+2024/01/30 | 15652 | support/splint/examples/count/count.sty
+2024/01/30 | 835 | support/splint/examples/expression/etoks.sty
+2024/01/30 | 1689 | support/splint/examples/expression/expression.sty
+2024/01/30 | 7718 | support/splint/examples/expression/expression.w
+2024/01/30 | 1981 | support/splint/examples/expression/Makefile
+2024/01/30 | 2070 | support/splint/examples/ld/ldexample.hw
+2024/01/30 | 161 | support/splint/examples/ld/ldfrontmatter.sty
+2024/01/30 | 36911 | support/splint/examples/ld/ldgramo.w
+2024/01/30 | 46395 | support/splint/examples/ld/ldgram.w
+2024/01/30 | 8319 | support/splint/examples/ld/ldint.sty
+2024/01/30 | 28108 | support/splint/examples/ld/ldlexo.w
+2024/01/30 | 27626 | support/splint/examples/ld/ldlex.w
+2024/01/30 | 24430 | support/splint/examples/ld/ldman.w
+2024/01/30 | 14260 | support/splint/examples/ld/ldnp.w
+2024/01/30 | 9415 | support/splint/examples/ld/ldnump.w
+2024/01/30 | 1717 | support/splint/examples/ld/ldtexlex.sty
+2024/01/30 | 23823 | support/splint/examples/ld/ldunion.sty
+2024/01/30 | 1282 | support/splint/examples/ld/lstokenset.sty
+2024/01/30 | 4796 | support/splint/examples/ld/ltokenset.sty
+2024/01/30 | 4875 | support/splint/examples/ld/Makefile
+2024/01/30 | 1829 | support/splint/examples/symbols/Makefile
+2024/01/30 | 691 | support/splint/examples/symbols/slimbo.sty
+2024/01/30 | 19878 | support/splint/examples/symbols/symbols.w
+2024/01/30 | 2301 | support/splint/examples/symbols/symfm.sty
+2024/01/30 | 10833 | support/splint/examples/symbols/symmap.sty
+2024/01/30 | 1051 | support/splint/examples/symbols/symtoks.sty
+2024/01/30 | 899 | support/splint/examples/symbols/symtricks.sty
+2024/01/30 | 11508 | support/splint/examples/types/basic.sty
+2024/01/30 | 1048 | support/splint/examples/types/Makefile
+2024/01/30 | 1799 | support/splint/examples/types/test.sty
+2024/01/30 | 4700 | support/splint/examples/types/tree.sty
+2024/01/30 | 2740 | support/splint/examples/xxpression/Makefile
+2024/01/30 | 791 | support/splint/examples/xxpression/xtoks.sty
+2024/01/30 | 1532 | support/splint/examples/xxpression/xxpression.sty
+2024/01/30 | 13289 | support/splint/examples/xxpression/xxpression.w
+2024/01/30 | 8873 | support/splint/examples/xxpression/xymmap.sty
+2024/01/30 | 4593 | support/splint/INSTALL
+2024/01/30 | 2739 | support/splint/Makefile
+2024/01/30 | 4011 | support/splint/makefile.inc
+2024/01/30 | 242 | support/splint/makefile.loc
+2024/01/30 | 1856 | support/splint/other/texmf/macros/protcode.tex
+2024/01/30 | 3725 | support/splint/README
+2024/01/30 | 8616 | support/splint/scripts/bindx.pl
+2024/01/30 | 9934 | support/splint/scripts/brack.pl
+2024/01/30 | 2609 | support/splint/scripts/cslist.pl
+2024/01/30 | 2295 | support/splint/scripts/misccw.pl
+2024/01/30 | 2323 | support/splint/scripts/unline.pl
+2024/01/30 | 1719 | support/splint/tex/btokenset.sty
+2024/01/30 | 35342 | support/splint/tex/dcols.sty
+2024/01/30 | 29226 | support/splint/tex/flex.sty
+2024/01/30 | 17027 | support/splint/tex/fonts/idssbx10.vpl
+2024/01/30 | 17059 | support/splint/tex/fonts/idssbx12.vpl
+2024/01/30 | 16995 | support/splint/tex/fonts/idssbx5.vpl
+2024/01/30 | 1280 | support/splint/tex/fonts/idssbx6.tfm
+2024/01/30 | 828 | support/splint/tex/fonts/idssbx6.vf
+2024/01/30 | 21931 | support/splint/tex/fonts/idssbx6.vpl
+2024/01/30 | 1296 | support/splint/tex/fonts/idssbx7.tfm
+2024/01/30 | 828 | support/splint/tex/fonts/idssbx7.vf
+2024/01/30 | 17108 | support/splint/tex/fonts/idssbx7.vpl
+2024/01/30 | 1280 | support/splint/tex/fonts/idssbx8.tfm
+2024/01/30 | 828 | support/splint/tex/fonts/idssbx8.vf
+2024/01/30 | 22052 | support/splint/tex/fonts/idssbx8.vpl
+2024/01/30 | 1296 | support/splint/tex/fonts/idssbx9.tfm
+2024/01/30 | 828 | support/splint/tex/fonts/idssbx9.vf
+2024/01/30 | 22044 | support/splint/tex/fonts/idssbx9.vpl
+2024/01/30 | 890 | support/splint/tex/fretokenset.sty
+2024/01/30 | 158 | support/splint/tex/frontmatter.sty
+2024/01/30 | 3611 | support/splint/tex/ftokenset.sty
+2024/01/30 | 20564 | support/splint/tex/gindex.sty
+2024/01/30 | 2916 | support/splint/tex/grabstates.sty
+2024/01/30 | 11192 | support/splint/tex/hext.sty
+2024/01/30 | 48339 | support/splint/tex/limbo.sty
+2024/01/30 | 16681 | support/splint/tex/noweb.sty
+2024/01/30 | 1574 | support/splint/tex/stokenset.sty
+2024/01/30 | 1167 | support/splint/tex/trt1.sty
+2024/01/30 | 8686 | support/splint/tex/xarithm.sty
+2024/01/30 | 2701 | support/splint/tex/yybootstrap.sty
+2024/01/30 | 42504 | support/splint/tex/yycommon.sty
+2024/01/30 | 4426 | support/splint/tex/yydebug.sty
+2024/01/30 | 13049 | support/splint/tex/yyfaststack.sty
+2024/01/30 | 24773 | support/splint/tex/yyinit.sty
+2024/01/30 | 11377 | support/splint/tex/yyinput.sty
+2024/01/30 | 51296 | support/splint/tex/yymisc.sty
+2024/01/30 | 2630 | support/splint/tex/yynested.sty
+2024/01/30 | 11969 | support/splint/tex/yyparse.sty
+2024/01/30 | 1123 | support/splint/tex/yypretty.sty
+2024/01/30 | 3706 | support/splint/tex/yy.sty
+2024/01/30 | 5071 | support/splint/tex/yystype.sty
+2024/01/30 | 32731 | support/splint/tex/yytexlex.sty
+2024/01/30 | 109116 | support/splint/tex/yyunion.sty
+2024/01/30 | 2513 | support/splint/TODO
+2024/01/30 | 6 | support/splint/VERSION
+2024/01/31 | 2509557 | support/splint.zip
2022/01/03 | 2251 | support/SQLTeX/aclocal/ax_prog_perl_modules.m4
2022/01/23 | 27307 | support/SQLTeX/aclocal.m4
2022/01/23 | 106900 | support/SQLTeX/configure
@@ -292369,7 +292373,7 @@
2021/05/03 | 629 | support/TeX4ht/doc/README
2020/08/24 | 358454 | support/TeX4ht/doc/TeX4ht-doc.tex
2021/05/11 | 262 | support/TeX4ht/README
-2024/01/29 | 244724 | support/TeX4ht/source/ChangeLog
+2024/01/30 | 245025 | support/TeX4ht/source/ChangeLog
2021/05/03 | 1375 | support/TeX4ht/source/checklog.lua
2021/05/03 | 1189 | support/TeX4ht/source/common-code.tex
2021/05/03 | 2727 | support/TeX4ht/source/common-info.tex
@@ -292411,7 +292415,7 @@
2021/05/03 | 14218 | support/TeX4ht/source/tex4ht-htcmd.tex
2021/05/03 | 70683 | support/TeX4ht/source/tex4ht-html0.tex
2021/05/03 | 164748 | support/TeX4ht/source/tex4ht-html32.tex
-2024/01/24 | 627765 | support/TeX4ht/source/tex4ht-html4.tex
+2024/01/30 | 627772 | support/TeX4ht/source/tex4ht-html4.tex
2023/10/09 | 12034 | support/TeX4ht/source/tex4ht-html5.tex
2021/06/17 | 648233 | support/TeX4ht/source/tex4ht-html-speech.tex
2021/05/03 | 59483 | support/TeX4ht/source/tex4ht-html-speech-xtpipes.tex
@@ -292429,7 +292433,7 @@
2021/05/03 | 90707 | support/TeX4ht/source/tex4ht-jsml-xtpipes.tex
2023/10/12 | 8418 | support/TeX4ht/source/tex4ht-mathjax.tex
2021/05/03 | 102444 | support/TeX4ht/source/tex4ht-mathltx.tex
-2024/01/29 | 154182 | support/TeX4ht/source/tex4ht-mathml.tex
+2024/01/30 | 154182 | support/TeX4ht/source/tex4ht-mathml.tex
2021/05/03 | 8860 | support/TeX4ht/source/tex4ht-mathplayer.tex
2023/09/11 | 46498 | support/TeX4ht/source/tex4ht-mkht.tex
2021/05/03 | 26652 | support/TeX4ht/source/tex4ht-moz.tex
@@ -296159,9 +296163,9 @@
2019/12/07 | 327132 | systems/texlive/tlnet/archive/accsupp.doc.r53052.tar.xz
2019/12/07 | 3304 | systems/texlive/tlnet/archive/accsupp.r53052.tar.xz
2019/12/07 | 8184 | systems/texlive/tlnet/archive/accsupp.source.r53052.tar.xz
-2022/11/26 | 880816 | systems/texlive/tlnet/archive/achemso.doc.r65103.tar.xz
-2022/11/26 | 19300 | systems/texlive/tlnet/archive/achemso.r65103.tar.xz
-2022/11/26 | 31496 | systems/texlive/tlnet/archive/achemso.source.r65103.tar.xz
+2024/01/31 | 881516 | systems/texlive/tlnet/archive/achemso.doc.r69638.tar.xz
+2024/01/31 | 19332 | systems/texlive/tlnet/archive/achemso.r69638.tar.xz
+2024/01/31 | 31552 | systems/texlive/tlnet/archive/achemso.source.r69638.tar.xz
2024/01/23 | 4853068 | systems/texlive/tlnet/archive/acmart.doc.r69535.tar.xz
2024/01/23 | 42856 | systems/texlive/tlnet/archive/acmart.r69535.tar.xz
2024/01/23 | 62228 | systems/texlive/tlnet/archive/acmart.source.r69535.tar.xz
@@ -297197,13 +297201,13 @@
2019/02/28 | 376 | systems/texlive/tlnet/archive/bib2gls.amd64-freebsd.r45266.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/bib2gls.amd64-netbsd.r45266.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/bib2gls.armhf-linux.r45266.tar.xz
-2023/10/14 | 5758584 | systems/texlive/tlnet/archive/bib2gls.doc.r68534.tar.xz
+2024/01/31 | 5761384 | systems/texlive/tlnet/archive/bib2gls.doc.r69635.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/bib2gls.i386-freebsd.r45266.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/bib2gls.i386-linux.r45266.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/bib2gls.i386-netbsd.r45266.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/bib2gls.i386-solaris.r45266.tar.xz
-2023/10/14 | 2019008 | systems/texlive/tlnet/archive/bib2gls.r68534.tar.xz
-2023/10/14 | 1865876 | systems/texlive/tlnet/archive/bib2gls.source.r68534.tar.xz
+2024/01/31 | 2031324 | systems/texlive/tlnet/archive/bib2gls.r69635.tar.xz
+2024/01/31 | 1874256 | systems/texlive/tlnet/archive/bib2gls.source.r69635.tar.xz
2021/02/25 | 376 | systems/texlive/tlnet/archive/bib2gls.universal-darwin.r57908.tar.xz
2023/02/20 | 2368 | systems/texlive/tlnet/archive/bib2gls.windows.r65891.tar.xz
2019/02/28 | 376 | systems/texlive/tlnet/archive/bib2gls.x86_64-cygwin.r45266.tar.xz
@@ -297767,9 +297771,9 @@
2021/06/20 | 3180 | systems/texlive/tlnet/archive/bxjaprnind.r59641.tar.xz
2019/10/24 | 2068 | systems/texlive/tlnet/archive/bxjatoucs.doc.r52509.tar.xz
2019/10/24 | 25604 | systems/texlive/tlnet/archive/bxjatoucs.r52509.tar.xz
-2023/07/18 | 1283184 | systems/texlive/tlnet/archive/bxjscls.doc.r67657.tar.xz
-2023/07/18 | 34740 | systems/texlive/tlnet/archive/bxjscls.r67657.tar.xz
-2023/07/18 | 93108 | systems/texlive/tlnet/archive/bxjscls.source.r67657.tar.xz
+2024/01/31 | 1297828 | systems/texlive/tlnet/archive/bxjscls.doc.r69637.tar.xz
+2024/01/31 | 35104 | systems/texlive/tlnet/archive/bxjscls.r69637.tar.xz
+2024/01/31 | 93848 | systems/texlive/tlnet/archive/bxjscls.source.r69637.tar.xz
2019/02/28 | 2376 | systems/texlive/tlnet/archive/bxnewfont.doc.r44173.tar.xz
2019/02/28 | 4760 | systems/texlive/tlnet/archive/bxnewfont.r44173.tar.xz
2022/08/08 | 254532 | systems/texlive/tlnet/archive/bxorigcapt.doc.r64072.tar.xz
@@ -302417,8 +302421,8 @@
2023/02/18 | 40136 | systems/texlive/tlnet/archive/kpathsea.x86_64-linux.r65877.tar.xz
2023/02/18 | 44616 | systems/texlive/tlnet/archive/kpathsea.x86_64-solaris.r65877.tar.xz
2023/01/20 | 1622220 | systems/texlive/tlnet/archive/kpfonts.doc.r65583.tar.xz
-2023/11/27 | 2035752 | systems/texlive/tlnet/archive/kpfonts-otf.doc.r68970.tar.xz
-2023/11/27 | 1115636 | systems/texlive/tlnet/archive/kpfonts-otf.r68970.tar.xz
+2024/01/31 | 2035528 | systems/texlive/tlnet/archive/kpfonts-otf.doc.r69636.tar.xz
+2024/01/31 | 1115540 | systems/texlive/tlnet/archive/kpfonts-otf.r69636.tar.xz
2023/01/20 | 2246256 | systems/texlive/tlnet/archive/kpfonts.r65583.tar.xz
2019/02/28 | 3968 | systems/texlive/tlnet/archive/ksfh_nat.r24825.tar.xz
2019/02/28 | 146928 | systems/texlive/tlnet/archive/ksp-thesis.doc.r39080.tar.xz
@@ -304075,8 +304079,8 @@
2022/05/08 | 6576 | systems/texlive/tlnet/archive/mgltex.doc.r63255.tar.xz
2022/05/08 | 6348 | systems/texlive/tlnet/archive/mgltex.r63255.tar.xz
2022/05/08 | 31244 | systems/texlive/tlnet/archive/mgltex.source.r63255.tar.xz
-2024/01/29 | 426852 | systems/texlive/tlnet/archive/mhchem.doc.r69624.tar.xz
-2024/01/29 | 186400 | systems/texlive/tlnet/archive/mhchem.r69624.tar.xz
+2024/01/31 | 427988 | systems/texlive/tlnet/archive/mhchem.doc.r69639.tar.xz
+2024/01/31 | 185132 | systems/texlive/tlnet/archive/mhchem.r69639.tar.xz
2022/11/10 | 119848 | systems/texlive/tlnet/archive/mhequ.doc.r64978.tar.xz
2022/11/10 | 4352 | systems/texlive/tlnet/archive/mhequ.r64978.tar.xz
2020/03/24 | 332156 | systems/texlive/tlnet/archive/miama.doc.r54512.tar.xz
@@ -307824,13 +307828,13 @@
2023/08/16 | 108860 | systems/texlive/tlnet/archive/tex4ht.amd64-freebsd.r67940.tar.xz
2023/08/16 | 87320 | systems/texlive/tlnet/archive/tex4ht.amd64-netbsd.r67940.tar.xz
2023/08/16 | 69948 | systems/texlive/tlnet/archive/tex4ht.armhf-linux.r67940.tar.xz
-2024/01/30 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r69631.tar.xz
+2024/01/31 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r69640.tar.xz
2023/08/16 | 93764 | systems/texlive/tlnet/archive/tex4ht.i386-freebsd.r67940.tar.xz
2023/08/16 | 91236 | systems/texlive/tlnet/archive/tex4ht.i386-linux.r67940.tar.xz
2023/08/16 | 76184 | systems/texlive/tlnet/archive/tex4ht.i386-netbsd.r67940.tar.xz
2023/08/16 | 83936 | systems/texlive/tlnet/archive/tex4ht.i386-solaris.r67940.tar.xz
-2024/01/30 | 1119012 | systems/texlive/tlnet/archive/tex4ht.r69631.tar.xz
-2024/01/30 | 1486440 | systems/texlive/tlnet/archive/tex4ht.source.r69631.tar.xz
+2024/01/31 | 1119032 | systems/texlive/tlnet/archive/tex4ht.r69640.tar.xz
+2024/01/31 | 1481220 | systems/texlive/tlnet/archive/tex4ht.source.r69640.tar.xz
2023/08/16 | 184636 | systems/texlive/tlnet/archive/tex4ht.universal-darwin.r67940.tar.xz
2023/10/23 | 62056 | systems/texlive/tlnet/archive/tex4ht.windows.r68621.tar.xz
2023/08/16 | 57992 | systems/texlive/tlnet/archive/tex4ht.x86_64-cygwin.r67940.tar.xz
@@ -308108,7 +308112,7 @@
2022/09/13 | 600 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r64356.tar.xz
-2024/01/30 | 431908 | systems/texlive/tlnet/archive/texlive-scripts.doc.r69626.tar.xz
+2024/01/31 | 431908 | systems/texlive/tlnet/archive/texlive-scripts.doc.r69633.tar.xz
2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.aarch64-linux.r53577.tar.xz
2020/01/27 | 924 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-freebsd.r53577.tar.xz
2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-netbsd.r53577.tar.xz
@@ -308130,7 +308134,7 @@
2022/09/13 | 592 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r64356.tar.xz
-2024/01/30 | 114048 | systems/texlive/tlnet/archive/texlive-scripts.r69626.tar.xz
+2024/01/31 | 114048 | systems/texlive/tlnet/archive/texlive-scripts.r69633.tar.xz
2022/09/13 | 580 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r64356.tar.xz
2023/05/14 | 60312 | systems/texlive/tlnet/archive/texlive-scripts.windows.r67095.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r64356.tar.xz
@@ -310034,16 +310038,16 @@
2020/07/18 | 47816 | systems/texlive/tlnet/archive/zztex.doc.r55862.tar.xz
2020/07/18 | 101724 | systems/texlive/tlnet/archive/zztex.r55862.tar.xz
2024/01/27 | 125030 | systems/texlive/tlnet/install-tl
-2024/01/30 | 5746854 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2024/01/30 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2024/01/30 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2024/01/31 | 5748634 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2024/01/31 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2024/01/31 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2023/05/13 | 5083 | systems/texlive/tlnet/install-tl-windows.bat
-2024/01/30 | 21029619 | systems/texlive/tlnet/install-tl-windows.exe
-2024/01/30 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2024/01/30 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2024/01/30 | 26034288 | systems/texlive/tlnet/install-tl.zip
-2024/01/30 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2024/01/30 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2024/01/31 | 21029477 | systems/texlive/tlnet/install-tl-windows.exe
+2024/01/31 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2024/01/31 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2024/01/31 | 26034287 | systems/texlive/tlnet/install-tl.zip
+2024/01/31 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2024/01/31 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2023/03/19 | 1229 | systems/texlive/tlnet/README.md
2023/03/19 | 0 | systems/texlive/tlnet/TEXLIVE_2023
2024/01/02 | 9011 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
@@ -310053,7 +310057,7 @@
2024/01/02 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2024/01/16 | 50726 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2024/01/29 | 7322 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2024/01/30 | 7354 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2023/12/13 | 226639 | systems/texlive/tlnet/tlpkg/installer/curl/curl-ca-bundle.crt
2020/04/15 | 2606592 | systems/texlive/tlnet/tlpkg/installer/curl/curl.exe
2017/04/16 | 2629 | systems/texlive/tlnet/tlpkg/installer/installer-options.txt
@@ -310095,12 +310099,12 @@
2023/02/21 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2024/01/07 | 5844 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2023/04/08 | 28167 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2024/01/30 | 18819376 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2024/01/30 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2024/01/31 | 18819457 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2024/01/31 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2023/10/16 | 87924 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2024/01/30 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2024/01/30 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2024/01/30 | 2525028 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2024/01/31 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2024/01/31 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2024/01/31 | 2523732 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2023/02/20 | 58928 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2023/06/11 | 42749 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2023/02/21 | 16138 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -321229,7 +321233,7 @@
2014/07/05 | 611 | systems/win32/yandy/README
2014/07/05 | 1004628 | systems/win32/yandy/yandy-src.tar.xz
2014/07/05 | 1012416 | systems/win32/yandy.zip
-2024/01/31 | 186 | timestamp
+2024/02/01 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2021/11/11 | 917 | usergrps/dante/dtk/doc/beispiel.bib
diff --git a/FILES.byname.gz b/FILES.byname.gz
index a6f8bff022..0c73121cd3 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 1625890fac..b7c44ca0a6 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,18 +1,136 @@
+2024/01/31 | 9632 | macros/latex/contrib/litetable/doc/litetable-doc-cn.tex
+2024/01/31 | 959 | macros/luatex/latex/novel/lualatex/novel-JC200103.clo
+2024/01/31 | 947 | macros/luatex/latex/novel/lualatex/novel-FOGRA39.clo
+2024/01/31 | 946 | macros/luatex/latex/novel/lualatex/novel-CGATSTR001.clo
+2024/01/31 | 93848 | systems/texlive/tlnet/archive/bxjscls.source.r69637.tar.xz
+2024/01/31 | 91213 | macros/latex/contrib/leftindex.zip
+2024/01/31 | 89885 | macros/latex/contrib/leftindex/leftindex.pdf
+2024/01/31 | 88420 | macros/latex/contrib/easybook/easybook.tex
+2024/01/31 | 8821 | macros/luatex/latex/novel/lualatex/novel-PostLayout.sty
+2024/01/31 | 881516 | systems/texlive/tlnet/archive/achemso.doc.r69638.tar.xz
+2024/01/31 | 8446 | macros/latex/contrib/schooldocs/schooldocs-examples.tex
+2024/01/31 | 786905 | macros/latex/contrib/refstyle.zip
+2024/01/31 | 7562 | macros/luatex/latex/novel/lualatex/novel-DropCap.sty
+2024/01/31 | 75050 | macros/latex/contrib/easybook/easybook.dtx
+2024/01/31 | 6947 | macros/luatex/latex/novel/lualatex/novel-FileData.sty
+2024/01/31 | 66217 | macros/latex/contrib/refstyle/refstyle.dtx
+2024/01/31 | 641513 | macros/latex/contrib/easybook.zip
+2024/01/31 | 6336 | macros/luatex/latex/novel/lualatex/novel-microtype.cfg
+2024/01/31 | 598552 | macros/latex/contrib/easybook/easybook.pdf
+2024/01/31 | 5761384 | systems/texlive/tlnet/archive/bib2gls.doc.r69635.tar.xz
+2024/01/31 | 5748634 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2024/01/31 | 5416 | macros/latex/contrib/leftindex/leftindex.tex
+2024/01/31 | 539823 | support/latexmk.zip
+2024/01/31 | 52572 | macros/latex/contrib/hvextern/doc/hvextern.tex
+2024/01/31 | 516745 | support/latexmk/latexmk.pl
+2024/01/31 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2024/01/31 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2024/01/31 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2024/01/31 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2024/01/31 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2024/01/31 | 485427 | macros/latex/contrib/refstyle/refstyle.pdf
+2024/01/31 | 46294 | macros/latex/contrib/litetable/doc/litetable-demo.pdf
+2024/01/31 | 45891 | macros/latex/contrib/hvextern/latex/hvextern.sty
+2024/01/31 | 4450424 | macros/luatex/latex/novel.zip
+2024/01/31 | 4368 | macros/latex/contrib/leftindex/leftindex.sty
+2024/01/31 | 431908 | systems/texlive/tlnet/archive/texlive-scripts.doc.r69633.tar.xz
+2024/01/31 | 427988 | systems/texlive/tlnet/archive/mhchem.doc.r69639.tar.xz
+2024/01/31 | 42017 | macros/latex/contrib/schooldocs/schooldocs.dtx
+2024/01/31 | 416395 | macros/latex/contrib/schooldocs.zip
+2024/01/31 | 4116357 | biblio/ctan-bibdata.zip
+2024/01/31 | 39974 | macros/latex/contrib/refstyle/refconfig.dtx
+2024/01/31 | 3819 | macros/luatex/latex/novel/lualatex/novel-Sandbox.sty
+2024/01/31 | 3708800 | biblio/ctan-bibdata/ctan.pdf
+2024/01/31 | 368321 | macros/latex/contrib/litetable.zip
+2024/01/31 | 3574 | macros/latex/contrib/refstyle/refstyle.ins
+2024/01/31 | 35104 | systems/texlive/tlnet/archive/bxjscls.r69637.tar.xz
+2024/01/31 | 3358 | macros/luatex/latex/novel/lualatex/novel-xmppacket.sty
+2024/01/31 | 327224 | macros/luatex/latex/novel/doc/novel-documentation.html
+2024/01/31 | 32644 | macros/luatex/latex/novel/doc/novel.pdf
+2024/01/31 | 31552 | systems/texlive/tlnet/archive/achemso.source.r69638.tar.xz
+2024/01/31 | 3133 | macros/latex/contrib/litetable/doc/litetable-demo.tex
+2024/01/31 | 303725 | macros/latex/contrib/refstyle/refconfig.pdf
+2024/01/31 | 2843275 | biblio/ctan-bibdata/ctan.bib
+2024/01/31 | 2830 | macros/luatex/latex/novel/doc/novel.tex
+2024/01/31 | 270592 | macros/latex/contrib/schooldocs/schooldocs-examples.pdf
+2024/01/31 | 26034287 | systems/texlive/tlnet/install-tl.zip
+2024/01/31 | 2523 | support/latexmk/README
+2024/01/31 | 2523732 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2024/01/31 | 2509557 | support/splint.zip
+2024/01/31 | 24694 | macros/luatex/latex/novel/lualatex/novel.cls
+2024/01/31 | 242840 | support/latexmk/latexmk.txt
+2024/01/31 | 230287 | support/latexmk/latexmk.pdf
+2024/01/31 | 21698 | macros/luatex/latex/novel/lualatex/novel-TextMacros.sty
+2024/01/31 | 21029477 | systems/texlive/tlnet/install-tl-windows.exe
+2024/01/31 | 2035528 | systems/texlive/tlnet/archive/kpfonts-otf.doc.r69636.tar.xz
+2024/01/31 | 2031324 | systems/texlive/tlnet/archive/bib2gls.r69635.tar.xz
+2024/01/31 | 1997 | macros/latex/contrib/schooldocs/schooldocs.ins
+2024/01/31 | 19795 | macros/luatex/latex/novel/lualatex/novel-Images.sty
+2024/01/31 | 1966 | macros/latex/contrib/refstyle/README
+2024/01/31 | 195651 | support/latexmk/latexmk.1
+2024/01/31 | 19332 | systems/texlive/tlnet/archive/achemso.r69638.tar.xz
+2024/01/31 | 193124 | macros/latex/contrib/litetable/doc/litetable-doc-cn.pdf
+2024/01/31 | 18819457 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2024/01/31 | 1874256 | systems/texlive/tlnet/archive/bib2gls.source.r69635.tar.xz
+2024/01/31 | 185132 | systems/texlive/tlnet/archive/mhchem.r69639.tar.xz
+2024/01/31 | 18082 | macros/luatex/latex/novel/lualatex/novel-HeadFootStyles.sty
+2024/01/31 | 17975 | support/latexmk/INSTALL
+2024/01/31 | 17761 | macros/latex/contrib/litetable/doc/favicon.png
+2024/01/31 | 1753682 | fonts/heuristica.zip
+2024/01/31 | 17236 | macros/luatex/latex/novel/lualatex/novel-LayoutSettings.sty
+2024/01/31 | 17156 | macros/luatex/latex/novel/lualatex/novel-Fonts.sty
+2024/01/31 | 16911 | macros/luatex/latex/novel/lualatex/novel-pdfx.sty
+2024/01/31 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2024/01/31 | 15781 | macros/luatex/latex/novel/lualatex/novel-Footnotes.sty
+2024/01/31 | 157543 | macros/latex/contrib/schooldocs/schooldocs.pdf
+2024/01/31 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2024/01/31 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2024/01/31 | 1481699 | macros/latex/contrib/hvextern/doc/hvextern.pdf
+2024/01/31 | 1481220 | systems/texlive/tlnet/archive/tex4ht.source.r69640.tar.xz
+2024/01/31 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2024/01/31 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2024/01/31 | 14281 | macros/luatex/latex/novel/lualatex/novel-ChapterScene.sty
+2024/01/31 | 1391882 | macros/latex/contrib/hvextern.zip
+2024/01/31 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r69640.tar.xz
+2024/01/31 | 13085 | macros/luatex/latex/novel/lualatex/novel-CalculateLayout.sty
+2024/01/31 | 1297828 | systems/texlive/tlnet/archive/bxjscls.doc.r69637.tar.xz
+2024/01/31 | 114048 | systems/texlive/tlnet/archive/texlive-scripts.r69633.tar.xz
+2024/01/31 | 1119032 | systems/texlive/tlnet/archive/tex4ht.r69640.tar.xz
+2024/01/31 | 1115540 | systems/texlive/tlnet/archive/kpfonts-otf.r69636.tar.xz
+2024/01/31 | 1114 | macros/latex/contrib/leftindex/README.md
+2024/01/31 | 10600 | macros/latex/contrib/litetable/doc/litetable-doc-en.tex
+2024/01/31 | 103291 | macros/latex/contrib/litetable/doc/litetable-doc-en.pdf
+2024/01/31 | 10187 | macros/latex/contrib/litetable/tex/litetable.cls
+2024/01/30 | 9934 | support/splint/scripts/brack.pl
2024/01/30 | 986 | support/bib2gls/examples/sample-hierarchical.tex
2024/01/30 | 97818 | support/bib2gls/examples/sample-constants.pdf
2024/01/30 | 94820 | fonts/kpfonts-otf/fonts/KpSans-BoldItalic.otf
2024/01/30 | 94764 | fonts/kpfonts-otf/fonts/KpSans-Italic.otf
+2024/01/30 | 9415 | support/splint/examples/ld/ldnump.w
2024/01/30 | 92 | fonts/kpfonts-otf/tex/KpMath-Light.fontspec
2024/01/30 | 91 | fonts/kpfonts-otf/tex/KpMath-Sans.fontspec
2024/01/30 | 918111 | macros/latex/contrib/achemso.zip
2024/01/30 | 913 | support/bib2gls/examples/sample-textsymbols2.tex
2024/01/30 | 90 | fonts/kpfonts-otf/tex/KpMath-Regular.fontspec
-2024/01/30 | 88362 | macros/latex/contrib/easybook/easybook.tex
+2024/01/30 | 899 | support/splint/examples/symbols/symtricks.sty
+2024/01/30 | 890 | support/splint/tex/fretokenset.sty
+2024/01/30 | 8873 | support/splint/examples/xxpression/xymmap.sty
2024/01/30 | 87012 | fonts/kpfonts-otf/fonts/KpSans-Bold.otf
+2024/01/30 | 8686 | support/splint/tex/xarithm.sty
+2024/01/30 | 8616 | support/splint/scripts/bindx.pl
2024/01/30 | 85752 | fonts/kpfonts-otf/fonts/KpSans-Regular.otf
2024/01/30 | 84379 | macros/unicodetex/latex/xgreek.zip
+2024/01/30 | 835 | support/splint/examples/expression/etoks.sty
+2024/01/30 | 8319 | support/splint/examples/ld/ldint.sty
+2024/01/30 | 828 | support/splint/tex/fonts/idssbx9.vf
+2024/01/30 | 828 | support/splint/tex/fonts/idssbx8.vf
+2024/01/30 | 828 | support/splint/tex/fonts/idssbx7.vf
+2024/01/30 | 828 | support/splint/tex/fonts/idssbx6.vf
+2024/01/30 | 791 | support/splint/examples/xxpression/xtoks.sty
2024/01/30 | 780 | support/bib2gls/examples/sample-msymbols.tex
-2024/01/30 | 75435 | macros/latex/contrib/easybook/easybook.dtx
+2024/01/30 | 7718 | support/splint/examples/expression/expression.w
+2024/01/30 | 745685 | support/splint/doc/ldman.pdf
+2024/01/30 | 7354 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2024/01/30 | 73095 | support/bib2gls/examples/sample-textsymbols.pdf
2024/01/30 | 73014 | macros/unicodetex/latex/xgreek/xgreek.pdf
2024/01/30 | 720287 | support/bib2gls/bib2gls-begin.pdf
@@ -20,18 +138,20 @@
2024/01/30 | 7083 | macros/latex/contrib/achemso/achemso.ins
2024/01/30 | 7067 | language/japanese/BX/bxjscls/README.md
2024/01/30 | 70301 | support/bib2gls/examples/sample-textsymbols2.pdf
+2024/01/30 | 6 | support/splint/VERSION
+2024/01/30 | 691 | support/splint/examples/symbols/slimbo.sty
2024/01/30 | 6793 | support/bib2gls/README.md
-2024/01/30 | 642129 | macros/latex/contrib/easybook.zip
2024/01/30 | 640 | support/bib2gls/examples/terms.bib
2024/01/30 | 630 | support/bib2gls/bib2gls.sh
+2024/01/30 | 627772 | support/TeX4ht/source/tex4ht-html4.tex
2024/01/30 | 623092 | systems/texlive/tlnet/archive/easybook.doc.r69628.tar.xz
2024/01/30 | 61149 | support/bib2gls/examples/sample-markuplanguages.pdf
-2024/01/30 | 599182 | macros/latex/contrib/easybook/easybook.pdf
+2024/01/30 | 59121 | support/splint/cweb/bo.w
2024/01/30 | 59080 | support/bib2gls/examples/sample-units2.pdf
2024/01/30 | 578474 | support/bib2gls/src/bib2gls.bib
2024/01/30 | 576 | support/bib2gls/examples/binaryoperators.bib
-2024/01/30 | 5746854 | systems/texlive/tlnet/install-tl-unx.tar.gz
2024/01/30 | 57344 | support/bib2gls/examples/sample-units1.pdf
+2024/01/30 | 5712 | support/splint/cweb/Makefile
2024/01/30 | 557 | support/bib2gls/examples/unaryoperators.bib
2024/01/30 | 5520 | support/bib2gls/examples/sample-multi1.tex
2024/01/30 | 54928 | systems/texlive/tlnet/archive/proflycee.r69630.tar.xz
@@ -39,6 +159,7 @@
2024/01/30 | 54280 | support/bib2gls/examples/sample-bacteria.pdf
2024/01/30 | 54064 | support/bib2gls/examples/sample-chemical.pdf
2024/01/30 | 5353372 | support/bib2gls/bib2gls.pdf
+2024/01/30 | 5258 | fonts/heuristica/README
2024/01/30 | 525861 | macros/latex/contrib/achemso/achemso.pdf
2024/01/30 | 52565 | support/bib2gls/examples/sample-nested.pdf
2024/01/30 | 52553 | support/bib2gls/examples/sample-hierarchical.pdf
@@ -46,120 +167,184 @@
2024/01/30 | 52450 | support/bib2gls/bib2gls-en.xml
2024/01/30 | 5156 | systems/texlive/tlnet/archive/pst-solarsystem.r69627.tar.xz
2024/01/30 | 51552 | support/bib2gls/examples/sample-authors.pdf
+2024/01/30 | 51296 | support/splint/tex/yymisc.sty
+2024/01/30 | 5071 | support/splint/tex/yystype.sty
2024/01/30 | 50319 | support/bib2gls/examples/sample-people.pdf
2024/01/30 | 49744 | support/bib2gls/examples/sample-citations.pdf
2024/01/30 | 49568 | fonts/kpfonts-otf/fonts/KpMono-Italic.otf
-2024/01/30 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2024/01/30 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2024/01/30 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2024/01/30 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2024/01/30 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2024/01/30 | 4875 | support/splint/examples/ld/Makefile
+2024/01/30 | 48339 | support/splint/tex/limbo.sty
2024/01/30 | 48260 | fonts/kpfonts-otf/fonts/KpMono-BoldItalic.otf
2024/01/30 | 480 | fonts/kpfonts-otf/tex/KpLight.fontspec
+2024/01/30 | 4796 | support/splint/examples/ld/ltokenset.sty
+2024/01/30 | 4730 | support/splint/cweb/references.w
+2024/01/30 | 4700 | support/splint/examples/types/tree.sty
2024/01/30 | 469 | fonts/kpfonts-otf/tex/KpRoman.fontspec
2024/01/30 | 465390 | language/japanese/BX/bxjscls/bxjscls.dtx
2024/01/30 | 464 | macros/latex/contrib/achemso/LICENSE.md
+2024/01/30 | 46395 | support/splint/examples/ld/ldgram.w
+2024/01/30 | 4593 | support/splint/INSTALL
2024/01/30 | 454548 | systems/texlive/tlnet/archive/pst-solarsystem.doc.r69627.tar.xz
2024/01/30 | 451004 | fonts/kpfonts-otf/fonts/KpMath-Light.otf
2024/01/30 | 44643 | support/bib2gls/examples/sample-units3.pdf
2024/01/30 | 4446 | support/bib2gls/examples/people.bib
+2024/01/30 | 4426 | support/splint/tex/yydebug.sty
2024/01/30 | 4384920 | fonts/kpfonts-otf.zip
-2024/01/30 | 431908 | systems/texlive/tlnet/archive/texlive-scripts.doc.r69626.tar.xz
+2024/01/30 | 43527 | support/latexmk/CHANGES
2024/01/30 | 4298 | support/bib2gls/src/bib2gls-cite.bib
2024/01/30 | 425596 | fonts/kpfonts-otf/fonts/KpMath-Regular.otf
+2024/01/30 | 42504 | support/splint/tex/yycommon.sty
2024/01/30 | 42248 | fonts/kpfonts-otf/fonts/KpMono-Regular.otf
2024/01/30 | 419576 | support/bib2gls/bib2gls.jar
2024/01/30 | 4117 | macros/unicodetex/latex/xgreek/README
-2024/01/30 | 4116249 | biblio/ctan-bibdata.zip
2024/01/30 | 41096 | fonts/kpfonts-otf/fonts/KpMono-Bold.otf
2024/01/30 | 40825 | support/bib2gls/convertgls2bib.jar
2024/01/30 | 4053 | support/bib2gls/examples/usergroups.bib
2024/01/30 | 404 | support/bib2gls/convertgls2bib.sh
2024/01/30 | 4045 | support/bib2gls/src/convertgls2bib.pod
2024/01/30 | 402 | support/bib2gls/bib2gls-extra-nl.xml
+2024/01/30 | 4011 | support/splint/makefile.inc
2024/01/30 | 388 | support/bib2gls/bib2gls-extra-en.xml
2024/01/30 | 383068 | macros/latex/contrib/achemso/achemso-demo.pdf
-2024/01/30 | 3708800 | biblio/ctan-bibdata/ctan.pdf
+2024/01/30 | 38032 | support/splint/cweb/so.w
+2024/01/30 | 3774 | fonts/heuristica/tex/heuristica.sty
+2024/01/30 | 3725 | support/splint/README
+2024/01/30 | 3706 | support/splint/tex/yy.sty
2024/01/30 | 37064 | macros/unicodetex/latex/xgreek/xgreek.dtx
+2024/01/30 | 36911 | support/splint/examples/ld/ldgramo.w
2024/01/30 | 3672 | support/bib2gls/examples/mathsobjects.bib
+2024/01/30 | 3611 | support/splint/tex/ftokenset.sty
2024/01/30 | 35903 | fonts/kpfonts-otf/doc/Kpfonts-OTF-Doc-French.ltx
+2024/01/30 | 3588 | support/splint/cweb/mkeparser.w
+2024/01/30 | 35342 | support/splint/tex/dcols.sty
+2024/01/30 | 35147 | support/splint/COPYING
2024/01/30 | 3496 | support/bib2gls/examples/books.bib
2024/01/30 | 338 | support/bib2gls/examples/interpret-preamble2.bib
2024/01/30 | 33476 | fonts/kpfonts-otf/doc/Kpfonts-OTF-Doc-English.ltx
2024/01/30 | 33240 | support/bib2gls/src/gls2bib-src.zip
+2024/01/30 | 33108 | support/splint/cweb/lo.w
2024/01/30 | 330879 | support/bib2gls/examples/sample-multi2.pdf
2024/01/30 | 328 | support/bib2gls/examples/no-interpret-preamble.bib
2024/01/30 | 328 | support/bib2gls/examples/interpret-preamble.bib
+2024/01/30 | 32731 | support/splint/tex/yytexlex.sty
2024/01/30 | 3254 | support/bib2gls/examples/sample-usergroups.tex
2024/01/30 | 322888 | support/bib2gls/src/bib2gls-src.zip
2024/01/30 | 3211 | support/bib2gls/examples/mathgreek.bib
+2024/01/30 | 32049 | support/splint/cweb/fo.w
2024/01/30 | 3129 | support/bib2gls/examples/sample-maths.tex
+2024/01/30 | 3095 | support/splint/cweb/checklists.w
2024/01/30 | 2994 | support/bib2gls/examples/bigmathsymbols.bib
+2024/01/30 | 29508 | support/splint/cweb/common.w
2024/01/30 | 293084 | fonts/kpfonts-otf/fonts/KpMath-Sans.otf
-2024/01/30 | 2843081 | biblio/ctan-bibdata/ctan.bib
+2024/01/30 | 29226 | support/splint/tex/flex.sty
+2024/01/30 | 2916 | support/splint/tex/grabstates.sty
+2024/01/30 | 2878 | support/splint/cweb/mkscanner.w
+2024/01/30 | 28108 | support/splint/examples/ld/ldlexo.w
+2024/01/30 | 27626 | support/splint/examples/ld/ldlex.w
+2024/01/30 | 2740 | support/splint/examples/xxpression/Makefile
+2024/01/30 | 2739 | support/splint/Makefile
+2024/01/30 | 2701 | support/splint/tex/yybootstrap.sty
2024/01/30 | 266 | support/bib2gls/examples/topics.bib
-2024/01/30 | 26034288 | systems/texlive/tlnet/install-tl.zip
+2024/01/30 | 265118 | support/splint/doc/tb109shibakov.pdf
+2024/01/30 | 2630 | support/splint/tex/yynested.sty
+2024/01/30 | 2609 | support/splint/scripts/cslist.pl
2024/01/30 | 2585 | support/bib2gls/examples/chemicalformula.bib
2024/01/30 | 256604 | fonts/kpfonts-otf/fonts/KpMath-Semibold.otf
2024/01/30 | 255473 | support/bib2gls/examples/sample-multi1.pdf
-2024/01/30 | 2525028 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2024/01/30 | 25490 | support/splint/cweb/philosophy.w
+2024/01/30 | 2513 | support/splint/TODO
+2024/01/30 | 24773 | support/splint/tex/yyinit.sty
+2024/01/30 | 245025 | support/TeX4ht/source/ChangeLog
+2024/01/30 | 24430 | support/splint/examples/ld/ldman.w
2024/01/30 | 24421 | support/bib2gls/examples/sample-usergroups.pdf
+2024/01/30 | 242 | support/splint/makefile.loc
2024/01/30 | 2419 | support/bib2gls/examples/minerals.bib
+2024/01/30 | 2402 | macros/latex/contrib/hvextern/Changes
2024/01/30 | 2392 | support/bib2gls/examples/constants.bib
+2024/01/30 | 23823 | support/splint/examples/ld/ldunion.sty
2024/01/30 | 2367 | support/bib2gls/examples/sample-people.tex
2024/01/30 | 236672 | support/bib2gls/src/bib2gls-begin.tex
+2024/01/30 | 23404 | support/splint/cweb/bs.w
2024/01/30 | 232784 | fonts/kpfonts-otf/fonts/KpMath-Bold.otf
+2024/01/30 | 2323 | support/splint/scripts/unline.pl
2024/01/30 | 231 | fonts/kpfonts-otf/tex/KpSans.fontspec
+2024/01/30 | 2301 | support/splint/examples/symbols/symfm.sty
2024/01/30 | 2301 | support/bib2gls/examples/miscsymbols.bib
2024/01/30 | 22 | support/bib2gls/DEPENDS.txt
-2024/01/30 | 21029619 | systems/texlive/tlnet/install-tl-windows.exe
+2024/01/30 | 2295 | support/splint/scripts/misccw.pl
+2024/01/30 | 22052 | support/splint/tex/fonts/idssbx8.vpl
+2024/01/30 | 22044 | support/splint/tex/fonts/idssbx9.vpl
+2024/01/30 | 21931 | support/splint/tex/fonts/idssbx6.vpl
2024/01/30 | 210056 | systems/texlive/tlnet/archive/llncs.doc.r69629.tar.xz
+2024/01/30 | 2070 | support/splint/examples/ld/ldexample.hw
+2024/01/30 | 20564 | support/splint/tex/gindex.sty
2024/01/30 | 20536 | support/bib2gls/bib2gls.1
2024/01/30 | 20246 | support/bib2gls/CHANGES
2024/01/30 | 20068 | fonts/kpfonts-otf/tex/kpfonts-otf.sty
+2024/01/30 | 19878 | support/splint/examples/symbols/symbols.w
+2024/01/30 | 1981 | support/splint/examples/expression/Makefile
2024/01/30 | 19671 | support/bib2gls/src/bib2gls-terms.bib
+2024/01/30 | 19605 | support/splint/cweb/np.w
2024/01/30 | 19530 | macros/latex/contrib/achemso/CHANGELOG.md
2024/01/30 | 195060 | fonts/kpfonts-otf/fonts/KpMath-SansBold.otf
2024/01/30 | 1941 | support/bib2gls/examples/sample-citations.tex
-2024/01/30 | 18819376 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
2024/01/30 | 185 | fonts/kpfonts-otf/tex/KpMono.fontspec
+2024/01/30 | 1856 | support/splint/other/texmf/macros/protcode.tex
2024/01/30 | 1839970 | fonts/kpfonts-otf/doc/unimath-kpfonts.pdf
+2024/01/30 | 1829 | support/splint/examples/symbols/Makefile
2024/01/30 | 1808456 | systems/texlive/tlnet/archive/proflycee.doc.r69630.tar.xz
2024/01/30 | 180229 | fonts/kpfonts-otf/doc/Kpfonts-OTF-Doc-French.pdf
+2024/01/30 | 1799 | support/splint/examples/types/test.sty
2024/01/30 | 1780212 | support/bib2gls/texparserlib.jar
2024/01/30 | 17747 | language/japanese/BX/bxjscls/README-ja.md
2024/01/30 | 1772 | support/bib2gls/examples/markuplanguages.bib
2024/01/30 | 176787 | fonts/kpfonts-otf/doc/Kpfonts-OTF-Doc-English.pdf
2024/01/30 | 1740 | support/bib2gls/examples/sample-units3.tex
2024/01/30 | 1734 | support/bib2gls/examples/sample-media.tex
+2024/01/30 | 1719 | support/splint/tex/btokenset.sty
+2024/01/30 | 1717 | support/splint/examples/ld/ldtexlex.sty
+2024/01/30 | 17108 | support/splint/tex/fonts/idssbx7.vpl
+2024/01/30 | 17059 | support/splint/tex/fonts/idssbx12.vpl
+2024/01/30 | 17027 | support/splint/tex/fonts/idssbx10.vpl
+2024/01/30 | 16995 | support/splint/tex/fonts/idssbx5.vpl
+2024/01/30 | 1689 | support/splint/examples/expression/expression.sty
2024/01/30 | 16806 | fonts/kpfonts-otf/doc/unimath-kpfonts.ltx
-2024/01/30 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2024/01/30 | 16752 | systems/texlive/tlnet/archive/llncs.r69629.tar.xz
+2024/01/30 | 16681 | support/splint/tex/noweb.sty
2024/01/30 | 166586 | support/bib2gls/examples/sample-media.pdf
2024/01/30 | 16520 | systems/texlive/tlnet/archive/easybook.r69628.tar.xz
2024/01/30 | 16432 | systems/texlive/tlnet/archive/easybook.source.r69628.tar.xz
2024/01/30 | 16202 | macros/latex/contrib/achemso/achemso-demo.tex
+2024/01/30 | 161 | support/splint/examples/ld/ldfrontmatter.sty
2024/01/30 | 1607 | macros/unicodetex/latex/xgreek/xgreek.ins
2024/01/30 | 1603 | support/bib2gls/examples/animals.bib
+2024/01/30 | 158 | support/splint/tex/frontmatter.sty
2024/01/30 | 1580 | support/bib2gls/examples/derivedunits.bib
-2024/01/30 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2024/01/30 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2024/01/30 | 1574 | support/splint/tex/stokenset.sty
+2024/01/30 | 15652 | support/splint/examples/count/count.sty
+2024/01/30 | 15528 | support/splint/cweb/fk.w
+2024/01/30 | 154182 | support/TeX4ht/source/tex4ht-mathml.tex
+2024/01/30 | 1532 | support/splint/examples/xxpression/xxpression.sty
2024/01/30 | 1506 | support/bib2gls/examples/sample-authors.tex
2024/01/30 | 1496140 | support/bib2gls/src/texparser-src.zip
2024/01/30 | 149587 | macros/latex/contrib/achemso/achemso.dtx
-2024/01/30 | 1486440 | systems/texlive/tlnet/archive/tex4ht.source.r69631.tar.xz
2024/01/30 | 1461 | language/japanese/BX/bxjscls/LICENSE
-2024/01/30 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2024/01/30 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
2024/01/30 | 14415 | support/bib2gls/src/bib2gls.pod
+2024/01/30 | 14260 | support/splint/examples/ld/ldnp.w
2024/01/30 | 1391 | support/bib2gls/examples/sample-markuplanguages.tex
2024/01/30 | 1382 | support/bib2gls/examples/sample-bacteria.tex
2024/01/30 | 1378 | support/bib2gls/examples/sample-constants.tex
2024/01/30 | 1371 | support/bib2gls/examples/citations.bib
-2024/01/30 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r69631.tar.xz
2024/01/30 | 1344 | support/bib2gls/examples/sample-nested.tex
2024/01/30 | 1333 | macros/latex/contrib/achemso/README.md
+2024/01/30 | 13289 | support/splint/examples/xxpression/xxpression.w
+2024/01/30 | 13049 | support/splint/tex/yyfaststack.sty
+2024/01/30 | 1296 | support/splint/tex/fonts/idssbx9.tfm
+2024/01/30 | 1296 | support/splint/tex/fonts/idssbx7.tfm
2024/01/30 | 1291 | support/bib2gls/examples/sample-chemical.tex
+2024/01/30 | 1282 | support/splint/examples/ld/lstokenset.sty
+2024/01/30 | 1280 | support/splint/tex/fonts/idssbx8.tfm
+2024/01/30 | 1280 | support/splint/tex/fonts/idssbx6.tfm
2024/01/30 | 12775 | support/bib2gls/examples/sample-multi2.tex
2024/01/30 | 126664 | fonts/kpfonts-otf/fonts/KpRoman-BoldItalic.otf
2024/01/30 | 1265 | support/bib2gls/examples/mathsrelations.bib
@@ -169,21 +354,31 @@
2024/01/30 | 121252 | support/bib2gls/examples/sample-maths.pdf
2024/01/30 | 1207 | support/bib2gls/examples/sample-textsymbols.tex
2024/01/30 | 12018463 | support/bib2gls.zip
+2024/01/30 | 11969 | support/splint/tex/yyparse.sty
2024/01/30 | 117168 | fonts/kpfonts-otf/fonts/KpRoman-Italic.otf
+2024/01/30 | 1167 | support/splint/tex/trt1.sty
2024/01/30 | 116696 | fonts/kpfonts-otf/fonts/KpRoman-LightItalic.otf
2024/01/30 | 116608 | fonts/kpfonts-otf/fonts/KpRoman-Bold.otf
+2024/01/30 | 1157534 | support/splint/doc/splint.pdf
+2024/01/30 | 11508 | support/splint/examples/types/basic.sty
2024/01/30 | 1146727 | support/bib2gls/src/bib2gls.tex
2024/01/30 | 114436 | fonts/kpfonts-otf/fonts/KpRoman-Regular.otf
-2024/01/30 | 114048 | systems/texlive/tlnet/archive/texlive-scripts.r69626.tar.xz
2024/01/30 | 114024 | fonts/kpfonts-otf/fonts/KpRoman-Light.otf
+2024/01/30 | 11377 | support/splint/tex/yyinput.sty
2024/01/30 | 113636 | fonts/kpfonts-otf/fonts/KpRoman-Semibold.otf
-2024/01/30 | 1119012 | systems/texlive/tlnet/archive/tex4ht.r69631.tar.xz
+2024/01/30 | 1123 | support/splint/tex/yypretty.sty
+2024/01/30 | 11192 | support/splint/tex/hext.sty
2024/01/30 | 109247 | support/bib2gls/examples/sample-msymbols.pdf
2024/01/30 | 1091 | support/bib2gls/examples/vegetables.bib
+2024/01/30 | 109116 | support/splint/tex/yyunion.sty
+2024/01/30 | 10833 | support/splint/examples/symbols/symmap.sty
2024/01/30 | 1070 | support/bib2gls/examples/sample-units1.tex
2024/01/30 | 10627 | fonts/kpfonts-otf/README.md
+2024/01/30 | 1051 | support/splint/examples/symbols/symtoks.sty
+2024/01/30 | 1048 | support/splint/examples/types/Makefile
2024/01/30 | 1031 | support/bib2gls/examples/baseunits.bib
2024/01/30 | 1029932 | install/macros/latex/contrib/achemso.tds.zip
+2024/01/30 | 101601 | support/splint/cweb/splint.w
2024/01/29 | 992 | macros/latex/contrib/llncs/README.md
2024/01/29 | 97401 | macros/latex/contrib/mhchem/hpstatement.inc/hpstatement-bg.inc.sty
2024/01/29 | 9564 | systems/texlive/tlnet/archive/randexam.r69622.tar.xz
@@ -210,7 +405,6 @@
2024/01/29 | 79034 | macros/latex/contrib/mhchem/hpstatement.inc/hpstatement-nl.inc.sty
2024/01/29 | 79025 | macros/latex/contrib/mhchem/hpstatement.inc/hpstatement-sv.inc.sty
2024/01/29 | 736 | macros/latex/contrib/mhchem/README
-2024/01/29 | 7322 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2024/01/29 | 706861 | macros/latex/contrib/mhchem.zip
2024/01/29 | 67781 | macros/latex/contrib/mhchem/hpstatement.inc/hpstatement-ga.inc.sty
2024/01/29 | 546673 | graphics/pstricks/contrib/pst-solarsystem/doc/pst-solarsystem-doc.pdf
@@ -219,7 +413,6 @@
2024/01/29 | 504 | systems/texlive/tlnet/archive/comprehensive.r69619.tar.xz
2024/01/29 | 504991 | graphics/pstricks/contrib/pst-solarsystem.zip
2024/01/29 | 43402 | macros/latex/contrib/llncs/llncs.cls
-2024/01/29 | 426852 | systems/texlive/tlnet/archive/mhchem.doc.r69624.tar.xz
2024/01/29 | 410230 | macros/latex/contrib/mhchem/mhchem.pdf
2024/01/29 | 383 | graphics/pstricks/contrib/pst-solarsystem/README
2024/01/29 | 381 | graphics/pstricks/contrib/pst-solarsystem/Changes
@@ -227,15 +420,12 @@
2024/01/29 | 340016 | support/TeX4ht/source/tex4ht-ooffice.tex
2024/01/29 | 32786992 | systems/texlive/tlnet/archive/comprehensive.doc.r69619.tar.xz
2024/01/29 | 246371 | macros/latex/contrib/proflycee/doc/ProfLycee-docctan.zip
-2024/01/29 | 244724 | support/TeX4ht/source/ChangeLog
2024/01/29 | 232527 | macros/latex/contrib/llncs/llncsdoc.pdf
2024/01/29 | 231160 | macros/latex/contrib/llncs.zip
2024/01/29 | 218680 | systems/texlive/tlnet/archive/randexam.doc.r69622.tar.xz
2024/01/29 | 1885482 | macros/latex/contrib/proflycee.zip
-2024/01/29 | 186400 | systems/texlive/tlnet/archive/mhchem.r69624.tar.xz
2024/01/29 | 17763 | macros/latex/contrib/llncs/llncsdoc.tex
2024/01/29 | 15670 | macros/latex/contrib/mhchem/hpstatement.sty
-2024/01/29 | 154182 | support/TeX4ht/source/tex4ht-mathml.tex
2024/01/29 | 151648 | systems/texlive/tlnet/archive/texlive-msg-translations.r69618.tar.xz
2024/01/29 | 1421999 | language/japanese/BX/bxjscls.zip
2024/01/29 | 1348 | systems/texlive/tlnet/archive/hvqrurl.r69621.tar.xz
@@ -910,6 +1100,7 @@
2024/01/26 | 54940 | macros/latex/contrib/memoir/README
2024/01/26 | 5427 | macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty
2024/01/26 | 522 | macros/latex/contrib/metalogox/README.txt
+2024/01/26 | 517 | macros/luatex/latex/novel/README.md
2024/01/26 | 51438 | macros/latex/contrib/undar-digitacion/undar-digitacion-doc.tex
2024/01/26 | 5106 | macros/latex/contrib/tagpdf/tagpdf-space.dtx
2024/01/26 | 490609 | macros/latex/contrib/proof-at-the-end.zip
@@ -1054,7 +1245,6 @@
2024/01/26 | 1095221 | macros/latex/contrib/tagpdf/tagpdf.pdf
2024/01/26 | 1063 | macros/latex/contrib/tagpdf/ex-list.tex
2024/01/25 | 968305 | macros/latex/contrib/nicematrix/nicematrix-code.pdf
-2024/01/25 | 96119 | macros/luatex/generic/luamplib/luamplib.dtx
2024/01/25 | 9239 | macros/latex/contrib/siunitx/siunitx-symbol.dtx
2024/01/25 | 8866 | macros/latex/contrib/siunitx/siunitx-command.dtx
2024/01/25 | 87549 | fonts/newtxsf/tex/newtxsf.sty
@@ -1072,14 +1262,12 @@
2024/01/25 | 591142 | macros/latex/contrib/nicematrix/nicematrix-code.dtx
2024/01/25 | 5831 | macros/latex/contrib/siunitx/siunitx-locale.dtx
2024/01/25 | 5808 | systems/texlive/tlnet/archive/genealogy-profiles.r69580.tar.xz
-2024/01/25 | 5611 | macros/luatex/generic/luamplib/test-luamplib-latex.tex
2024/01/25 | 55728 | macros/latex/contrib/siunitx/siunitx-table.dtx
2024/01/25 | 4748 | macros/latex/contrib/siunitx/siunitx-abbreviations.cfg
2024/01/25 | 43807 | macros/latex/contrib/siunitx/siunitx-compound.dtx
2024/01/25 | 405 | macros/latex/contrib/non-decimal-units/README.md
2024/01/25 | 4024 | systems/texlive/tlnet/archive/moloch.r69579.tar.xz
2024/01/25 | 39328 | macros/latex/contrib/siunitx/siunitx-complex.dtx
-2024/01/25 | 3872 | macros/luatex/generic/luamplib/test-luamplib-plain.tex
2024/01/25 | 385538 | fonts/newtxsf.zip
2024/01/25 | 37836 | macros/latex/contrib/siunitx/siunitx-print.dtx
2024/01/25 | 3687 | macros/latex/contrib/siunitx/siunitx.ins
@@ -1094,7 +1282,6 @@
2024/01/25 | 2894 | fonts/newtxsf/README
2024/01/25 | 28744 | macros/latex/contrib/unicode-math-input/unicode-math-input.sty
2024/01/25 | 2796 | systems/texlive/tlnet/archive/hvlogos.r69581.tar.xz
-2024/01/25 | 2752 | macros/luatex/generic/luamplib/Makefile
2024/01/25 | 273398 | macros/latex/contrib/siunitx/siunitx-v2.sty
2024/01/25 | 269508 | systems/texlive/tlnet/archive/moloch.doc.r69579.tar.xz
2024/01/25 | 2636 | macros/latex/contrib/siunitx/siunitx-code.tex
@@ -1104,9 +1291,7 @@
2024/01/25 | 22232 | macros/latex/contrib/siunitx/siunitx.dtx
2024/01/25 | 21 | macros/latex/contrib/unicode-math-input/DEPENDS.txt
2024/01/25 | 21026 | macros/latex/contrib/unicode-math-input/unicode-math-input.tex
-2024/01/25 | 2058 | macros/luatex/generic/luamplib/README
2024/01/25 | 20367 | macros/latex/contrib/non-decimal-units/latex/non-decimal-units.sty
-2024/01/25 | 202307 | install/macros/luatex/generic/luamplib.tds.zip
2024/01/25 | 19889 | macros/latex/contrib/unicode-math-input/unicode-math-input-script.py
2024/01/25 | 1958 | info/dtxtut/cskeleton.ins
2024/01/25 | 1957 | info/dtxtut/skeleton.ins
@@ -1121,7 +1306,6 @@
2024/01/25 | 162527 | macros/latex/contrib/siunitx/siunitx-number.dtx
2024/01/25 | 1594455 | install/macros/latex/contrib/siunitx.tds.zip
2024/01/25 | 1547061 | macros/latex/contrib/siunitx.zip
-2024/01/25 | 153451 | macros/luatex/generic/luamplib/luamplib.pdf
2024/01/25 | 15311 | macros/latex/contrib/siunitx/siunitx-quantity.dtx
2024/01/25 | 141090 | macros/latex/contrib/unicode-math-input.zip
2024/01/25 | 138874 | macros/latex/contrib/undar-digitacion/undar-digitacion.sty
@@ -1132,186 +1316,3 @@
2024/01/25 | 107152 | macros/latex/contrib/unicode-math-input/unicode-math-input.pdf
2024/01/25 | 103567 | macros/latex/contrib/siunitx/siunitx-unit.dtx
2024/01/25 | 102640 | macros/latex/contrib/unicode-math-input/unicode-math-input-table.tex
-2024/01/25 | 10222 | macros/luatex/generic/luamplib/NEWS
-2024/01/24 | 97388 | systems/texlive/tlnet/archive/ekdosis.source.r69568.tar.xz
-2024/01/24 | 9439 | graphics/bclogo/metapost/bc-oeil.mp
-2024/01/24 | 933 | graphics/bclogo/metapost/bc-femme.mp
-2024/01/24 | 9246 | graphics/bclogo/doc/syracuse.pdf
-2024/01/24 | 9168 | graphics/bclogo/doc/syracuse-crop.pdf
-2024/01/24 | 89375 | macros/latex/contrib/hvlogos.zip
-2024/01/24 | 89170 | graphics/bclogo/tex/bc-plume.mps
-2024/01/24 | 887 | graphics/bclogo/metapost/bc-nucleaire.mp
-2024/01/24 | 880 | systems/texlive/tlnet/archive/dvisvgm.r69568.tar.xz
-2024/01/24 | 86714 | macros/latex/contrib/hvlogos/doc/hvlogos-doc.pdf
-2024/01/24 | 863 | graphics/bclogo/doc/brace.mps
-2024/01/24 | 8585 | graphics/bclogo/tex/bc-icosaedre.mps
-2024/01/24 | 8567 | graphics/bclogo/metapost/bc-icosaedre.mp
-2024/01/24 | 816684 | systems/texlive/tlnet/archive/ekdosis.doc.r69568.tar.xz
-2024/01/24 | 811 | graphics/bclogo/metapost/bc-homme.mp
-2024/01/24 | 8055 | graphics/bclogo/tex/bc-velo.mps
-2024/01/24 | 791428 | systems/texlive/tlnet/archive/ppt-slides.doc.r69568.tar.xz
-2024/01/24 | 7808 | graphics/bclogo/tex/bc-dodecaedre.mps
-2024/01/24 | 7659 | macros/latex/contrib/hvlogos/latex/hvlogos.sty
-2024/01/24 | 7511 | graphics/bclogo/tex/bc-ours.mps
-2024/01/24 | 713 | macros/latex/contrib/hvlogos/Changes
-2024/01/24 | 7118 | graphics/bclogo/metapost/bc-dodecaedre.mp
-2024/01/24 | 6688 | systems/texlive/tlnet/archive/ppt-slides.source.r69568.tar.xz
-2024/01/24 | 6668 | graphics/bclogo/tex/bc-oeil.mps
-2024/01/24 | 664770 | graphics/bclogo/doc/bclogo-doc.pdf
-2024/01/24 | 646 | graphics/bclogo/metapost/bc-peaceandlove.mp
-2024/01/24 | 6447 | graphics/bclogo/metapost/bc-rosevents.mp
-2024/01/24 | 6396 | graphics/bclogo/tex/bc-dbelgique.mps
-2024/01/24 | 6392 | graphics/bclogo/tex/bc-ditalie.mps
-2024/01/24 | 6392 | graphics/bclogo/tex/bc-dfrance.mps
-2024/01/24 | 627765 | support/TeX4ht/source/tex4ht-html4.tex
-2024/01/24 | 6267 | graphics/bclogo/metapost/bc-dfrance.mp
-2024/01/24 | 6246 | graphics/bclogo/metapost/bc-ditalie.mp
-2024/01/24 | 6240 | graphics/bclogo/metapost/bc-dbelgique.mp
-2024/01/24 | 6225 | graphics/bclogo/metapost/bc-fleur.mp
-2024/01/24 | 611 | graphics/bclogo/doc/syracuse.tex
-2024/01/24 | 6079 | graphics/bclogo/metapost/bc-trefle.mp
-2024/01/24 | 5923 | graphics/bclogo/tex/bc-recyclage.mps
-2024/01/24 | 5835 | graphics/bclogo/metapost/bc-poisson.mp
-2024/01/24 | 577320 | systems/texlive/tlnet/archive/frenchmath.doc.r69568.tar.xz
-2024/01/24 | 5648 | graphics/bclogo/metapost/bc-inter.mp
-2024/01/24 | 560 | systems/texlive/tlnet/archive/antique-spanish-units.r69568.tar.xz
-2024/01/24 | 5502 | graphics/bclogo/metapost/bc-book.mp
-2024/01/24 | 5460 | systems/texlive/tlnet/archive/lua-placeholders.r69568.tar.xz
-2024/01/24 | 5414 | graphics/bclogo/metapost/bc-calendrier.mp
-2024/01/24 | 5339 | graphics/bclogo/metapost/bc-bombe.mp
-2024/01/24 | 53066 | graphics/bclogo/metapost/losanges.mp
-2024/01/24 | 5207 | graphics/bclogo/tex/bc-rosevents.mps
-2024/01/24 | 5188 | graphics/bclogo/tex/bc-bombe.mps
-2024/01/24 | 5178 | graphics/bclogo/tex/bc-feutricolore.mps
-2024/01/24 | 495 | graphics/bclogo/LICENSE
-2024/01/24 | 48 | systems/texlive/tlcontrib/tlpkg/texlive.tlpdb.md5
-2024/01/24 | 488 | systems/texlive/tlcontrib/tlpkg/texlive.tlpdb.sha512.asc
-2024/01/24 | 4798 | graphics/bclogo/tex/bc-poisson.mps
-2024/01/24 | 4759 | graphics/bclogo/tex/bc-trefle.mps
-2024/01/24 | 4669 | graphics/bclogo/metapost/bc-info.mp
-2024/01/24 | 4539 | graphics/bclogo/tex/bc-book.mps
-2024/01/24 | 4474 | graphics/bclogo/tex/bc-fleur.mps
-2024/01/24 | 4383 | graphics/bclogo/tex/bc-inter.mps
-2024/01/24 | 436 | graphics/bclogo/README.md
-2024/01/24 | 4336 | graphics/bclogo/metapost/bc-attention.mp
-2024/01/24 | 418 | macros/latex/contrib/genealogy-profiles/README.md
-2024/01/24 | 4116 | systems/texlive/tlnet/archive/ppt-slides.r69568.tar.xz
-2024/01/24 | 4065 | graphics/bclogo/doc/bclogo.pdf
-2024/01/24 | 4058 | graphics/bclogo/tex/bc-feurouge.mps
-2024/01/24 | 4048 | graphics/bclogo/tex/bc-feujaune.mps
-2024/01/24 | 4032 | graphics/bclogo/tex/bc-feuvert.mps
-2024/01/24 | 3944 | systems/texlive/tlnet/archive/latino-sine-flexione.doc.r69568.tar.xz
-2024/01/24 | 3894 | graphics/bclogo/tex/bc-octaedre.mps
-2024/01/24 | 38933 | graphics/bclogo/doc/losanges.mps
-2024/01/24 | 3818 | graphics/bclogo/tex/bc-cube.mps
-2024/01/24 | 3748 | graphics/bclogo/metapost/bc-octaedre.mp
-2024/01/24 | 3715 | graphics/bclogo/metapost/bc-takecare.mp
-2024/01/24 | 3648 | graphics/bclogo/tex/bc-info.mps
-2024/01/24 | 3634 | graphics/bclogo/metapost/bc-stop.mp
-2024/01/24 | 3570 | graphics/bclogo/tex/bc-neige.mps
-2024/01/24 | 3500 | graphics/bclogo/metapost/bc-cle.mp
-2024/01/24 | 3482 | graphics/bclogo/metapost/bc-aux-301.mp
-2024/01/24 | 3392 | graphics/bclogo/metapost/bc-clesol.mp
-2024/01/24 | 3357 | graphics/bclogo/tex/bc-attention.mps
-2024/01/24 | 3351 | graphics/bclogo/metapost/bc-cube.mp
-2024/01/24 | 3305 | graphics/bclogo/tex/bc-nucleaire.mps
-2024/01/24 | 3238 | graphics/bclogo/tex/bc-aux-301.mps
-2024/01/24 | 32354 | graphics/bclogo/doc/bclogo-doc.tex
-2024/01/24 | 321196 | systems/texlive/tlcontrib/archive/fontsetup-nonfree.doc.r378.tar.xz
-2024/01/24 | 3082 | graphics/bclogo/tex/bc-takecare.mps
-2024/01/24 | 3006 | graphics/bclogo/metapost/bc-soleil.mp
-2024/01/24 | 3004 | graphics/bclogo/tex/bc-clesol.mps
-2024/01/24 | 2934 | graphics/bclogo/metapost/bc-smiley-mauvaisehumeur.mp
-2024/01/24 | 2902 | graphics/bclogo/metapost/bc-dz.mp
-2024/01/24 | 2882 | graphics/bclogo/metapost/bc-smiley-bonnehumeur.mp
-2024/01/24 | 2824 | systems/texlive/tlnet/archive/frenchmath.r69568.tar.xz
-2024/01/24 | 2813 | graphics/bclogo/tex/bc-soleil.mps
-2024/01/24 | 280330 | macros/latex/contrib/beamer-contrib/themes/moloch.zip
-2024/01/24 | 2802 | graphics/bclogo/metapost/bc-feutricolore.mp
-2024/01/24 | 2789 | graphics/bclogo/metapost/bc-yin.mp
-2024/01/24 | 2688 | graphics/bclogo/metapost/bc-eclaircie.mp
-2024/01/24 | 2612 | graphics/bclogo/metapost/bc-feujaune.mp
-2024/01/24 | 2611 | graphics/bclogo/metapost/bc-feuvert.mp
-2024/01/24 | 2611 | graphics/bclogo/metapost/bc-feurouge.mp
-2024/01/24 | 256428 | systems/texlive/tlnet/archive/lua-placeholders.doc.r69568.tar.xz
-2024/01/24 | 2555 | graphics/bclogo/tex/bc-eclaircie.mps
-2024/01/24 | 25116 | graphics/bclogo/tex/bclogo.sty
-2024/01/24 | 250355 | macros/latex/contrib/nicematrix/nicematrix-french.tex
-2024/01/24 | 2477 | graphics/bclogo/metapost/bc-tetraedre.mp
-2024/01/24 | 2464 | graphics/bclogo/tex/bc-smiley-mauvaisehumeur.mps
-2024/01/24 | 2457 | graphics/bclogo/tex/bc-smiley-bonnehumeur.mps
-2024/01/24 | 2448 | graphics/bclogo/tex/bc-dz.mps
-2024/01/24 | 2432 | graphics/bclogo/tex/bc-tetraedre.mps
-2024/01/24 | 2418 | graphics/bclogo/tex/bc-lampe.mps
-2024/01/24 | 2399 | graphics/bclogo/tex/bc-cle.mps
-2024/01/24 | 2376 | graphics/bclogo/metapost/bc-lampe.mp
-2024/01/24 | 23549 | graphics/bclogo/tex/bc-calendrier.mps
-2024/01/24 | 23472 | macros/latex/contrib/genealogy-profiles/latex/genealogy-profiles.sty
-2024/01/24 | 233937 | graphics/bclogo/tex/bc-valetcoeur.mps
-2024/01/24 | 2318 | graphics/bclogo/metapost/bc-note.mp
-2024/01/24 | 229836 | systems/texlive/tlnet/archive/antique-spanish-units.doc.r69568.tar.xz
-2024/01/24 | 2275 | graphics/bclogo/tex/bc-yin.mps
-2024/01/24 | 2194 | graphics/bclogo/metapost/bc-clefa.mp
-2024/01/24 | 21688 | systems/texlive/tlnet/archive/ekdosis.r69568.tar.xz
-2024/01/24 | 2159 | graphics/bclogo/metapost/bc-interdit.mp
-2024/01/24 | 2100 | graphics/bclogo/tex/bc-note.mps
-2024/01/24 | 2069 | graphics/bclogo/metapost/bc-neige.mp
-2024/01/24 | 1916 | graphics/bclogo/metapost/bc-loupe.mp
-2024/01/24 | 19072 | graphics/bclogo/tex/bc-stop.mps
-2024/01/24 | 1881 | graphics/bclogo/metapost/bc-horloge.mp
-2024/01/24 | 1875 | graphics/bclogo/metapost/bc-trombone.mp
-2024/01/24 | 18340 | macros/latex/contrib/genealogy-profiles/docs/genealogy-profiles.tex
-2024/01/24 | 1819 | graphics/bclogo/tex/bc-interdit.mps
-2024/01/24 | 180965 | graphics/bclogo/metapost/bc-valetcoeur.mp
-2024/01/24 | 1803 | graphics/bclogo/tex/bc-clefa.mps
-2024/01/24 | 1770 | graphics/bclogo/metapost/bc-pluie.mp
-2024/01/24 | 1737863 | systems/texlive/tlcontrib/tlpkg/texlive.tlpdb
-2024/01/24 | 1690 | graphics/bclogo/tex/bc-pluie.mps
-2024/01/24 | 1645 | graphics/bclogo/tex/bc-loupe.mps
-2024/01/24 | 1618 | graphics/bclogo/metapost/spir.mp
-2024/01/24 | 1589 | graphics/bclogo/tex/bc-trombone.mps
-2024/01/24 | 1567 | graphics/bclogo/metapost/bc-outil.mp
-2024/01/24 | 1556 | graphics/bclogo/tex/bc-outil.mps
-2024/01/24 | 15052 | graphics/bclogo/metapost/bc-crayon.mp
-2024/01/24 | 14941 | graphics/bclogo/metapost/bc-orne.mp
-2024/01/24 | 14532 | systems/texlive/tlnet/archive/frenchmath.source.r69568.tar.xz
-2024/01/24 | 144 | systems/texlive/tlcontrib/tlpkg/texlive.tlpdb.sha512
-2024/01/24 | 144 | graphics/bclogo/doc/toto.txt
-2024/01/24 | 1441 | graphics/bclogo/tex/bc-femme.mps
-2024/01/24 | 1439 | macros/latex/contrib/genealogy-profiles/docs/genealogy-profiles.preamble.sty
-2024/01/24 | 1419 | graphics/bclogo/tex/bc-peaceandlove.mps
-2024/01/24 | 139725 | macros/latex/contrib/genealogy-profiles.zip
-2024/01/24 | 1376 | graphics/bclogo/tex/bc-homme.mps
-2024/01/24 | 1372 | systems/texlive/tlnet/archive/latino-sine-flexione.r69568.tar.xz
-2024/01/24 | 1344 | graphics/bclogo/metapost/brace.mp
-2024/01/24 | 132492 | macros/latex/contrib/genealogy-profiles/docs/genealogy-profiles.pdf
-2024/01/24 | 1309 | graphics/bclogo/doc/fond.pdf
-2024/01/24 | 1294 | graphics/bclogo/metapost/bc-danger.mp
-2024/01/24 | 1280 | graphics/bclogo/tex/bc-danger.mps
-2024/01/24 | 12526 | graphics/bclogo/tex/bc-horloge.mps
-2024/01/24 | 122078143 | macros/context/latest/cont-tmf.zip
-2024/01/24 | 1206 | graphics/bclogo/metapost/bc-etoile.mp
-2024/01/24 | 1194 | graphics/bclogo/tex/bc-etoile.mps
-2024/01/24 | 119479 | graphics/bclogo/metapost/bc-plume.mp
-2024/01/24 | 1188 | systems/texlive/tlcontrib/archive/fontsetup-nonfree.r378.tar.xz
-2024/01/24 | 114196 | systems/texlive/tlcontrib/tlpkg/texlive.tlpdb.xz
-2024/01/24 | 11119 | graphics/bclogo/tex/bc-orne.mps
-2024/01/24 | 109776 | systems/texlive/tlnet/archive/dvisvgm.doc.r69568.tar.xz
-2024/01/24 | 1073 | graphics/bclogo/tex/bc-coeur.mps
-2024/01/24 | 10694 | graphics/bclogo/metapost/bc-recyclage.mp
-2024/01/24 | 10569 | graphics/bclogo/metapost/bc-velo.mp
-2024/01/24 | 10559 | graphics/bclogo/tex/bc-dautriche.mps
-2024/01/24 | 10558 | graphics/bclogo/tex/bc-dpaysbas.mps
-2024/01/24 | 10553 | graphics/bclogo/tex/bc-dbulgarie.mps
-2024/01/24 | 10550 | graphics/bclogo/tex/bc-dluxembourg.mps
-2024/01/24 | 10534 | graphics/bclogo/tex/bc-dallemagne.mps
-2024/01/24 | 1051908 | graphics/bclogo.zip
-2024/01/24 | 1050 | graphics/bclogo/doc/spir.mps
-2024/01/24 | 10508 | graphics/bclogo/tex/bc-crayon.mps
-2024/01/24 | 10458 | graphics/bclogo/metapost/bc-dautriche.mp
-2024/01/24 | 10453 | graphics/bclogo/metapost/bc-dpaysbas.mp
-2024/01/24 | 10449 | graphics/bclogo/metapost/bc-dluxembourg.mp
-2024/01/24 | 1042 | graphics/bclogo/metapost/bc-coeur.mp
-2024/01/24 | 10428 | graphics/bclogo/metapost/bc-dbulgarie.mp
-2024/01/24 | 10399 | graphics/bclogo/metapost/bc-dallemagne.mp
-2024/01/24 | 10389 | graphics/bclogo/metapost/bc-ours.mp
diff --git a/biblio/ctan-bibdata/ctan.bib b/biblio/ctan-bibdata/ctan.bib
index 100d9dfd7f..35883ac57c 100644
--- a/biblio/ctan-bibdata/ctan.bib
+++ b/biblio/ctan-bibdata/ctan.bib
@@ -1,7 +1,7 @@
%% bib file of all CTAN packages
%% (C) Herbert Voß
%%
-%% created at 30-01-2024, 02:00:04
+%% created at 31-01-2024, 02:00:04
%%
%% This file is provided under the terms of the LPPL v1.3 or
@@ -435,9 +435,9 @@
title = {The \texttt{achemso} package},
subtitle = {Support for American Chemical Society journal submissions},
author = {Joseph Wright and Mats Dahlgren},
- date = {2022-11-25},
- version = {3.13f},
- license = {lppl1.3c},
+ date = {2024-01-30},
+ version = {3.13g},
+ license = {lppl1.3c,other-free},
mirror = {https://mirror.ctan.org/macros/latex/contrib/achemso},
url = {https://ctan.org/pkg/achemso},
}
@@ -1391,10 +1391,10 @@
title = {The \texttt{alatex} package},
subtitle = {Abstract \LaTeX{}},
author = {Matt Swift},
- date = {2019-06-21},
+ date = {2024-01-30},
version = {1.0},
license = {gpl},
- mirror = {https://mirror.ctan.org/macros/alatex/alatex-1.0},
+ mirror = {https://mirror.ctan.org/obsolete/macros/alatex/alatex-1.0},
url = {https://ctan.org/pkg/alatex},
}
@@ -6787,8 +6787,8 @@
title = {The \texttt{bib2gls} package},
subtitle = {Command line application to convert .bib files to glossaries-extra.sty resource files},
author = {Nicola Talbot},
- date = {2023-10-13},
- version = {3.8},
+ date = {2024-01-30},
+ version = {3.9},
license = {gpl3+},
mirror = {https://mirror.ctan.org/support/bib2gls},
url = {https://ctan.org/pkg/bib2gls},
@@ -9120,9 +9120,9 @@
title = {The \texttt{blue} package},
subtitle = {A document preparation system},
author = {Kees van der Laan},
- date = {2016-06-24},
+ date = {2024-01-30},
license = {shareware},
- mirror = {https://mirror.ctan.org/macros/blu},
+ mirror = {https://mirror.ctan.org/obsolete/macros/blu},
url = {https://ctan.org/pkg/blue},
annotation = {The BLUe format is a concise but expressive
document preparation system modelled on Knuth's manmac; the
@@ -20707,8 +20707,8 @@
title = {The \texttt{easybook} package},
subtitle = {Easily typesetting Chinese theses or books},
author = {Qu Yi},
- date = {2024-01-29},
- version = {2024P},
+ date = {2024-01-30},
+ version = {2024R},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/easybook},
url = {https://ctan.org/pkg/easybook},
@@ -27387,10 +27387,10 @@
title = {The \texttt{fotex} package},
subtitle = {Process XSL-FO},
author = {Sebastian Rahtz},
- date = {2016-06-18},
+ date = {2024-01-30},
version = {},
license = {lppl},
- mirror = {https://mirror.ctan.org/macros/fotex},
+ mirror = {https://mirror.ctan.org/obsolete/macros/fotex},
url = {https://ctan.org/pkg/fotex},
}
@@ -34388,10 +34388,10 @@
title = {The \texttt{inrstex} package},
subtitle = {Extended Plain \TeX{} for use with MLTeX},
author = {Michael J. Ferguson},
- date = {2016-06-24},
+ date = {2024-01-30},
version = {},
license = {noinfo},
- mirror = {https://mirror.ctan.org/macros/inrstex},
+ mirror = {https://mirror.ctan.org/obsolete/macros/inrstex},
url = {https://ctan.org/pkg/inrstex},
annotation = {INRSTeX supports the preparation of documents in several
languages, using ordinary fonts. It is usable with any \TeX{}
@@ -35242,10 +35242,10 @@
title = {The \texttt{jadetex} package},
subtitle = {Macros supporting Jade DSSSL output},
author = {Sebastian Rahtz and Ian Castle},
- date = {2017-04-18},
+ date = {2024-01-30},
version = {3.13},
license = {other-free},
- mirror = {https://mirror.ctan.org/macros/jadetex},
+ mirror = {https://mirror.ctan.org/macros/plain/formats/jadetex},
url = {https://ctan.org/pkg/jadetex},
}
@@ -36930,8 +36930,8 @@
title = {The \texttt{kpfonts-otf} package},
subtitle = {OTF version of the Kp-fonts},
author = {Daniel Flipo},
- date = {2023-11-26},
- version = {0.61},
+ date = {2024-01-30},
+ version = {0.62},
license = {ofl,lppl1.3},
mirror = {https://mirror.ctan.org/fonts/kpfonts-otf},
url = {https://ctan.org/pkg/kpfonts-otf},
@@ -40654,10 +40654,10 @@
title = {The \texttt{lollipop} package},
subtitle = {TeX made easy},
author = {Victor Eijkhout and Vafa Khalighi and {bidi-tex GitHub Organisation}},
- date = {2019-09-08},
+ date = {2024-01-30},
version = {1.07},
license = {gpl3},
- mirror = {https://mirror.ctan.org/macros/lollipop},
+ mirror = {https://mirror.ctan.org/macros/plain/formats/lollipop},
url = {https://ctan.org/pkg/lollipop},
}
@@ -47230,10 +47230,10 @@
title = {The \texttt{mtex} package},
subtitle = {The pioneering music-in-TeX macros},
author = {Andrea Steinbach and Angelika Schofer},
- date = {2018-01-06},
+ date = {2024-01-30},
version = {0.92},
license = {noinfo},
- mirror = {https://mirror.ctan.org/macros/mtex},
+ mirror = {https://mirror.ctan.org/obsolete/macros/mtex},
url = {https://ctan.org/pkg/mtex},
annotation = {This package, MuTeX (as it was originally known) the humble base
by which both and
@@ -48175,7 +48175,7 @@
title = {The \texttt{natmove} package},
subtitle = {Move punctuation following a citation},
author = {Joseph Wright and Donald Arseneau},
- date = {2018-07-12},
+ date = {2024-01-30},
version = {1.1a},
license = {lppl},
mirror = {https://mirror.ctan.org/macros/latex/contrib/achemso},
@@ -53561,10 +53561,10 @@
title = {The \texttt{physe} package},
subtitle = {The PHYSE format},
author = {Peter Breitenlohner},
- date = {2016-06-24},
+ date = {2024-01-30},
version = {1.3.0},
license = {noinfo},
- mirror = {https://mirror.ctan.org/macros/physe},
+ mirror = {https://mirror.ctan.org/obsolete/macros/physe},
url = {https://ctan.org/pkg/physe},
annotation = {PHYSE is a format for writing physics papers, based on Knuth's
.},
@@ -53618,10 +53618,10 @@
title = {The \texttt{phyzzx} package},
subtitle = {A \TeX{} format for physicists},
author = {Vadim Kaplunovsky},
- date = {2016-06-24},
+ date = {2024-01-30},
version = {},
license = {noinfo},
- mirror = {https://mirror.ctan.org/macros/phyzzx},
+ mirror = {https://mirror.ctan.org/obsolete/macros/phyzzx},
url = {https://ctan.org/pkg/phyzzx},
}
@@ -56035,10 +56035,10 @@
title = {The \texttt{psizzl} package},
subtitle = {A \TeX{} format for physics papers},
author = {Arthur Ogawa},
- date = {2016-06-24},
+ date = {2024-01-30},
version = {0.35},
license = {lppl},
- mirror = {https://mirror.ctan.org/macros/psizzl},
+ mirror = {https://mirror.ctan.org/macros/plain/formats/psizzl},
url = {https://ctan.org/pkg/psizzl},
}
@@ -61719,10 +61719,10 @@
title = {The \texttt{ScriptTeX} package},
subtitle = {Macros for scripts and screenplays},
author = {Adrian McCarthy},
- date = {2016-06-24},
+ date = {2024-01-30},
version = {1.04},
license = {nocommercial},
- mirror = {https://mirror.ctan.org/macros/scripttex},
+ mirror = {https://mirror.ctan.org/obsolete/macros/scripttex},
url = {https://ctan.org/pkg/scripttex},
}
@@ -65316,10 +65316,10 @@
title = {The \texttt{startex} package},
subtitle = {An XML-inspired format for student use},
author = {Dag Langmyhr},
- date = {2016-06-24},
+ date = {2024-01-30},
version = {1.04},
license = {pd},
- mirror = {https://mirror.ctan.org/macros/startex},
+ mirror = {https://mirror.ctan.org/macros/plain/formats/startex},
url = {https://ctan.org/pkg/startex},
}
@@ -69048,9 +69048,9 @@
title = {The \texttt{TeXmuse} package},
subtitle = {Music typesetting system using \TeX{} and Metafont},
author = {Federico Garcia-De Castro},
- date = {2016-06-24},
+ date = {2024-01-30},
license = {lppl},
- mirror = {https://mirror.ctan.org/macros/texmuse},
+ mirror = {https://mirror.ctan.org/obsolete/macros/texmuse},
url = {https://ctan.org/pkg/texmuse},
}
@@ -69289,10 +69289,10 @@
title = {The \texttt{TeXsis} package},
subtitle = {Plain \TeX{} macros for Physicists},
author = {Eric Myers and Frank Paige},
- date = {2019-06-21},
+ date = {2024-01-30},
version = {2.18},
license = {lppl},
- mirror = {https://mirror.ctan.org/macros/texsis},
+ mirror = {https://mirror.ctan.org/macros/plain/formats/texsis},
url = {https://ctan.org/pkg/texsis},
}
@@ -69349,10 +69349,10 @@
title = {The \texttt{TeX T1} package},
subtitle = {TeX format from Washington State University},
author = {Dean Guenther},
- date = {2016-06-18},
+ date = {2024-01-30},
version = {},
license = {nocommercial},
- mirror = {https://mirror.ctan.org/macros/text1},
+ mirror = {https://mirror.ctan.org/obsolete/macros/text1},
url = {https://ctan.org/pkg/text1},
}
@@ -78093,8 +78093,8 @@
title = {The \texttt{xgreek} package},
subtitle = {Greek Language Support for \XeLaTeX{} and LuaLaTeX},
author = {Apostolos Syropoulos},
- date = {2024-01-01},
- version = {3.3.0},
+ date = {2024-01-30},
+ version = {3.4.0},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/unicodetex/latex/xgreek},
url = {https://ctan.org/pkg/xgreek},
@@ -78409,10 +78409,10 @@
title = {The \texttt{xmltex} package},
subtitle = {Support for parsing XML documents},
author = {David Carlisle},
- date = {2018-04-05},
+ date = {2024-01-30},
version = {0.8},
license = {lppl},
- mirror = {https://mirror.ctan.org/macros/xmltex/base},
+ mirror = {https://mirror.ctan.org/macros/plain/formats/xmltex/base},
url = {https://ctan.org/pkg/xmltex},
}
@@ -79299,10 +79299,10 @@
title = {The \texttt{ytex} package},
subtitle = {Macro package developed at MIT},
author = {Daniel C. Brotsky},
- date = {2018-01-06},
+ date = {2024-01-30},
version = {},
license = {noinfo},
- mirror = {https://mirror.ctan.org/macros/ytex},
+ mirror = {https://mirror.ctan.org/obsolete/macros/ytex},
url = {https://ctan.org/pkg/ytex},
}
diff --git a/fonts/heuristica/README b/fonts/heuristica/README
index 9871d9ccfd..38f8833524 100644
--- a/fonts/heuristica/README
+++ b/fonts/heuristica/README
@@ -2,7 +2,10 @@ With update 1.08 to Heuristica, the package reverts to the otf fonts as distribu
http://www.ctan.org/license/lppl1.3
for the details of that license.
-Current version: 1.092 2019-06-10
+Current version: 1.093 2024-01-30
+
+Changes in version 1.093
+Corrected code for option "looser", adding a missing \gdef. (Thanks, Andre Oxygen.)
Changes in version 1.092
Corrected an error in the last correction to the fd file. (Thanks, Frank Mittelbach.)
diff --git a/fonts/heuristica/tex/heuristica.sty b/fonts/heuristica/tex/heuristica.sty
index 6a1575c47e..d953cf1edc 100644
--- a/fonts/heuristica/tex/heuristica.sty
+++ b/fonts/heuristica/tex/heuristica.sty
@@ -1,8 +1,8 @@
%% heuristica.sty
%%
\NeedsTeXFormat{LaTeX2e}
-\def\fileversion{1.09}
-\def\filedate{2017/03/14}
+\def\fileversion{1.093}
+\def\filedate{2024/01/30}
\ProvidesPackage{heuristica}
[\filedate\space v\fileversion]
@@ -60,7 +60,7 @@
\DeclareOptionX{tabular}{\edef\Heuristica@figurealign{T}}
\DeclareOptionX{sups}{\@Heuristica@supstrue}
\DeclareOptionX{looser}{%
-\gdef\Heuristica@spc{.25em}\gdef\Heuristica@stretch{.125em}\Heuristica@shrink{.1em}}
+\gdef\Heuristica@spc{.25em}\gdef\Heuristica@stretch{.125em}\gdef\Heuristica@shrink{.1em}}
\DeclareOptionX{loosest}{%
\gdef\Heuristica@spc{.28em}\gdef\Heuristica@stretch{.125em}\gdef\Heuristica@shrink{.13em}}
\ExecuteOptionsX{lining,tabular}
diff --git a/info/examples/tex-in-practice b/info/examples/tex-in-practice
deleted file mode 120000
index 71c9f5d5ab..0000000000
--- a/info/examples/tex-in-practice
+++ /dev/null
@@ -1 +0,0 @@
-tip \ No newline at end of file
diff --git a/info/examples/tip/absdimen.tip b/info/examples/tex-in-practice/absdimen.tip
index e2e5daf3bc..e2e5daf3bc 100644
--- a/info/examples/tip/absdimen.tip
+++ b/info/examples/tex-in-practice/absdimen.tip
diff --git a/info/examples/tip/absval.tip b/info/examples/tex-in-practice/absval.tip
index f3809b9a0f..f3809b9a0f 100644
--- a/info/examples/tip/absval.tip
+++ b/info/examples/tex-in-practice/absval.tip
diff --git a/info/examples/tip/acronym.tip b/info/examples/tex-in-practice/acronym.tip
index 18db6ef8f4..18db6ef8f4 100644
--- a/info/examples/tip/acronym.tip
+++ b/info/examples/tex-in-practice/acronym.tip
diff --git a/info/examples/tip/advtabst.tip b/info/examples/tex-in-practice/advtabst.tip
index 25b5ce5b75..25b5ce5b75 100644
--- a/info/examples/tip/advtabst.tip
+++ b/info/examples/tex-in-practice/advtabst.tip
diff --git a/info/examples/tip/aevpar.tip b/info/examples/tex-in-practice/aevpar.tip
index 215db1a4ba..215db1a4ba 100644
--- a/info/examples/tip/aevpar.tip
+++ b/info/examples/tex-in-practice/aevpar.tip
diff --git a/info/examples/tip/alldate.tip b/info/examples/tex-in-practice/alldate.tip
index 471bcc3c94..471bcc3c94 100644
--- a/info/examples/tip/alldate.tip
+++ b/info/examples/tex-in-practice/alldate.tip
diff --git a/info/examples/tip/allocat.tip b/info/examples/tex-in-practice/allocat.tip
index 5bb3055145..5bb3055145 100644
--- a/info/examples/tip/allocat.tip
+++ b/info/examples/tex-in-practice/allocat.tip
diff --git a/info/examples/tip/alwbase.tip b/info/examples/tex-in-practice/alwbase.tip
index f65a0b732c..f65a0b732c 100644
--- a/info/examples/tip/alwbase.tip
+++ b/info/examples/tex-in-practice/alwbase.tip
diff --git a/info/examples/tip/angt.tip b/info/examples/tex-in-practice/angt.tip
index 6a85e0cac6..6a85e0cac6 100644
--- a/info/examples/tip/angt.tip
+++ b/info/examples/tex-in-practice/angt.tip
diff --git a/info/examples/tip/arbday.tip b/info/examples/tex-in-practice/arbday.tip
index fa8921eb60..fa8921eb60 100644
--- a/info/examples/tip/arbday.tip
+++ b/info/examples/tex-in-practice/arbday.tip
diff --git a/info/examples/tip/arraymac.tip b/info/examples/tex-in-practice/arraymac.tip
index cf2f26b02c..cf2f26b02c 100644
--- a/info/examples/tip/arraymac.tip
+++ b/info/examples/tex-in-practice/arraymac.tip
diff --git a/info/examples/tip/atpos.tip b/info/examples/tex-in-practice/atpos.tip
index 036156eb91..036156eb91 100644
--- a/info/examples/tip/atpos.tip
+++ b/info/examples/tex-in-practice/atpos.tip
diff --git a/info/examples/tip/be-env.tip b/info/examples/tex-in-practice/be-env.tip
index 1275f03f23..1275f03f23 100644
--- a/info/examples/tip/be-env.tip
+++ b/info/examples/tex-in-practice/be-env.tip
diff --git a/info/examples/tip/bletpar.tip b/info/examples/tex-in-practice/bletpar.tip
index cde020150b..cde020150b 100644
--- a/info/examples/tip/bletpar.tip
+++ b/info/examples/tex-in-practice/bletpar.tip
diff --git a/info/examples/tip/box-bb.tip b/info/examples/tex-in-practice/box-bb.tip
index 67e2c0b7c9..67e2c0b7c9 100644
--- a/info/examples/tip/box-bb.tip
+++ b/info/examples/tex-in-practice/box-bb.tip
diff --git a/info/examples/tip/box-bul.tip b/info/examples/tex-in-practice/box-bul.tip
index 562ebc1b9c..562ebc1b9c 100644
--- a/info/examples/tip/box-bul.tip
+++ b/info/examples/tex-in-practice/box-bul.tip
diff --git a/info/examples/tip/box-larg.tip b/info/examples/tex-in-practice/box-larg.tip
index 44c14a2878..44c14a2878 100644
--- a/info/examples/tip/box-larg.tip
+++ b/info/examples/tex-in-practice/box-larg.tip
diff --git a/info/examples/tip/box-mac.tip b/info/examples/tex-in-practice/box-mac.tip
index c71b830e88..c71b830e88 100644
--- a/info/examples/tip/box-mac.tip
+++ b/info/examples/tex-in-practice/box-mac.tip
diff --git a/info/examples/tip/box-thck.tip b/info/examples/tex-in-practice/box-thck.tip
index d39a045484..d39a045484 100644
--- a/info/examples/tip/box-thck.tip
+++ b/info/examples/tex-in-practice/box-thck.tip
diff --git a/info/examples/tip/box-zero.tip b/info/examples/tex-in-practice/box-zero.tip
index bd0d3930e8..bd0d3930e8 100644
--- a/info/examples/tip/box-zero.tip
+++ b/info/examples/tex-in-practice/box-zero.tip
diff --git a/info/examples/tip/boxing1.tip b/info/examples/tex-in-practice/boxing1.tip
index 61ef24a8a4..61ef24a8a4 100644
--- a/info/examples/tip/boxing1.tip
+++ b/info/examples/tex-in-practice/boxing1.tip
diff --git a/info/examples/tip/boxing2.tip b/info/examples/tex-in-practice/boxing2.tip
index 7c14df8ded..7c14df8ded 100644
--- a/info/examples/tip/boxing2.tip
+++ b/info/examples/tex-in-practice/boxing2.tip
diff --git a/info/examples/tip/boxing3.tip b/info/examples/tex-in-practice/boxing3.tip
index 5067c1b5f9..5067c1b5f9 100644
--- a/info/examples/tip/boxing3.tip
+++ b/info/examples/tex-in-practice/boxing3.tip
diff --git a/info/examples/tip/boxing4.tip b/info/examples/tex-in-practice/boxing4.tip
index ce1cd0be6d..ce1cd0be6d 100644
--- a/info/examples/tip/boxing4.tip
+++ b/info/examples/tex-in-practice/boxing4.tip
diff --git a/info/examples/tip/boxing5.tip b/info/examples/tex-in-practice/boxing5.tip
index 8e099f7698..8e099f7698 100644
--- a/info/examples/tip/boxing5.tip
+++ b/info/examples/tex-in-practice/boxing5.tip
diff --git a/info/examples/tip/boxing6.tip b/info/examples/tex-in-practice/boxing6.tip
index f361a2868d..f361a2868d 100644
--- a/info/examples/tip/boxing6.tip
+++ b/info/examples/tex-in-practice/boxing6.tip
diff --git a/info/examples/tip/boxing7.tip b/info/examples/tex-in-practice/boxing7.tip
index a231a4985e..a231a4985e 100644
--- a/info/examples/tip/boxing7.tip
+++ b/info/examples/tex-in-practice/boxing7.tip
diff --git a/info/examples/tip/boxrelim.tip b/info/examples/tex-in-practice/boxrelim.tip
index e767fcde85..e767fcde85 100644
--- a/info/examples/tip/boxrelim.tip
+++ b/info/examples/tex-in-practice/boxrelim.tip
diff --git a/info/examples/tip/boxrqu.tip b/info/examples/tex-in-practice/boxrqu.tip
index 62aaadd22a..62aaadd22a 100644
--- a/info/examples/tip/boxrqu.tip
+++ b/info/examples/tex-in-practice/boxrqu.tip
diff --git a/info/examples/tip/centerlp.tip b/info/examples/tex-in-practice/centerlp.tip
index af0acc93ab..af0acc93ab 100644
--- a/info/examples/tip/centerlp.tip
+++ b/info/examples/tex-in-practice/centerlp.tip
diff --git a/info/examples/tip/centerng.tip b/info/examples/tex-in-practice/centerng.tip
index a96676e60f..a96676e60f 100644
--- a/info/examples/tip/centerng.tip
+++ b/info/examples/tex-in-practice/centerng.tip
diff --git a/info/examples/tip/centpar.tip b/info/examples/tex-in-practice/centpar.tip
index de0dfd8f03..de0dfd8f03 100644
--- a/info/examples/tip/centpar.tip
+++ b/info/examples/tex-in-practice/centpar.tip
diff --git a/info/examples/tip/charbo.tip b/info/examples/tex-in-practice/charbo.tip
index 246031c5b0..246031c5b0 100644
--- a/info/examples/tip/charbo.tip
+++ b/info/examples/tex-in-practice/charbo.tip
diff --git a/info/examples/tip/chboxd.tip b/info/examples/tex-in-practice/chboxd.tip
index 57d987414c..57d987414c 100644
--- a/info/examples/tip/chboxd.tip
+++ b/info/examples/tex-in-practice/chboxd.tip
diff --git a/info/examples/tip/clearb.tip b/info/examples/tex-in-practice/clearb.tip
index b4e2028384..b4e2028384 100644
--- a/info/examples/tip/clearb.tip
+++ b/info/examples/tex-in-practice/clearb.tip
diff --git a/info/examples/tip/collect.tip b/info/examples/tex-in-practice/collect.tip
index 6953f89e62..6953f89e62 100644
--- a/info/examples/tip/collect.tip
+++ b/info/examples/tex-in-practice/collect.tip
diff --git a/info/examples/tip/coltok.tip b/info/examples/tex-in-practice/coltok.tip
index a86f430876..a86f430876 100644
--- a/info/examples/tip/coltok.tip
+++ b/info/examples/tex-in-practice/coltok.tip
diff --git a/info/examples/tip/comfiles.tip b/info/examples/tex-in-practice/comfiles.tip
index 02853596c1..02853596c1 100644
--- a/info/examples/tip/comfiles.tip
+++ b/info/examples/tex-in-practice/comfiles.tip
diff --git a/info/examples/tip/compst.tip b/info/examples/tex-in-practice/compst.tip
index 5137722769..5137722769 100644
--- a/info/examples/tip/compst.tip
+++ b/info/examples/tex-in-practice/compst.tip
diff --git a/info/examples/tip/compstca.tip b/info/examples/tex-in-practice/compstca.tip
index df5a770e63..df5a770e63 100644
--- a/info/examples/tip/compstca.tip
+++ b/info/examples/tex-in-practice/compstca.tip
diff --git a/info/examples/tip/condltr.tip b/info/examples/tex-in-practice/condltr.tip
index cc6fff7d49..cc6fff7d49 100644
--- a/info/examples/tip/condltr.tip
+++ b/info/examples/tex-in-practice/condltr.tip
diff --git a/info/examples/tip/conval.tip b/info/examples/tex-in-practice/conval.tip
index 28638f5ece..28638f5ece 100644
--- a/info/examples/tip/conval.tip
+++ b/info/examples/tex-in-practice/conval.tip
diff --git a/info/examples/tip/copydate.tip b/info/examples/tex-in-practice/copydate.tip
index fd90867ec1..fd90867ec1 100644
--- a/info/examples/tip/copydate.tip
+++ b/info/examples/tex-in-practice/copydate.tip
diff --git a/info/examples/tip/counters.tip b/info/examples/tex-in-practice/counters.tip
index 735e86d62e..735e86d62e 100644
--- a/info/examples/tip/counters.tip
+++ b/info/examples/tex-in-practice/counters.tip
diff --git a/info/examples/tip/countl.tip b/info/examples/tex-in-practice/countl.tip
index 2bd0e49e10..2bd0e49e10 100644
--- a/info/examples/tip/countl.tip
+++ b/info/examples/tex-in-practice/countl.tip
diff --git a/info/examples/tip/cref-1.tip b/info/examples/tex-in-practice/cref-1.tip
index 9fdfc729a0..9fdfc729a0 100644
--- a/info/examples/tip/cref-1.tip
+++ b/info/examples/tex-in-practice/cref-1.tip
diff --git a/info/examples/tip/cref-2.tip b/info/examples/tex-in-practice/cref-2.tip
index 636c678f00..636c678f00 100644
--- a/info/examples/tip/cref-2.tip
+++ b/info/examples/tex-in-practice/cref-2.tip
diff --git a/info/examples/tip/cref-2a.tip b/info/examples/tex-in-practice/cref-2a.tip
index 787197a68f..787197a68f 100644
--- a/info/examples/tip/cref-2a.tip
+++ b/info/examples/tex-in-practice/cref-2a.tip
diff --git a/info/examples/tip/cref-3.tip b/info/examples/tex-in-practice/cref-3.tip
index 02c35030a0..02c35030a0 100644
--- a/info/examples/tip/cref-3.tip
+++ b/info/examples/tex-in-practice/cref-3.tip
diff --git a/info/examples/tip/cref-3a.tip b/info/examples/tex-in-practice/cref-3a.tip
index 9f01c3cff6..9f01c3cff6 100644
--- a/info/examples/tip/cref-3a.tip
+++ b/info/examples/tex-in-practice/cref-3a.tip
diff --git a/info/examples/tip/cref-4.tip b/info/examples/tex-in-practice/cref-4.tip
index d7171921fb..d7171921fb 100644
--- a/info/examples/tip/cref-4.tip
+++ b/info/examples/tex-in-practice/cref-4.tip
diff --git a/info/examples/tip/cref-5.tip b/info/examples/tex-in-practice/cref-5.tip
index 68ee426f6c..68ee426f6c 100644
--- a/info/examples/tip/cref-5.tip
+++ b/info/examples/tex-in-practice/cref-5.tip
diff --git a/info/examples/tip/crline.tip b/info/examples/tex-in-practice/crline.tip
index 48d8c5d814..48d8c5d814 100644
--- a/info/examples/tip/crline.tip
+++ b/info/examples/tex-in-practice/crline.tip
diff --git a/info/examples/tip/csar.tip b/info/examples/tex-in-practice/csar.tip
index 9a451407b7..9a451407b7 100644
--- a/info/examples/tip/csar.tip
+++ b/info/examples/tex-in-practice/csar.tip
diff --git a/info/examples/tip/cssprint.tip b/info/examples/tex-in-practice/cssprint.tip
index 47faa8e2cc..47faa8e2cc 100644
--- a/info/examples/tip/cssprint.tip
+++ b/info/examples/tex-in-practice/cssprint.tip
diff --git a/info/examples/tip/cstostr.tip b/info/examples/tex-in-practice/cstostr.tip
index b7b0e58749..b7b0e58749 100644
--- a/info/examples/tip/cstostr.tip
+++ b/info/examples/tex-in-practice/cstostr.tip
diff --git a/info/examples/tip/cstostrc.tip b/info/examples/tex-in-practice/cstostrc.tip
index 08b2e70db6..08b2e70db6 100644
--- a/info/examples/tip/cstostrc.tip
+++ b/info/examples/tex-in-practice/cstostrc.tip
diff --git a/info/examples/tip/ctestcs.tip b/info/examples/tex-in-practice/ctestcs.tip
index ba0c0ba537..ba0c0ba537 100644
--- a/info/examples/tip/ctestcs.tip
+++ b/info/examples/tex-in-practice/ctestcs.tip
diff --git a/info/examples/tip/dateofw.tip b/info/examples/tex-in-practice/dateofw.tip
index eb2306c6cb..eb2306c6cb 100644
--- a/info/examples/tip/dateofw.tip
+++ b/info/examples/tex-in-practice/dateofw.tip
diff --git a/info/examples/tip/dblarg.tip b/info/examples/tex-in-practice/dblarg.tip
index 463c2b51c7..463c2b51c7 100644
--- a/info/examples/tip/dblarg.tip
+++ b/info/examples/tex-in-practice/dblarg.tip
diff --git a/info/examples/tip/defauarg.tip b/info/examples/tex-in-practice/defauarg.tip
index 5372754b66..5372754b66 100644
--- a/info/examples/tip/defauarg.tip
+++ b/info/examples/tex-in-practice/defauarg.tip
diff --git a/info/examples/tip/dicentry.tip b/info/examples/tex-in-practice/dicentry.tip
index d041432542..d041432542 100644
--- a/info/examples/tip/dicentry.tip
+++ b/info/examples/tex-in-practice/dicentry.tip
diff --git a/info/examples/tip/doloop.tip b/info/examples/tex-in-practice/doloop.tip
index b15b23cf8f..b15b23cf8f 100644
--- a/info/examples/tip/doloop.tip
+++ b/info/examples/tex-in-practice/doloop.tip
diff --git a/info/examples/tip/droppre.tip b/info/examples/tex-in-practice/droppre.tip
index 8bbe74e790..8bbe74e790 100644
--- a/info/examples/tip/droppre.tip
+++ b/info/examples/tex-in-practice/droppre.tip
diff --git a/info/examples/tip/droppt.tip b/info/examples/tex-in-practice/droppt.tip
index 2e58be27ec..2e58be27ec 100644
--- a/info/examples/tip/droppt.tip
+++ b/info/examples/tex-in-practice/droppt.tip
diff --git a/info/examples/tip/dumppars.tip b/info/examples/tex-in-practice/dumppars.tip
index 55e233eace..55e233eace 100644
--- a/info/examples/tip/dumppars.tip
+++ b/info/examples/tex-in-practice/dumppars.tip
diff --git a/info/examples/tip/earliest.tip b/info/examples/tex-in-practice/earliest.tip
index 9e9564443a..9e9564443a 100644
--- a/info/examples/tip/earliest.tip
+++ b/info/examples/tex-in-practice/earliest.tip
diff --git a/info/examples/tip/emprubox.tip b/info/examples/tex-in-practice/emprubox.tip
index 498d6fd7f9..498d6fd7f9 100644
--- a/info/examples/tip/emprubox.tip
+++ b/info/examples/tex-in-practice/emprubox.tip
diff --git a/info/examples/tip/emptybox.tip b/info/examples/tex-in-practice/emptybox.tip
index 021ec1d0c1..021ec1d0c1 100644
--- a/info/examples/tip/emptybox.tip
+++ b/info/examples/tex-in-practice/emptybox.tip
diff --git a/info/examples/tip/endn-mac.tip b/info/examples/tex-in-practice/endn-mac.tip
index 0d6066f70c..0d6066f70c 100644
--- a/info/examples/tip/endn-mac.tip
+++ b/info/examples/tex-in-practice/endn-mac.tip
diff --git a/info/examples/tip/endrec.tip b/info/examples/tex-in-practice/endrec.tip
index 5fc1a8e196..5fc1a8e196 100644
--- a/info/examples/tip/endrec.tip
+++ b/info/examples/tex-in-practice/endrec.tip
diff --git a/info/examples/tip/enum.tip b/info/examples/tex-in-practice/enum.tip
index b32412ae08..b32412ae08 100644
--- a/info/examples/tip/enum.tip
+++ b/info/examples/tex-in-practice/enum.tip
diff --git a/info/examples/tip/enumlist.tip b/info/examples/tex-in-practice/enumlist.tip
index f3baeb5b5d..f3baeb5b5d 100644
--- a/info/examples/tip/enumlist.tip
+++ b/info/examples/tex-in-practice/enumlist.tip
diff --git a/info/examples/tip/errmess.tip b/info/examples/tex-in-practice/errmess.tip
index 68b31b49d2..68b31b49d2 100644
--- a/info/examples/tip/errmess.tip
+++ b/info/examples/tex-in-practice/errmess.tip
diff --git a/info/examples/tip/evenprin.tip b/info/examples/tex-in-practice/evenprin.tip
index 3e38fc6e29..3e38fc6e29 100644
--- a/info/examples/tip/evenprin.tip
+++ b/info/examples/tex-in-practice/evenprin.tip
diff --git a/info/examples/tip/everyequ.tip b/info/examples/tex-in-practice/everyequ.tip
index ff5003eed6..ff5003eed6 100644
--- a/info/examples/tip/everyequ.tip
+++ b/info/examples/tex-in-practice/everyequ.tip
diff --git a/info/examples/tip/everypar.tip b/info/examples/tex-in-practice/everypar.tip
index 9c33b2b026..9c33b2b026 100644
--- a/info/examples/tip/everypar.tip
+++ b/info/examples/tex-in-practice/everypar.tip
diff --git a/info/examples/tip/evhvbox.tip b/info/examples/tex-in-practice/evhvbox.tip
index 4abfbb54d6..4abfbb54d6 100644
--- a/info/examples/tip/evhvbox.tip
+++ b/info/examples/tex-in-practice/evhvbox.tip
diff --git a/info/examples/tip/ex-out2.tip b/info/examples/tex-in-practice/ex-out2.tip
index 50152e0363..50152e0363 100644
--- a/info/examples/tip/ex-out2.tip
+++ b/info/examples/tex-in-practice/ex-out2.tip
diff --git a/info/examples/tip/fexist.tip b/info/examples/tex-in-practice/fexist.tip
index 5a595f141e..5a595f141e 100644
--- a/info/examples/tip/fexist.tip
+++ b/info/examples/tex-in-practice/fexist.tip
diff --git a/info/examples/tip/figbox.tip b/info/examples/tex-in-practice/figbox.tip
index 031d6cdb56..031d6cdb56 100644
--- a/info/examples/tip/figbox.tip
+++ b/info/examples/tex-in-practice/figbox.tip
diff --git a/info/examples/tip/figinpar.tip b/info/examples/tex-in-practice/figinpar.tip
index 4cc54ae60f..4cc54ae60f 100644
--- a/info/examples/tip/figinpar.tip
+++ b/info/examples/tex-in-practice/figinpar.tip
diff --git a/info/examples/tip/firstldi.tip b/info/examples/tex-in-practice/firstldi.tip
index 7e7a2ef31a..7e7a2ef31a 100644
--- a/info/examples/tip/firstldi.tip
+++ b/info/examples/tex-in-practice/firstldi.tip
diff --git a/info/examples/tip/fo-char.tip b/info/examples/tex-in-practice/fo-char.tip
index 84bc6a24c2..84bc6a24c2 100644
--- a/info/examples/tip/fo-char.tip
+++ b/info/examples/tex-in-practice/fo-char.tip
diff --git a/info/examples/tip/font-cpp.tip b/info/examples/tex-in-practice/font-cpp.tip
index c127d76ed5..c127d76ed5 100644
--- a/info/examples/tip/font-cpp.tip
+++ b/info/examples/tex-in-practice/font-cpp.tip
diff --git a/info/examples/tip/fontsam.tip b/info/examples/tex-in-practice/fontsam.tip
index 711e7db18e..711e7db18e 100644
--- a/info/examples/tip/fontsam.tip
+++ b/info/examples/tex-in-practice/fontsam.tip
diff --git a/info/examples/tip/fonttab.tip b/info/examples/tex-in-practice/fonttab.tip
index 4da8f97c5a..4da8f97c5a 100644
--- a/info/examples/tip/fonttab.tip
+++ b/info/examples/tex-in-practice/fonttab.tip
diff --git a/info/examples/tip/formline.tip b/info/examples/tex-in-practice/formline.tip
index a3f4984781..a3f4984781 100644
--- a/info/examples/tip/formline.tip
+++ b/info/examples/tex-in-practice/formline.tip
diff --git a/info/examples/tip/fotable.tip b/info/examples/tex-in-practice/fotable.tip
index 5af38e251a..5af38e251a 100644
--- a/info/examples/tip/fotable.tip
+++ b/info/examples/tex-in-practice/fotable.tip
diff --git a/info/examples/tip/fotok.tip b/info/examples/tex-in-practice/fotok.tip
index 7d02336125..7d02336125 100644
--- a/info/examples/tip/fotok.tip
+++ b/info/examples/tex-in-practice/fotok.tip
diff --git a/info/examples/tip/frac.tip b/info/examples/tex-in-practice/frac.tip
index a00a7237d4..a00a7237d4 100644
--- a/info/examples/tip/frac.tip
+++ b/info/examples/tex-in-practice/frac.tip
diff --git a/info/examples/tip/freespac.tip b/info/examples/tex-in-practice/freespac.tip
index 14de10fd60..14de10fd60 100644
--- a/info/examples/tip/freespac.tip
+++ b/info/examples/tex-in-practice/freespac.tip
diff --git a/info/examples/tip/fsized.tip b/info/examples/tex-in-practice/fsized.tip
index 433a5d1b92..433a5d1b92 100644
--- a/info/examples/tip/fsized.tip
+++ b/info/examples/tex-in-practice/fsized.tip
diff --git a/info/examples/tip/funospac.tip b/info/examples/tex-in-practice/funospac.tip
index e0921ead1b..e0921ead1b 100644
--- a/info/examples/tip/funospac.tip
+++ b/info/examples/tex-in-practice/funospac.tip
diff --git a/info/examples/tip/futlet.tip b/info/examples/tex-in-practice/futlet.tip
index 354e3d2f18..354e3d2f18 100644
--- a/info/examples/tip/futlet.tip
+++ b/info/examples/tex-in-practice/futlet.tip
diff --git a/info/examples/tip/futpar.tip b/info/examples/tex-in-practice/futpar.tip
index 2c83d0d496..2c83d0d496 100644
--- a/info/examples/tip/futpar.tip
+++ b/info/examples/tex-in-practice/futpar.tip
diff --git a/info/examples/tip/genaeol.tip b/info/examples/tex-in-practice/genaeol.tip
index 12132465f1..12132465f1 100644
--- a/info/examples/tip/genaeol.tip
+++ b/info/examples/tex-in-practice/genaeol.tip
diff --git a/info/examples/tip/genhead.tip b/info/examples/tex-in-practice/genhead.tip
index 44588f7dfd..44588f7dfd 100644
--- a/info/examples/tip/genhead.tip
+++ b/info/examples/tex-in-practice/genhead.tip
diff --git a/info/examples/tip/genostr.tip b/info/examples/tex-in-practice/genostr.tip
index e89580297d..e89580297d 100644
--- a/info/examples/tip/genostr.tip
+++ b/info/examples/tex-in-practice/genostr.tip
diff --git a/info/examples/tip/getnuml.tip b/info/examples/tex-in-practice/getnuml.tip
index 7991ae9bb4..7991ae9bb4 100644
--- a/info/examples/tip/getnuml.tip
+++ b/info/examples/tex-in-practice/getnuml.tip
diff --git a/info/examples/tip/gobble.tip b/info/examples/tex-in-practice/gobble.tip
index 7cbb9664d2..7cbb9664d2 100644
--- a/info/examples/tip/gobble.tip
+++ b/info/examples/tex-in-practice/gobble.tip
diff --git a/info/examples/tip/gobblemo.tip b/info/examples/tex-in-practice/gobblemo.tip
index ac7bc75439..ac7bc75439 100644
--- a/info/examples/tip/gobblemo.tip
+++ b/info/examples/tex-in-practice/gobblemo.tip
diff --git a/info/examples/tip/graphmac.tip b/info/examples/tex-in-practice/graphmac.tip
index 6cf2ba10d9..6cf2ba10d9 100644
--- a/info/examples/tip/graphmac.tip
+++ b/info/examples/tex-in-practice/graphmac.tip
diff --git a/info/examples/tip/hex.tip b/info/examples/tex-in-practice/hex.tip
index 0f198cb9fb..0f198cb9fb 100644
--- a/info/examples/tip/hex.tip
+++ b/info/examples/tex-in-practice/hex.tip
diff --git a/info/examples/tip/ifeven.tip b/info/examples/tex-in-practice/ifeven.tip
index 5f26d121a0..5f26d121a0 100644
--- a/info/examples/tip/ifeven.tip
+++ b/info/examples/tex-in-practice/ifeven.tip
diff --git a/info/examples/tip/ifx-def.tip b/info/examples/tex-in-practice/ifx-def.tip
index b9b9dd7259..b9b9dd7259 100644
--- a/info/examples/tip/ifx-def.tip
+++ b/info/examples/tex-in-practice/ifx-def.tip
diff --git a/info/examples/tip/ifx-mac.tip b/info/examples/tex-in-practice/ifx-mac.tip
index 0af3f324b0..0af3f324b0 100644
--- a/info/examples/tip/ifx-mac.tip
+++ b/info/examples/tex-in-practice/ifx-mac.tip
diff --git a/info/examples/tip/imodn.tip b/info/examples/tex-in-practice/imodn.tip
index d8168abd52..d8168abd52 100644
--- a/info/examples/tip/imodn.tip
+++ b/info/examples/tex-in-practice/imodn.tip
diff --git a/info/examples/tip/index-or.tip b/info/examples/tex-in-practice/index-or.tip
index aacb366a2a..aacb366a2a 100644
--- a/info/examples/tip/index-or.tip
+++ b/info/examples/tex-in-practice/index-or.tip
diff --git a/info/examples/tip/input-at.tip b/info/examples/tex-in-practice/input-at.tip
index bf41fd4958..bf41fd4958 100644
--- a/info/examples/tip/input-at.tip
+++ b/info/examples/tex-in-practice/input-at.tip
diff --git a/info/examples/tip/inputc.tip b/info/examples/tex-in-practice/inputc.tip
index a05dcf1473..a05dcf1473 100644
--- a/info/examples/tip/inputc.tip
+++ b/info/examples/tex-in-practice/inputc.tip
diff --git a/info/examples/tip/inputd.tip b/info/examples/tex-in-practice/inputd.tip
index e4bd777482..e4bd777482 100644
--- a/info/examples/tip/inputd.tip
+++ b/info/examples/tex-in-practice/inputd.tip
diff --git a/info/examples/tip/inputdl.tip b/info/examples/tex-in-practice/inputdl.tip
index 696c2f029e..696c2f029e 100644
--- a/info/examples/tip/inputdl.tip
+++ b/info/examples/tex-in-practice/inputdl.tip
diff --git a/info/examples/tip/isleapyr.tip b/info/examples/tex-in-practice/isleapyr.tip
index e35bd6c9d1..e35bd6c9d1 100644
--- a/info/examples/tip/isleapyr.tip
+++ b/info/examples/tex-in-practice/isleapyr.tip
diff --git a/info/examples/tip/isprefix.tip b/info/examples/tex-in-practice/isprefix.tip
index 9bdefdce10..9bdefdce10 100644
--- a/info/examples/tip/isprefix.tip
+++ b/info/examples/tex-in-practice/isprefix.tip
diff --git a/info/examples/tip/issuffix.tip b/info/examples/tex-in-practice/issuffix.tip
index 37bda46631..37bda46631 100644
--- a/info/examples/tip/issuffix.tip
+++ b/info/examples/tex-in-practice/issuffix.tip
diff --git a/info/examples/tip/itemizel.tip b/info/examples/tex-in-practice/itemizel.tip
index 8ed23df9e8..8ed23df9e8 100644
--- a/info/examples/tip/itemizel.tip
+++ b/info/examples/tex-in-practice/itemizel.tip
diff --git a/info/examples/tip/itemltw.tip b/info/examples/tex-in-practice/itemltw.tip
index f4f13f319d..f4f13f319d 100644
--- a/info/examples/tip/itemltw.tip
+++ b/info/examples/tex-in-practice/itemltw.tip
diff --git a/info/examples/tip/itemplan.tip b/info/examples/tex-in-practice/itemplan.tip
index 9dd2d94f2b..9dd2d94f2b 100644
--- a/info/examples/tip/itemplan.tip
+++ b/info/examples/tex-in-practice/itemplan.tip
diff --git a/info/examples/tip/ivpyr.tip b/info/examples/tex-in-practice/ivpyr.tip
index 86bd1a78bc..86bd1a78bc 100644
--- a/info/examples/tip/ivpyr.tip
+++ b/info/examples/tex-in-practice/ivpyr.tip
diff --git a/info/examples/tip/largdp.tip b/info/examples/tex-in-practice/largdp.tip
index cd666f8b6d..cd666f8b6d 100644
--- a/info/examples/tip/largdp.tip
+++ b/info/examples/tex-in-practice/largdp.tip
diff --git a/info/examples/tip/lbpar.tip b/info/examples/tex-in-practice/lbpar.tip
index c96c32ed3d..c96c32ed3d 100644
--- a/info/examples/tip/lbpar.tip
+++ b/info/examples/tex-in-practice/lbpar.tip
diff --git a/info/examples/tip/lc0to9.tip b/info/examples/tex-in-practice/lc0to9.tip
index c317c4c8ee..c317c4c8ee 100644
--- a/info/examples/tip/lc0to9.tip
+++ b/info/examples/tex-in-practice/lc0to9.tip
diff --git a/info/examples/tip/leadingz.tip b/info/examples/tex-in-practice/leadingz.tip
index ef668522d8..ef668522d8 100644
--- a/info/examples/tip/leadingz.tip
+++ b/info/examples/tex-in-practice/leadingz.tip
diff --git a/info/examples/tip/leadline.tip b/info/examples/tex-in-practice/leadline.tip
index fa6486a7e9..fa6486a7e9 100644
--- a/info/examples/tip/leadline.tip
+++ b/info/examples/tex-in-practice/leadline.tip
diff --git a/info/examples/tip/leftdm.tip b/info/examples/tex-in-practice/leftdm.tip
index 1f09928a53..1f09928a53 100644
--- a/info/examples/tip/leftdm.tip
+++ b/info/examples/tex-in-practice/leftdm.tip
diff --git a/info/examples/tip/legdate.tip b/info/examples/tex-in-practice/legdate.tip
index 336c8ecf27..336c8ecf27 100644
--- a/info/examples/tip/legdate.tip
+++ b/info/examples/tex-in-practice/legdate.tip
diff --git a/info/examples/tip/legmonth.tip b/info/examples/tex-in-practice/legmonth.tip
index ee7776bf67..ee7776bf67 100644
--- a/info/examples/tip/legmonth.tip
+++ b/info/examples/tex-in-practice/legmonth.tip
diff --git a/info/examples/tip/legyear.tip b/info/examples/tex-in-practice/legyear.tip
index c952e42f79..c952e42f79 100644
--- a/info/examples/tip/legyear.tip
+++ b/info/examples/tex-in-practice/legyear.tip
diff --git a/info/examples/tip/lfondem.tip b/info/examples/tex-in-practice/lfondem.tip
index eeb1039e08..eeb1039e08 100644
--- a/info/examples/tip/lfondem.tip
+++ b/info/examples/tex-in-practice/lfondem.tip
diff --git a/info/examples/tip/linesr.tip b/info/examples/tex-in-practice/linesr.tip
index 53ff80db27..53ff80db27 100644
--- a/info/examples/tip/linesr.tip
+++ b/info/examples/tex-in-practice/linesr.tip
diff --git a/info/examples/tip/list-mac.tip b/info/examples/tex-in-practice/list-mac.tip
index b8c1f6d72e..b8c1f6d72e 100644
--- a/info/examples/tip/list-mac.tip
+++ b/info/examples/tex-in-practice/list-mac.tip
diff --git a/info/examples/tip/loadedla.tip b/info/examples/tex-in-practice/loadedla.tip
index 295d0a66b7..295d0a66b7 100644
--- a/info/examples/tip/loadedla.tip
+++ b/info/examples/tex-in-practice/loadedla.tip
diff --git a/info/examples/tip/lpagetg.tip b/info/examples/tex-in-practice/lpagetg.tip
index da5b968623..da5b968623 100644
--- a/info/examples/tip/lpagetg.tip
+++ b/info/examples/tex-in-practice/lpagetg.tip
diff --git a/info/examples/tip/macvntip.tex b/info/examples/tex-in-practice/macvntip.tex
index b8c62165b9..b8c62165b9 100644
--- a/info/examples/tip/macvntip.tex
+++ b/info/examples/tex-in-practice/macvntip.tex
diff --git a/info/examples/tip/mathenv.tip b/info/examples/tex-in-practice/mathenv.tip
index 098d040c40..098d040c40 100644
--- a/info/examples/tip/mathenv.tip
+++ b/info/examples/tex-in-practice/mathenv.tip
diff --git a/info/examples/tip/maxmindi.tip b/info/examples/tex-in-practice/maxmindi.tip
index 239222ccd5..239222ccd5 100644
--- a/info/examples/tip/maxmindi.tip
+++ b/info/examples/tex-in-practice/maxmindi.tip
diff --git a/info/examples/tip/mocal.tip b/info/examples/tex-in-practice/mocal.tip
index 240ceb9c9b..240ceb9c9b 100644
--- a/info/examples/tip/mocal.tip
+++ b/info/examples/tex-in-practice/mocal.tip
diff --git a/info/examples/tip/mocal3.tip b/info/examples/tex-in-practice/mocal3.tip
index 67dc386869..67dc386869 100644
--- a/info/examples/tip/mocal3.tip
+++ b/info/examples/tex-in-practice/mocal3.tip
diff --git a/info/examples/tip/modonead.tip b/info/examples/tex-in-practice/modonead.tip
index faf86ca38b..faf86ca38b 100644
--- a/info/examples/tip/modonead.tip
+++ b/info/examples/tex-in-practice/modonead.tip
diff --git a/info/examples/tip/mondofda.tip b/info/examples/tex-in-practice/mondofda.tip
index e6fd7c0fa3..e6fd7c0fa3 100644
--- a/info/examples/tip/mondofda.tip
+++ b/info/examples/tex-in-practice/mondofda.tip
diff --git a/info/examples/tip/mrdel.tip b/info/examples/tex-in-practice/mrdel.tip
index 3069f2913e..3069f2913e 100644
--- a/info/examples/tip/mrdel.tip
+++ b/info/examples/tex-in-practice/mrdel.tip
diff --git a/info/examples/tip/mspaces.tip b/info/examples/tex-in-practice/mspaces.tip
index 42d65e8a62..42d65e8a62 100644
--- a/info/examples/tip/mspaces.tip
+++ b/info/examples/tex-in-practice/mspaces.tip
diff --git a/info/examples/tip/namedef.tip b/info/examples/tex-in-practice/namedef.tip
index bc3906875a..bc3906875a 100644
--- a/info/examples/tip/namedef.tip
+++ b/info/examples/tex-in-practice/namedef.tip
diff --git a/info/examples/tip/nathd.tip b/info/examples/tex-in-practice/nathd.tip
index 1e849c65ba..1e849c65ba 100644
--- a/info/examples/tip/nathd.tip
+++ b/info/examples/tex-in-practice/nathd.tip
diff --git a/info/examples/tip/nctest.tip b/info/examples/tex-in-practice/nctest.tip
index 8b6fe53c93..8b6fe53c93 100644
--- a/info/examples/tip/nctest.tip
+++ b/info/examples/tex-in-practice/nctest.tip
diff --git a/info/examples/tip/ndaysmo.tip b/info/examples/tex-in-practice/ndaysmo.tip
index b45b693426..b45b693426 100644
--- a/info/examples/tip/ndaysmo.tip
+++ b/info/examples/tex-in-practice/ndaysmo.tip
diff --git a/info/examples/tip/new-midi.tip b/info/examples/tex-in-practice/new-midi.tip
index 1cdea3e140..1cdea3e140 100644
--- a/info/examples/tip/new-midi.tip
+++ b/info/examples/tex-in-practice/new-midi.tip
diff --git a/info/examples/tip/newdef.tip b/info/examples/tex-in-practice/newdef.tip
index 28f8cb3081..28f8cb3081 100644
--- a/info/examples/tip/newdef.tip
+++ b/info/examples/tex-in-practice/newdef.tip
diff --git a/info/examples/tip/newfont.tip b/info/examples/tex-in-practice/newfont.tip
index 26788f48cf..26788f48cf 100644
--- a/info/examples/tip/newfont.tip
+++ b/info/examples/tex-in-practice/newfont.tip
diff --git a/info/examples/tip/newinput.tip b/info/examples/tex-in-practice/newinput.tip
index 0008943d0a..0008943d0a 100644
--- a/info/examples/tip/newinput.tip
+++ b/info/examples/tex-in-practice/newinput.tip
diff --git a/info/examples/tip/newoutfr.tip b/info/examples/tex-in-practice/newoutfr.tip
index 5f1be0f30e..5f1be0f30e 100644
--- a/info/examples/tip/newoutfr.tip
+++ b/info/examples/tex-in-practice/newoutfr.tip
diff --git a/info/examples/tip/newpage.tip b/info/examples/tex-in-practice/newpage.tip
index 63a6daf3dc..63a6daf3dc 100644
--- a/info/examples/tip/newpage.tip
+++ b/info/examples/tex-in-practice/newpage.tip
diff --git a/info/examples/tip/nextday.tip b/info/examples/tex-in-practice/nextday.tip
index c4d3760e94..c4d3760e94 100644
--- a/info/examples/tip/nextday.tip
+++ b/info/examples/tex-in-practice/nextday.tip
diff --git a/info/examples/tip/nextmon.tip b/info/examples/tex-in-practice/nextmon.tip
index 09005c9e01..09005c9e01 100644
--- a/info/examples/tip/nextmon.tip
+++ b/info/examples/tex-in-practice/nextmon.tip
diff --git a/info/examples/tip/nlm.tip b/info/examples/tex-in-practice/nlm.tip
index 4f2519e6c1..4f2519e6c1 100644
--- a/info/examples/tip/nlm.tip
+++ b/info/examples/tex-in-practice/nlm.tip
diff --git a/info/examples/tip/norpweek.tip b/info/examples/tex-in-practice/norpweek.tip
index 42b4e29e9d..42b4e29e9d 100644
--- a/info/examples/tip/norpweek.tip
+++ b/info/examples/tex-in-practice/norpweek.tip
diff --git a/info/examples/tip/npright.tip b/info/examples/tex-in-practice/npright.tip
index 17e7bb8737..17e7bb8737 100644
--- a/info/examples/tip/npright.tip
+++ b/info/examples/tex-in-practice/npright.tip
diff --git a/info/examples/tip/ntotext.tip b/info/examples/tex-in-practice/ntotext.tip
index cd1f26a4d0..cd1f26a4d0 100644
--- a/info/examples/tip/ntotext.tip
+++ b/info/examples/tex-in-practice/ntotext.tip
diff --git a/info/examples/tip/numcond.tip b/info/examples/tex-in-practice/numcond.tip
index 11efcaffc5..11efcaffc5 100644
--- a/info/examples/tip/numcond.tip
+++ b/info/examples/tex-in-practice/numcond.tip
diff --git a/info/examples/tip/numdyr.tip b/info/examples/tex-in-practice/numdyr.tip
index 2732bf5aa9..2732bf5aa9 100644
--- a/info/examples/tip/numdyr.tip
+++ b/info/examples/tex-in-practice/numdyr.tip
diff --git a/info/examples/tip/numwhile.tip b/info/examples/tex-in-practice/numwhile.tip
index 1f8bb00271..1f8bb00271 100644
--- a/info/examples/tip/numwhile.tip
+++ b/info/examples/tex-in-practice/numwhile.tip
diff --git a/info/examples/tip/oblines.tip b/info/examples/tex-in-practice/oblines.tip
index c7b294cd9e..c7b294cd9e 100644
--- a/info/examples/tip/oblines.tip
+++ b/info/examples/tex-in-practice/oblines.tip
diff --git a/info/examples/tip/obspaces.tip b/info/examples/tex-in-practice/obspaces.tip
index 13d883fee7..13d883fee7 100644
--- a/info/examples/tip/obspaces.tip
+++ b/info/examples/tex-in-practice/obspaces.tip
diff --git a/info/examples/tip/oct.tip b/info/examples/tex-in-practice/oct.tip
index 8365ad591c..8365ad591c 100644
--- a/info/examples/tip/oct.tip
+++ b/info/examples/tex-in-practice/oct.tip
diff --git a/info/examples/tip/oddprin.tip b/info/examples/tex-in-practice/oddprin.tip
index fe9f42bef9..fe9f42bef9 100644
--- a/info/examples/tip/oddprin.tip
+++ b/info/examples/tex-in-practice/oddprin.tip
diff --git a/info/examples/tip/oeprin.tip b/info/examples/tex-in-practice/oeprin.tip
index be1c0eeba3..be1c0eeba3 100644
--- a/info/examples/tip/oeprin.tip
+++ b/info/examples/tex-in-practice/oeprin.tip
diff --git a/info/examples/tip/ola-1p.tip b/info/examples/tex-in-practice/ola-1p.tip
index 223c9d1124..223c9d1124 100644
--- a/info/examples/tip/ola-1p.tip
+++ b/info/examples/tex-in-practice/ola-1p.tip
diff --git a/info/examples/tip/ola-2p.tip b/info/examples/tex-in-practice/ola-2p.tip
index 69b86108fa..69b86108fa 100644
--- a/info/examples/tip/ola-2p.tip
+++ b/info/examples/tex-in-practice/ola-2p.tip
diff --git a/info/examples/tip/ola-comm.tip b/info/examples/tex-in-practice/ola-comm.tip
index 2f5ea1014f..2f5ea1014f 100644
--- a/info/examples/tip/ola-comm.tip
+++ b/info/examples/tex-in-practice/ola-comm.tip
diff --git a/info/examples/tip/op-endin.tip b/info/examples/tex-in-practice/op-endin.tip
index 21b02f03cb..21b02f03cb 100644
--- a/info/examples/tip/op-endin.tip
+++ b/info/examples/tex-in-practice/op-endin.tip
diff --git a/info/examples/tip/op-pagec.tip b/info/examples/tex-in-practice/op-pagec.tip
index 077231da6e..077231da6e 100644
--- a/info/examples/tip/op-pagec.tip
+++ b/info/examples/tex-in-practice/op-pagec.tip
diff --git a/info/examples/tip/optargx.tip b/info/examples/tex-in-practice/optargx.tip
index 9928fa32cb..9928fa32cb 100644
--- a/info/examples/tip/optargx.tip
+++ b/info/examples/tex-in-practice/optargx.tip
diff --git a/info/examples/tip/orcards.tip b/info/examples/tex-in-practice/orcards.tip
index 337a7d88b6..337a7d88b6 100644
--- a/info/examples/tip/orcards.tip
+++ b/info/examples/tex-in-practice/orcards.tip
diff --git a/info/examples/tip/ordbrule.tip b/info/examples/tex-in-practice/ordbrule.tip
index cab5d682a8..cab5d682a8 100644
--- a/info/examples/tip/ordbrule.tip
+++ b/info/examples/tex-in-practice/ordbrule.tip
diff --git a/info/examples/tip/orsimple.tip b/info/examples/tex-in-practice/orsimple.tip
index a49920d5c2..a49920d5c2 100644
--- a/info/examples/tip/orsimple.tip
+++ b/info/examples/tex-in-practice/orsimple.tip
diff --git a/info/examples/tip/out-ds.tip b/info/examples/tex-in-practice/out-ds.tip
index 04ca97b0bc..04ca97b0bc 100644
--- a/info/examples/tip/out-ds.tip
+++ b/info/examples/tex-in-practice/out-ds.tip
diff --git a/info/examples/tip/out2-or.tip b/info/examples/tex-in-practice/out2-or.tip
index b412be9f8b..b412be9f8b 100644
--- a/info/examples/tip/out2-or.tip
+++ b/info/examples/tex-in-practice/out2-or.tip
diff --git a/info/examples/tip/outf-rad.tip b/info/examples/tex-in-practice/outf-rad.tip
index 4ee4b7640c..4ee4b7640c 100644
--- a/info/examples/tip/outf-rad.tip
+++ b/info/examples/tex-in-practice/outf-rad.tip
diff --git a/info/examples/tip/outpsel.tip b/info/examples/tex-in-practice/outpsel.tip
index 91b2f09882..91b2f09882 100644
--- a/info/examples/tip/outpsel.tip
+++ b/info/examples/tex-in-practice/outpsel.tip
diff --git a/info/examples/tip/par-fl.tip b/info/examples/tex-in-practice/par-fl.tip
index a1d7a58253..a1d7a58253 100644
--- a/info/examples/tip/par-fl.tip
+++ b/info/examples/tex-in-practice/par-fl.tip
diff --git a/info/examples/tip/par-lab.tip b/info/examples/tex-in-practice/par-lab.tip
index 0c41944b69..0c41944b69 100644
--- a/info/examples/tip/par-lab.tip
+++ b/info/examples/tex-in-practice/par-lab.tip
diff --git a/info/examples/tip/par-lcl.tip b/info/examples/tex-in-practice/par-lcl.tip
index 5f503bcc51..5f503bcc51 100644
--- a/info/examples/tip/par-lcl.tip
+++ b/info/examples/tex-in-practice/par-lcl.tip
diff --git a/info/examples/tip/parin.tip b/info/examples/tex-in-practice/parin.tip
index b18b4cd20d..b18b4cd20d 100644
--- a/info/examples/tip/parin.tip
+++ b/info/examples/tex-in-practice/parin.tip
diff --git a/info/examples/tip/part-cr.tip b/info/examples/tex-in-practice/part-cr.tip
index 0627218539..0627218539 100644
--- a/info/examples/tip/part-cr.tip
+++ b/info/examples/tex-in-practice/part-cr.tip
diff --git a/info/examples/tip/part-lab.tip b/info/examples/tex-in-practice/part-lab.tip
index 1d8981dcd9..1d8981dcd9 100644
--- a/info/examples/tip/part-lab.tip
+++ b/info/examples/tex-in-practice/part-lab.tip
diff --git a/info/examples/tip/part-mac.tip b/info/examples/tex-in-practice/part-mac.tip
index fa45b1fa10..fa45b1fa10 100644
--- a/info/examples/tip/part-mac.tip
+++ b/info/examples/tex-in-practice/part-mac.tip
diff --git a/info/examples/tip/parv-1.tip b/info/examples/tex-in-practice/parv-1.tip
index d2b26e0f56..d2b26e0f56 100644
--- a/info/examples/tip/parv-1.tip
+++ b/info/examples/tex-in-practice/parv-1.tip
diff --git a/info/examples/tip/pdollars.tip b/info/examples/tex-in-practice/pdollars.tip
index fdafa4044f..fdafa4044f 100644
--- a/info/examples/tip/pdollars.tip
+++ b/info/examples/tex-in-practice/pdollars.tip
diff --git a/info/examples/tip/pickfs.tip b/info/examples/tex-in-practice/pickfs.tip
index b779b03e10..b779b03e10 100644
--- a/info/examples/tip/pickfs.tip
+++ b/info/examples/tex-in-practice/pickfs.tip
diff --git a/info/examples/tip/pm-4.tip b/info/examples/tex-in-practice/pm-4.tip
index 86721bf4f7..86721bf4f7 100644
--- a/info/examples/tip/pm-4.tip
+++ b/info/examples/tex-in-practice/pm-4.tip
diff --git a/info/examples/tip/pm-auxco.tip b/info/examples/tex-in-practice/pm-auxco.tip
index 0b01f9455d..0b01f9455d 100644
--- a/info/examples/tip/pm-auxco.tip
+++ b/info/examples/tex-in-practice/pm-auxco.tip
diff --git a/info/examples/tip/pm-bas.tip b/info/examples/tex-in-practice/pm-bas.tip
index e979179547..e979179547 100644
--- a/info/examples/tip/pm-bas.tip
+++ b/info/examples/tex-in-practice/pm-bas.tip
diff --git a/info/examples/tip/pm-main.tip b/info/examples/tex-in-practice/pm-main.tip
index 2ec2287495..2ec2287495 100644
--- a/info/examples/tip/pm-main.tip
+++ b/info/examples/tex-in-practice/pm-main.tip
diff --git a/info/examples/tip/pm-pagen.tip b/info/examples/tex-in-practice/pm-pagen.tip
index 8ee88fc978..8ee88fc978 100644
--- a/info/examples/tip/pm-pagen.tip
+++ b/info/examples/tex-in-practice/pm-pagen.tip
diff --git a/info/examples/tip/pm-wrc.tip b/info/examples/tex-in-practice/pm-wrc.tip
index a6cc96c4d7..a6cc96c4d7 100644
--- a/info/examples/tip/pm-wrc.tip
+++ b/info/examples/tex-in-practice/pm-wrc.tip
diff --git a/info/examples/tip/pmtime.tip b/info/examples/tex-in-practice/pmtime.tip
index 98042556e5..98042556e5 100644
--- a/info/examples/tip/pmtime.tip
+++ b/info/examples/tex-in-practice/pmtime.tip
diff --git a/info/examples/tip/poorbold.tip b/info/examples/tex-in-practice/poorbold.tip
index 6c336e0c1f..6c336e0c1f 100644
--- a/info/examples/tip/poorbold.tip
+++ b/info/examples/tex-in-practice/poorbold.tip
diff --git a/info/examples/tip/pralph.tip b/info/examples/tex-in-practice/pralph.tip
index f7f92f7615..f7f92f7615 100644
--- a/info/examples/tip/pralph.tip
+++ b/info/examples/tex-in-practice/pralph.tip
diff --git a/info/examples/tip/prevday.tip b/info/examples/tex-in-practice/prevday.tip
index 2e4c8829be..2e4c8829be 100644
--- a/info/examples/tip/prevday.tip
+++ b/info/examples/tex-in-practice/prevday.tip
diff --git a/info/examples/tip/prevmon.tip b/info/examples/tex-in-practice/prevmon.tip
index 9513222954..9513222954 100644
--- a/info/examples/tip/prevmon.tip
+++ b/info/examples/tex-in-practice/prevmon.tip
diff --git a/info/examples/tip/prhyph.tip b/info/examples/tex-in-practice/prhyph.tip
index 1d7737a5c3..1d7737a5c3 100644
--- a/info/examples/tip/prhyph.tip
+++ b/info/examples/tex-in-practice/prhyph.tip
diff --git a/info/examples/tip/primmark.tip b/info/examples/tex-in-practice/primmark.tip
index 2e0e5dff76..2e0e5dff76 100644
--- a/info/examples/tip/primmark.tip
+++ b/info/examples/tex-in-practice/primmark.tip
diff --git a/info/examples/tip/printast.tip b/info/examples/tex-in-practice/printast.tip
index 3ad5263963..3ad5263963 100644
--- a/info/examples/tip/printast.tip
+++ b/info/examples/tex-in-practice/printast.tip
diff --git a/info/examples/tip/printco.tip b/info/examples/tex-in-practice/printco.tip
index 2c41b3dc3c..2c41b3dc3c 100644
--- a/info/examples/tip/printco.tip
+++ b/info/examples/tex-in-practice/printco.tip
diff --git a/info/examples/tip/printreg.tip b/info/examples/tex-in-practice/printreg.tip
index e7e3335b5b..e7e3335b5b 100644
--- a/info/examples/tip/printreg.tip
+++ b/info/examples/tex-in-practice/printreg.tip
diff --git a/info/examples/tip/prmode.tip b/info/examples/tex-in-practice/prmode.tip
index 5576e88c83..5576e88c83 100644
--- a/info/examples/tip/prmode.tip
+++ b/info/examples/tex-in-practice/prmode.tip
diff --git a/info/examples/tip/prmonth.tip b/info/examples/tex-in-practice/prmonth.tip
index dd9ea460f8..dd9ea460f8 100644
--- a/info/examples/tip/prmonth.tip
+++ b/info/examples/tex-in-practice/prmonth.tip
diff --git a/info/examples/tip/prot.tip b/info/examples/tex-in-practice/prot.tip
index 771a25fd2f..771a25fd2f 100644
--- a/info/examples/tip/prot.tip
+++ b/info/examples/tex-in-practice/prot.tip
diff --git a/info/examples/tip/rangetst.tip b/info/examples/tex-in-practice/rangetst.tip
index b4966fd908..b4966fd908 100644
--- a/info/examples/tip/rangetst.tip
+++ b/info/examples/tex-in-practice/rangetst.tip
diff --git a/info/examples/tip/rboxt.tip b/info/examples/tex-in-practice/rboxt.tip
index d3e45a3599..d3e45a3599 100644
--- a/info/examples/tip/rboxt.tip
+++ b/info/examples/tex-in-practice/rboxt.tip
diff --git a/info/examples/tip/readme b/info/examples/tex-in-practice/readme
index eaaeda142b..eaaeda142b 100644
--- a/info/examples/tip/readme
+++ b/info/examples/tex-in-practice/readme
diff --git a/info/examples/tip/readnu.tip b/info/examples/tex-in-practice/readnu.tip
index bf55ecd290..bf55ecd290 100644
--- a/info/examples/tip/readnu.tip
+++ b/info/examples/tex-in-practice/readnu.tip
diff --git a/info/examples/tip/redtost.tip b/info/examples/tex-in-practice/redtost.tip
index acbbfcf59e..acbbfcf59e 100644
--- a/info/examples/tip/redtost.tip
+++ b/info/examples/tex-in-practice/redtost.tip
diff --git a/info/examples/tip/remtlsp.tip b/info/examples/tex-in-practice/remtlsp.tip
index 87bac0dd08..87bac0dd08 100644
--- a/info/examples/tip/remtlsp.tip
+++ b/info/examples/tex-in-practice/remtlsp.tip
diff --git a/info/examples/tip/restring.tip b/info/examples/tex-in-practice/restring.tip
index f83e586b72..f83e586b72 100644
--- a/info/examples/tip/restring.tip
+++ b/info/examples/tex-in-practice/restring.tip
diff --git a/info/examples/tip/reverses.tip b/info/examples/tex-in-practice/reverses.tip
index 08921b4d9b..08921b4d9b 100644
--- a/info/examples/tip/reverses.tip
+++ b/info/examples/tex-in-practice/reverses.tip
diff --git a/info/examples/tip/rh-dict.tip b/info/examples/tex-in-practice/rh-dict.tip
index a2c4315613..a2c4315613 100644
--- a/info/examples/tip/rh-dict.tip
+++ b/info/examples/tex-in-practice/rh-dict.tip
diff --git a/info/examples/tip/robust.tip b/info/examples/tex-in-practice/robust.tip
index 925a2a2606..925a2a2606 100644
--- a/info/examples/tip/robust.tip
+++ b/info/examples/tex-in-practice/robust.tip
diff --git a/info/examples/tip/samplepa.tip b/info/examples/tex-in-practice/samplepa.tip
index 814f269405..814f269405 100644
--- a/info/examples/tip/samplepa.tip
+++ b/info/examples/tex-in-practice/samplepa.tip
diff --git a/info/examples/tip/setstrut.tip b/info/examples/tex-in-practice/setstrut.tip
index 441ec442b7..441ec442b7 100644
--- a/info/examples/tip/setstrut.tip
+++ b/info/examples/tex-in-practice/setstrut.tip
diff --git a/info/examples/tip/shboxes.tip b/info/examples/tex-in-practice/shboxes.tip
index 6137e5ab7e..6137e5ab7e 100644
--- a/info/examples/tip/shboxes.tip
+++ b/info/examples/tex-in-practice/shboxes.tip
diff --git a/info/examples/tip/shiftudb.tip b/info/examples/tex-in-practice/shiftudb.tip
index b2554b525a..b2554b525a 100644
--- a/info/examples/tip/shiftudb.tip
+++ b/info/examples/tex-in-practice/shiftudb.tip
diff --git a/info/examples/tip/showpll.tip b/info/examples/tex-in-practice/showpll.tip
index 896edbf166..896edbf166 100644
--- a/info/examples/tip/showpll.tip
+++ b/info/examples/tex-in-practice/showpll.tip
diff --git a/info/examples/tip/showx.tip b/info/examples/tex-in-practice/showx.tip
index 7a02c3ef1f..7a02c3ef1f 100644
--- a/info/examples/tip/showx.tip
+++ b/info/examples/tex-in-practice/showx.tip
diff --git a/info/examples/tip/sigline.tip b/info/examples/tex-in-practice/sigline.tip
index 1fe31c966c..1fe31c966c 100644
--- a/info/examples/tip/sigline.tip
+++ b/info/examples/tex-in-practice/sigline.tip
diff --git a/info/examples/tip/spacefac.tip b/info/examples/tex-in-practice/spacefac.tip
index 4e9488cc27..4e9488cc27 100644
--- a/info/examples/tip/spacefac.tip
+++ b/info/examples/tex-in-practice/spacefac.tip
diff --git a/info/examples/tip/splitpar.tip b/info/examples/tex-in-practice/splitpar.tip
index d40236d2df..d40236d2df 100644
--- a/info/examples/tip/splitpar.tip
+++ b/info/examples/tex-in-practice/splitpar.tip
diff --git a/info/examples/tip/ssmath.tip b/info/examples/tex-in-practice/ssmath.tip
index 395661358e..395661358e 100644
--- a/info/examples/tip/ssmath.tip
+++ b/info/examples/tex-in-practice/ssmath.tip
diff --git a/info/examples/tip/strleng.tip b/info/examples/tex-in-practice/strleng.tip
index 053de2ca60..053de2ca60 100644
--- a/info/examples/tip/strleng.tip
+++ b/info/examples/tex-in-practice/strleng.tip
diff --git a/info/examples/tip/stswitch.tip b/info/examples/tex-in-practice/stswitch.tip
index 76d8c936d3..76d8c936d3 100644
--- a/info/examples/tip/stswitch.tip
+++ b/info/examples/tex-in-practice/stswitch.tip
diff --git a/info/examples/tip/substf.tip b/info/examples/tex-in-practice/substf.tip
index d091324c5f..d091324c5f 100644
--- a/info/examples/tip/substf.tip
+++ b/info/examples/tex-in-practice/substf.tip
diff --git a/info/examples/tip/sumhd.tip b/info/examples/tex-in-practice/sumhd.tip
index fd81044f0a..fd81044f0a 100644
--- a/info/examples/tip/sumhd.tip
+++ b/info/examples/tex-in-practice/sumhd.tip
diff --git a/info/examples/tip/swapbox.tip b/info/examples/tex-in-practice/swapbox.tip
index a5bdcd9b15..a5bdcd9b15 100644
--- a/info/examples/tip/swapbox.tip
+++ b/info/examples/tex-in-practice/swapbox.tip
diff --git a/info/examples/tip/tabcent.tip b/info/examples/tex-in-practice/tabcent.tip
index c84cae05af..c84cae05af 100644
--- a/info/examples/tip/tabcent.tip
+++ b/info/examples/tex-in-practice/tabcent.tip
diff --git a/info/examples/tip/tabswb.tip b/info/examples/tex-in-practice/tabswb.tip
index 87d9698106..87d9698106 100644
--- a/info/examples/tip/tabswb.tip
+++ b/info/examples/tex-in-practice/tabswb.tip
diff --git a/info/examples/tip/testdef.tip b/info/examples/tex-in-practice/testdef.tip
index d9bff77499..d9bff77499 100644
--- a/info/examples/tip/testdef.tip
+++ b/info/examples/tex-in-practice/testdef.tip
diff --git a/info/examples/tip/testsubs.tip b/info/examples/tex-in-practice/testsubs.tip
index dc5bcf2691..dc5bcf2691 100644
--- a/info/examples/tip/testsubs.tip
+++ b/info/examples/tex-in-practice/testsubs.tip
diff --git a/info/examples/tip/texip.idx b/info/examples/tex-in-practice/texip.idx
index 3283cc0306..3283cc0306 100644
--- a/info/examples/tip/texip.idx
+++ b/info/examples/tex-in-practice/texip.idx
diff --git a/info/examples/tip/texipexp.tex b/info/examples/tex-in-practice/texipexp.tex
index 710fc3013e..710fc3013e 100644
--- a/info/examples/tip/texipexp.tex
+++ b/info/examples/tex-in-practice/texipexp.tex
diff --git a/info/examples/tip/tip-bugs.tex b/info/examples/tex-in-practice/tip-bugs.tex
index ad2c2b1fbf..ad2c2b1fbf 100644
--- a/info/examples/tip/tip-bugs.tex
+++ b/info/examples/tex-in-practice/tip-bugs.tex
diff --git a/info/examples/tip/toc-mac.tip b/info/examples/tex-in-practice/toc-mac.tip
index e698de32fb..e698de32fb 100644
--- a/info/examples/tip/toc-mac.tip
+++ b/info/examples/tex-in-practice/toc-mac.tip
diff --git a/info/examples/tip/today.tip b/info/examples/tex-in-practice/today.tip
index 3cf716e0a7..3cf716e0a7 100644
--- a/info/examples/tip/today.tip
+++ b/info/examples/tex-in-practice/today.tip
diff --git a/info/examples/tip/todayx.tip b/info/examples/tex-in-practice/todayx.tip
index 4a5cc70eb3..4a5cc70eb3 100644
--- a/info/examples/tip/todayx.tip
+++ b/info/examples/tex-in-practice/todayx.tip
diff --git a/info/examples/tip/topinfix.tip b/info/examples/tex-in-practice/topinfix.tip
index ec2accf885..ec2accf885 100644
--- a/info/examples/tip/topinfix.tip
+++ b/info/examples/tex-in-practice/topinfix.tip
diff --git a/info/examples/tip/ts-brefm.tip b/info/examples/tex-in-practice/ts-brefm.tip
index 3c5ba3e1bd..3c5ba3e1bd 100644
--- a/info/examples/tip/ts-brefm.tip
+++ b/info/examples/tex-in-practice/ts-brefm.tip
diff --git a/info/examples/tip/ts-bul.tip b/info/examples/tex-in-practice/ts-bul.tip
index 8d82b4145c..8d82b4145c 100644
--- a/info/examples/tip/ts-bul.tip
+++ b/info/examples/tex-in-practice/ts-bul.tip
diff --git a/info/examples/tip/ts-chap.tip b/info/examples/tex-in-practice/ts-chap.tip
index c59a4a08fb..c59a4a08fb 100644
--- a/info/examples/tip/ts-chap.tip
+++ b/info/examples/tex-in-practice/ts-chap.tip
diff --git a/info/examples/tip/ts-chhe.tip b/info/examples/tex-in-practice/ts-chhe.tip
index 4ade3e51c9..4ade3e51c9 100644
--- a/info/examples/tip/ts-chhe.tip
+++ b/info/examples/tex-in-practice/ts-chhe.tip
diff --git a/info/examples/tip/ts-crm.tip b/info/examples/tex-in-practice/ts-crm.tip
index 83327431f3..83327431f3 100644
--- a/info/examples/tip/ts-crm.tip
+++ b/info/examples/tex-in-practice/ts-crm.tip
diff --git a/info/examples/tip/ts-dime1.tip b/info/examples/tex-in-practice/ts-dime1.tip
index c098bf0690..c098bf0690 100644
--- a/info/examples/tip/ts-dime1.tip
+++ b/info/examples/tex-in-practice/ts-dime1.tip
diff --git a/info/examples/tip/ts-dime2.tip b/info/examples/tex-in-practice/ts-dime2.tip
index 32c8524a75..32c8524a75 100644
--- a/info/examples/tip/ts-dime2.tip
+++ b/info/examples/tex-in-practice/ts-dime2.tip
diff --git a/info/examples/tip/ts-dime3.tip b/info/examples/tex-in-practice/ts-dime3.tip
index a085aef107..a085aef107 100644
--- a/info/examples/tip/ts-dime3.tip
+++ b/info/examples/tex-in-practice/ts-dime3.tip
diff --git a/info/examples/tip/ts-enum.tip b/info/examples/tex-in-practice/ts-enum.tip
index 7bdfa97789..7bdfa97789 100644
--- a/info/examples/tip/ts-enum.tip
+++ b/info/examples/tex-in-practice/ts-enum.tip
diff --git a/info/examples/tip/ts-float.tip b/info/examples/tex-in-practice/ts-float.tip
index 1ecb25db71..1ecb25db71 100644
--- a/info/examples/tip/ts-float.tip
+++ b/info/examples/tex-in-practice/ts-float.tip
diff --git a/info/examples/tip/ts-fonts.tip b/info/examples/tex-in-practice/ts-fonts.tip
index 3d3e7a0d13..3d3e7a0d13 100644
--- a/info/examples/tip/ts-fonts.tip
+++ b/info/examples/tex-in-practice/ts-fonts.tip
diff --git a/info/examples/tip/ts-foot.tip b/info/examples/tex-in-practice/ts-foot.tip
index 47d3982dd6..47d3982dd6 100644
--- a/info/examples/tip/ts-foot.tip
+++ b/info/examples/tex-in-practice/ts-foot.tip
diff --git a/info/examples/tip/ts-gnot.tip b/info/examples/tex-in-practice/ts-gnot.tip
index 811c82287b..811c82287b 100644
--- a/info/examples/tip/ts-gnot.tip
+++ b/info/examples/tex-in-practice/ts-gnot.tip
diff --git a/info/examples/tip/ts-hall.tip b/info/examples/tex-in-practice/ts-hall.tip
index 5d4731bdd0..5d4731bdd0 100644
--- a/info/examples/tip/ts-hall.tip
+++ b/info/examples/tex-in-practice/ts-hall.tip
diff --git a/info/examples/tip/ts-hmore.tip b/info/examples/tex-in-practice/ts-hmore.tip
index dcc73dc9dc..dcc73dc9dc 100644
--- a/info/examples/tip/ts-hmore.tip
+++ b/info/examples/tex-in-practice/ts-hmore.tip
diff --git a/info/examples/tip/ts-hyph.tip b/info/examples/tex-in-practice/ts-hyph.tip
index 470cea540f..470cea540f 100644
--- a/info/examples/tip/ts-hyph.tip
+++ b/info/examples/tex-in-practice/ts-hyph.tip
diff --git a/info/examples/tip/ts-itize.tip b/info/examples/tex-in-practice/ts-itize.tip
index 2dafcfa20a..2dafcfa20a 100644
--- a/info/examples/tip/ts-itize.tip
+++ b/info/examples/tex-in-practice/ts-itize.tip
diff --git a/info/examples/tip/ts-lazy.tip b/info/examples/tex-in-practice/ts-lazy.tip
index cbd56c8191..cbd56c8191 100644
--- a/info/examples/tip/ts-lazy.tip
+++ b/info/examples/tex-in-practice/ts-lazy.tip
diff --git a/info/examples/tip/ts-loft.tip b/info/examples/tex-in-practice/ts-loft.tip
index e77c9b94c8..e77c9b94c8 100644
--- a/info/examples/tip/ts-loft.tip
+++ b/info/examples/tex-in-practice/ts-loft.tip
diff --git a/info/examples/tip/ts-logo.tip b/info/examples/tex-in-practice/ts-logo.tip
index 63fcfe3f2c..63fcfe3f2c 100644
--- a/info/examples/tip/ts-logo.tip
+++ b/info/examples/tex-in-practice/ts-logo.tip
diff --git a/info/examples/tip/ts-main.tip b/info/examples/tex-in-practice/ts-main.tip
index 255055a55c..255055a55c 100644
--- a/info/examples/tip/ts-main.tip
+++ b/info/examples/tex-in-practice/ts-main.tip
diff --git a/info/examples/tip/ts-outpu.tip b/info/examples/tex-in-practice/ts-outpu.tip
index 39902664bf..39902664bf 100644
--- a/info/examples/tip/ts-outpu.tip
+++ b/info/examples/tex-in-practice/ts-outpu.tip
diff --git a/info/examples/tip/ts-page2.tip b/info/examples/tex-in-practice/ts-page2.tip
index 974be452c2..974be452c2 100644
--- a/info/examples/tip/ts-page2.tip
+++ b/info/examples/tex-in-practice/ts-page2.tip
diff --git a/info/examples/tip/ts-pager.tip b/info/examples/tex-in-practice/ts-pager.tip
index 68e3688a0c..68e3688a0c 100644
--- a/info/examples/tip/ts-pager.tip
+++ b/info/examples/tex-in-practice/ts-pager.tip
diff --git a/info/examples/tip/ts-robst.tip b/info/examples/tex-in-practice/ts-robst.tip
index c747fd9c61..c747fd9c61 100644
--- a/info/examples/tip/ts-robst.tip
+++ b/info/examples/tex-in-practice/ts-robst.tip
diff --git a/info/examples/tip/ts-set.tip b/info/examples/tex-in-practice/ts-set.tip
index 12b7cbed43..12b7cbed43 100644
--- a/info/examples/tip/ts-set.tip
+++ b/info/examples/tex-in-practice/ts-set.tip
diff --git a/info/examples/tip/ts-shead.tip b/info/examples/tex-in-practice/ts-shead.tip
index 97904c01bb..97904c01bb 100644
--- a/info/examples/tip/ts-shead.tip
+++ b/info/examples/tex-in-practice/ts-shead.tip
diff --git a/info/examples/tip/ts-subst.tip b/info/examples/tex-in-practice/ts-subst.tip
index 57c1b61975..57c1b61975 100644
--- a/info/examples/tip/ts-subst.tip
+++ b/info/examples/tex-in-practice/ts-subst.tip
diff --git a/info/examples/tip/ts-toc.tip b/info/examples/tex-in-practice/ts-toc.tip
index e4b5b11f69..e4b5b11f69 100644
--- a/info/examples/tip/ts-toc.tip
+++ b/info/examples/tex-in-practice/ts-toc.tip
diff --git a/info/examples/tip/ts-verb.tip b/info/examples/tex-in-practice/ts-verb.tip
index cd9fd48b91..cd9fd48b91 100644
--- a/info/examples/tip/ts-verb.tip
+++ b/info/examples/tex-in-practice/ts-verb.tip
diff --git a/info/examples/tip/ts-verb1.tip b/info/examples/tex-in-practice/ts-verb1.tip
index 106ce77d91..106ce77d91 100644
--- a/info/examples/tip/ts-verb1.tip
+++ b/info/examples/tex-in-practice/ts-verb1.tip
diff --git a/info/examples/tip/ts-verb2.tip b/info/examples/tex-in-practice/ts-verb2.tip
index bd10258d96..bd10258d96 100644
--- a/info/examples/tip/ts-verb2.tip
+++ b/info/examples/tex-in-practice/ts-verb2.tip
diff --git a/info/examples/tip/ts-vers.tip b/info/examples/tex-in-practice/ts-vers.tip
index 4e9b14d2a7..4e9b14d2a7 100644
--- a/info/examples/tip/ts-vers.tip
+++ b/info/examples/tex-in-practice/ts-vers.tip
diff --git a/info/examples/tip/ts-vol.tip b/info/examples/tex-in-practice/ts-vol.tip
index 71a9ed3c5d..71a9ed3c5d 100644
--- a/info/examples/tip/ts-vol.tip
+++ b/info/examples/tex-in-practice/ts-vol.tip
diff --git a/info/examples/tip/ts-wind.tip b/info/examples/tex-in-practice/ts-wind.tip
index fbb94c0c33..fbb94c0c33 100644
--- a/info/examples/tip/ts-wind.tip
+++ b/info/examples/tex-in-practice/ts-wind.tip
diff --git a/info/examples/tip/ts-writc.tip b/info/examples/tex-in-practice/ts-writc.tip
index 9606338dac..9606338dac 100644
--- a/info/examples/tip/ts-writc.tip
+++ b/info/examples/tex-in-practice/ts-writc.tip
diff --git a/info/examples/tip/valdecpo.tip b/info/examples/tex-in-practice/valdecpo.tip
index 8d645b0d08..8d645b0d08 100644
--- a/info/examples/tip/valdecpo.tip
+++ b/info/examples/tex-in-practice/valdecpo.tip
diff --git a/info/examples/tip/vcentx.tip b/info/examples/tex-in-practice/vcentx.tip
index d272a7da1c..d272a7da1c 100644
--- a/info/examples/tip/vcentx.tip
+++ b/info/examples/tex-in-practice/vcentx.tip
diff --git a/info/examples/tip/verb-bas.tip b/info/examples/tex-in-practice/verb-bas.tip
index dccaa8c1f3..dccaa8c1f3 100644
--- a/info/examples/tip/verb-bas.tip
+++ b/info/examples/tex-in-practice/verb-bas.tip
diff --git a/info/examples/tip/verb-mac.tip b/info/examples/tex-in-practice/verb-mac.tip
index db3a3a1261..db3a3a1261 100644
--- a/info/examples/tip/verb-mac.tip
+++ b/info/examples/tex-in-practice/verb-mac.tip
diff --git a/info/examples/tip/verb.tip b/info/examples/tex-in-practice/verb.tip
index 43236cd845..43236cd845 100644
--- a/info/examples/tip/verb.tip
+++ b/info/examples/tex-in-practice/verb.tip
diff --git a/info/examples/tip/verbdisp.tip b/info/examples/tex-in-practice/verbdisp.tip
index 9cf598d474..9cf598d474 100644
--- a/info/examples/tip/verbdisp.tip
+++ b/info/examples/tex-in-practice/verbdisp.tip
diff --git a/info/examples/tip/verbwr.tip b/info/examples/tex-in-practice/verbwr.tip
index e243f82bcf..e243f82bcf 100644
--- a/info/examples/tip/verbwr.tip
+++ b/info/examples/tex-in-practice/verbwr.tip
diff --git a/info/examples/tip/vsmax.tip b/info/examples/tex-in-practice/vsmax.tip
index bc9eab50f2..bc9eab50f2 100644
--- a/info/examples/tip/vsmax.tip
+++ b/info/examples/tex-in-practice/vsmax.tip
diff --git a/info/examples/tip/vtbox.tip b/info/examples/tex-in-practice/vtbox.tip
index ee50844163..ee50844163 100644
--- a/info/examples/tip/vtbox.tip
+++ b/info/examples/tex-in-practice/vtbox.tip
diff --git a/info/examples/tip/vwrt-mac.tip b/info/examples/tex-in-practice/vwrt-mac.tip
index 7490427317..7490427317 100644
--- a/info/examples/tip/vwrt-mac.tip
+++ b/info/examples/tex-in-practice/vwrt-mac.tip
diff --git a/info/examples/tip/weekofyr.tip b/info/examples/tex-in-practice/weekofyr.tip
index 071eb36e35..071eb36e35 100644
--- a/info/examples/tip/weekofyr.tip
+++ b/info/examples/tex-in-practice/weekofyr.tip
diff --git a/info/examples/tip/widestc.tip b/info/examples/tex-in-practice/widestc.tip
index 7e077b9248..7e077b9248 100644
--- a/info/examples/tip/widestc.tip
+++ b/info/examples/tex-in-practice/widestc.tip
diff --git a/info/examples/tip/wl-parcp.tip b/info/examples/tex-in-practice/wl-parcp.tip
index ac9b462a23..ac9b462a23 100644
--- a/info/examples/tip/wl-parcp.tip
+++ b/info/examples/tex-in-practice/wl-parcp.tip
diff --git a/info/examples/tip/wrtoc.tip b/info/examples/tex-in-practice/wrtoc.tip
index 11267744de..11267744de 100644
--- a/info/examples/tip/wrtoc.tip
+++ b/info/examples/tex-in-practice/wrtoc.tip
diff --git a/info/examples/tip/wrverbar.tip b/info/examples/tex-in-practice/wrverbar.tip
index 2e327c44cb..2e327c44cb 100644
--- a/info/examples/tip/wrverbar.tip
+++ b/info/examples/tex-in-practice/wrverbar.tip
diff --git a/info/examples/tip/wtolist.tip b/info/examples/tex-in-practice/wtolist.tip
index 1919568d70..1919568d70 100644
--- a/info/examples/tip/wtolist.tip
+++ b/info/examples/tex-in-practice/wtolist.tip
diff --git a/info/examples/tip/x-parsh.tip b/info/examples/tex-in-practice/x-parsh.tip
index 63f30a6a02..63f30a6a02 100644
--- a/info/examples/tip/x-parsh.tip
+++ b/info/examples/tex-in-practice/x-parsh.tip
diff --git a/info/examples/tip/yearcal.tip b/info/examples/tex-in-practice/yearcal.tip
index c9ce2d2b18..c9ce2d2b18 100644
--- a/info/examples/tip/yearcal.tip
+++ b/info/examples/tex-in-practice/yearcal.tip
diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx
index bc2be5f112..885a059c97 100644
--- a/macros/latex/contrib/easybook/easybook.dtx
+++ b/macros/latex/contrib/easybook/easybook.dtx
@@ -15,7 +15,7 @@
%<*class>
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
\RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2024/01/30}{2024R}
+\ProvidesExplClass{easybook}{2024/01/31}{2024S}
{Easily typesetting Chinese theses or books}
\bool_set_false:N \l__eb_compile_draft_bool
@@ -297,7 +297,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
\RequirePackage{l3keys2e,etoolbox}
-\ProvidesExplPackage{easybase}{2024/01/30}{2024R}
+\ProvidesExplPackage{easybase}{2024/01/31}{2024S}
{Easily typesetting Chinese theses or books}
\cs_generate_variant:Nn \dim_set:Nn { NV }
@@ -384,7 +384,6 @@
\seq_map_function:NN
\l_tmpb_seq \eb_match_load_package:n
}
-\msg_redirect_module:nnn { hooks } { warning } { info }
\bool_set_true:N \l__eb_class_mode_book_bool
\bool_set_false:N \l__eb_compile_draft_bool
@@ -1416,6 +1415,7 @@
{
#1 .meta:nn = { ctex/#1 } {##1},
#1/between .tl_set:c = l__eb_toc_#1_between_hook_tl,
+ #1/between .initial:n = \bool_if:NT \l__eb_class_mode_book_bool { \vspace*{-10pt} },
#1/tocline .cs_set:cp = { eb@tocline@#1 } ##1##2,
#1/tocline .initial:n = \listnumberline{##1}##2
}
@@ -1487,6 +1487,7 @@
{
\ctex_define:n
{
+ #1 .meta:nn = { ctex/#1 } {##1},
#1/tocformat .tl_set:c = l__eb_toc_#1_format_tl,
#1/tocformat+ .code:n = \tl_put_right:cn { l__eb_toc_#1_format_tl } {##1},
#1/tocformat~+ .code:n = \tl_put_right:cn { l__eb_toc_#1_format_tl } {##1},
@@ -1504,6 +1505,12 @@
{\eb_toc_entry_if_hang:n {#1}}{}
{\tl_use:c { l__eb_toc_#1_rule_tl }}
[\tl_use:c { l__eb_toc_#1_below_tl }]
+ \ctex_set:nn {#1}
+ {
+ tocindent = 0em,
+ tocrule = \tocrule{$\cdot$},
+ tocafter = \hspace{1em}
+ }
}
\cs_new_protected:Npn \RegisterTocName #1
{
@@ -1512,13 +1519,6 @@
}
\seq_map_function:NN
\c__ctex_headings_seq \RegisterTocName
-\seq_remove_all:Nn \c__ctex_headings_seq { table }
-\seq_remove_all:Nn \c__ctex_headings_seq { figure }
-\seq_remove_all:Nn \c__ctex_headings_seq { lstlisting }
-\cs_new_protected:Npn \eb@key@path@meta@define #1
- { \ctex_define:n { #1 .meta:nn = { ctex/#1 } {##1} } }
-\seq_map_function:NN
-\c__ctex_headings_seq \eb@key@path@meta@define
\eb_seq_map_inline:nn
{
tocformat,tocformat+,tocformat~+,
@@ -1627,17 +1627,7 @@
}
},
subsection =
- {
- tocindent = \bool_if:NTF \l__eb_class_mode_book_bool { 3.8em } { 1.4em },
- tocrule = \tocrule{$\cdot$}
- },
- float =
- {
- tocindent = 0em,
- tocrule = \tocrule{$\cdot$},
- between = \bool_if:NT \l__eb_class_mode_book_bool { \vspace*{-10pt} }
- },
- tocset/tocafter-every = \hspace{1em}
+ { tocindent = \bool_if:NTF \l__eb_class_mode_book_bool { 3.8em } { 1.4em } }
}
\ctex_at_end_package:nn { imakeidx }
@@ -2330,7 +2320,7 @@
}
%</package>
%<*tcolorbox>
-\ProvidesExplFile{eb-tcolorbox.cfg}{2024/01/30}{2024R}
+\ProvidesExplFile{eb-tcolorbox.cfg}{2024/01/31}{2024S}
{Customization of tcolorbox for easybook}
\cs_set_protected:Npn \addtotcbstyle #1#2
diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf
index 97d9370cd9..f7a0a541b1 100644
--- a/macros/latex/contrib/easybook/easybook.pdf
+++ b/macros/latex/contrib/easybook/easybook.pdf
Binary files differ
diff --git a/macros/latex/contrib/easybook/easybook.tex b/macros/latex/contrib/easybook/easybook.tex
index b0291dfb82..6ac54ffeee 100644
--- a/macros/latex/contrib/easybook/easybook.tex
+++ b/macros/latex/contrib/easybook/easybook.tex
@@ -23,8 +23,8 @@
name = easybook,
color-scheme = blue,
title = EASYBOOK使用手册,
- version = v2024R,
- date = 2024/01/30,
+ version = v2024S,
+ date = 2024/01/31,
authors = 瞿毅,
info = 简便地排版中文学ä½è®ºæ–‡æˆ–书ç±,
email = toquyi@163.com,
@@ -832,7 +832,7 @@
\begin{commands}
\command{RegisterTocName}[\marg{æ¡ç›®å}]
- ç»™æ¡ç›®ç±»åž‹å称为 \meta{æ¡ç›®å} 的标题注册用于设置目录样å¼çš„选项,å³é€‰é¡¹å‰æœ‰ç¬¦å· \ding{73} 表示需è¦æ³¨å†ŒåŽä½¿ç”¨ã€‚å‰é¢æ到的æ¡ç›®ç±»åž‹å‡å·²æ³¨å†Œï¼Œéœ€è¦æ³¨æ„新类型的æ¡ç›®æ³¨å†ŒåŽé€‰é¡¹åˆå§‹å€¼\textbf{å‡ä¸ºç©º}。
+ ç»™æ¡ç›®ç±»åž‹å称为 \meta{æ¡ç›®å} 的标题注册用于设置目录样å¼çš„选项,å³é€‰é¡¹å‰æœ‰ç¬¦å· \ding{73} 表示需è¦æ³¨å†ŒåŽä½¿ç”¨ã€‚å‰é¢æ到的æ¡ç›®ç±»åž‹å‡å·²æ³¨å†Œï¼Œæ–°ç±»åž‹çš„æ¡ç›®æ³¨å†ŒåŽé€‰é¡¹åˆå§‹å€¼ä¸Žå›¾è¡¨æ¡ç›®ç›¸åŒã€‚
\command{contentsuse}[\marg{æ¡ç›®å}\marg{扩展å}]
激活æ¡ç›®ç±»åž‹å称为 \meta{æ¡ç›®å} 的目录定制功能,它使用的目录文件åŽç¼€ä¸º \meta{扩展å}。需è¦åœ¨æ¿€æ´»æ¡ç›®åŽå†ä½¿ç”¨å‘½ä»¤ \cs{RegisterTocName} 注册选项。
\command{DeclareFloatList}[\marg{æ¡ç›®å}\marg{扩展å}]
@@ -981,7 +981,7 @@
\end{commands}
\subsection[上标和下标]{上标和下标\smodule{style}}
-上标和下标的功能æ¥è‡ª \pkg*{spbmark} å®åŒ…,下é¢æœ‰ä¸‰ä¸ªå‘½ä»¤å¯ä»¥ç”¨äºŽè¾“出上标和下标。å¯ä»¥ä½¿ç”¨é”®å€¼åˆ—表的形å¼å¯¹ä¸Šä¸‹æ ‡æ ¼å¼è¿›è¡Œå±€éƒ¨æˆ–全局设置,下é¢å‘½ä»¤ä¸­ä¸¤ä¸ªå¯é€‰å‚数的键值列表是等效的。全局设置的详情è§\ref{subsubsec:super-sub-script}。
+上标和下标的功能æ¥è‡ª \pkg*{spbmark} å®åŒ…,下é¢æœ‰ä¸‰ä¸ªå‘½ä»¤å¯ä»¥ç”¨äºŽè¾“出上标和下标。å¯ä»¥ä½¿ç”¨é”®å€¼åˆ—表的形å¼å¯¹ä¸Šä¸‹æ ‡æ ¼å¼è¿›è¡Œå±€éƒ¨æˆ–全局设置,下é¢å‘½ä»¤ä¸­ä¸¤ä¸ªå¯é€‰å‚数的键值列表是等效的。全局设置的详情è§\ref{subsubsec:super-sub-script}ï¼Œæ›´å¤šå‘½ä»¤å’Œè¯¦ç»†ç”¨æ³•è§ \pkg*{spbmark} å®åŒ…说明文档。
\begin{commands}
\command{super}[\sarg\oarg{键值列表1}\marg{内容}\oarg{键值列表2}]
输出上标的命令,å¯ç”¨äºŽæ–‡æœ¬å’Œæ•°å­¦æ¨¡å¼ï¼Œåœ¨æ•°å­¦æ¨¡å¼ä¸­å¯ä»£æ›¿ \code{\^{}} 符å·å’Œ \cs*{sp} 命令。
@@ -1350,7 +1350,7 @@
\shortversion{v = 1.638,date = 2022/03/04,changes = 增加目录æ¡ç›®æ ·å¼é€‰é¡¹æ³¨å†Œå‘½ä»¤ \cs{RegisterTocName}。}
\shortversion{v = 1.644,date = 2022/03/10,changes = 增加浮动环境目录声明命令 \cs{DeclareFloatList} é…åˆ \pkg*{caption} å®åŒ…。}
\shortversion{v = 1.682,date = 2022/05/01,changes = 将迷你页判断命令 \cs{notminipage} 改为被ä¿æŠ¤å‘½ä»¤å…¼å®¹ \pkg*{circledtext} å®åŒ…。}
- \begin{version}[v = 2024R,date = 2024/01/30,simple]
+ \begin{version}[v = 2024S,date = 2024/01/31,simple]
\item 核对ä¾èµ–å®åŒ…的更新改动,优化使用手册的内容细节。
\item ä¿®å¤å›¾è¡¨ç­‰æµ®åŠ¨çŽ¯å¢ƒé¢˜æ³¨ç›®å½•ä¸­æ¡ç›®æ ‡ç­¾ç¼–å·çš„计数器值显示错误问题。
\item ä¿®å¤é™„录命令 \cs{appendix} çš„å¯é€‰å‚数设置英文目录中æ¡ç›®å字和编å·å¤±æ•ˆçš„问题。
diff --git a/macros/latex/contrib/hvextern/Changes b/macros/latex/contrib/hvextern/Changes
index 3f870a713e..2d7f41812e 100644
--- a/macros/latex/contrib/hvextern/Changes
+++ b/macros/latex/contrib/hvextern/Changes
@@ -1,5 +1,6 @@
hvextern.sty ----------------
+v 0.39 2024-01-30 - fixed bug with check for force option
v 0.38 2023-12-08 - change internal macroname \Write@Ex to \hv@Write@EX
v 0.37b 2023-11-22 - fix typo in documentation
v 0.37a 2023-11-20 - fix bug in documentation
diff --git a/macros/latex/contrib/hvextern/doc/hvextern.pdf b/macros/latex/contrib/hvextern/doc/hvextern.pdf
index d78c943a84..793507b058 100644
--- a/macros/latex/contrib/hvextern/doc/hvextern.pdf
+++ b/macros/latex/contrib/hvextern/doc/hvextern.pdf
Binary files differ
diff --git a/macros/latex/contrib/hvextern/doc/hvextern.tex b/macros/latex/contrib/hvextern/doc/hvextern.tex
index 6dcdf79d54..7172969db8 100644
--- a/macros/latex/contrib/hvextern/doc/hvextern.tex
+++ b/macros/latex/contrib/hvextern/doc/hvextern.tex
@@ -1,4 +1,4 @@
-%% $Id: hvextern.tex 822 2023-11-22 12:16:48Z herbert $
+%% $Id: hvextern.tex 853 2024-01-30 20:34:00Z herbert $
\DocumentMetadata{}% for lualatex and pstricks
\documentclass[english,paper=a4,twoside,usegeometry]{scrartcl}
\usepackage{babel}
@@ -16,8 +16,7 @@
\usepackage[automark]{scrlayer-scrpage}
\pagestyle{scrheadings}
\usepackage{hvlogos}
-\usepackage%[checkCode]
-{hvextern}
+\usepackage[checkCode]{hvextern}
\usepackage{hvindex}
\usepackage{hvdoctools}
\usepackage{listings}
@@ -32,7 +31,6 @@
-
\begin{document}
\title{Writing, running and including the output of external documents
from within a main\newline \LaTeX\ document~--v. \hvexternFileversion}
@@ -43,8 +41,7 @@ Werner Lemberg; Rolf Niepraschk}}
%\newpage
-\setkeys{hv}{moveToExampleDir,ExampleDir=Exa,
-showFilename,verbose}
+\setkeys{hv}{moveToExampleDir,ExampleDir=Exa,showFilename,verbose,force=false}
%\clearpage
@@ -118,7 +115,7 @@ outside of the main document and then to insert the output
we can do this from within this \LuaLaTeX\ document itself. The external document is compiled
with \XeLaTeX\ and the output is insert as pdf image:
\begin{externalDocument}[%
- compiler=xelatex, inline, force=true, runs=2, grfOptions={height=8pt},%
+ compiler=xelatex, inline, runs=2, grfOptions={height=8pt},%
crop, cropmargin=0, cleanup, docType=latex,vshift=-1pt]{voss}
\documentclass{ctexart}
\pagestyle{empty}
@@ -138,7 +135,7 @@ shown by the environment \Lenv{externalDocument}.
\begin{minipage}{.59\linewidth}
\begin{lstlisting}
\begin{externalDocument}[
- compiler=pdflatex,force=true,cleanup]{voss}
+ compiler=pdflatex,cleanup]{voss}
\documentclass{standalone}
%StartVisiblePreamble
\usepackage{fontenc}
@@ -151,7 +148,7 @@ shown by the environment \Lenv{externalDocument}.
[VP
[DP]
[V’
- [V]
+ [V]
[DP]
]
]
@@ -162,7 +159,7 @@ shown by the environment \Lenv{externalDocument}.
\end{minipage}
\begin{minipage}{.39\linewidth}
\begin{externalDocument}[
- compiler=pdflatex,force=true,cleanup={log,aux},showFilename=false]{voss}
+ compiler=pdflatex,cleanup={log,aux},showFilename=false]{voss}
\documentclass{standalone}
%StartVisiblePreamble
\usepackage{fontenc}
@@ -218,7 +215,6 @@ catagory, which is done internally by the package. The complete definition of th
compiler=python3,
code,
ext=py,
- force=true,
docType=py,
usefancyvrb,
grfOptions={width=\linewidth}]{python}
@@ -268,7 +264,6 @@ line in the above code shows how it can be done with Python.
\begin{externalDocument}[
compiler=python3,
progpath=/usr/local/bin/,
- force=true,
runs=1,
code,
ext=py,
@@ -328,7 +323,7 @@ e.g. \texttt{shiftFN=5ex}.
\begin{externalDocument}[grfOptions={width=0.95\linewidth},
compiler=xelatex,code,mpwidth=0.6\linewidth,
- crop,cleanup,force=true,usefancyvrb=false,ext=tex,showFilename=false]{voss}
+ crop,cleanup,usefancyvrb=false,ext=tex,showFilename=false]{voss}
\documentclass{article}
%StartVisiblePreamble
\usepackage{tikz}
@@ -438,9 +433,7 @@ runsequence={lualatex,biber,xindex -l de -c AU,lualatex,lualatex}
pagesep=2pt,
frame,
runsequence={lualatex,biber,xindex -l de -c AU,lualatex,lualatex},
- ,
verbose,
- force=true,
cleanup={log,aux,toc,bbl,blg},
code,docType=latex,
lstOptions={columns=fixed}]{voss}
@@ -479,7 +472,7 @@ the environment \Lenv{externalDocument} is:
\begin{externalDocument}[
verbose,
compiler=java,ext=java,code,
- force=true,docType=java,includegraphic,
+ docType=java,includegraphic,
usefancyvrb,grfOptions={width=0.9\linewidth}]{java}
import java.awt.Color;
import java.awt.Graphics;
@@ -558,7 +551,7 @@ the follwing example.
\begin{externalDocument}[grfOptions={angle=90,width=\linewidth},
compiler=xelatex,code,mpwidth=0.6\linewidth,
- crop,cleanup,force]{voss}
+ crop,cleanup]{voss}
\documentclass{article}
%StartVisiblePreamble
\usepackage{tikz}
@@ -610,7 +603,6 @@ to \Lcs{VerbatimInput}. The following example uses
mpwidth=0.6\linewidth,
crop,
cleanup,
- force=true,
docType=latex]{voss}
\RequirePackage{pdfmanagement-testphase}
\DeclareDocumentMetadata{}
@@ -658,7 +650,6 @@ The color of the frame is set to the same values, hence not seen. The following
mpwidth=0.6\linewidth,
crop,
cleanup,
- force=true,
usefancyvrb,
docType=latex]{voss}
\RequirePackage{pdfmanagement-testphase}
@@ -745,7 +736,6 @@ The following example uses:
% mpwidth=0.6\linewidth,
% crop,
cleanup,
- force=true,
frame,
% usefancyvrb,
% float,
@@ -798,7 +788,6 @@ which is the default. Using a caption and a label are optional.
% mpwidth=0.6\linewidth,
crop,
cleanup,
- force=true,
usefancyvrb,
float,
floatsetting=!ht,
@@ -861,7 +850,6 @@ The follwoing example was created with
% mpwidth=0.6\linewidth,
crop, cropmargin=5,
cleanup,
- force=true,
frame,
% usefancyvrb,
% float,
@@ -922,7 +910,6 @@ or \Lkeyval{b}.
showFilename=false,
crop,
cleanup,
- force=true,
aboveskip=0pt,belowskip=0pt,
docType=latex]{voss}
\documentclass{article}
@@ -947,7 +934,6 @@ or \Lkeyval{b}.
code,
crop,
cleanup,
- force=true,
aboveskip=0pt,belowskip=0pt,
docType=latex]{voss}
\documentclass{article}
@@ -973,7 +959,6 @@ or \Lkeyval{b}.
showFilename=false,
crop,
cleanup,
- force=true,
aboveskip=0pt,belowskip=0pt,
docType=latex]{voss}
\documentclass{article}
@@ -999,7 +984,6 @@ or \Lkeyval{b}.
crop,
showFilename=false,
cleanup,
- force=true,
mpwidth=0.5\linewidth,
aboveskip=0pt,belowskip=0pt,
docType=latex]{voss}
@@ -1025,7 +1009,6 @@ or \Lkeyval{b}.
showFilename=false,
crop,
cleanup,
- force=true,
mpwidth=0.5\linewidth,
aboveskip=0pt,belowskip=0pt,
docType=latex]{voss}
@@ -1052,7 +1035,6 @@ or \Lkeyval{b}.
showFilename=false,
crop,
cleanup,
- force=true,
mpwidth=0.5\linewidth,
aboveskip=0pt,belowskip=0pt,
docType=latex]{voss}
@@ -1083,7 +1065,7 @@ next Chinese characters \label{inline-exa}
\begin{externalDocument}[
compiler=xelatex, inline, runs=2, grfOptions={height=8pt},
crop, cropmargin=0, vshift=-1pt,usefancyvrb,
- cleanup, force=true, docType=latex]{voss}%
+ cleanup, docType=latex]{voss}%
\documentclass{ctexart}
\pagestyle{empty}
\begin{document}
@@ -1100,7 +1082,7 @@ With \Lkeyset{inline} the optional argument \Lkeyword{code} is
automatically set to false. The next Chinese characters
\begin{externalDocument}[vshift=-1pt,
compiler=xelatex, inline, runs=2, grfOptions={height=8pt},
- crop, cropmargin=0, cleanup, force=true, docType=latex]{voss}
+ crop, cropmargin=0, cleanup, docType=latex]{voss}
\documentclass{ctexart}
\pagestyle{empty}
\begin{document}
@@ -1140,7 +1122,7 @@ sorted digits of the number $A$: $495=954-459$.
\begin{externalDocument}[
- compiler=perl, force=true, docType=pl, ext=pl, includegraphic=false,
+ compiler=perl, docType=pl, ext=pl, includegraphic=false,
code, mpwidth=0.6\linewidth]{voss}
#!/usr/bin/perl
#
@@ -1195,7 +1177,7 @@ outFile = io.open(shortFN..".txt","w+") -- open external file
\begin{externalDocument}[
- compiler=lua, force=true, docType=lua, ext=lua, includegraphic=false,
+ compiler=lua, docType=lua, ext=lua, includegraphic=false,
code, usefancyvrb=false,textOptions={basicstyle=\ttfamily\footnotesize},
shiftFN=6ex]{voss}
#!/usr/bin/env lua
@@ -1270,7 +1252,6 @@ The following examples uses
pages=2,
crop,
cleanup,
- force=true,
xindex,
xindexOptions={-l DE --config AU},
mpwidth=0.6\linewidth,
@@ -1326,7 +1307,6 @@ runsequence={lualatex,biber,{xindex -l de -c AU},lualatex,lualatex}
frame,
runsequence={lualatex,biber,xindex -l de -c AU,lualatex,lualatex},
verbose,
- force=true,
cleanup={log,aux,toc,bbl,blg},
code,docType=latex,
lstOptions={columns=fixed}]{voss}
@@ -1366,7 +1346,7 @@ The default is using \Lcs{lstinputlisting} for the printed code sequences.
pages={1,3},
frame,compiler=pdflatex,
% crop,
- force=true,runs=2,code,docType=latex,
+ runs=2,code,docType=latex,
frame,
lstOptions={columns=fixed}]{voss}
%StartVisiblePreamble
@@ -1426,7 +1406,7 @@ it makes no difference using the optional argument \Lkeyword{usefancyvrb} or not
frame,compiler=pdflatex,
showFilename,
% crop,
- force=true,runs=2,code,docType=latex,
+ runs=2,code,docType=latex,
frame,framesep=0pt,usefancyvrb]{voss}
%StartVisiblePreamble
\documentclass[chapterprefix=on,parskip=half-,DIV=12,fontsize=12pt]{scrbook}
@@ -1520,7 +1500,7 @@ other examples, you can set \Lkeyword{showoutput} to false.
showoutput=false,
frame,compiler=pdflatex,
crop,
- force=true,runs=2,code,docType=latex,
+ runs=2,code,docType=latex,
frame,usefancyvrb]{voss}
%StartVisiblePreamble
\documentclass[chapterprefix=on,parskip=half-,DIV=12,fontsize=12pt]{scrbook}
@@ -1596,7 +1576,6 @@ Whith this definition and the setting \Lkeyset{docType=ltx} the last example loo
frame,
compiler=pdflatex,
showFilename,
- force=true,
runs=2,code,docType=ltx,
usefancyvrb]{voss}
\documentclass[chapterprefix=on,parskip=half-,DIV=12,fontsize=12pt]{scrreprt}
@@ -1660,7 +1639,6 @@ It is already internally defined.
compiler=mpost,
showFilename,
% crop,
- force=true,
cleanup,
code,
docType=mp,
@@ -1696,7 +1674,6 @@ It is already internally defined.
compiler=tex,
showFilename,
% crop,
- force=true,
code,
docType=tex,
ext=tex,]{voss}
@@ -1762,7 +1739,6 @@ not needed. The \texttt{pdf} is directly created.
compiler=lualatex,
showFilename,
crop,
- force=true,
code,
docType=latex,
ext=tex,]{voss}
@@ -1804,7 +1780,6 @@ not needed. The \texttt{pdf} is directly created.
compiler=context,
showFilename,
runs=2,
- force=true,
code,
docType=context,
ext=tex,]{voss}
diff --git a/macros/latex/contrib/hvextern/latex/hvextern.sty b/macros/latex/contrib/hvextern/latex/hvextern.sty
index cfdd56053d..bfe8f75e8f 100644
--- a/macros/latex/contrib/hvextern/latex/hvextern.sty
+++ b/macros/latex/contrib/hvextern/latex/hvextern.sty
@@ -1,7 +1,7 @@
-%% $Id: hvextern.sty 833 2023-12-08 19:31:08Z herbert $
+%% $Id: hvextern.sty 853 2024-01-30 20:34:00Z herbert $
%% This is file `hvextern.sty',
%%
-%% Copyright (C) 2016-23
+%% Copyright (C) 2016-24
%% Herbert Voss
%%
%% It may be distributed and/or modified under the
@@ -12,8 +12,8 @@
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
-\def\hvexternFileversion{0.38}
-\ProvidesFile{hvextern}[2023/12/08 v\hvexternFileversion: package for running external documents (HV)]
+\def\hvexternFileversion{0.39}
+\ProvidesFile{hvextern}[2024/01/30 v\hvexternFileversion: package for running external documents (HV)]
\newif\ifhv@extern@checkCode
\hv@extern@checkCodefalse
@@ -72,6 +72,8 @@
\newlength\hv@extern@mpwidth \setlength\hv@extern@mpwidth{\z@}
+\newif\ifhv@extern@save@force@state
+
\define@key{hv}{progpath}{\def\hv@extern@progpath{#1}}
\define@key{hv}{runsequence}[]{\def\hv@extern@runsequence{#1}}
\define@key{hv}{runs}[1]{\setcounter{hv@extern@runs}{#1}}
@@ -106,7 +108,7 @@
\define@key{hv}{shiftFN}[0pt]{\setlength\hv@extern@shiftFN{#1}}
\define@key{hv}{vshift}[0pt]{\setlength\hv@extern@vshift{#1}}%
\define@boolkey{hv}[hv@extern@]{code}[true]{}
-\define@boolkey{hv}[hv@extern@]{force}[true]{}
+\define@boolkey{hv}[hv@extern@]{force}[true]{\@nameuse{hv@extern@save@force@state#1}}
\define@boolkey{hv}[hv@extern@]{crop}[true]{}
\define@boolkey{hv}[hv@extern@]{tcbox}[true]{}
\define@boolkey{hv}[hv@extern@]{biber}[true]{}
@@ -119,7 +121,7 @@
\define@key{hv}{framesep}[\the\fboxsep]{\setlength\hv@extern@framesep{#1}}
\define@boolkey{hv}[hv@extern@]{float}[true]{}
\define@key{hv}{floatsetting}[]{\def\hv@extern@floatsetting{#1}}
-\define@key{hv}{cleanup}[{aux,log}]{\def\hv@extern@cleanup{#1}}%
+\define@key{hv}{cleanup}[{aux,log,psaux}]{\def\hv@extern@cleanup{#1}}%
\define@boolkey{hv}[hv@extern@]{moveToExampleDir}[true]{}
\define@key{hv}{align}[\centering]{\def\hv@extern@align{#1}}
\define@key{hv}{ExampleDir}[Examples]{%
@@ -151,64 +153,64 @@
\def\ResetKeys{%
\setkeys{hv}{%
- showFilename=false,% Filenamen im Rand angeben
- outerFN=false,% use fullwidth in twocolumn mode (starred floats)
- shiftFN=\z@,% raise printed filename
- vshift=\z@,% raise object (pdf) with \raisebox{}{}
- ext=tex,% file extension
- code=false,% show Code
- crop=false,% erzeugte PDF "croppen"
- compiler=pdflatex,% zu verwendener Compiler
- shellesc=false,% use shell-escape
- redirect=false,% write output into a file *.txt
- tcbox=true,% use tcolorbox
- grfOptions={},% Optionen der einzubindenden Grafik
- lstOptions={},% Optionen für das Listing
- textOptions={},% Options for text output
+ align=\centering,% Ausgabe zentrieren
+ aboveskip=\medskipamount,% space above everything
+ belowpreambleskip=2pt, %\smallskipamount,% space below preamble
+ belowbodyskip=2pt, %\smallskipamount,% space below body
+ belowskip=\medskipamount,% space below everything
BGpreamble=black!12,% Backgroundcolor for preamble
BGbody=black!8,% Backgroundcolor for body
BOpreamble=black!12,% Bodercolor for preamble
BObody=black!8,% Bodercolor for body
- showoutput=true,% with false only code is shown
- includegraphic=true,% Grafik einbinden oder User überlassen
- inline=false,% Grafik nicht in derselben Zeile
- runs=1,% Anzahl Compiler-Durchläufe
- runsAfter=0, % Anzahl Durchläufe nach makeindex
- runsequence={},% Im Moment nicht aktiv
biber=false,% Biber laufen lassen?
- xindex=false,% xindex laufen lassen?
- xindexOptions={},% options for xindex
+ caption=,% keine Caption
+ cleanup={},% Hilfsdateien nicht löschen
+ code=false,% show Code
+ compiler=pdflatex,% zu verwendener Compiler
+ crop=false,% erzeugte PDF "croppen"
+ cropmargin=2,% 2pb margin
+ docType=latex,% LaTeX example Code
+ eps=false,% create an eps output?
+ ExampleDir=Examples,% Unterverzeichnis für Beispiele
+ ext=tex,% file extension
+ float=false,% nicht als Gleitumgebung
+ floatsetting=!htb,% placement
force=false,% Compiler, auch wenn PDF existiert?
frame=false,% keinen Rahmen um Abbildung
framesep=\the\fboxsep,%
- float=false,% nicht als Gleitumgebung
- floatsetting=!htb,% placement
- caption=,% keine Caption
+ grfOptions={},% Optionen der einzubindenden Grafik
+ includegraphic=true,% Grafik einbinden oder User überlassen
+ inline=false,% Grafik nicht in derselben Zeile
label=,% kein Label
- pages=1,% welche Seiten auszugeben sind
- pagesep=1em,% horizontal sep between pages
- docType=latex,% LaTeX example Code
- cleanup={},% Hilfsdateien nicht löschen
+ lstOptions={},% Optionen für das Listing
moveToExampleDir=false,% Verschieben nach ExamplesDir
- ExampleDir=Examples,% Unterverzeichnis für Beispiele
- align=\centering,% Ausgabe zentrieren
mpwidth=0pt,% no minipage
mpsep=1em,% sep between two minipages
mpvalign=t,% if side by side output the vertical alignment
- usefancyvrb=false,% use VerbatimInput instead of listings
+ outerFN=false,% use fullwidth in twocolumn mode (starred floats)
+ pages=1,% welche Seiten auszugeben sind
+ pagesep=1em,% horizontal sep between pages
progpath={},
- cropmargin=2,% 2pb margin
- eps=false,% create an eps output?
- aboveskip=\medskipamount,% space above everything
- belowpreambleskip=2pt, %\smallskipamount,% space below preamble
- belowbodyskip=2pt, %\smallskipamount,% space below body
- belowskip=\medskipamount,% space below everything
+ redirect=false,% write output into a file *.txt
+ runs=1,% Anzahl Compiler-Durchläufe
+ runsAfter=0, % Anzahl Durchläufe nach makeindex
+ runsequence={},% Im Moment nicht aktiv
+ shellesc=false,% use shell-escape
+ shiftFN=\z@,% raise printed filename
+ showFilename=false,% Filenamen im Rand angeben
+ showoutput=true,% with false only code is shown
+ tcbox=true,% use tcolorbox
+ textOptions={},% Options for text output
+ usefancyvrb=false,% use VerbatimInput instead of listings
+ verbose=false,% no extra output in the logfile
+ vshift=\z@,% raise object (pdf) with \raisebox{}{}
+ xindex=false,% xindex laufen lassen?
+ xindexOptions={},% options for xindex
}%
}
\ResetKeys
-
\ifhv@extern@checkCode
\ifluatex
\hv@ex@typeout{Loading hvextern.lua}%
@@ -464,8 +466,9 @@
\let\endfilecontents\endcomment
\fi
\filecontents[force,noheader]{\hvExternFilename\hv@extern@ext}%
- }
- {\endfilecontents
+ }% end \begin{externaldocument} env
+ {% start \end{externaldocument} env
+ \endfilecontents
\ifhv@extern@shellescape\hv@ex@typeout{... done}\fi
\global\stepcounter{hv@example@counter}%
\endgroup
@@ -489,7 +492,7 @@
\global\hv@extern@forcefalse
\else
\hv@ex@typeout{current file is newer: force run }%
- \global\hv@extern@forcetrue
+ \hv@extern@forcetrue
\fi
\ifhv@extern@verbose\else\ShellEscape{\hv@rm \hvExternFilename\hv@extern@ext.diff}\fi
\fi
@@ -564,7 +567,7 @@
\ifhv@extern@eps
\ShellEscape{pdftops -eps -f 1 -l 1 \hvExternFilename.pdf}%
\fi
- \else
+ \else % if force ...
\hv@ex@typeout{force=false: NOT running \hvExternFilename\hv@extern@ext ...}%
\fi% end force
\hfuzz=\maxdimen
@@ -713,6 +716,11 @@
\expandafter\run@hv@extern@cleanup\expandafter{\hv@extern@cleanup}%
\fi% cleanup
\vspace{\hv@extern@belowskip}%
+ \ifhv@extern@save@force@state
+ \global\hv@extern@forcetrue
+ \else
+ \global\hv@extern@forcefalse
+ \fi% restore value
}
\newcommand\runExtCmd[3][]{% #1:options; #2:comamnd; #3:filename
@@ -894,6 +902,7 @@
\expandafter\IfFileExists\expandafter{\hv@extern@ExamplesDir\hvExternFilename.pdf}{}{%
\expandafter\IfFileExists\expandafter{\hv@extern@ExamplesDir\hvExternFilename.png}{}{%
\expandafter\IfFileExists\expandafter{\hv@extern@ExamplesDir\hvExternFilename.txt}{}{%
+ \gdef\hv@extern@save@force@state{}
\global\hv@extern@forcetrue}}}% set force, if no pdf or png exists
\begingroup
\hv@ex@typeout{writing file \hvExternFilename\hv@extern@ext ...}%
diff --git a/macros/latex/contrib/hvextern/script/hvextern-checkfile.lua b/macros/latex/contrib/hvextern/script/hvextern-checkfile.lua
index ea163c6a72..ea163c6a72 100644..100755
--- a/macros/latex/contrib/hvextern/script/hvextern-checkfile.lua
+++ b/macros/latex/contrib/hvextern/script/hvextern-checkfile.lua
diff --git a/macros/latex/contrib/leftindex/README.md b/macros/latex/contrib/leftindex/README.md
index 7832b57454..8e2ae62c88 100644
--- a/macros/latex/contrib/leftindex/README.md
+++ b/macros/latex/contrib/leftindex/README.md
@@ -7,10 +7,11 @@ providing much better spacing in general.
----------------------------------------------------------------
leftindex -- left indices with better spacing
-Version: 0.1beta
+Version: 0.2beta
Maintained by Sebastian Ørsted
E-mail: sorsted@gmail.com
Released under the LaTeX Project Public License v1.3c or later
+
See http://www.latex-project.org/lppl.txt
----------------------------------------------------------------
diff --git a/macros/latex/contrib/leftindex/leftindex.pdf b/macros/latex/contrib/leftindex/leftindex.pdf
index 01950aa9a3..abeefe6113 100644
--- a/macros/latex/contrib/leftindex/leftindex.pdf
+++ b/macros/latex/contrib/leftindex/leftindex.pdf
Binary files differ
diff --git a/macros/latex/contrib/leftindex/leftindex.sty b/macros/latex/contrib/leftindex/leftindex.sty
index fdd7a6a822..406c7a973e 100644
--- a/macros/latex/contrib/leftindex/leftindex.sty
+++ b/macros/latex/contrib/leftindex/leftindex.sty
@@ -1,9 +1,9 @@
\RequirePackage{xparse,mathtools}
-\ProvidesExplPackage{leftindex}{2020/08/25}{0.1beta}{}
+\ProvidesExplPackage{leftindex}{2024/01/31}{0.2beta}{}
%----------------------------------------------------------------
% leftindex -- left indices with better spacing
-% Version: 0.1beta
+% Version: 0.2beta
% Maintained by Sebastian Ørsted
% E-mail: sorsted@gmail.com
% Released under the LaTeX Project Public License v1.3c or later
@@ -35,7 +35,7 @@
\manualleftindex { #2 } { #1 } { #3 } { #4 }
}
{
- \manualleftindex { #5 } { #1 } { #3 } { #4 }
+ \manualleftindex { #1 } { #1 } { #3 } { #4 }
}
}
{
@@ -44,6 +44,27 @@
#5
}
+\DeclareDocumentCommand\LeftIndex { o o E{^_}{{}{}} }
+{
+ % #1 = slanting phantom
+ % #2 = height phantom
+ % #3 = left superscript
+ % #4 = left subscript
+ \IfValueTF {#1}
+ {
+ \IfValueTF{#2}
+ {
+ \manualleftindex { #2 } { #1 } { #3 } { #4 }
+ }
+ {
+ \manualleftindex { #1 } { #1 } { #3 } { #4 }
+ }
+ }
+ {
+ \manualleftindex { } { } { #3 } { #4 }
+ }
+}
+
\ExplSyntaxOn
\cs_new_protected:Npn\leftindex_kern_horizontal:n#1
@@ -131,13 +152,13 @@
\box_wd:N \l__leftindex_subscript_temp_box
}
}
+ \mathop{}
\leftindex_kern_horizontal:n
{
\dim_max:nn
{ \l__leftindex_width_of_superscript_dim }
{ \l__leftindex_width_of_subscript_dim }
}
- \mathop{}
\mathopen{ \vphantom { #2 } }
\tl_if_blank:nF { #4 }
{
diff --git a/macros/latex/contrib/leftindex/leftindex.tex b/macros/latex/contrib/leftindex/leftindex.tex
index 45f21c4c20..dd7161dec8 100644
--- a/macros/latex/contrib/leftindex/leftindex.tex
+++ b/macros/latex/contrib/leftindex/leftindex.tex
@@ -5,7 +5,7 @@
\usepackage{babel}
\usepackage{kpfonts,microtype}
-\usepackage{leftindex,listings,showexpl,xspace}
+\usepackage{leftindex,listings,showexpl}
\usepackage[hidelinks]{hyperref}
@@ -35,9 +35,9 @@
explpreset={numbers=none,},
}
-\newcommand\pkgleftindex{\texttt{leftindex}\xspace}
+\newcommand\pkgleftindex{\texttt{leftindex}}
-\title{\pkgleftindex\ -- left indices with better spacing (v0.1$\beta$)}
+\title{\pkgleftindex\ -- left indices with better spacing (v0.2$\beta$)}
\date{\today}
\author{Sebastian \O rsted (\href{mailto:sorsted@gmail.com}{sorsted@gmail.com})}
@@ -51,8 +51,8 @@
\maketitle
\noindent
-The package \pkgleftindex provides commands for typesetting left indices.
-Unlike any other similar package I know of, \pkgleftindex also indents the left superscript, providing much better spacing in general:
+The package \pkgleftindex\ provides commands for typesetting left indices.
+Unlike any other similar package I know of, \pkgleftindex\ also indents the left superscript, producing much better spacing in general:
\[
\leftindex^a_b{f}
\qquad\text{(compare to $\leftindex[]^a_b{f}$)}
@@ -62,14 +62,14 @@ As \TeX\ provides no metrics for the indentation of left superscripts,
the only way to accomplish this is to measure the negative indentation of the right subscript and then use that value.
This works well for most symbols, with a few exceptions, which can be dealt with by
supplying a few extra arguments.
-The package is a generalization of egreg's excellent code on
+The package is a generalization of egreg's excellent code found at
\begin{center}
\url{https://tex.stackexchange.com/questions/557655/low-level-command-for-controlling-left-superscript-spacing/}
\end{center}
\chapter*{The commands}
-The fundamental, user-level command of~\pkgleftindex is called~\lstinline!\leftindex! and has
+The main user-level command of~\pkgleftindex\ is called~\lstinline!\leftindex! and has
the syntax
\begin{lstlisting}
\leftindex^{@<left superscript>@}_{@<left subscript>@}{@<symbol>@}
@@ -87,7 +87,7 @@ $ \leftindex{A} $,
f(x)\, dx
\]
\end{LTXexample}
-For the indentaiton of the left superscript, the package always
+For the indentaiton of the left superscript, the package by default
uses the negative indentation of the right subscript. This yields good results
most of the time, as seen above. However, there are cases where this goes wrong,
the most notable example being the Greek letter~$ \Gamma $ in many fonts (not in Computer Modern, though). Less serious examples arise with letters like $P$ and $L$:
@@ -115,27 +115,42 @@ $\leftindex[]^a_b {\Gamma}$,
$\leftindex[I]^a_b {L}$,
$\leftindex[I]^a_b {P}$
\end{LTXexample}
-The <slanting phantom> will never be used for calculating the height of the indices.
-For this, you can supply a <height phantom>:
+By default, the <slanting phantom> is also used for calculating the height of the indices.
+If this is not the behaviour you want, you can supply an additional <height phantom>:
\begin{LTXexample}
$\leftindex[][\Bigg|]^a_b{x}$
\end{LTXexample}
I doubt anyone will ever really need this much in practice, but the option is provided for completeness.
-I provide a more primitive, underlying command with four mandatory arguments:
+Sometimes, having to include the symbol as a mandatory argument can be a burden. For these cases, I also provide the command~\lstinline!\LeftIndex! with the syntax:
+\begin{lstlisting}
+\LeftIndex[@<slanting phantom>@][@<height phantom>@]
+ ^{@<left superscript>@}_{@<left subscript>@}
+\end{lstlisting}
+Here, all arguments are optional.
+With this, we can do stuff like:
+\begin{LTXexample}
+$\LeftIndex^a_b \Gamma $,
+$\LeftIndex[]^a_b L $,
+$\LeftIndex[I]^a_b$,
+$\LeftIndex[I]^a_b$
+\end{LTXexample}
+
+
+I also provide the more primitive, underlying command with four mandatory arguments:
\begin{lstlisting}
\manualleftindex{@<height phantom>@}{@<slanting phantom>@}
{@<left superscript>@}{@<left subscript>@}
\end{lstlisting}
This one is mainly intended for use in commands and by other packages.
Note that the arguments <height phantom> and <slanting phantom> have
-switched places compared to the command~\lstinline!\leftindex!.
+switched places compared to the commands \lstinline!\leftindex! and~\lstinline!\LeftIndex!.
This is because <height phantom> is regarded as a ``more important''
argument than <slanting phantom> from an implementation point of view,
but the user is probably less likely to change it. Therefore,
-the user-level command~\lstinline!\leftindex! has <slanting phantom>
+the user-level commands \lstinline!\leftindex! and~\lstinline!\LeftIndex! have <slanting phantom>
before <height phantom>.
-Note also that \lstinline!\manualleftindex! does not take a <symbol>;
+Note also that \lstinline!\manualleftindex! (like \lstinline!\LeftIndex!) does not take a <symbol>;
you will have to write this yourself afterwards:
\begin{LTXexample}
$\manualleftindex{P}{I}{a}{b}$
diff --git a/macros/latex/contrib/litetable/doc/favicon.png b/macros/latex/contrib/litetable/doc/favicon.png
new file mode 100644
index 0000000000..4e105b2ce0
--- /dev/null
+++ b/macros/latex/contrib/litetable/doc/favicon.png
Binary files differ
diff --git a/macros/latex/contrib/litetable/doc/litetable-demo.pdf b/macros/latex/contrib/litetable/doc/litetable-demo.pdf
index f9ed4fafbb..3ee841c94d 100644
--- a/macros/latex/contrib/litetable/doc/litetable-demo.pdf
+++ b/macros/latex/contrib/litetable/doc/litetable-demo.pdf
Binary files differ
diff --git a/macros/latex/contrib/litetable/doc/litetable-demo.tex b/macros/latex/contrib/litetable/doc/litetable-demo.tex
index c40f8e3415..33d6f53b41 100644
--- a/macros/latex/contrib/litetable/doc/litetable-demo.tex
+++ b/macros/latex/contrib/litetable/doc/litetable-demo.tex
@@ -1,32 +1,68 @@
\documentclass[libertinus]{litetable}
\begin{document}
-\begin{tikzpicture}[scale=0.05]
- \makeframe{Timetable -- Semester 5}% make title & background
+
+\timelist{
+8:05,8:55,10:00,10:50,11:40,13:30,14:20,15:15,16:05,18:30,19:20,20:10;
+8:50,9:40,10:45,11:35,12:25,14:15,15:05,16:00,16:50,19:15,20:05,20:55}
+\sticker{favicon}
+
+\begin{tikzpicture}
+ \makeframe{Axia\!\texttt{'}\!s Timetable -- Semester 5}% make title & background
% Mon.
- \course{H1}{1}{1}{2}{Badminton}{Badminton Court}{Yongsheng Yu}{Week 1 -- 18}
- \course{H7}{1}{3}{5}{Lens Design Expt}{Building 6·South 402}{Hao Ying}{Week 5 -- 15}
- % Tue.
- \course{H9}{2}{3}{5}{Marx's Principles}{Building 6·320}{Yang Wang}{Week 1 -- 18}
- \course{H8}{2}{6}{8}{Photoelectric Det}{Building 6·320}{Xuefeng Huang}{Week 1 -- 18}
- % Wed.
- \course{H7}{3}{3}{4}{Laster Tech}{Building 6·301}{Haidan Mao}{Week 1 -- 18}
- \course{H9}{3}{6}{7}{Empt 3 | Situ 5}{Bldg 6·301 | Situ 6·208}{Mjh | Qxr}{Week 5 -- 14}
- \course{H5}{3}{8}{9}{Computational Phys}{Building 6·215}{Wenjia Rao}{Week 1 -- 18}
- \course{H1}{3}{10}{11}{Essay Writing}{Building 6·416}{Yueqin Shi}{Week 1 -- 18}
- % Thu.
- \course{H6}{4}{1}{2}{Sensing System}{Building 6·110}{Benxiao Cai}{Week 1 -- 18}
- \course{H5}{4}{3}{5}{AQM}{Building 6·225}{Yuan Li \& Mengnan Chen}{Week 1 -- 18}
- \course{H3}{4}{6}{8}{Modern Phys Expt 2}{Building 6·South}{Xiangxiang Chen}{Week 5 -- 16}
- \course{H8}{4}{10}{12}{OE Info Expt 1}{Building 6·South 302}{Yu Zhou}{Week 5 -- 15}
- % Fri.
- \course{H7}{5}{1}{2}{Lens Design}{Building 6·422}{Hao Ying}{Week 1 -- 18}
- \course{H5}{5}{3}{5}{Optoelectronics}{Building 6·202}{Ruixue Li \& Yuan Li}{Week 1 -- 18}
- \course{H8}{5}{6}{7}{Innovative Practice 4}{Building 7·216B}{Qinglong Huang}{Week 5 -- 16}
- \course{H5}{5}{8}{9}{Group Meeting}{Building 6·Middle}{Yuan Li}{Week 1 -- 18}
- \more{\textbf{·School Starts}: 11/09/2023 \textbf{·Winter Vacation}: 26/01/2024 \textbf{·Hangzhou Asian Games}: 23/09/2023 -- 08/10/2023}
+ \course{H1}{1}{2}{Badminton}{Badminton Court}{Yongsheng Yu}{Week 1 -- 18}
+ \course{H7}{3}{5}{Lens Design Expt}{Building 6·South 402}{Hao Ying}{Week 5 -- 15}
+ \newday % Tue.
+ \course{H9}{3}{5}{Marx's Principles}{Building 6·320}{Yang Wang}{Week 1 -- 18}
+ \course{H8}{6}{8}{Photoelectric Det}{Building 6·320}{Xuefeng Huang}{Week 1 -- 18}
+ \newday % Wed.
+ \course{H7}{3}{4}{Laster Tech}{Building 6·301}{Haidan Mao}{Week 1 -- 18}
+ \course{H9}{6}{7}{Empt 3 | Situ 5}{Bldg 6·301 | Situ 6·208}{Mjh | Qxr}{Week 5 -- 14}
+ \course{H5}{8}{9}{Computational Phys}{Building 6·215}{Wenjia Rao}{Week 1 -- 18}
+ \course{H1}{10}{11}{Essay Writing}{Building 6·416}{Yueqin Shi}{Week 1 -- 18}
+ \newday % Thu.
+ \course{H6}{1}{2}{Sensing System}{Building 6·110}{Benxiao Cai}{Week 1 -- 18}
+ \course{H5}{3}{5}{AQM}{Building 6·225}{Yuan Li \& Mengnan Chen}{Week 1 -- 18}
+ \course{H3}{6}{8}{Modern Phys Expt 2}{Building 6·South}{Xiangxiang Chen}{Week 5 -- 16}
+ \course{H8}{10}{12}{OE Info Expt 1}{Building 6·South 302}{Yu Zhou}{Week 5 -- 15}
+ \newday % Fri.
+ \course{H7}{1}{2}{Lens Design}{Building 6·422}{Hao Ying}{Week 1 -- 18}
+ \course{H5}{3}{5}{Optoelectronics}{Building 6·202}{Ruixue Li \& Yuan Li}{Week 1 -- 18}
+ \course{H8}{6}{7}{Innovative Practice 4}{Building 7·216B}{Qinglong Huang}{Week 5 -- 16}
+ \course{H5}{8}{9}{Group Meeting}{Building 6·Middle}{Yuan Li}{Week 1 -- 18}
+ \more{·School Starts: 11 / 09 / 2023 ·Winter Vacation: 26 / 01 / 2024 ·Hangzhou Asian Games: 23 / 09 / 2023 -- 08 / 10 / 2023}
\end{tikzpicture}
-\begin{tikzpicture}[scale=0.05]
- \makeframe{Timetable -- Semester 6}% make title & background
+
+
+
+
+
+
+
+\begin{tikzpicture}
+ \makeframe{Axia\!\texttt{'}\!s Timetable -- Semester 6}
+
+ % Mon.
+ \course{H5}{7}{8}{Introduction to Cond.}{Building 6·225}{Mn Chen}{Week 1 -- 16}
+
+ \newday % Tue.
+ \course{H1}{8}{9}{Group Theory}{Building 6·211}{Li Ge}{Week 1 -- 16}
+ \course{H5}{10}{11}{Mesoscopic Physics}{Building 6·211}{Yuan Li \& Mn Chen}{Week 1 -- 16}
+
+ \newday % Wed.
+ \course{H6}{1}{2}{Engineering Drawing}{Building 7·3012}{Hc Wang}{Week 1 -- 16}
+ \course{H9}{8}{9}{Situation \& Policy 6}{Building 6·302}{Xr Qi}{Double Week 10 -- 16}
+ \course{H9}{10}{11}{Operational Simu.}{Building 4·411 -- 413}{Li Zhang}{Week 1 -- 8}
+
+ \newday % Thu.
+ \course{H4}{1}{2}{Intercultural Comm.}{Building 3·422}{Cl Zuo}{Week 1 -- 16}
+ \course{H2}{3}{4}{Radio Direction}{Athletic Field}{Ys Yu}{Week 1 -- 16}
+ \course{H5}{6}{8}{Solid State Physics}{Building 6·408}{Kw Sun}{Week 1 -- 16}
+
+ \newday % Fri.
+ \course{H8}{1}{2}{OE. Display}{Building 7·3012}{Wt Su}{Week 1 -- 16}
+ \course{H3}{6}{8}{Group Meeting}{Building 6·Middle}{Yuan Li}{Week 1 -- 16}
+
+ \more{·School Start: 04 / 03 / 2024 ·Summer Vacation: 05 / 07 / 2024}
\end{tikzpicture}
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/litetable/doc/litetable-doc-cn.pdf b/macros/latex/contrib/litetable/doc/litetable-doc-cn.pdf
new file mode 100644
index 0000000000..67810c50cd
--- /dev/null
+++ b/macros/latex/contrib/litetable/doc/litetable-doc-cn.pdf
Binary files differ
diff --git a/macros/latex/contrib/litetable/doc/litetable-doc-cn.tex b/macros/latex/contrib/litetable/doc/litetable-doc-cn.tex
new file mode 100644
index 0000000000..498167f8c3
--- /dev/null
+++ b/macros/latex/contrib/litetable/doc/litetable-doc-cn.tex
@@ -0,0 +1,210 @@
+%% ******************************************************
+%% * This work may be distributed and/or modified under *
+%% * the conditions of the LaTeX Project Public License *
+%% * http://www.latex-project.org/lppl.txt *
+%% * either version 1.3c of this license or any later *
+%% * version. *
+%% ******************************************************
+\PassOptionsToPackage{quiet}{xeCJK}
+\PassOptionsToPackage{quiet}{fontspec}
+\PassOptionsToPackage{no-math}{fontspec}
+\documentclass[11pt]{article}
+\usepackage{geometry}
+\usepackage{indentfirst,setspace}
+\usepackage[toc]{multitoc}
+\setlength{\parindent}{2em}
+\setstretch{1.25}
+\usepackage{pdfpages}
+\usepackage[level]{datetime}
+\usepackage{unicode-math,xeCJK}
+\usepackage{authblk}
+\setmainfont{Libertinus Serif}
+\setsansfont{Libertinus Sans}
+\setCJKmainfont{SimSong}[BoldFont=Chiron Sung HK, ItalicFont=Kaiti SC]
+\makeatletter
+\usepackage{listings,dirtree}
+\lstdefinestyle{TeX}{
+ language = [LaTeX]TeX,
+ texcsstyle = *\color{H7},
+ numbers = none,
+ basicstyle = {\small\color{H6}\tt},
+ mathescape = false,
+ breaklines = true,
+ columns = fixed,
+ keywordstyle = \color{H3},
+ commentstyle = \color{darkgray},
+ tabsize = 2,
+ keywords = {mail,flyleaf,sticker,logo,notebook,chapter,newnote,newnotesss,newnotessss,emptynote,newhdunote,
+ makeframe,course,more}
+}
+\usepackage{hyperref,xcolor,verbatim}
+
+\definecolor{pkgcolor}{Hsb}{103,.8,.5}
+\definecolor{moducolor}{Hsb}{290,.8,.5}
+\definecolor{cmdcolor}{Hsb}{188,.8,.5}
+\definecolor{filecolor}{Hsb}{207,.6,.7}
+\definecolor{H1}{Hsb}{349,.8,.8}% 海棠紅 (Hangzhou MTR L 1 )
+\definecolor{H2}{Hsb}{23, .8,.8}% 丹桂橙 (Hangzhou Metro 2 )
+\definecolor{H3}{Hsb}{48, .8,.8}% 柠檬黄 (Hangzhou Metro 3 )
+\definecolor{H4}{Hsb}{103,.8,.8}% 香樟绿 (Hangzhou Metro 4 )
+\definecolor{H5}{Hsb}{188,.8,.8}% é’è—色 (Hangzhou MTR L 5 )
+\definecolor{H6}{Hsb}{207,.8,.8}% æµ·æ´‹è“ (Hangzhou Metro 6 )
+\definecolor{H7}{Hsb}{290,.8,.8}% 浪漫紫 (Hangzhou Metro 7 )
+\hypersetup{colorlinks,urlcolor=H1,linkcolor=H2,filecolor=filecolor,pdfstartview=FitH,pdfview=FitH,pdfcreator=XeTeX output}
+
+\renewcommand*\l@subsection{\@dottedtocline{2}{1.5em}{2.1em}}
+\def\pkg#1{\texorpdfstring{\textcolor{pkgcolor}{\textsf{#1}}}{“#1â€}}
+\def\mode#1{\texorpdfstring{\textcolor{moducolor}{\textsf{#1}}}{“#1â€}}
+\def\cmd#1{\texorpdfstring{\textcolor{cmdcolor}{\textsf{#1}}}{“#1â€}}
+\def\datechange#1#2{%
+ \noindent{\makebox[\textwidth][r]{\color{H7}\rule{1.15\textwidth}{.4pt}}}
+ \noindent\makebox[0pt][r]{\makebox[-3em][r]{\small\textbf{\textcolor{H7}{#1}}}\;\;}{\sffamily Update: \ignorespaces#2}}
+\makeatother
+
+\title{The \pkg{LiteTable} Template}
+\author[1]{Xia Mingyu, \href{https://www.hdu.edu.cn}{Hangzhou Dianzi University}}
+\yyyymmdddate
+\date{\today}
+\affil[1]{\href{mailto:xiamyphys@gmail.com}{\texttt{xiamyphys@gmail.com}}}
+\date{\today\quad Version 2.2a\thanks{%
+ \url{https://github.com/xiamyphys/litetable}}}
+\begin{document}
+\maketitle
+
+\vspace{-2em}
+\begin{abstract}
+\pkg{LiteTable} 模æ¿æ供了一个多彩的课程表设计,本文档为\pkg{LiteTable} 模æ¿çš„说明文档.
+
+\end{abstract}
+
+\tableofcontents\clearpage
+
+\section{Introduction}
+
+\subsection{本模æ¿çš„目的}
+本模æ¿æ供了一个多彩的课程表设计.
+
+如果你在使用本模æ¿æ—¶é‡åˆ°é—®é¢˜ï¼Œæˆ–者有更好的建议,或者你想å‚与本模æ¿æˆ–本人其他模æ¿çš„å¼€å‘,欢迎通过邮件 \href{mailto:xiamyphys@gmail.com}{xiamyphys@gmail.com} è”络我.
+
+åŒæ ·ï¼Œä½ ä¹Ÿå¯ä»¥åŠ å…¥æˆ‘çš„\textsf\LaTeX{} 技術交æµç¾¤ \href{https://qm.qq.com/q/OnHzbNvVAG}{QQ Group: 760570712} 与我交æµï¼Œæ¥èŽ·å–模æ¿çš„内测版本.
+
+\subsection{所需å®é›†}
+本模æ¿åŸºäºŽ \pkg{standalone} 文档类开å‘. å…¶éœ€è¦ \pkg{tikz} å®é›†åŽ»ç»˜åˆ¶å›¾å½¢ï¼Œ\pkg{kvoptions} å’Œ \pkg{etoolbox} å®é›†ç”¨äºŽæ供全局选项,\pkg{expl3} å®åŸºç”¨äºŽæ”¯æŒæ•°ç»„,\pkg{ctex}å®é›†ç”¨äºŽæ”¯æŒä¸­æ–‡è¯­è¨€ï¼Œ\pkg{fontawesome5} å®é›†æ供一系列精美的图标.
+
+我强烈建议您使用终端机去执行以下命令,以将所有å®é›†æ›´æ–°åˆ°æœ€æ–°ç‰ˆæœ¬
+\begin{verbatim}
+ tlmgr update --self
+ tlmgr update --all
+\end{verbatim}
+
+如果您所在的地区存在网路å°é”,你å¯ä»¥é€‰æ‹©åˆé€‚çš„é•œåƒç½‘站或其他方法\footnote{请éµå¾ªå½“地的网路æ¡ä¾‹.}. 欲详细了解,请å‰å¾€ \href{https://tex.stackexchange.com/questions/55437/how-do-i-update-my-tex-distribution}{How do I update my TEX distribution?}
+
+\subsection{载入 \pkg{LiteTable} 和其模å¼}
+将文件 \verb|litetable.cls| ä¿å­˜è‡³ä½ çš„项目根目录,然åŽåˆ›ç«‹ä¸€ä¸ª \verb|.tex| 文件,åªéœ€åœ¨ç¬¬ä¸€è¡Œè¾“入命令 \verb|\documentclass{litetable}| å³å¯.
+
+本模æ¿æ供了三个模å¼ï¼š\mode{date},\mode{style} å’Œ \mode{font}. åªéœ€å°†ä½ æƒ³è¦ä½¿ç”¨çš„模å¼é€‰é¡¹åˆ†åˆ«æ·»åŠ åœ¨ä½ çš„ \verb|.tex| 文件中命令 \verb|\documentclass[options]{litetable}| 的方括å·ä¸­å³å¯.
+
+\newpage
+\section{\pkg{LiteTable} 的模å¼}
+\begin{verbatim}
+ \documentclass[options]{litetable}
+\end{verbatim}
+\subsection{\mode{date} 模å¼}
+此模å¼æœ‰ä¸¤ä¸ªé€‰é¡¹ï¼Œ\mode{en} å’Œ \mode{cn},å¯åˆ†åˆ«ä½¿å·¥ä½œæ—¥ä»¥è‹±æ–‡æˆ–大陆简体显示,默认为英文.
+
+\subsection{\mode{style} 模å¼}
+此模å¼æœ‰ä¸¤ä¸ªé€‰é¡¹ï¼Œ\mode{round} å’Œ \mode{sharp},å¯åˆ†åˆ«ä½¿è¯¾ç¨‹å—圆角或直角显示,默认为直角.
+
+\subsection{\mode{font} 模å¼}
+此模å¼æœ‰ä¸¤ä¸ªé€‰é¡¹ï¼Œ\mode{times} å’Œ \mode{libertinus},å¯åˆ†åˆ«ä½¿å­—体为 ``Times New Roman'' 或 ``Libertinus'',默认为 ``Times New Roman''.\footnote{在使用 ``Libertinus'' 选项å‰è¯·ç¡®ä¿ç”µè„‘中已安装该字体.}
+
+\section{\pkg{LiteTable} 的命令}
+
+\subsection{\cmd{makeframe} 命令}
+\begin{verbatim}
+ \makeframe{Timetable -- Semester 5}
+\end{verbatim}
+
+此命令å¯å»ºç«‹ä¸€ä¸ªæ ‡é¢˜ä¸º ``Timetable -- Semester 5'' 的空白课程表.
+
+\subsection{The \cmd{timelist} command}
+\begin{verbatim}
+ \timelist{
+ 8:05,8:55,10:00,10:50,11:40,13:30,14:20,15:15,16:05,18:30,19:20,20:10;
+ 8:50,9:40,10:45,11:35,12:25,14:15,15:05,16:00,16:50,19:15,20:05,20:55
+ }
+\end{verbatim}
+
+此命令å¯å°†æ—¶é—´æ·»åŠ è‡³è¯¾ç¨‹è¡¨çš„左侧,内容的第一行是æ¯èŠ‚课程开始时间,第二行是æ¯èŠ‚课程的结æŸæ—¶é—´ï¼Œæ—¶é—´ä¹‹é—´ç”¨é€—å·ï¼ˆ\verb|,|)分隔,第一行与第二行之间用分å·ï¼ˆ\verb|;|)分隔.
+
+本课程表目å‰åªæ”¯æŒæ¯å¤©12节课. 在åŽç»­æ›´æ–°ä¸­ï¼Œå°†æ”¯æŒè‡ªå®šä¹‰æ¯å¤©çš„课程节数,敬请期待ï¼
+
+\subsection{\cmd{course} 命令}
+\begin{verbatim}
+ \course{H5}{3}{5}{AQM}{Building 6·225}{Yuan Li \& Mengnan Chen}{Week 1 -- 18}
+\end{verbatim}
+
+此命令共有7个å˜é‡.
+\begin{itemize}
+ \item 第一个为你想选择的课程å—颜色,从 ``H1'' 到 ``H9'' å¯é€‰.
+ \item 第二个和第三个为课程的起始节数和结æŸèŠ‚æ•°.
+ \item 第四个为课程的å称.
+ \item 第五个为课程的地å€.
+ \item 第六个为教师的åå­—.
+ \item 第七个为课程的起始周和结æŸå‘¨.
+\end{itemize}
+
+\subsection{\cmd{newday} 命令}
+此命令å¯åˆ‡æ¢å½“å‰æ—¥åˆ°ç¬¬äºŒå¤©ï¼Œæ­¤æ—¶è¯¾ç¨‹å—会å³ç§»ä¸€æ ¼.
+
+\subsection{\cmd{more} 命令}
+\begin{verbatim}
+ \more{·School Start: 04 / 03 / 2024 ·Summer Vacation: 05 / 07 / 2024}
+\end{verbatim}
+此命令å¯åœ¨è¯¾ç¨‹è¡¨æœ«å°¾æ·»åŠ å¤‡æ³¨ä¿¡æ¯.
+
+\subsection{\cmd{sticker} 命令}
+\begin{verbatim}
+ \sticker{favicon}
+\end{verbatim}
+在使用此命令åŽé¡µé¢çš„å³ä¸‹æ–¹ä¼šæ·»åŠ ä¸€å¼ è´´çº¸.
+
+\newpage
+\section{版本历å²}
+
+课程表的设计æºäºŽæ­ç”µåŠ©æ‰‹ï¼ˆ\href{https://www.hdu.edu.cn}{æ­å·žç”µå­ç§‘技大学}\footnote{https://en.wikipedia.org/wiki/Hangzhou\_Dianzi\_University})学生课表页é¢\footnote{仅本校师生å¯è®¿é—®.} 页é¢æŽ’版å分精美,于是本人使用\LaTeX{} å¤åˆ»å‡ºäº†è¯¾ç¨‹è¡¨æ ·å¼ï¼Œå¹¶åˆ¶ä½œæˆæ¨¡æ¿åˆ†äº«ç»™å¤§å®¶.
+
+\textsf{\bfseries Version 1.0} 于01/09/2023完æˆå¼€å‘,并å‘布在\href{https://www.latexstudio.net/index/details/index/mid/3625.html}{LaTeX 工作室} (æ­å·žè§å±±)å’Œ\href{http://xhslink.com/od7Ycw}{å°çº¢ä¹¦}上,赢得了许多人的喜爱.
+
+\textsf{\bfseries Version 2.0a}于01/11/2023完æˆå¼€å‘,并å‘布在\href{https://www.latexstudio.net/index/details/index/mid/3636.html}{LaTeX 工作室} (æ­å·žè§å±±)å’Œ\href{http://xhslink.com/od7Ycw}{å°çº¢ä¹¦}上. 此版本使用 \verb|.cls| 文件,使 \verb|main.tex| 文件更简æ´. åŒæ—¶ï¼Œæ­¤ç‰ˆæœ¬æ·»åŠ äº†å…¨å±€é€‰é¡¹ï¼Œå¯è®¾ç½® ``课程å—" 显示为圆角或直角. 此版本也支æŒä¸€ä¸ª \verb|.tex| 文件中生æˆå¤šå¼ è¯¾è¡¨.
+
+\textsf{\bfseries Version 2.1a} 于05/11/2023完æˆå¼€å‘. æ”¯æŒ libertinus 字体.
+
+\textsf{\bfseries Version 2.2a} 于31/01/2024完æˆå¼€å‘. 此版本修å¤äº†åˆ†è¾¨çŽ‡è¶…出的bug,更改纸张类型为美国信纸并支æŒè‡ªå®šä¹‰è¯¾ç¨‹èµ·å§‹å’Œç»“æŸæ—¶é—´.
+
+\datechange{01/09/2023}{Version 2.0a}
+\begin{itemize}
+ \item 支æŒè¯¾ç¨‹å—显示为圆角或直角.
+ \item 支æŒä¸€ä¸ª \verb|.tex| 文件中生æˆå¤šå¼ è¯¾è¡¨.
+\end{itemize}
+
+\datechange{05/11/2023}{Version 2.1a}
+\begin{itemize}
+ \item æ”¯æŒ libertinus 字体.
+\end{itemize}
+
+\datechange{31/01/2024}{Version 2.2a}
+\begin{itemize}
+ \item ä¿®å¤äº†åˆ†è¾¨çŽ‡è¶…出的bug.
+ \item 更改纸张类型为美国信纸.
+ \item 支æŒè‡ªå®šä¹‰è¯¾ç¨‹èµ·å§‹å’Œç»“æŸæ—¶é—´.
+ \item 支æŒåœ¨é¡µé¢å³ä¸‹è§’添加一个你喜欢的å°è´´çº¸.
+\end{itemize}
+
+\newpage\setstretch{1}
+\appendix
+\section{代ç ç¤ºä¾‹}
+\lstinputlisting[style=TeX]{litetable-demo.tex}
+
+\includepdf[pages=last-1,nup=1x2,angle=90]{litetable-demo.pdf}
+\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/litetable/doc/litetable-doc-en.pdf b/macros/latex/contrib/litetable/doc/litetable-doc-en.pdf
new file mode 100644
index 0000000000..1a201097da
--- /dev/null
+++ b/macros/latex/contrib/litetable/doc/litetable-doc-en.pdf
Binary files differ
diff --git a/macros/latex/contrib/litetable/doc/litetable-doc.tex b/macros/latex/contrib/litetable/doc/litetable-doc-en.tex
index ffe0a79b26..e799e32b6f 100644
--- a/macros/latex/contrib/litetable/doc/litetable-doc.tex
+++ b/macros/latex/contrib/litetable/doc/litetable-doc-en.tex
@@ -5,11 +5,14 @@
%% * either version 1.3c of this license or any later *
%% * version. *
%% ******************************************************
+\PassOptionsToPackage{quiet}{xeCJK}
+\PassOptionsToPackage{quiet}{fontspec}
+\PassOptionsToPackage{no-math}{fontspec}
\documentclass[11pt]{article}
\usepackage{geometry}
\usepackage{pdfpages}
\usepackage[level]{datetime}
-\usepackage{unicode-math}
+\usepackage{unicode-math,xeCJK}
\usepackage{authblk}
\setmainfont{Libertinus Serif}
\setsansfont{Libertinus Sans}
@@ -36,6 +39,7 @@
makeframe,course,more}
}
\usepackage{hyperref,xcolor,verbatim}
+
\definecolor{pkgcolor}{Hsb}{103,.8,.5}
\definecolor{moducolor}{Hsb}{290,.8,.5}
\definecolor{cmdcolor}{Hsb}{188,.8,.5}
@@ -50,10 +54,7 @@
\hypersetup{colorlinks,urlcolor=H1,linkcolor=H2,filecolor=filecolor,pdfstartview=FitH,pdfview=FitH,pdfcreator=XeTeX output}
\renewcommand*\l@subsection{\@dottedtocline{2}{1.5em}{2.1em}}
-\def\@pkg#1{\texorpdfstring{\href{https://www.ctan.org/pkg/#1}%
-{\textcolor{pkgcolor}{\textsf{#1}}}}{“#1â€}}
-\def\s@pkg#1{\texorpdfstring{\textcolor{pkgcolor}{\textsf{#1}}}{“#1â€}}
-\DeclareRobustCommand\pkg{\@ifstar\s@pkg\@pkg}
+\def\pkg#1{\texorpdfstring{\textcolor{pkgcolor}{\textsf{#1}}}{“#1â€}}
\def\mode#1{\texorpdfstring{\textcolor{moducolor}{\textsf{#1}}}{“#1â€}}
\def\cmd#1{\texorpdfstring{\textcolor{cmdcolor}{\textsf{#1}}}{“#1â€}}
\def\datechange#1#2{%
@@ -63,10 +64,10 @@
\title{The \pkg{LiteTable} Template}
\author[1]{Xia Mingyu, \href{https://www.hdu.edu.cn}{Hangzhou Dianzi University}}
-\ddmmyyyydate
+\yyyymmdddate
\date{\today}
\affil[1]{\href{mailto:xiamyphys@gmail.com}{\texttt{xiamyphys@gmail.com}}}
-\date{\today\quad Version 2.0a\thanks{%
+\date{\today\quad Version 2.2a\thanks{%
\url{https://github.com/xiamyphys/litetable}}}
\begin{document}
\maketitle
@@ -88,7 +89,7 @@ If you meet bugs when using this template, or you have better suggestions or ide
Also, you can join my \textsf\LaTeX{} Template Discussion \href{https://qm.qq.com/q/OnHzbNvVAG}{QQ Group: 760570712} to communicate with me and get the insider preview edition of the template.
\subsection{Packages required}
-This template is based on the template \pkg{standalone}. And it requires \pkg{tikz} package to plot some graphics, \pkg{kvoptions} and \pkg{etoolbox} packages to provide global opinions, \pkg{ctex} package to supports the \textbf{Chinese, Simplified} language and \pkg{fontawesome5} package to provides a set of beautiful icons.
+This template is based on the template \pkg{standalone}. And it requires \pkg{tikz} package to plot some graphics, \pkg{kvoptions} and \pkg{etoolbox} packages to provide global options, \pkg{expl3} package to support \cmd{timelist} array, \pkg{ctex} package to supports the \textbf{Chinese, Simplified} language and \pkg{fontawesome5} package to provides a set of beautiful icons.
I strongly suggest that you should use cmd to implement the commands to update all the packages to the latest version or switch to portable version instead.
\begin{verbatim}
@@ -101,18 +102,23 @@ If you are in some areas with awful Internet environment, you can choose proper
\subsection{Loading \pkg{LiteTable} and its modes}
Save the file \verb|litetable.cls| to your project's root directory, and then create a \verb|.tex| file, just input the command \verb|\documentclass{litetable}| on the first line.
-The template provides two modes, \mode{style} and \mode{date}. Just add the options of the modes you want separately in the square bracket of the command \verb|\documentclass[options]{litetable}| in your \verb|.tex| file.
+The template provides three modes, \mode{date}, \mode{style} and \mode{font}. Just add the options of the modes you want separately in the square bracket of the command \verb|\documentclass[options]{litetable}| in your \verb|.tex| file.
+\newpage
\section{Modes of \pkg{LiteTable}}
\begin{verbatim}
\documentclass[options]{litetable}
\end{verbatim}
-\subsection{The \mode{round} \& \mode{sharp} modes}
-This mode can make the course block's corners be round or sharp, and the default opinion is sharp.
-\subsection{The \mode{times} \& \mode{libertinus} mode}
-This mode can make the font to be ``Times New Roman'' or ``Libertinus'', and the default opinion is ``Libertinus''.\footnote{Please ensure that your computer has been already installed the font ``Libertinus'' when using this opinion.}
+\subsection{The \mode{date} mode}
+This mode has two options, \mode{en} and \mode{cn}, which can make the weekdays display in English or 大陆简体, and the dafault option is English.
+
+\subsection{The \mode{style} mode}
+This mode has two options, \mode{round} and \mode{sharp}, which can make the course block's corners be round or sharp, and the default option is sharp.
-\section{Environment and commands of \pkg{LiteTable}}
+\subsection{The \mode{font} mode}
+This mode has two options, \mode{times} and \mode{libertinus}, which can make the font to be ``Times New Roman'' or ``Libertinus'', and the default option is ``Times New Roman''.\footnote{Please ensure that your computer has been already installed the font ``Libertinus'' when using this option.}
+
+\section{Commands of \pkg{LiteTable}}
\subsection{The \cmd{makeframe} command}
\begin{verbatim}
@@ -120,28 +126,53 @@ This mode can make the font to be ``Times New Roman'' or ``Libertinus'', and the
\end{verbatim}
This command can create an empty class schedule with the title ``Timetable -- Semester 5''.
-\subsection{The \cmd{course} command}
+\subsection{The \cmd{timelist} command}
+\begin{verbatim}
+ \timelist{
+ 8:05,8:55,10:00,10:50,11:40,13:30,14:20,15:15,16:05,18:30,19:20,20:10;
+ 8:50,9:40,10:45,11:35,12:25,14:15,15:05,16:00,16:50,19:15,20:05,20:55
+ }
+\end{verbatim}
+
+This command can add time to the left side of the timetable, and the first line of the content is the start time of the class while the second line of the content is the end time of the class, each time separates with comma (\verb|,|), the first line and the second line separates with semicolon (\verb|;|).
+
+The timetable currently only supports 12 classes per day. In the future updates, customization of the number of courses per day will be supported.
+
+\subsection{The \cmd{course} command}
\begin{verbatim}
- \course{H5}{4}{3}{5}{AQM}{Building 6·225}{Yuan Li \& Mengnan Chen}{Week 1 -- 18}
+ \course{H5}{3}{5}{AQM}{Building 6·225}{Yuan Li \& Mengnan Chen}{Week 1 -- 18}
\end{verbatim}
-There are 8 variables in this command.
+There are 7 variables in this command.
\begin{itemize}
\item The 1st one is the color of the class that you want, from ``H1'' to ``H5''.
- \item The 2nd one is the workday of the class.
- \item The 3rd and 4th ones is the starting number and ending number of the class.
- \item The 5th one is the name of the class.
- \item The 6th one is the address of the class.
- \item The 7th one is the name of the teacher(s).
+ \item The 2nd and 3rd ones is the starting number and ending number of the class.
+ \item The 4th one is the name of the class.
+ \item The 5th one is the address of the class.
+ \item The 6th one is the name of the teacher(s).
\item The last one is the start week and end week of the class.
\end{itemize}
+
+\subsection{The \cmd{newday} command}
+This command can switch the current weekday to the next day, then the course will move right one grid.
+
\subsection{The \cmd{more} command}
+\begin{verbatim}
+ \more{·School Start: 04 / 03 / 2024 ·Summer Vacation: 05 / 07 / 2024}
+\end{verbatim}
This command can add remark at the end of the class schedule.
+
+\subsection{The \cmd{sticker} command}
+\begin{verbatim}
+ \sticker{favicon}
+\end{verbatim}
+There will be a sticker on the southeast of the page after you add,otherwise it won't.
+
\newpage
\section{Version History}
-I am a college student studying at \href{https://www.hdu.edu.cn}{Hangzhou Dianzi University}\footnote{https://en.wikipedia.org/wiki/Hangzhou\_Dianzi\_University} in China. An official club named \href{https://www.hduhelp.cn/}{HDUHelp} in my school has created a web page \href{https://cinnamon.hduhelp.com/navigation/schedule}{schedule}\footnote{Only those studying at or graduated from Hangzhou Dianzi University can have the permission of access.}. Every students and teachers can view their own class schedule on it. The layout is very beautiful and then I used LaTeX to imitate that style and made a class schedule template to share with everyone.
+The design of this course schedule originated from the student course schedule web page\footnote{Only those studying at or graduated from Hangzhou Dianzi University can have the permission of access.} of the \href{https://www.hduhelp.cn/}{HDUHelp} in \href{https://www.hdu.edu.cn}{Hangzhou Dianzi University}\footnote{https://en.wikipedia.org/wiki/Hangzhou\_Dianzi\_University}. The layout is very beautiful and then I used \LaTeX{} to imitate that style and made a class schedule template to share with everyone.
\textsf{\bfseries Version 1.0} was finished on 1 September, 2023 and released on \href{https://www.latexstudio.net/index/details/index/mid/3625.html}{LaTeX Studio} (Xiaoshan, Hangzhou) and \href{http://xhslink.com/od7Ycw}{Xiaohongshu}, where won the favor of many people.
@@ -149,6 +180,8 @@ I am a college student studying at \href{https://www.hdu.edu.cn}{Hangzhou Dianzi
\textsf{\bfseries Version 2.1a} was finished developing on 5 November, 2023. Supports the libertinus font.
+\textsf{\bfseries Version 2.2a} was finished developing on 31 January, 2024. This Version fixed the bug of resolution exceeded, changed paper type to US letter and support custom course start time and end time.
+
\datechange{01/09/2023}{Version 2.0a}
\begin{itemize}
\item Supports the course block's corners be round or sharp.
@@ -160,6 +193,14 @@ I am a college student studying at \href{https://www.hdu.edu.cn}{Hangzhou Dianzi
\item Supports the libertinus font.
\end{itemize}
+\datechange{31/01/2024}{Version 2.2a}
+\begin{itemize}
+ \item Fixed the bug of resolution exceeded.
+ \item Changed paper type to US letter.
+ \item Support custom course start time and end time.
+ \item Support add sticker as you like at the southeast of the page.
+\end{itemize}
+
\newpage
\appendix
\section{Document Example}
diff --git a/macros/latex/contrib/litetable/doc/litetable-doc.pdf b/macros/latex/contrib/litetable/doc/litetable-doc.pdf
deleted file mode 100644
index 92cfe2a9ca..0000000000
--- a/macros/latex/contrib/litetable/doc/litetable-doc.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/litetable/tex/litetable.cls b/macros/latex/contrib/litetable/tex/litetable.cls
index 50c979fdd0..647d078520 100644
--- a/macros/latex/contrib/litetable/tex/litetable.cls
+++ b/macros/latex/contrib/litetable/tex/litetable.cls
@@ -6,14 +6,17 @@
%% * either version 1.3c of this license or any later * * * ** * ***** * *
%% * version. * * * ** * * * * *
%% ****************************************************** ***** ** * * *** * * *
-%% start of file `notebeamer.cls'. *
+%% start of file `litetable.cls'. *
%% Copyright 2023 LiteLaTeX (xiamyphys@gmail.com) *
%% available at https://github.com/xiamyphys/LiteTable *
%% !Mode:: "TeX:UTF-8" *
%% ************************************************************************************************************
\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{litetable}[2023/11/05 v2.1a LiteTable document class]
-\LoadClass[tikz,margin=10pt]{standalone}
+\PassOptionsToPackage{quiet}{xeCJK}
+\PassOptionsToPackage{quiet}{fontspec}
+\PassOptionsToPackage{no-math}{fontspec}
+\ProvidesClass{litetable}[2024/01/31/ v2.2a LiteTable document class]
+
% ---------- 全局选项 ---------- %
\RequirePackage{kvoptions}
\RequirePackage{etoolbox}
@@ -30,28 +33,18 @@
\DeclareStringOption[times]{font}
\DeclareVoidOption{times}{\ekv{date=times}}
-\DeclareVoidOption{libertinus}{\ekv{date=libertinus}}
+\DeclareVoidOption{libertinuTs}{\ekv{date=libertinus}}
-\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{book}}
+\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{standalone}}
\ProcessKeyvalOptions*\relax
-
-% ---------- 中文字体 ---------- %
-\RequirePackage{ctex}
+\LoadClass[tikz,margin=6pt]{standalone}
% ---- 文本中的数字 & å­—æ¯è®¾ç½® ---- %
-\PassOptionsToPackage{no-math}{fontspec}
-\PassOptionsToPackage{quiet}{fontspec}
+\RequirePackage{ctex}
\ifdefstring{\LITE@font}{libertinus}{
\setmainfont{Libertinus Serif}
\setsansfont{Libertinus Sans}
-\setmonofont{NotoSansMono}[
- Scale=MatchLowercase,
- Extension=.ttf,
- UprightFont=*-Light,
- BoldFont=*-Medium
-]
}{\relax}
-\RequirePackage{iftex}
\ifdefstring{\LITE@font}{times}{
\ifXeTeX
\RequirePackage[no-math]{fontspec}
@@ -79,7 +72,7 @@
% ---------- è‰²å½©ç»„åˆ ---------- %
\definecolor{darkgray}{HTML}{727477}% 时间颜色
\definecolor{darkergray}{HTML}{F1F3F5}% 深色å—
-\definecolor{lightergray}{HTML}{F8F9FA}% 浅色å—
+\definecolor{lightergray}{HTML}{FCFDFE}% 浅色å—
\definecolor{blackgray}{HTML}{1A1D21}% åºå·é¢œè‰²
\definecolor{H1}{HTML}{74A7A2}% 深绿
\definecolor{H1*}{HTML}{E9EEED}
@@ -109,107 +102,114 @@
\definecolor{H9*}{HTML}{F2E0D0}
\definecolor{H9**}{HTML}{C96F1C}
\pagecolor{lightergray}
-\newcommand{\xscale}{2.2733}
-\newcommand{\yscale}{0.4291}
-
-\usetikzlibrary{calc}
-\ifdefstring{\LITE@style}{round}{
-\newcommand{\course}[8]{
- \fill [#1,rounded corners=5pt] ($({(-23+32*(#2))*\xscale},{-\yscale*(21+93*#3)-0.2})$) rectangle ($({(9+32*(#2))*\xscale},{-\yscale*(114+93*#4)+0.2})$);
- \fill [#1*,rounded corners=5pt] ($({(-23+32*(#2))*\xscale+0.1},{-\yscale*(42+93*#3)})$) -- ($({(-23+32*(#2))*\xscale+0.1},{-\yscale*(114+93*#4)+0.3})$) -- ($({(9+32*(#2))*\xscale-0.1},{-\yscale*(114+93*#4)+0.3})$) -- ($({(9+32*(#2))*\xscale-0.1},{-\yscale*(42+93*#3)})$);
- \node [#1**,anchor=south] at ($({((-23+32*(#2))*\xscale+(9+32*(#2))*\xscale)/2},{(-\yscale*(21+93*#3)-\yscale*(114+93*#4))/2})$) {\heiti\bfseries #5};
- \node [#1**,anchor=north] at ($({((-23+32*(#2))*\xscale+(9+32*(#2))*\xscale)/2},{(-\yscale*(21+93*#3)-\yscale*(114+93*#4))/2-21*\yscale})$) {\heiti\bfseries\footnotesize #6};
- \node [#1**,anchor=north] at ($({((-23+32*(#2))*\xscale+(9+32*(#2))*\xscale)/2},{(-\yscale*(21+93*#3)-\yscale*(114+93*#4))/2-42*\yscale})$) {\heiti\footnotesize #7};
- \node [#1**,anchor=south east] at ($({(9+32*(#2))*\xscale-0.1},{-\yscale*(114+93*#4)+0.3})$) {\heiti\footnotesize #8};
- }
- }{\relax}
-\ifdefstring{\LITE@style}{sharp}{
-\newcommand{\course}[8]{
- \fill [#1] ($({(-23+32*(#2))*\xscale},{-\yscale*(21+93*#3)-0.2})$) rectangle ($({(9+32*(#2))*\xscale},{-\yscale*(114+93*#4)+0.2})$);
- \fill [#1*] ($({(-23+32*(#2))*\xscale+0.1},{-\yscale*(42+93*#3)})$) rectangle ($({(9+32*(#2))*\xscale-0.1},{-\yscale*(114+93*#4)+0.3})$);
- \node [#1**,anchor=south] at ($({((-23+32*(#2))*\xscale+(9+32*(#2))*\xscale)/2},{(-\yscale*(21+93*#3)-\yscale*(114+93*#4))/2})$) {\heiti\bfseries #5};
- \node [#1**,anchor=north] at ($({((-23+32*(#2))*\xscale+(9+32*(#2))*\xscale)/2},{(-\yscale*(21+93*#3)-\yscale*(114+93*#4))/2-21*\yscale})$) {\heiti\bfseries\footnotesize #6};
- \node [#1**,anchor=north] at ($({((-23+32*(#2))*\xscale+(9+32*(#2))*\xscale)/2},{(-\yscale*(21+93*#3)-\yscale*(114+93*#4))/2-42*\yscale})$) {\heiti\footnotesize #7};
- \node [#1**,anchor=south east] at ($({(9+32*(#2))*\xscale-0.1},{-\yscale*(114+93*#4)+0.3})$) {\heiti\footnotesize #8};
- }
- }{\relax}
-
-\newcounter{number}
-\RequirePackage{fontawesome5}
\definecolor{丹色}{HTML}{E45E32}
\definecolor{ç´…ç·‹}{HTML}{E83929}
\definecolor{紺碧}{HTML}{007BBB}
\definecolor{é’碧}{HTML}{478384}
\definecolor{金色}{HTML}{E6B422}
+
+\def\pagewidth{8.5 in}
+\def\pageheight{-11 in}
+\usetikzlibrary{calc}
+\ifdefstring{\LITE@style}{round}{\def\corners{round corners=6pt}}{\relax}
+\ifdefstring{\LITE@style}{sharp}{\def\corners{}}{\relax}
+
+\ExplSyntaxOn % 二维数组
+\seq_new:N \l_node_row_seq
+\seq_new:N \l_node_tmp_seq
+\cs_set:Npn \timelist #1 {
+ \gdef\@timelist{#1} % 用于判断\@timelist是å¦å­˜åœ¨
+ \seq_set_split:Nnn \l_node_row_seq {;} {#1}
+ \int_step_inline:nn{\seq_count:N \l_node_row_seq}
+ {
+ \seq_if_exist:cF {l_node_row_##1_seq}
+ {
+ \seq_new:c {l_node_row_##1_seq}
+ }
+ \exp_args:Ncx\seq_set_from_clist:Nn {l_node_row_##1_seq} {\seq_item:Nn \l_node_row_seq{##1}}
+ }
+}
+
+\cs_set:Npn \PrintTime [#1][#2] {
+ \tl_if_empty:nTF { #1 }
+ {
+ \tl_if_empty:nTF { #2 }
+ {
+ \seq_use:Nn \l_node_row_seq {,}
+ }
+ {
+ \int_step_inline:nn{\seq_count:N \l_node_row_seq}
+ {
+ \seq_put_right:Nn \l_node_tmp_seq {\seq_item:cn {l_node_row_##1_seq}{#2}}
+ }
+ \seq_use:Nn \l_node_tmp_seq {,}
+ }
+ }
+ {
+ \tl_if_empty:nTF {#2}
+ {
+ \seq_use:cn {l_node_row_#1_seq}{,}
+ }
+ {
+ \seq_item:cn {l_node_row_#1_seq}{#2}
+ }
+ }
+}
+\ExplSyntaxOff
+\RequirePackage{fontawesome5}
+\newcounter{number}
+\def\sticker{\gdef\@sticker}
\newcommand{\makeframe}[1]{
- \ifdefstring{\LITE@style}{round}{
- \fill [fill=darkergray,rounded corners=8pt] (0,0) rectangle ($({169*\xscale},{-\yscale*72})$);% 顶部深ç°è‰²å—
+ \draw [gray!75] (0,0) rectangle (8.5 in,-11 in);
+ \fill [fill=darkergray,\corners] (0,0) rectangle (\pagewidth,1.5*\pageheight/27.5);% 顶部深ç°è‰²å—
+ \node at (.5*\pagewidth,.75*\pageheight/27.5) {\huge\bfseries\sffamily #1};
\foreach \a in {2,4,...,12}
- \fill [fill=darkergray,yshift=\yscale*72 cm-\yscale*93*\a cm,rounded corners=8pt] (0,0) rectangle ($({169*\xscale},{-\yscale*93})$);% 中间深ç°è‰²å—(循环)
- \fill [fill=darkergray,yshift=-\yscale*114 cm-\yscale*93*12 cm,rounded corners=8pt] (0,0) rectangle ($({169*\xscale},{-\yscale*36})$);% 底部深ç°è‰²å—
- }{\relax}
- \ifdefstring{\LITE@style}{sharp}{
- \fill [fill=darkergray] (0,0) rectangle ($({169*\xscale},{-\yscale*72})$);% 顶部深ç°è‰²å—
- \foreach \a in {2,4,...,12}
- \fill [fill=darkergray,yshift=\yscale*72 cm-\yscale*93*\a cm] (0,0) rectangle ($({169*\xscale},{-\yscale*93})$);% 中间深ç°è‰²å—(循环)
- \fill [fill=darkergray,yshift=-\yscale*114 cm-\yscale*93*12 cm] (0,0) rectangle ($({169*\xscale},{-\yscale*36})$);% 底部深ç°è‰²å—
- }{\relax}
+ \fill [fill=darkergray,yshift=2.5*\pageheight/27.5+2*(\a-2)*\pageheight/27.5,\corners] (0,0) rectangle (\pagewidth,2*\pageheight/27.5);% 中间深ç°è‰²å—(循环)
+ \fill [fill=darkergray,yshift=2.5*\pageheight/27.5+2*12*\pageheight/27.5,\corners] (0,0) rectangle (\pagewidth,\pageheight/27.5);% 底部深ç°è‰²å—
\foreach \a in {0,1,2,...,12}
- \draw [densely dashed,gray!75,yshift=-\yscale*114 cm-\yscale*93*\a cm] ($({9*\xscale},0)$)--($({169*\xscale},0)$);% 分割虚线
- \node at ($({169*\xscale/2},{-\yscale*72/2})$) {\huge\bfseries\sffamily #1};
+ \draw [densely dashed,gray!75,yshift=2.5*\pageheight/27.5+2*\a*\pageheight/27.5,] (0,0)--(\pagewidth,0);% 分割虚线
% 时间标注
\setcounter{number}{0}
\foreach \a in {1,2,...,12}
- \node [yshift=-93*\yscale*(\a-1)*0.05 cm] at ($({9*\xscale/2},{-\yscale*135})$) {\bfseries\color{blackgray}\texttt{\textit{\refstepcounter{number}\thenumber}}};
- \node at ($({9*\xscale/2},{-\yscale*171})$) {\footnotesize\color{darkgray}\texttt{8:05}};
- \node at ($({9*\xscale/2},{-\yscale*195})$) {\footnotesize\color{darkgray}\texttt{8:50}};
-
- \node [yshift=-93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*171})$) {\footnotesize\color{darkgray}\texttt{8:55}};
- \node [yshift=-93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*195})$) {\footnotesize\color{darkgray}\texttt{9:40}};
-
- \node [yshift=-2*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*171})$) {\footnotesize\color{darkgray}\texttt{10:00}};
- \node [yshift=-2*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*195})$) {\footnotesize\color{darkgray}\texttt{10:45}};
-
- \node [yshift=-3*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*171})$) {\footnotesize\color{darkgray}\texttt{10:50}};
- \node [yshift=-3*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*195})$) {\footnotesize\color{darkgray}\texttt{11:35}};
-
- \node [yshift=-4*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*171})$) {\footnotesize\color{darkgray}\texttt{11:40}};
- \node [yshift=-4*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*195})$) {\footnotesize\color{darkgray}\texttt{12:25}};
-
- \node [yshift=-5*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*171})$) {\footnotesize\color{darkgray}\texttt{13:30}};
- \node [yshift=-5*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*195})$) {\footnotesize\color{darkgray}\texttt{14:15}};
-
- \node [yshift=-6*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*171})$) {\footnotesize\color{darkgray}\texttt{14:20}};
- \node [yshift=-6*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*195})$) {\footnotesize\color{darkgray}\texttt{15:05}};
-
- \node [yshift=-7*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*171})$) {\footnotesize\color{darkgray}\texttt{15:15}};
- \node [yshift=-7*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*195})$) {\footnotesize\color{darkgray}\texttt{16:00}};
-
- \node [yshift=-8*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*171})$) {\footnotesize\color{darkgray}\texttt{16:05}};
- \node [yshift=-8*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*195})$) {\footnotesize\color{darkgray}\texttt{16:50}};
-
- \node [yshift=-9*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*171})$) {\footnotesize\color{darkgray}\texttt{18:30}};
- \node [yshift=-9*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*195})$) {\footnotesize\color{darkgray}\texttt{19:15}};
-
- \node [yshift=-10*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*171})$) {\footnotesize\color{darkgray}\texttt{19:20}};
- \node [yshift=-10*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*195})$) {\footnotesize\color{darkgray}\texttt{20:05}};
-
- \node [yshift=-11*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*171})$) {\footnotesize\color{darkgray}\texttt{20:10}};
- \node [yshift=-11*93*\yscale*0.05 cm] at ($({9*\xscale/2},{-\yscale*195})$) {\footnotesize\color{darkgray}\texttt{20:55}};
+ \node [yshift=2.5*\pageheight/27.5+2*(\a-.8)*\pageheight/27.5] at (\pagewidth/32,0) {\bfseries\color{blackgray}\texttt{\refstepcounter{number}\thenumber}};
+ \ifcsname @timelist\endcsname % 若 `\@timelist == empty', 跳过该函数
+ \foreach \x in {1,2,...,12}
+ {
+ \node[yshift=2.5*\pageheight/27.5+2*(\x-.475)*\pageheight/27.5] at (\pagewidth/32,0) {\color{darkgray}\texttt{\PrintTime[1][\x]}};
+ \node[yshift=2.5*\pageheight/27.5+2*(\x-.2)*\pageheight/27.5] at (\pagewidth/32,0) {\color{darkgray}\texttt{\PrintTime[2][\x]}};
+ }\fi
% 星期标注
\ifdefstring{\LITE@date}{en}{
- \node [xshift=\xscale*25*0.05 cm] at ($(0,{-\yscale*93})$) {\color{丹色}\faIcon{moon}\;\bfseries\heiti{Monday}};
- \node [xshift=\xscale*57*0.05 cm] at ($(0,{-\yscale*93})$) {\color{ç´…ç·‹}\faIcon{fire}\;\bfseries\heiti{Tuesday}};
- \node [xshift=\xscale*89*0.05 cm] at ($(0,{-\yscale*93})$) {\color{紺碧}\faIcon{water}\;\bfseries\heiti{Wednesday}};
- \node [xshift=\xscale*121*0.05 cm] at ($(0,{-\yscale*93})$) {\color{é’碧}\faIcon{tree}\;\bfseries\heiti{Thursday}};
- \node [xshift=\xscale*153*0.05 cm] at ($(0,{-\yscale*93})$) {\color{金色}\faIcon{sun}\;\bfseries\heiti{Friday}};
+ \node [xshift=2.5*\pagewidth/16] at (0,2*\pageheight/27.5) {\color{丹色}\faIcon{moon}\;\bfseries\heiti{Monday}};
+ \node [xshift=5.5*\pagewidth/16] at (0,2*\pageheight/27.5) {\color{ç´…ç·‹}\faIcon{fire}\;\bfseries\heiti{Tuesday}};
+ \node [xshift=8.5*\pagewidth/16] at (0,2*\pageheight/27.5) {\color{紺碧}\faIcon{water}\;\bfseries\heiti{Wednesday}};
+ \node [xshift=11.5*\pagewidth/16] at (0,2*\pageheight/27.5) {\color{é’碧}\faIcon{tree}\;\bfseries\heiti{Thursday}};
+ \node [xshift=14.5*\pagewidth/16] at (0,2*\pageheight/27.5) {\color{金色}\faIcon{sun}\;\bfseries\heiti{Friday}};
}{\relax}
\ifdefstring{\LITE@date}{cn}{
- \node [xshift=\xscale*25*0.05 cm] at ($(0,{-\yscale*93})$) {\color{丹色}\faIcon{moon}\;\bfseries\heiti{星期一}};
- \node [xshift=\xscale*57*0.05 cm] at ($(0,{-\yscale*93})$) {\color{紅緋}\faIcon{fire}\;\bfseries\heiti{星期二}};
- \node [xshift=\xscale*89*0.05 cm] at ($(0,{-\yscale*93})$) {\color{紺碧}\faIcon{water}\;\bfseries\heiti{星期三}};
- \node [xshift=\xscale*121*0.05 cm] at ($(0,{-\yscale*93})$) {\color{é’碧}\faIcon{tree}\;\bfseries\heiti{星期四}};
- \node [xshift=\xscale*153*0.05 cm] at ($(0,{-\yscale*93})$) {\color{金色}\faIcon{sun}\;\bfseries\heiti{星期五}};
+ \node [xshift=2.5*\pagewidth/16] at (0,2*\pageheight/27.5) {\color{丹色}\faIcon{moon}\;\bfseries\heiti{星期一}};
+ \node [xshift=5.5*\pagewidth/16] at (0,2*\pageheight/27.5) {\color{紅緋}\faIcon{fire}\;\bfseries\heiti{星期二}};
+ \node [xshift=8.5*\pagewidth/16] at (0,2*\pageheight/27.5) {\color{紺碧}\faIcon{water}\;\bfseries\heiti{星期三}};
+ \node [xshift=11.5*\pagewidth/16] at (0,2*\pageheight/27.5) {\color{é’碧}\faIcon{tree}\;\bfseries\heiti{星期四}};
+ \node [xshift=14.5*\pagewidth/16] at (0,2*\pageheight/27.5) {\color{金色}\faIcon{sun}\;\bfseries\heiti{星期五}};
}{\relax}
+ \ifcsname @sticker\endcsname
+ \node [opacity=.3,anchor=south east,yshift=1.5*\pageheight/27.5+2*12*\pageheight/27.5,inner sep=0pt,scale=3] at (\pagewidth,\pageheight/27.5) {\includegraphics[width=\dimeval{\pagewidth/16}]{\@sticker}};\fi
}
-\newcommand{\more}[1]{\node [yshift=-\yscale*0.05*114 cm-\yscale*0.05*93*12 cm,anchor=east] at ($({169*\xscale},{-\yscale*18})$) {\small\color{darkgray}#1};} \ No newline at end of file
+
+\newcounter{weekday}
+\def\newday{\addtocounter{weekday}{1}}
+\AtEndEnvironment{tikzpicture}{\setcounter{weekday}{0}}
+\newcommand{\course}[7]
+{
+ \fill [#1,\corners,yshift=2*(#2-1)*\pageheight/27.5,xshift=3*\theweekday*\pagewidth/16] (\pagewidth/16,2.5*\pageheight/27.5) rectangle ($({4*\pagewidth/16},{(4.5+2*(#3-#2))*\pageheight/27.5})$); % frame
+ \fill [#1*,\corners,yshift=(2*(#2-1)+.5)*\pageheight/27.5,xshift=3*\theweekday*\pagewidth/16] (\pagewidth/16,2.5*\pageheight/27.5) rectangle ($({4*\pagewidth/16},{(4+2*(#3-#2))*\pageheight/27.5})$); % content
+ \node [#1**,yshift=(#2+#3-1.25)*\pageheight/27.5,xshift=3*\theweekday*\pagewidth/16] at (2.5*\pagewidth/16,2.5*\pageheight/27.5) {\heiti\large\bfseries #4}; % course
+ \node [#1**,anchor=south,yshift=(#2+#3-.2)*\pageheight/27.5,xshift=3*\theweekday*\pagewidth/16] at (2.5*\pagewidth/16,2.5*\pageheight/27.5) {\heiti\bfseries\small #5}; % location
+ \node [#1**,anchor=north,yshift=(#2+#3-.2)*\pageheight/27.5,xshift=3*\theweekday*\pagewidth/16] at (2.5*\pagewidth/16,2.5*\pageheight/27.5) {\heiti\bfseries\small #6}; % teacher
+ \node [#1**,anchor=south east,yshift=2*#3*\pageheight/27.5,xshift=3*\theweekday*\pagewidth/16] at (4*\pagewidth/16,2.5*\pageheight/27.5) {\heiti\footnotesize #7}; % weeks
+}
+
+\def\more#1{
+ \node [xshift=-1em,yshift=2.5*\pageheight/27.5+2*12*\pageheight/27.5,anchor=east] at (\pagewidth,.5*\pageheight/27.5){\small\bfseries\color{darkgray}#1};
+} \ No newline at end of file
diff --git a/macros/latex/contrib/refstyle/README b/macros/latex/contrib/refstyle/README
index e33a537d59..93d23dc15e 100644
--- a/macros/latex/contrib/refstyle/README
+++ b/macros/latex/contrib/refstyle/README
@@ -1,70 +1,70 @@
- The refstyle package
- For extended references
-
-File: README
-Author: Danie Els
-
-DESCRIPTION
-===========
-
-The package provides a user interface to define sets of reference
-and label commands for each referable object such as an equation or
-a table, etc.
-
-Copyright: 2002--2010 Danie Els
-Licence: LPPL
-
-FILES IN DISTRIBUTION
-=====================
-
- BASE DISTRIBUTION:
-
- README This file.
- refstyle.ins Package installation file.
- refstyle.dtx Package source file.
- refconfig.dtx Package configuration source file.
-
- refstyle.sty
- refstyle.cfg Package style and config files. Was produced by
- executing "latex refstyle.ins".
-
- DOCUMENTATION:
-
- refstyle.pdf User manual for refstyle package. It was
- produced by executing:
-
- latex refstyle.ins
-
- pdflatex refstyle.dtx
- pdflatex refstyle.dtx
- makeindex -s gglo.ist -o refstyle.gls refstyle.glo
- makeindex -s gind.ist -o refstyle.ind refstyle.idx
- pdflatex refstyle.dtx
- pdflatex refstyle.dtx
-
- refconfig.pdf Configuration manual for refstyle package. Produced
- form refconfig.dtx in the same manner as above.
-
-
-BASIC INSTALLATION
-====================
-
- The minimum requirement to use the package is the to have
- refstyle.sty and refstyle.cfg in a directory where TeX can find it.
-
- For a basic installation on a TDS compliant system, move the following
- files to the following directories:
-
- <texmf>/tex/latex/refstyle/
- refstyle.sty
- refstyle.cfg
-
- <texmf>/source/latex/refstyle/
- refstyle.ins
- refstyle.dtx
- refconfig.dtx
-
- <texmf>/doc/latex/refstyle/
- README
- refstyle.pdf
- refconfig.pdf
+ The refstyle package
+ For extended references
+
+File: README
+Author: Danie Els
+
+DESCRIPTION
+===========
+
+The package provides a user interface to define sets of reference
+and label commands for each referable object such as an equation or
+a table, etc.
+
+Copyright: 2002--2024 Danie Els
+Licence: LPPL
+
+FILES IN DISTRIBUTION
+=====================
+
+ BASE DISTRIBUTION:
+
+ README This file.
+ refstyle.ins Package installation file.
+ refstyle.dtx Package source file.
+ refconfig.dtx Package configuration source file.
+
+ refstyle.sty
+ refstyle.cfg Package style and config files. Was produced by
+ executing "latex refstyle.ins".
+
+ DOCUMENTATION:
+
+ refstyle.pdf User manual for refstyle package. It was
+ produced by executing:
+
+ latex refstyle.ins
+
+ pdflatex refstyle.dtx
+ pdflatex refstyle.dtx
+ makeindex -s gglo.ist -o refstyle.gls refstyle.glo
+ makeindex -s gind.ist -o refstyle.ind refstyle.idx
+ pdflatex refstyle.dtx
+ pdflatex refstyle.dtx
+
+ refconfig.pdf Configuration manual for refstyle package. Produced
+ form refconfig.dtx in the same manner as above.
+
+
+BASIC INSTALLATION
+====================
+
+ The minimum requirement to use the package is the to have
+ refstyle.sty and refstyle.cfg in a directory where TeX can find it.
+
+ For a basic installation on a TDS compliant system, move the following
+ files to the following directories:
+
+ <texmf>/tex/latex/refstyle/
+ refstyle.sty
+ refstyle.cfg
+
+ <texmf>/source/latex/refstyle/
+ refstyle.ins
+ refstyle.dtx
+ refconfig.dtx
+
+ <texmf>/doc/latex/refstyle/
+ README
+ refstyle.pdf
+ refconfig.pdf
diff --git a/macros/latex/contrib/refstyle/refconfig.dtx b/macros/latex/contrib/refstyle/refconfig.dtx
index a603d8e135..22a675b8ac 100644
--- a/macros/latex/contrib/refstyle/refconfig.dtx
+++ b/macros/latex/contrib/refstyle/refconfig.dtx
@@ -1,1212 +1,1209 @@
-% \iffalse
-%
-% refconfig.dtx
-% Copyright (C) 2002--2010 Danie Els
-%
-% -------------------------------------------------------------------
-% The refstyle package
-% for the formatting of references
-% -------------------------------------------------------------------
-% This work may be distributed and/or modified under the conditions
-% of the LaTeX Project Public License, either version 1.3c 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.3c or later is part of all distributions of LaTeX
-% version 2005/12/01 or later.
-%
-% This work is "maintained" (as per LPPL maintenance status)
-% by Danie Els (dnjels@sun.ac.za).
-%
-% This package consists of the files: refstyle.dtx
-% refconfig.dtx
-% refstyle.ins
-% and the derived files: refstyle.sty
-% refstyle.cfg
-% -------------------------------------------------------------------
-%
-%
-%<*driver>
-\documentclass[a4paper]{ltxdoc}
- \EnableCrossrefs
- \CodelineIndex
- \RecordChanges
-\usepackage{color}
-\usepackage{framed}
- \setlength{\FrameSep}{1\fboxsep}
- \definecolor{shadecolor}{gray}{0.9}
- \newenvironment{RSframed}{\shaded}{\endshaded}
-\usepackage{xspace}
-\usepackage{varioref}
-\usepackage{refstyle}
-
-%-- macrocode env changes ------------------------------
-
-\setlength{\MacroIndent}{1.5em}
-
-%-- Indented environments ------------------------------
-
-\newlength{\tdima}
-\newsavebox{\tboxa}
-\newlength{\mytab}
-\setlength{\mytab}{2\parindent}
-
-\newenvironment{IndentPara}[1][1]
- {\list{}{\setlength{\leftmargin}{#1\mytab}%
- \setlength{\labelwidth}{0pt}%
- \setlength{\labelsep}{0pt}%
- \setlength{\itemindent}{\parindent}%
- \setlength{\listparindent}{\parindent}%
- }\item[]}%
- {\endlist}
-\newenvironment{Ipara}[1][\small]%
- {\begin{IndentPara}\noindent#1\ignorespaces}%
- {\end{IndentPara}}
-\newenvironment{Itabb}[1][\small]%
- {\begin{IndentPara}#1\ignorespaces\begin{tabbing}\ignorespaces}%
- {\end{tabbing}\end{IndentPara}}
-
-%-- Additional documenting commands --------------------
-
-\makeatletter
-\def\meta@font@select{\normalfont\slshape}
-\makeatother
-
-\newcommand*{\file}[1]{\texttt{#1}}
-\newcommand*{\pkg}[1]{\textsf{#1}}
-\newcommand*{\env}[1]{\texttt{#1}}
-\newcommand*{\opt}[1]{\texttt{\slshape#1}}
-\newcommand*{\RS}{\pkg{refstyle}\xspace}
-
-\newcommand*{\ArTab}{\>\quad$\rightarrow$\quad}
-
-%-------------------------------------------------------
-
-\setlength\hfuzz{15pt}
-\hbadness=7000
-\begin{document}
- \DocInput{refconfig.dtx}
-\end{document}
-
-%</driver>
-% \fi
-%
-% \CheckSum{1098}
-%
-% \CharacterTable
-% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
-% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
-% Digits \0\1\2\3\4\5\6\7\8\9
-% Exclamation \! Double quote \" Hash (number) \#
-% Dollar \$ Percent \% Ampersand \&
-% Acute accent \' Left paren \( Right paren \)
-% Asterisk \* Plus \+ Comma \,
-% Minus \- Point \. Solidus \/
-% Colon \: Semicolon \; Less than \<
-% Equals \= Greater than \> Question mark \?
-% Commercial at \@ Left bracket \[ Backslash \\
-% Right bracket \] Circumflex \^ Underscore \_
-% Grave accent \` Left brace \{ Vertical bar \|
-% Right brace \} Tilde \~}
-%
-% \changes{v0.0}{2002/04/01}{Initial version}
-% \changes{v0.2}{2003/07/30}{Updated version}
-% \changes{v0.3}{2006/09/07}{Documentation update}
-% \changes{v0.4}{2010/10/21}{Add \cmd{\RSlsttwotxt} for lists}
-% \changes{v0.5}{2010/11/02}{Bug fixes}
-%
-% \DoNotIndex{
-% \",\@chapapp,\@ifpackageloaded,\AtBeginDocument,
-% \begingroup,\def,\edef,\else,\endgroup,
-% \fi,\ifx, \let, \newcommand,\newref,
-% \providecommand,\ProvidesFile,\ref,\relax,
-% \renewcommand,\RS@ifundefined,\RS@tmpa,\RS@tmpb,
-% \S,\space,\ss,\string,\textup,\unrestored@protected@xdef}
-%
-%^^A-- Titling --------------------------------------------
-% \GetFileInfo{refstyle.cfg}
-% \title{\vskip -2em
-% Configuration file for \RS\ package\thanks{
-% This file has version number
-% \fileversion, last revised
-% \filedate.}}
-% \author{Danie Els\\[1ex]
-% \small Department of Mechanical and Mechatroncs Engineering\\
-% \small University of Stellenbosch, South Africa.\\
-% \normalsize e-mail: \texttt{dnjels@sun.ac.za}}
-% \date{\filedate}
-% \maketitle
-%
-% \tableofcontents
-% \clearpage
-%
-%
-% \section{The \RS\ configuration file}
-%
-% \subsubsection*{Reference templates}
-% The default configuration file, \file{refstyle.cfg}, makes the
-% following reference declarations:
-% \begin{Ipara}
-% |\newref{part}{...}| \quad$\rightarrow$ Parts\\
-% |\newref{chap}{...}| \quad$\rightarrow$ Chapters and Appendices\\
-% |\newref{sec}{...} | \quad$\rightarrow$ Sections\\
-% |\newref{eq}{...} | \quad$\rightarrow$ Equations\\
-% |\newref{fig}{...} | \quad$\rightarrow$ Figures\\
-% |\newref{tab}{...} | \quad$\rightarrow$ Tables\\
-% |\newref{fn}{...} | \quad$\rightarrow$ Footnotes
-% \end{Ipara}
-% If there is a need for more reference types, this standard
-% list can be expanded.
-%
-% \subsubsection*{Language definitions}
-% The \RS\ package also provides the following language definitions
-% options for references, when loaded together with \pkg{babel}:
-% \begin{itemize}
-% \item afrikaans
-% \item danish
-% \item english, USenglish, american, canadian, UKenglish, british
-% \item french
-% \item german, ngerman, austrian, naustrian
-% \item italian
-% \item norwegian, nynorsk, norsk, bokmal\footnote{Norwegian Bokm{\aa}l
-% is not defined in \pkg{babel} yet.}
-% \item portuges, portuguese, brazilian, brazil
-% \item swedish
-% \end{itemize}
-%
-% \noindent See \secref[vref]{Thm} for an example of how to link your
-% own definitions to an exsiting language setup.
-% \StopEventually{\PrintChanges}
-% \clearpage
-% \section{Implementation}
-% \begin{macrocode}
-%<*cfg>
-% \end{macrocode}
-% \subsection{Identification}
-% \begin{RSframed}
-% \begin{macrocode}
-\ProvidesFile{refstyle.cfg}[2010/11/02\space
- 0.5\space
- Configuration file for refstyle (DNJ Els)]
-% \end{macrocode}
-% \end{RSframed}
-%
-% \subsection{Language Definitions for \RS\ Package}
-%
-% \subsubsection{English}
-%
-% \begin{macro}{\RSenglish,\RSukenglish}
-% Support provided by the author.
-% \begin{RSframed}
-% \begin{macrocode}
-%%-- ENGLISH ------------------------------------
-% \end{macrocode}
-% \begin{macrocode}
-\newcommand\RSukenglish{%
- \def\RSrngtxt{\space to~}%........... Range: figures 5 to 6
- \def\RSlsttwotxt{\space and~}%....... List two: figures 5 and 6
- \def\RSlsttxt{, and~}%............... List more: figures 5, 6, and 7
- \def\RSparttxt{Part~}%............... Part lowercase singular
- \def\RSpartstxt{Parts~}%............. lowercase plural
- \def\RSParttxt{Part~}%............... uppercase singular (sentence start)
- \def\RSPartstxt{Parts~}%............. uppercase plural (sentence start)
- \def\RSappendixname{appendix~}%...... Appendix lowercase singular
- \def\RSappendicesname{appendices~}%.. lowercase plural
- \def\RSAppendixname{Appendix~}%...... uppercase singular (sentence start)
- \def\RSAppendicesname{Appendices~}%.. uppercase plural (sentence start)
- \def\RSchaptername{chapter~}%........ Chapter lowercase singular
- \def\RSchaptersname{chapters~}%...... lowercase plural
- \def\RSChaptername{Chapter~}%........ uppercase singular (sentence start)
- \def\RSChaptersname{Chapters~}%...... uppercase plural (sentence start)
- \def\RSsectxt{section~}%............. Section lowercase singular
- \def\RSsecstxt{sections~}%........... lowercase plural
- \def\RSSectxt{Section~}%............. uppercase singular (sentence start)
- \def\RSSecstxt{Sections~}%........... uppercase plural (sentence start)
- \def\RSeqtxt{equation~}%............. Equation lowercase singular
- \def\RSeqstxt{equations~}%........... lowercase plural
- \def\RSEqtxt{Equation~}%............. uppercase singular (sentence start)
- \def\RSEqstxt{Equations~}%........... uppercase plural (sentence start)
- \def\RSfigtxt{figure~}%.............. Figure lowercase singular
- \def\RSfigstxt{figures~}%............ lowercase plural
- \def\RSFigtxt{Figure~}%.............. uppercase singular (sentence start)
- \def\RSFigstxt{Figures~}%............ uppercase plural (sentence start)
- \def\RStabtxt{table~}%............... Table lowercase singular
- \def\RStabstxt{tables~}%............. lowercase plural
- \def\RSTabtxt{Table~}%............... uppercase singular (sentence start)
- \def\RSTabstxt{Tables~}%............. uppercase plural (sentence start)
- \def\RSfootntxt{footnote~}%.......... Footnote lowercase singular
- \def\RSfootnstxt{footnotes~}%........ lowercase plural
- \def\RSFootntxt{Footnote~}%.......... uppercase singular (sentence start)
- \def\RSFootnstxt{Footnotes~}%........ uppercase plural (sentence start)
-}
-% \end{macrocode}
-% \begin{macrocode}
-\newcommand\RSenglish{%
- \def\RSrngtxt{\space to~}%
- \def\RSlsttwotxt{\space and~}%
- \def\RSlsttxt{\space and~}%
- \def\RSparttxt{Part~}%
- \def\RSpartstxt{Parts~}%
- \def\RSParttxt{Part~}%
- \def\RSPartstxt{Parts~}%
- \def\RSappendixname{appendix~}%
- \def\RSappendicesname{appendices~}%
- \def\RSAppendixname{Appendix~}%
- \def\RSAppendicesname{Appendices~}%
- \def\RSchaptername{chapter~}%
- \def\RSchaptersname{chapters~}%
- \def\RSChaptername{Chapter~}%
- \def\RSChaptersname{Chapters~}%
- \def\RSsectxt{section~}%
- \def\RSsecstxt{sections~}%
- \def\RSSectxt{Section~}%
- \def\RSSecstxt{Sections~}%
- \def\RSeqtxt{equation~}%
- \def\RSeqstxt{equations~}%
- \def\RSEqtxt{Equation~}%
- \def\RSEqstxt{Equations~}%
- \def\RSfigtxt{figure~}%
- \def\RSfigstxt{figures~}%
- \def\RSFigtxt{Figure~}%
- \def\RSFigstxt{Figures~}%
- \def\RStabtxt{table~}%
- \def\RStabstxt{tables~}%
- \def\RSTabtxt{Table~}%
- \def\RSTabstxt{Tables~}%
- \def\RSfootntxt{footnote~}%
- \def\RSfootnstxt{footnotes~}%
- \def\RSFootntxt{Footnote~}%
- \def\RSFootnstxt{Footnotes~}%
-}
-% \end{macrocode}
-% \end{RSframed}
-% \end{macro}
-%
-% \noindent Make English the default.
-% \begin{RSframed}
-% \begin{macrocode}
-\RSenglish% Default
-% \end{macrocode}
-% \end{RSframed}
-%
-% \noindent Options
-% \begin{RSframed}
-% \begin{macrocode}
-\DeclareLangOpt{english}{\RSenglish}
-\DeclareLangOpt{USenglish}{\RSenglish}
-\DeclareLangOpt{american}{\RSenglish}
-\DeclareLangOpt{canadian}{\RSenglish}
-\DeclareLangOpt{UKenglish}{\RSukenglish}
-\DeclareLangOpt{british}{\RSukenglish}
-% \end{macrocode}
-% \end{RSframed}
-%
-%
-% \subsubsection{Afrikaans}
-%
-% \begin{macro}{\RSafrikaans}
-% Support provided by the author.
-% \begin{RSframed}
-% \begin{macrocode}
-%%-- AFRIKAANS ----------------------------------
-% \end{macrocode}
-% \begin{macrocode}
-\newcommand\RSafrikaans{%
- \def\RSrngtxt{\space tot~}%
- \def\RSlsttwotxt{\space en~}%
- \def\RSlsttxt{\space en~}%
- \def\RSparttxt{Deel~}%
- \def\RSpartstxt{Dele~}%
- \def\RSParttxt{Deel~}%
- \def\RSPartstxt{Dele~}%
- \def\RSappendixname{bylae~}%
- \def\RSappendicesname{bylaes~}%
- \def\RSAppendixname{Bylae~}%
- \def\RSAppendicesname{Bylaes~}%
- \def\RSchaptername{hoofstuk~}%
- \def\RSchaptersname{hoofstukke~}%
- \def\RSChaptername{Hoofstuk~}%
- \def\RSChaptersname{Hoofstukke~}%
- \def\RSsectxt{afdeling~}%
- \def\RSsecstxt{afdelings~}%
- \def\RSSectxt{Afdeling~}%
- \def\RSSecstxt{Afdelings~}%
- \def\RSeqtxt{vergelyking~}%
- \def\RSeqstxt{vergelykings~}%
- \def\RSEqtxt{Vergelyking~}%
- \def\RSEqstxt{Vergelyking~}%
- \def\RSfigtxt{figuur~}%
- \def\RSfigstxt{figure~}%
- \def\RSFigtxt{Figuur~}%
- \def\RSFigstxt{Figure~}%
- \def\RStabtxt{tabel~}%
- \def\RStabstxt{tabelle~}%
- \def\RSTabtxt{Tabel~}%
- \def\RSTabstxt{Tabelle~}%
- \def\RSfootntxt{footnota~}%
- \def\RSfootnstxt{footnotas~}%
- \def\RSFootntxt{Footnota~}%
- \def\RSFootnstxt{Footnotas~}%
-}
-% \end{macrocode}
-% \end{RSframed}
-% \end{macro}
-%
-% \noindent Options
-% \begin{RSframed}
-% \begin{macrocode}
-\DeclareLangOpt{afrikaans}{\RSafrikaans}
-% \end{macrocode}
-% \end{RSframed}
-%
-%
-% \subsubsection{Danish}
-%
-% \begin{macro}{\RSdanish}
-% \changes{v0.2}{2003/07/30}{Add Danish language support}
-% Thomas Widmann: \texttt{<\,thomas.widmann AT harpercollins DOT co DOT uk>}
-% provided the definitions for Danish.
-% \begin{RSframed}
-% \begin{macrocode}
-%%-- DANISH -------------------------------------
-% \end{macrocode}
-% \begin{macrocode}
-\newcommand\RSdanish{%
- \def\RSrngtxt{\space til~}%
- \def\RSlsttwotxt{\space og~}%
- \def\RSlsttxt{\space og~}%
- \def\RSparttxt{del~}%
- \def\RSpartstxt{del~}%
- \def\RSParttxt{Del~}%
- \def\RSPartstxt{Del~}%
- \def\RSappendixname{bilag~}% % 'appendiks' is also possible,
- \def\RSappendicesname{bilag~}% % but 'bilag' is used in Babel
- \def\RSAppendixname{Bilag~}%
- \def\RSAppendicesname{Bilag~}%
- \def\RSchaptername{kapitel~}%
- \def\RSchaptersname{kapitel~}%
- \def\RSChaptername{Kapitel~}%
- \def\RSChaptersname{Kapitel~}%
- \def\RSsectxt{afsnit~}%
- \def\RSsecstxt{afsnit~}%
- \def\RSSectxt{Afsnit~}%
- \def\RSSecstxt{Afsnit~}%
- \def\RSeqtxt{ligning~}%
- \def\RSeqstxt{ligning~}%
- \def\RSEqtxt{Ligning~}%
- \def\RSEqstxt{Ligning~}%
- \def\RSfigtxt{figur~}%
- \def\RSfigstxt{figur~}%
- \def\RSFigtxt{Figur~}%
- \def\RSFigstxt{Figur~}%
- \def\RStabtxt{tabel~}%
- \def\RStabstxt{tablel~}%
- \def\RSTabtxt{Tabel~}%
- \def\RSTabstxt{Tabel~}%
- \def\RSfootntxt{fodnote~}%
- \def\RSfootnstxt{fodnote~}%
- \def\RSFootntxt{Fodnote~}%
- \def\RSFootnstxt{Fodnote~}%
-}
-% \end{macrocode}
-% \end{RSframed}
-% \end{macro}
-%
-% \noindent Options
-% \begin{RSframed}
-% \begin{macrocode}
-\DeclareLangOpt{danish}{\RSdanish}
-% \end{macrocode}
-% \end{RSframed}
-%
-%
-% \subsubsection{French}
-%
-% \begin{macro}{\RSfrench}
-% \changes{v0.4}{2010/10/21}{Add French language support}
-% Jean-Pierre Chr\'etien \texttt{<\,jeanpierre.chretien AT free DOT fr>}
-% provided the definitions for French.
-% \begin{RSframed}
-% \begin{macrocode}
-%%-- FRENCH -------------------------------------
-% \end{macrocode}
-% \begin{macrocode}
-\newcommand\RSfrench{%
- \def\RSrngtxt{\space \`{a}~}%
- \def\RSlsttwotxt{\space et~}%
- \def\RSlsttxt{\space et~}%
- \def\RSparttxt{partie~}%
- \def\RSpartstxt{parties~}%
- \def\RSParttxt{La partie~}%
- \def\RSPartstxt{Les parties~}%
- \def\RSappendixname{appendice~}%
- \def\RSappendicesname{appendices~}%
- \def\RSAppendixname{L'appendice~}%
- \def\RSAppendicesname{Les appendices~}%
- \def\RSchaptername{chapitre~}%
- \def\RSchaptersname{chapitres~}%
- \def\RSChaptername{Le chapitre~}%
- \def\RSChaptersname{Les chapitres~}%
- \def\RSsectxt{section~}%
- \def\RSsecstxt{sections~}%
- \def\RSSectxt{La section~}%
- \def\RSSecstxt{Les sections~}%
- \def\RSeqtxt{\'{e}quation~}%
- \def\RSeqstxt{\'{e}quations~}%
- \def\RSEqtxt{L'\'{e}quation~}%
- \def\RSEqstxt{Les \'{e}quations~}%
- \def\RSfigtxt{figure~}%
- \def\RSfigstxt{figures~}%
- \def\RSFigtxt{La figure~}%
- \def\RSFigstxt{Les figures~}%
- \def\RStabtxt{tableau~}%
- \def\RStabstxt{tableaux~}%
- \def\RSTabtxt{Le tableau~}%
- \def\RSTabstxt{Les tableaux~}%
- \def\RSfootntxt{note~}%
- \def\RSfootnstxt{notes~}%
- \def\RSFootntxt{La note~}%
- \def\RSFootnstxt{Les notes~}%
-}
-% \end{macrocode}
-% \end{RSframed}
-% \end{macro}
-%
-% \noindent Options
-% \begin{RSframed}
-% \begin{macrocode}
-\DeclareLangOpt{french}{\RSfrench}
-% \end{macrocode}
-% \end{RSframed}
-%
-%
-%
-% \subsubsection{German}
-%
-% \begin{macro}{\RSgerman}
-% \changes{v0.2}{2003/07/30}{Add German language support}
-% Harald Harders: \texttt{<\,h.harders AT tu-bs DOT de>}
-% provided the definitions for German.
-% \begin{RSframed}
-% \begin{macrocode}
-%%-- GERMAN -------------------------------------
-% \end{macrocode}
-% \begin{macrocode}
-\newcommand\RSgerman{%
- \def\RSrngtxt{\space bis~}%
- \def\RSlsttwotxt{\space und~}%
- \def\RSlsttxt{\space und~}%
- \def\RSparttxt{Teil~}%
- \def\RSpartstxt{Teile~}%
- \def\RSParttxt{Teil~}%
- \def\RSPartstxt{Teile~}%
- \def\RSappendixname{Anhang~}%
- \def\RSappendicesname{Anh\"{a}nge~}%
- \def\RSAppendixname{Anhang~}%
- \def\RSAppendicesname{Anh\"{a}nge~}%
- \def\RSchaptername{Kapitel~}%
- \def\RSchaptersname{Kapitel~}%
- \def\RSChaptername{Kapitel~}%
- \def\RSChaptersname{Kapitel~}%
- \def\RSsectxt{Abschnitt~}%
- \def\RSsecstxt{Abschnitt~}%
- \def\RSSectxt{Abschnitt~}%
- \def\RSSecstxt{Abschnitt~}%
- \def\RSeqtxt{Gleichung~}%
- \def\RSeqstxt{Gleichungen~}%
- \def\RSEqtxt{Gleichung~}%
- \def\RSEqstxt{Gleichungen~}%
- \def\RSfigtxt{Abbildung~}%
- \def\RSfigstxt{Abbildung~}%
- \def\RSFigtxt{Abbildung~}%
- \def\RSFigstxt{Abbildung~}%
- \def\RStabtxt{Tabelle~}%
- \def\RStabstxt{Tabellen~}%
- \def\RSTabtxt{Tabelle~}%
- \def\RSTabstxt{Tabellen~}%
- \def\RSfootntxt{Fu\ss note~}%
- \def\RSfootnstxt{Fu\ss noten~}%
- \def\RSFootntxt{Fu\ss note~}%
- \def\RSFootnstxt{Fu\ss noten~}%
-}
-% \end{macrocode}
-% \end{RSframed}
-% \end{macro}
-%
-% \noindent Options
-% \begin{RSframed}
-% \begin{macrocode}
-\DeclareLangOpt{german}{\RSgerman}
-\DeclareLangOpt{ngerman}{\RSgerman}
-\DeclareLangOpt{austrian}{\RSgerman}
-\DeclareLangOpt{naustrian}{\RSgerman}
-% \end{macrocode}
-% \end{RSframed}
-%
-%
-% \subsubsection{Italian}
-%
-% \begin{macro}{\RSitalian}
-% \changes{v0.4}{2010/10/21}{Add Italian language support}
-% Nicola Lunghi: \texttt{<\,nick83ola AT gmail DOT com>}
-% provided the definitions for Italian.
-% \begin{RSframed}
-% \begin{macrocode}
-%%-- ITALIAN ------------------------------------
-% \end{macrocode}
-% \begin{macrocode}
-\newcommand\RSitalian{%
- \def\RSrngtxt{--}%
- \def\RSlsttwotxt{\space e~}%
- \def\RSlsttxt{\space e~}%
- \def\RSparttxt{Parte~}%
- \def\RSpartstxt{Parti~}%
- \def\RSParttxt{Parte~}%
- \def\RSPartstxt{Parti~}%
- \def\RSappendixname{l'appendice~}%
- \def\RSappendicesname{le appendici~}%
- \def\RSAppendixname{l'Appendice~}%
- \def\RSAppendicesname{le Appendici~}%
- \def\RSchaptername{il capitolo~}%
- \def\RSchaptersname{i capitoli~}%
- \def\RSChaptername{il Capitolo~}%
- \def\RSChaptersname{i Capitoli~}%
- \def\RSsectxt{la sezione~}%
- \def\RSsecstxt{le sezioni~}%
- \def\RSSectxt{la Sezione~}%
- \def\RSSecstxt{la Sezioni~}%
- \def\RSeqtxt{l'equazione~}%
- \def\RSeqstxt{le equazioni~}%
- \def\RSEqtxt{l'Equazione~}%
- \def\RSEqstxt{le Equazioni~}%
- \def\RSfigtxt{la figura~}%
- \def\RSfigstxt{le figure~}%
- \def\RSFigtxt{la Figura~}%
- \def\RSFigstxt{le Figure~}%
- \def\RStabtxt{la tabella~}%
- \def\RStabstxt{le tabelle~}%
- \def\RSTabtxt{la Tabella~}%
- \def\RSTabstxt{le Tabelle~}%
- \def\RSfootntxt{la nota~}%
- \def\RSfootnstxt{le note~}%
- \def\RSFootntxt{la Nota~}%
- \def\RSFootnstxt{le Note~}%
-}
-% \end{macrocode}
-% \end{RSframed}
-% \end{macro}
-%
-% \noindent Options
-% \begin{RSframed}
-% \begin{macrocode}
-\DeclareLangOpt{italian}{\RSitalian}
-% \end{macrocode}
-% \end{RSframed}
-%
-%
-%
-% \subsubsection{Norwegian}
-%
-% \begin{macro}{\RSnorwegian}
-% \changes{v0.3}{2006/09/07}{Add Norwegian language support}
-% Karl Ove Hufthammer: \texttt{<\,karloh AT mi DOT uib DOT no>}
-% provided the definitions for Norwegian.
-%
-% Norway has two official languages Norwegian Nynorsk and
-% Norwegian Bokm{\aa}l (commonly 'nynorsk' and 'norsk' in LaTeX),
-% but the \pkg{refstyle} definitions are identically in both variants.
-% \begin{RSframed}
-% \begin{macrocode}
-%%-- NORWEGIAN -------------------------------------
-% \end{macrocode}
-% \begin{macrocode}
-\newcommand\RSnorwegian{%
- \def\RSrngtxt{\space til~}%
- \def\RSlsttwotxt{\space og~}%
- \def\RSlsttxt{\space og~}%
- \def\RSparttxt{del~}%
- \def\RSpartstxt{del~}%
- \def\RSParttxt{Del~}%
- \def\RSPartstxt{Del~}%
- \def\RSappendixname{tillegg~}%
- \def\RSappendicesname{tillegg~}%
- \def\RSAppendixname{Tillegg~}%
- \def\RSAppendicesname{Tillegg~}%
- \def\RSchaptername{kapittel~}%
- \def\RSchaptersname{kapittel~}%
- \def\RSChaptername{Kapittel~}%
- \def\RSChaptersname{Kapittel~}%
- \def\RSsectxt{avsnitt~}%
- \def\RSsecstxt{avsnitt~}%
- \def\RSSectxt{Avsnitt~}%
- \def\RSSecstxt{Avsnitt~}%
- \def\RSeqtxt{formel~}%
- \def\RSeqstxt{formel~}%
- \def\RSEqtxt{Formel~}%
- \def\RSEqstxt{Formel~}%
- \def\RSfigtxt{figur~}%
- \def\RSfigstxt{figur~}%
- \def\RSFigtxt{Figur~}%
- \def\RSFigstxt{Figur~}%
- \def\RStabtxt{tabell~}%
- \def\RStabstxt{tabell~}%
- \def\RSTabtxt{Tabell~}%
- \def\RSTabstxt{Tabell~}%
- \def\RSfootntxt{fotnote~}%
- \def\RSfootnstxt{fotnote~}%
- \def\RSFootntxt{Fotnote~}%
- \def\RSFootnstxt{Fotnote~}%
-}
-% \end{macrocode}
-% \end{RSframed}
-% \end{macro}
-%
-% \noindent Options
-% \begin{RSframed}
-% \begin{macrocode}
-\DeclareLangOpt{norwegian}{\RSnorwegian}
-\DeclareLangOpt{nynorsk}{\RSnorwegian}
-\DeclareLangOpt{bokmal}{\RSnorwegian}% Not in babel yet
-\DeclareLangOpt{norsk}{\RSnorwegian}
-% \end{macrocode}
-% \end{RSframed}
-%
-%
-% \subsubsection{Portuguese/Brazilian}
-%
-% \begin{macro}{\RSportuguese,\RSbrazilian}
-% \changes{v0.4}{2010/10/21}{Add Portuguese language support}
-% Bernhard Enders and Flavio Costa \texttt{<\,flaviocosta AT yahoo DOT com DOT br>}
-% provided the definitions for Portuguese.
-% \begin{RSframed}
-% \begin{macrocode}
-%%-- PORTUGUESE -----------------------------------
-% \end{macrocode}
-% \begin{macrocode}
-\newcommand\RSportuguese{%
- \def\RSrngtxt{\space a~}%
- \def\RSlsttwotxt{\space e~}%
- \def\RSlsttxt{\space e~}%
- \def\RSparttxt{Parte~}%
- \def\RSpartstxt{Partes~}%
- \def\RSParttxt{Parte~}%
- \def\RSPartstxt{Partes~}%
- \def\RSappendixname{ap\^{e}ndice~}%
- \def\RSappendicesname{ap\^{e}ndices~}%
- \def\RSAppendixname{Ap\^{e}ndice~}%
- \def\RSAppendicesname{Ap\^{e}ndices~}%
- \def\RSchaptername{cap\'{i}tulo~}%
- \def\RSchaptersname{cap\'{i}tulos~}%
- \def\RSChaptername{Cap\'{i}tulo~}%
- \def\RSChaptersname{Cap\'{i}tulos~}%
- \def\RSsectxt{se\c{c}\~{a}o~}%
- \def\RSsecstxt{se\c{c}\~{o}es~}%
- \def\RSSectxt{Se\c{c}\~{a}o~}%
- \def\RSSecstxt{Se\c{c}\~{o}es~}%
- \def\RSeqtxt{equa\c{c}\~{a}o~}%
- \def\RSeqstxt{equa\c{c}\~{o}es~}%
- \def\RSEqtxt{Equa\c{c}\~{a}o~}%
- \def\RSEqstxt{Equa\c{c}\~{o}es~}%
- \def\RSfigtxt{figura~}%
- \def\RSfigstxt{figuras~}%
- \def\RSFigtxt{Figura~}%
- \def\RSFigstxt{Figuras~}%
- \def\RStabtxt{tabela~}%
- \def\RStabstxt{tabelas~}%
- \def\RSTabtxt{Tabela~}%
- \def\RSTabstxt{Tabelas~}%
- \def\RSfootntxt{nota de rodap\'{e}~}%
- \def\RSfootnstxt{notas de rodap\'{e}~}%
- \def\RSFootntxt{Nota de rodap\'{e}~}%
- \def\RSFootnstxt{Notas de rodap\'{e}~}%
-}
-% \end{macrocode}
-% \begin{macrocode}
-\newcommand\RSbrazilian{%
- \def\RSrngtxt{\space a~}%
- \def\RSlsttwotxt{\space e~}%
- \def\RSlsttxt{\space e~}%
- \def\RSparttxt{Parte~}%
- \def\RSpartstxt{Partes~}%
- \def\RSParttxt{Parte~}%
- \def\RSPartstxt{Partes~}%
- \def\RSappendixname{ap\^{e}ndice~}%
- \def\RSappendicesname{ap\^{e}ndices~}%
- \def\RSAppendixname{Ap\^{e}ndice~}%
- \def\RSAppendicesname{Ap\^{e}ndices~}%
- \def\RSchaptername{cap\'{i}tulo~}%
- \def\RSchaptersname{cap\'{i}tulos~}%
- \def\RSChaptername{Cap\'{i}tulo~}%
- \def\RSChaptersname{Cap\'{i}tulos~}%
- \def\RSsectxt{sec\c{c}\~{a}o~}%<---------------
- \def\RSsecstxt{sec\c{c}\~{o}es~}%<-------------
- \def\RSSectxt{Sec\c{c}\~{a}o~}%<---------------
- \def\RSSecstxt{Sec\c{c}\~{o}es~}%<-------------
- \def\RSeqtxt{equa\c{c}\~{a}o~}%
- \def\RSeqstxt{equa\c{c}\~{o}es~}%
- \def\RSEqtxt{Equa\c{c}\~{a}o~}%
- \def\RSEqstxt{Equa\c{c}\~{o}es~}%
- \def\RSfigtxt{figura~}%
- \def\RSfigstxt{figuras~}%
- \def\RSFigtxt{Figura~}%
- \def\RSFigstxt{Figuras~}%
- \def\RStabtxt{tabela~}%
- \def\RStabstxt{tabelas~}%
- \def\RSTabtxt{Tabela~}%
- \def\RSTabstxt{Tabelas~}%
- \def\RSfootntxt{nota de rodap\'{e}~}%
- \def\RSfootnstxt{notas de rodap\'{e}~}%
- \def\RSFootntxt{Nota de rodap\'{e}~}%
- \def\RSFootnstxt{Notas de rodap\'{e}~}%
-}
-% \end{macrocode}
-% \end{RSframed}
-% \end{macro}
-%
-% \noindent Options
-% \begin{RSframed}
-% \begin{macrocode}
-\DeclareLangOpt{portuges}{\RSportuguese}
-\DeclareLangOpt{portuguese}{\RSportuguese}
-\DeclareLangOpt{brazilian}{\RSbrazilian}
-\DeclareLangOpt{brazil}{\RSbrazilian}
-% \end{macrocode}
-% \end{RSframed}
-%
-%
-%
-% \subsubsection{Swedish}
-%
-% \begin{macro}{\RSswedish}
-% \changes{v0.2}{2003/07/30}{Add Swedish language support}
-% Bj\"{o}rn Thors \texttt{<\,bjorn.thors AT alfvenlab DOT kth DOT se>}
-% provided the definitions for Swedish.
-% \begin{RSframed}
-% \begin{macrocode}
-%%-- SWEDISH ------------------------------------
-% \end{macrocode}
-% \begin{macrocode}
-\newcommand\RSswedish{%
- \def\RSrngtxt{\space till~}%
- \def\RSlsttwotxt{\space och~}%
- \def\RSlsttxt{\space och~}%
- \def\RSparttxt{del~}%
- \def\RSpartstxt{del~}%
- \def\RSParttxt{Del~}%
- \def\RSPartstxt{Del~}%
- \def\RSappendixname{appendix~}%
- \def\RSappendicesname{appendix~}%
- \def\RSAppendixname{Appendix~}%
- \def\RSAppendicesname{Appendix~}%
- \def\RSchaptername{kapitel~}%
- \def\RSchaptersname{kapitel~}%
- \def\RSChaptername{Kapitel~}%
- \def\RSChaptersname{Kapitel~}%
- \def\RSsectxt{sektion~}%
- \def\RSsecstxt{sektion~}%
- \def\RSSectxt{Sektion~}%
- \def\RSSecstxt{Sektion~}%
- \def\RSeqtxt{ekvation~}%
- \def\RSeqstxt{ekvation~}%
- \def\RSEqtxt{Ekvation~}%
- \def\RSEqstxt{Ekvation~}%
- \def\RSfigtxt{figur~}%
- \def\RSfigstxt{figur~}%
- \def\RSFigtxt{Figur~}%
- \def\RSFigstxt{Figur~}%
- \def\RStabtxt{tabell~}%
- \def\RStabstxt{tabell~}%
- \def\RSTabtxt{Tabell~}%
- \def\RSTabstxt{Tabell~}%
- \def\RSfootntxt{fotnot~}%
- \def\RSfootnstxt{fotnot~}%
- \def\RSFootntxt{Fotnot~}%
- \def\RSFootnstxt{Fotnot~}%
-}
-% \end{macrocode}
-% \end{RSframed}
-% \end{macro}
-% \noindent Options
-% \begin{RSframed}
-% \begin{macrocode}
-\DeclareLangOpt{swedish}{\RSswedish}
-% \end{macrocode}
-% \end{RSframed}
-%
-%
-%
-%
-% \subsection{Templates for the \RS Package}
-%
-% The user can also define his or her own templates and put it
-% in a separate configuration file to ensure uniformity
-% of reference formats in your documents.
-%
-% \subsubsection{Parts}
-%
-% References to parts are usually straight forward, except that the
-% document division ``Part'' must be distinguished from the normal
-% usage of the word ``part'' in a sentence. A personal preference
-% is to use small caps.
-%
-% \begin{RSframed}
-% \begin{macrocode}
-%%-- TEMPLATE FOR PARTS -------------------------
-% \end{macrocode}
-% \begin{macrocode}
- \newref{part}{%
- name = \RSparttxt,
- names = \RSpartstxt,
- Name = \RSPparttxt,
- Names = \RSPartstxt,
- rngtxt = \RSrngtxt,
- lsttxt = \RSlsttxt}
-% \end{macrocode}
-% \end{RSframed}
-%
-%
-%
-% \subsubsection{Chapters and Appendices}
-%
-% A major problem with a reference to a chapter is that at the time
-% when the reference label, |\label|\marg{chap-label}, is created,
-% it is unknown whether it would eventually ends up in the main
-% matter or the appendix part of a book or report.
-%
-% A simple solution is to use the prefix to the \meta{chapter}
-% counter, |\p@chapter|, to write the definition of |\@chapapp| to
-% the auxiliary file (|.aux|) together with information of the
-% label. The command |\@chapapp| expands to either |\chaptername| or
-% |\appendixname| depending on whether the reference label is
-% defined in the main matter or after the |\appendix| was called.
-% (Note that |\@chapapp| is not defined in the AMS book class.)
-%
-% \begin{Ipara}
-% |\renewcommand*{\p@chapter}{\string\chname{\@chapapp}}|\\
-% |\newcommand*{\chname}[1]{}%<-make it harmless |\\
-% |\newcommand*{\chapref}[1]{{\renewcommand*{\chname}[1]{##1~}\ref{#1}}}|
-% \end{Ipara}
-%
-% \noindent The reference to a chapter, |\chapref|\marg{chap-label},
-% will then be prefixed with |\chaptername| or |\appendixname| and
-% it does not matter where it was defined or where it was called.
-%
-% To utilize the full functionality of the \RS package for
-% references to chapters and appendices, a complex form of
-% \cmd{\newref} needs to be implemented.
-% The following is a template for a book or report classes.
-%
-%
-% \begin{RSframed}
-% \begin{macrocode}
-%%-- TEMPLATE FOR CHAPTERS & APPENDIXES ---------
-% \end{macrocode}
-% Prevent crashes for non-book type classes.
-% \begin{macrocode}
-\providecommand*{\p@chapter}{}
-% \end{macrocode}
-% Add \cmd{\@chapapp} to \cmd{\p@chapter} for writeout to auxiliary file.
-% If an AMS book class is loaded, then \cmd{\chaptername} must
-% be used.
-% \begin{macrocode}
-\AtBeginDocument{%
- \RS@ifundefined{chapter}{}{%
- \RS@ifundefined{@chapapp}%
- {\renewcommand*{\p@chapter}{\string\chpname{\chaptername}}}%AMS
- {\renewcommand*{\p@chapter}{\string\chpname{\@chapapp}}}% Normal
- }%
- }
-% \end{macrocode}
-% Define \cmd{\chpname} to gobble its contents outside the
-% reference commands.
-% \begin{macrocode}
-\newcommand*{\chpname}[1]{}
-% \end{macrocode}
-% Define the \cmd{\RSchpname} to typeset all the different
-% perturbations of chapter and appendix names.
-% Use the conditionals to switch between the
-% different options.
-%
-% \begin{macrocode}
-\newcommand*{\RS@chpname}[1]{%
- \ifRSnameon
- \edef\RS@tmpa{#1}%
- \edef\RS@tmpb{\appendixname}%
- \ifx\RS@tmpa\RS@tmpb\relax%
- \ifRSplural
- \ifRScapname \RSAppendicesname \else \RSappendicesname \fi
- \else
- \ifRScapname \RSAppendixname \else \RSappendixname \fi
- \fi
- \else
- \ifRSplural
- \ifRScapname \RSChaptersname \else \RSchaptersname \fi
- \else
- \ifRScapname \RSChaptername \else \RSchaptername \fi
- \fi
- \fi
- \fi}
-% \end{macrocode}
-% Define the \cmd{\newref} for chapters.
-% \begin{macrocode}
- \newref{chap}{%
- refcmd = {{\let\chpname=\RS@chpname\ref{#1}}},
- rngtxt = \RSrngtxt,
- lsttwotxt = \RSlsttwotxt,
- lsttxt = \RSlsttxt}
-% \end{macrocode}
-% \end{RSframed}
-%
-%
-% \subsubsection{Sections and paragraphs}\seclabel{secTempl}
-%
-% A template for references to sections is given below. References
-% to paragraphs are similar and is left as an exercise to the users.
-%
-% \begin{RSframed}
-% \begin{macrocode}
-%%-- TEMPLATE FOR SECTIONS ----------------------
-% \end{macrocode}
-% \begin{macrocode}
- \newref{sec}{%
- name = \RSsectxt,
- names = \RSsecstxt,
- Name = \RSSectxt,
- Names = \RSSecstxt,
- refcmd = {\S\ref{#1}},
- rngtxt = \RSrngtxt,
- lsttwotxt = \RSlsttwotxt,
- lsttxt = \RSlsttxt}
-% \end{macrocode}
-% \end{RSframed}
-%
-% \subsubsection{Equations}\seclabel{EqTempl}
-%
-% The equation number in references to equations are traditionally
-% written in an upright text, irrespective of the surrounding text.
-%
-% \begin{RSframed}
-% \begin{macrocode}
-%%-- TEMPLATE FOR EQUATIONS ---------------------
-% \end{macrocode}
-% The standard equation ref format if \pkg{amsmath.sty} is not loaded.
-% \begin{macrocode}
-\newcommand*{\RSeqrefform}[1]{\textup{(\ref{#1})}}
-% \end{macrocode}
-% If \pkg{amsmath.sty} is loaded, store \cmd{\eqref}
-% and then undefine it before the template is created.
-% \begin{macrocode}
-\@ifpackageloaded{amsmath}%
- {\let\AMSeqref\eqref
- \let\eqref\relax}%
- {}
-% \end{macrocode}
-% \begin{macrocode}
-\newref{eq}{%
- name = \RSeqtxt,
- names = \RSeqstxt,
- Name = \RSEqtxt,
- Names = \RSEqstxt,
- refcmd = \RSeqrefform{#1},
- rngtxt = \RSrngtxt,
- lsttwotxt = \RSlsttwotxt,
- lsttxt = \RSlsttxt}
-% \end{macrocode}
-% Make way for \pkg{amsmath.sty} definitions
-% \begin{macrocode}
-\let\RSeqref\eqref
-\let\eqref\relax
-% \end{macrocode}
-% Some footwork to bring the AMS definition of
-% \cmd{\eqref} back if \pkg{amsmath.sty} is loaded
-% afterwards.
-% \begin{macrocode}
-\AtBeginDocument{%
- \@ifpackageloaded{amsmath}%
- {\RS@ifundefined{AMSeqref}{\let\AMSeqref\eqref}{}%
- \let\RSeqrefform\AMSeqref}%
- {}%
- \let\eqref=\RSeqref
- }
-% \end{macrocode}
-% \end{RSframed}
-%
-%
-% \subsubsection{Figures and Tables}\seclabel{tabtemp}
-% References to figures and tables are usually
-% straight forward.
-% \begin{RSframed}
-% \begin{macrocode}
-%%-- TEMPLATE FOR FIGURES -----------------------
-% \end{macrocode}
-% \begin{macrocode}
- \newref{fig}{%
- name = \RSfigtxt,
- names = \RSfigstxt,
- Name = \RSFigtxt,
- Names = \RSFigstxt,
- rngtxt = \RSrngtxt,
- lsttwotxt = \RSlsttwotxt,
- lsttxt = \RSlsttxt}
-% \end{macrocode}
-% \end{RSframed}
-%
-% \begin{RSframed}
-% \begin{macrocode}
-%%-- TEMPLATE FOR TABLES ------------------------
-% \end{macrocode}
-% \begin{macrocode}
- \newref{tab}{%
- name = \RStabtxt,
- names = \RStabstxt,
- Name = \RSTabtxt,
- Names = \RSTabstxt,
- rngtxt = \RSrngtxt,
- lsttwotxt = \RSlsttwotxt,
- lsttxt = \RSlsttxt}
-% \end{macrocode}
-% \end{RSframed}
-%
-% \pagebreak[2]
-% \subsubsection{Footnotes}\seclabel{fnTempl}
-%
-% A reference to a footnote differs from other references in that
-% it is only defined inside the footnote definition itself:
-% \begin{Ipara}
-% |\footnote{This is a footnote with ... \label{fn:xx}}|
-% \end{Ipara}
-% It can then be referred to with |\ref{fn:xx}|.
-%
-% A useful application of the \RS package is for references to
-% footnotes, were you need a duplicate footnote mark that refers to
-% a previously defined footnote.\footnote{^^A
-% This is a footnote with \cmd{\fnlabel}\texttt{\{xx\}} ...\fnlabel{xx}}
-% You can use the stared form of the reference
-% command to format the reference as a footnote mark, while the
-% reference commands without a star behave as normal.
-% \begin{Itabb}
-% \hspace*{2cm}\=\kill
-% |\fnref*{xx}| \ArTab \fnref*{xx}\\
-% |\fnref{xx}| \ArTab \fnref{xx}\\
-% \end{Itabb}
-%
-% \begin{RSframed}
-% \begin{macrocode}
-%%-- TEMPLATE FOR FOOTNOTES ---------------------
-% \end{macrocode}
-% Define the \cmd{\RSfnmark} to reproduce the footnote mark.
-% Use the |\ifRSstar| conditional to switch between a superscripted
-% and a normal reference.
-% \begin{macrocode}
- \newcommand{\RSfnmark}[1]{%
- \begingroup
- \unrestored@protected@xdef\@thefnmark{\ref{#1}}%
- \endgroup
- \@footnotemark}
-% \end{macrocode}
-% \begin{macrocode}
- \newref{fn}{%
- name = \RSfootntxt,
- names = \RSfootnstxt,
- Name = \RSFootntxt,
- Names = \RSFootnstxt,
- refcmd = {\ifRSstar\RSfnmark{#1}\else(\ref{#1})\fi},
- rngtxt = \RSrngtxt,
- lsttwotxt = \RSlsttwotxt,
- lsttxt = \RSlsttxt}
-% \end{macrocode}
-% \end{RSframed}
-%
-% \subsubsection{Enumerated lists}
-%
-% A reference to an item in an enumerated list can be obtained
-% by placing the labelling command after the \cmd{\item} command
-% inside the list. The second level numbering of the \cmd{\ref}
-% label in the standard \LaTeX{} is: 2a, 2b, etc.
-%
-% If you want to change the reference labels to 2(a), 2(b),
-% etc., without effecting the display in the \env{enumerate}
-% environment, you can make the following redefinition:
-% \begin{Ipara}
-% |\makeatletter|\\
-% |\renewcommand{\p@enumii}{\expandafter\p@@enumii}|\\
-% |\newcommand{\p@@enumii}[1]{\theenumi(#1)}|\\
-% |\makeatother|
-% \end{Ipara}
-% The contents of the \cmd{\@currentlable} is then
-% \begin{Ipara}
-% |{\expandafter\p@@enumii\theenumii}| ~$\rightarrow$~
-% |{\theenumi(\theenumii)}|
-% \end{Ipara}
-%
-% Writing a template for enumerated lists is left to the user.
-%
-%
-% \subsubsection{Theorems, lemmas, etc.}\seclabel{Thm}
-%
-% There exists many perturbations to the theorem environment such
-% as, Theorem, Lemma, Exercise, etc., and it is left to the user as
-% an exercise to construct his or her own templates.
-%
-% As an example to add reference for theorems to an exiting setup:
-%
-% \begin{Ipara}
-% |\usepackage{refstyle} |\\
-% |\newref{thm}{ |\\
-% | name = {theorem~}, |\\
-% | names = {theorems~},|\\
-% | Name = {Theorem~}, |\\
-% | Names = {Theorems~},|\\
-% | rngtxt = \RSrngtxt,|\\
-% | lsttwotxt = \RSlsttxt,|\\
-% | lsttxt = \RSlsttxt}|
-% \end{Ipara}
-%
-% If you want to add it to a specific language setup with \pkg{babel} then
-% you can do the following, for example for a dual language document with
-% English and Norwegian:
-% \begin{Ipara}
-% |\documentclass[english, norwegian]{article}% NB: Languages as global opts! |\\
-% |\usepackage{babel} %Use global languages |\\
-% |\usepackage{varioref} %Use global languages |\\
-% |\usepackage{refstyle} %Use global languages |\\
-% |\RSaddto{\RSnorwegian}{% |\\
-% | \def\RSthmtxt{teorem~}% |\\
-% | \def\RSthmstxt{teorem~}% |\\
-% | \def\RSThmtxt{Teorem~}% |\\
-% | \def\RSThmstxt{Teorem~}} |\\
-% |\RSaddto{\RSenglish}{% |\\
-% | \def\RSthmtxt{theorem~}% |\\
-% | \def\RSthmstxt{theorems~}% |\\
-% | \def\RSThmtxt{Theorem~}% |\\
-% | \def\RSThmstxt{Theorems~}} |\\
-% |\newref{thm}{ |\\
-% | name = \RSthmtxt, |\\
-% | names = \RSthmstxt, |\\
-% | Name = \RSThmtxt, |\\
-% | Names = \RSThmstxt, |\\
-% | rngtxt = \RSrngtxt, |\\
-% | lsttwotxt = \RSlsttxt, |\\
-% | lsttxt = \RSlsttwotxt} |
-% \end{Ipara}
-%
-% \noindent All \pkg{babel} language changes will then activate
-% the proper code setup. In this example the \pkg{refstyle}
-% mechanism is used where the code is appended to the |\RSenglish|
-% and |\RSnorwegian| container functions. These functions are added
-% by the package
-% to the \pkg{babel} containers |\extrasenglish| and |\extrasnorwegian|,
-% that is called every time a language change occurs.
-% Please see the contents of \pkg{refstyle.cfg} for the names of the
-% \pkg{refstyle} containers associated with the different languages.
-%
-% Note that the extended definitions
-% can also be added directly to the \pkg{babel} containers without using
-% \pkg{refstyle}'s mechanism.
-%
-% \begin{macrocode}
-%</cfg>
-% \end{macrocode}
-%
-% \Finale
-\endinput
+% \iffalse
+%
+% refconfig.dtx
+% Copyright (C) 2002--2024 Danie Els
+%
+% -------------------------------------------------------------------
+% The refstyle package
+% for the formatting of references
+% -------------------------------------------------------------------
+% This work may be distributed and/or modified under the conditions
+% of the LaTeX Project Public License, either version 1.3c 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.3c or later is part of all distributions of LaTeX
+% version 2008/12/01 or later.
+%
+% This work has the LPPL maintenance status 'maintained'.
+%
+% This Current Maintainer of this work is Danie Els (dnjels@gmail.com)
+%
+% This package consists of the files: refstyle.dtx
+% refconfig.dtx
+% refstyle.ins
+% and the derived files: refstyle.sty
+% refstyle.cfg
+% -------------------------------------------------------------------
+%
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+ \EnableCrossrefs
+ \CodelineIndex
+ \RecordChanges
+\usepackage{color}
+\usepackage{framed}
+ \setlength{\FrameSep}{1\fboxsep}
+ \definecolor{shadecolor}{gray}{0.9}
+ \newenvironment{RSframed}{\shaded}{\endshaded}
+\usepackage{xspace}
+\usepackage{varioref}
+\usepackage{refstyle}
+
+%-- macrocode env changes ------------------------------
+
+\setlength{\MacroIndent}{1.5em}
+
+%-- Indented environments ------------------------------
+
+\newlength{\tdima}
+\newsavebox{\tboxa}
+\newlength{\mytab}
+\setlength{\mytab}{2\parindent}
+
+\newenvironment{IndentPara}[1][1]
+ {\list{}{\setlength{\leftmargin}{#1\mytab}%
+ \setlength{\labelwidth}{0pt}%
+ \setlength{\labelsep}{0pt}%
+ \setlength{\itemindent}{\parindent}%
+ \setlength{\listparindent}{\parindent}%
+ }\item[]}%
+ {\endlist}
+\newenvironment{Ipara}[1][\small]%
+ {\begin{IndentPara}\noindent#1\ignorespaces}%
+ {\end{IndentPara}}
+\newenvironment{Itabb}[1][\small]%
+ {\begin{IndentPara}#1\ignorespaces\begin{tabbing}\ignorespaces}%
+ {\end{tabbing}\end{IndentPara}}
+
+%-- Additional documenting commands --------------------
+
+\makeatletter
+\def\meta@font@select{\normalfont\slshape}
+\makeatother
+
+\newcommand*{\file}[1]{\texttt{#1}}
+\newcommand*{\pkg}[1]{\textsf{#1}}
+\newcommand*{\env}[1]{\texttt{#1}}
+\newcommand*{\opt}[1]{\texttt{\slshape#1}}
+\newcommand*{\RS}{\pkg{refstyle}\xspace}
+
+\newcommand*{\ArTab}{\>\quad$\rightarrow$\quad}
+
+%-------------------------------------------------------
+
+\setlength\hfuzz{15pt}
+\hbadness=7000
+\begin{document}
+ \DocInput{refconfig.dtx}
+\end{document}
+
+%</driver>
+% \fi
+%
+% \CheckSum{1092}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \changes{v0.0}{2002/04/01}{Initial version}
+% \changes{v0.2}{2003/07/30}{Updated version}
+% \changes{v0.3}{2006/09/07}{Documentation update}
+% \changes{v0.4}{2010/10/21}{Add \cmd{\RSlsttwotxt} for lists}
+% \changes{v0.5}{2010/11/02}{Bug fixes}
+% \changes{v0.6}{2024/01/31}{robustification of AMS' \cmd{\eqref}}
+%
+% \DoNotIndex{
+% \",\@chapapp,\@ifpackageloaded,\AtBeginDocument,
+% \begingroup,\def,\edef,\else,\endgroup,
+% \fi,\ifx, \let, \newcommand,\newref,
+% \providecommand,\ProvidesFile,\ref,\relax,
+% \renewcommand,\RS@ifundefined,\RS@tmpa,\RS@tmpb,
+% \S,\space,\ss,\string,\textup,\unrestored@protected@xdef}
+%
+%^^A-- Titling --------------------------------------------
+% \GetFileInfo{refstyle.cfg}
+% \title{\vskip -2em
+% Configuration file for \RS\ package\thanks{
+% This file has version number
+% \fileversion, last revised
+% \filedate.}}
+% \author{Danie Els\\[1ex]
+% \normalsize e-mail: \texttt{dnjels@gmail}}
+% \date{\filedate}
+% \maketitle
+%
+% \tableofcontents
+% \clearpage
+%
+%
+% \section{The \RS\ configuration file}
+%
+% \subsubsection*{Reference templates}
+% The default configuration file, \file{refstyle.cfg}, makes the
+% following reference declarations:
+% \begin{Ipara}
+% |\newref{part}{...}| \quad$\rightarrow$ Parts\\
+% |\newref{chap}{...}| \quad$\rightarrow$ Chapters and Appendices\\
+% |\newref{sec}{...} | \quad$\rightarrow$ Sections\\
+% |\newref{eq}{...} | \quad$\rightarrow$ Equations\\
+% |\newref{fig}{...} | \quad$\rightarrow$ Figures\\
+% |\newref{tab}{...} | \quad$\rightarrow$ Tables\\
+% |\newref{fn}{...} | \quad$\rightarrow$ Footnotes
+% \end{Ipara}
+% If there is a need for more reference types, this standard
+% list can be expanded.
+%
+% \subsubsection*{Language definitions}
+% The \RS\ package also provides the following language definitions
+% options for references, when loaded together with \pkg{babel}:
+% \begin{itemize}
+% \item afrikaans
+% \item danish
+% \item english, USenglish, american, canadian, UKenglish, british
+% \item french
+% \item german, ngerman, austrian, naustrian
+% \item italian
+% \item norwegian, nynorsk, norsk, bokmal\footnote{Norwegian Bokm{\aa}l
+% is not defined in \pkg{babel} yet.}
+% \item portuges, portuguese, brazilian, brazil
+% \item swedish
+% \end{itemize}
+%
+% \noindent See \secref[vref]{Thm} for an example of how to link your
+% own definitions to an exsiting language setup.
+% \StopEventually{\PrintChanges}
+% \clearpage
+% \section{Implementation}
+% \begin{macrocode}
+%<*cfg>
+% \end{macrocode}
+% \subsection{Identification}
+% \begin{RSframed}
+% \begin{macrocode}
+\ProvidesFile{refstyle.cfg}[2024/01/31\space
+ v0.6\space
+ Configuration file for refstyle (DNJ Els)]
+% \end{macrocode}
+% \end{RSframed}
+%
+% \subsection{Language Definitions for \RS\ Package}
+%
+% \subsubsection{English}
+%
+% \begin{macro}{\RSenglish,\RSukenglish}
+% Support provided by the author.
+% \begin{RSframed}
+% \begin{macrocode}
+%%-- ENGLISH ------------------------------------
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\RSukenglish{%
+ \def\RSrngtxt{\space to~}%........... Range: figures 5 to 6
+ \def\RSlsttwotxt{\space and~}%....... List two: figures 5 and 6
+ \def\RSlsttxt{, and~}%............... List more: figures 5, 6, and 7
+ \def\RSparttxt{Part~}%............... Part lowercase singular
+ \def\RSpartstxt{Parts~}%............. lowercase plural
+ \def\RSParttxt{Part~}%............... uppercase singular (sentence start)
+ \def\RSPartstxt{Parts~}%............. uppercase plural (sentence start)
+ \def\RSappendixname{appendix~}%...... Appendix lowercase singular
+ \def\RSappendicesname{appendices~}%.. lowercase plural
+ \def\RSAppendixname{Appendix~}%...... uppercase singular (sentence start)
+ \def\RSAppendicesname{Appendices~}%.. uppercase plural (sentence start)
+ \def\RSchaptername{chapter~}%........ Chapter lowercase singular
+ \def\RSchaptersname{chapters~}%...... lowercase plural
+ \def\RSChaptername{Chapter~}%........ uppercase singular (sentence start)
+ \def\RSChaptersname{Chapters~}%...... uppercase plural (sentence start)
+ \def\RSsectxt{section~}%............. Section lowercase singular
+ \def\RSsecstxt{sections~}%........... lowercase plural
+ \def\RSSectxt{Section~}%............. uppercase singular (sentence start)
+ \def\RSSecstxt{Sections~}%........... uppercase plural (sentence start)
+ \def\RSeqtxt{equation~}%............. Equation lowercase singular
+ \def\RSeqstxt{equations~}%........... lowercase plural
+ \def\RSEqtxt{Equation~}%............. uppercase singular (sentence start)
+ \def\RSEqstxt{Equations~}%........... uppercase plural (sentence start)
+ \def\RSfigtxt{figure~}%.............. Figure lowercase singular
+ \def\RSfigstxt{figures~}%............ lowercase plural
+ \def\RSFigtxt{Figure~}%.............. uppercase singular (sentence start)
+ \def\RSFigstxt{Figures~}%............ uppercase plural (sentence start)
+ \def\RStabtxt{table~}%............... Table lowercase singular
+ \def\RStabstxt{tables~}%............. lowercase plural
+ \def\RSTabtxt{Table~}%............... uppercase singular (sentence start)
+ \def\RSTabstxt{Tables~}%............. uppercase plural (sentence start)
+ \def\RSfootntxt{footnote~}%.......... Footnote lowercase singular
+ \def\RSfootnstxt{footnotes~}%........ lowercase plural
+ \def\RSFootntxt{Footnote~}%.......... uppercase singular (sentence start)
+ \def\RSFootnstxt{Footnotes~}%........ uppercase plural (sentence start)
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\RSenglish{%
+ \def\RSrngtxt{\space to~}%
+ \def\RSlsttwotxt{\space and~}%
+ \def\RSlsttxt{\space and~}%
+ \def\RSparttxt{Part~}%
+ \def\RSpartstxt{Parts~}%
+ \def\RSParttxt{Part~}%
+ \def\RSPartstxt{Parts~}%
+ \def\RSappendixname{appendix~}%
+ \def\RSappendicesname{appendices~}%
+ \def\RSAppendixname{Appendix~}%
+ \def\RSAppendicesname{Appendices~}%
+ \def\RSchaptername{chapter~}%
+ \def\RSchaptersname{chapters~}%
+ \def\RSChaptername{Chapter~}%
+ \def\RSChaptersname{Chapters~}%
+ \def\RSsectxt{section~}%
+ \def\RSsecstxt{sections~}%
+ \def\RSSectxt{Section~}%
+ \def\RSSecstxt{Sections~}%
+ \def\RSeqtxt{equation~}%
+ \def\RSeqstxt{equations~}%
+ \def\RSEqtxt{Equation~}%
+ \def\RSEqstxt{Equations~}%
+ \def\RSfigtxt{figure~}%
+ \def\RSfigstxt{figures~}%
+ \def\RSFigtxt{Figure~}%
+ \def\RSFigstxt{Figures~}%
+ \def\RStabtxt{table~}%
+ \def\RStabstxt{tables~}%
+ \def\RSTabtxt{Table~}%
+ \def\RSTabstxt{Tables~}%
+ \def\RSfootntxt{footnote~}%
+ \def\RSfootnstxt{footnotes~}%
+ \def\RSFootntxt{Footnote~}%
+ \def\RSFootnstxt{Footnotes~}%
+}
+% \end{macrocode}
+% \end{RSframed}
+% \end{macro}
+%
+% \noindent Make English the default.
+% \begin{RSframed}
+% \begin{macrocode}
+\RSenglish% Default
+% \end{macrocode}
+% \end{RSframed}
+%
+% \noindent Options
+% \begin{RSframed}
+% \begin{macrocode}
+\DeclareLangOpt{english}{\RSenglish}
+\DeclareLangOpt{USenglish}{\RSenglish}
+\DeclareLangOpt{american}{\RSenglish}
+\DeclareLangOpt{canadian}{\RSenglish}
+\DeclareLangOpt{UKenglish}{\RSukenglish}
+\DeclareLangOpt{british}{\RSukenglish}
+% \end{macrocode}
+% \end{RSframed}
+%
+%
+% \subsubsection{Afrikaans}
+%
+% \begin{macro}{\RSafrikaans}
+% Support provided by the author.
+% \begin{RSframed}
+% \begin{macrocode}
+%%-- AFRIKAANS ----------------------------------
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\RSafrikaans{%
+ \def\RSrngtxt{\space tot~}%
+ \def\RSlsttwotxt{\space en~}%
+ \def\RSlsttxt{\space en~}%
+ \def\RSparttxt{Deel~}%
+ \def\RSpartstxt{Dele~}%
+ \def\RSParttxt{Deel~}%
+ \def\RSPartstxt{Dele~}%
+ \def\RSappendixname{bylae~}%
+ \def\RSappendicesname{bylaes~}%
+ \def\RSAppendixname{Bylae~}%
+ \def\RSAppendicesname{Bylaes~}%
+ \def\RSchaptername{hoofstuk~}%
+ \def\RSchaptersname{hoofstukke~}%
+ \def\RSChaptername{Hoofstuk~}%
+ \def\RSChaptersname{Hoofstukke~}%
+ \def\RSsectxt{afdeling~}%
+ \def\RSsecstxt{afdelings~}%
+ \def\RSSectxt{Afdeling~}%
+ \def\RSSecstxt{Afdelings~}%
+ \def\RSeqtxt{vergelyking~}%
+ \def\RSeqstxt{vergelykings~}%
+ \def\RSEqtxt{Vergelyking~}%
+ \def\RSEqstxt{Vergelyking~}%
+ \def\RSfigtxt{figuur~}%
+ \def\RSfigstxt{figure~}%
+ \def\RSFigtxt{Figuur~}%
+ \def\RSFigstxt{Figure~}%
+ \def\RStabtxt{tabel~}%
+ \def\RStabstxt{tabelle~}%
+ \def\RSTabtxt{Tabel~}%
+ \def\RSTabstxt{Tabelle~}%
+ \def\RSfootntxt{footnota~}%
+ \def\RSfootnstxt{footnotas~}%
+ \def\RSFootntxt{Footnota~}%
+ \def\RSFootnstxt{Footnotas~}%
+}
+% \end{macrocode}
+% \end{RSframed}
+% \end{macro}
+%
+% \noindent Options
+% \begin{RSframed}
+% \begin{macrocode}
+\DeclareLangOpt{afrikaans}{\RSafrikaans}
+% \end{macrocode}
+% \end{RSframed}
+%
+%
+% \subsubsection{Danish}
+%
+% \begin{macro}{\RSdanish}
+% \changes{v0.2}{2003/07/30}{Add Danish language support}
+% Thomas Widmann: \texttt{<\,thomas.widmann AT harpercollins DOT co DOT uk>}
+% provided the definitions for Danish.
+% \begin{RSframed}
+% \begin{macrocode}
+%%-- DANISH -------------------------------------
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\RSdanish{%
+ \def\RSrngtxt{\space til~}%
+ \def\RSlsttwotxt{\space og~}%
+ \def\RSlsttxt{\space og~}%
+ \def\RSparttxt{del~}%
+ \def\RSpartstxt{del~}%
+ \def\RSParttxt{Del~}%
+ \def\RSPartstxt{Del~}%
+ \def\RSappendixname{bilag~}% % 'appendiks' is also possible,
+ \def\RSappendicesname{bilag~}% % but 'bilag' is used in Babel
+ \def\RSAppendixname{Bilag~}%
+ \def\RSAppendicesname{Bilag~}%
+ \def\RSchaptername{kapitel~}%
+ \def\RSchaptersname{kapitel~}%
+ \def\RSChaptername{Kapitel~}%
+ \def\RSChaptersname{Kapitel~}%
+ \def\RSsectxt{afsnit~}%
+ \def\RSsecstxt{afsnit~}%
+ \def\RSSectxt{Afsnit~}%
+ \def\RSSecstxt{Afsnit~}%
+ \def\RSeqtxt{ligning~}%
+ \def\RSeqstxt{ligning~}%
+ \def\RSEqtxt{Ligning~}%
+ \def\RSEqstxt{Ligning~}%
+ \def\RSfigtxt{figur~}%
+ \def\RSfigstxt{figur~}%
+ \def\RSFigtxt{Figur~}%
+ \def\RSFigstxt{Figur~}%
+ \def\RStabtxt{tabel~}%
+ \def\RStabstxt{tablel~}%
+ \def\RSTabtxt{Tabel~}%
+ \def\RSTabstxt{Tabel~}%
+ \def\RSfootntxt{fodnote~}%
+ \def\RSfootnstxt{fodnote~}%
+ \def\RSFootntxt{Fodnote~}%
+ \def\RSFootnstxt{Fodnote~}%
+}
+% \end{macrocode}
+% \end{RSframed}
+% \end{macro}
+%
+% \noindent Options
+% \begin{RSframed}
+% \begin{macrocode}
+\DeclareLangOpt{danish}{\RSdanish}
+% \end{macrocode}
+% \end{RSframed}
+%
+%
+% \subsubsection{French}
+%
+% \begin{macro}{\RSfrench}
+% \changes{v0.4}{2010/10/21}{Add French language support}
+% Jean-Pierre Chr\'etien \texttt{<\,jeanpierre.chretien AT free DOT fr>}
+% provided the definitions for French.
+% \begin{RSframed}
+% \begin{macrocode}
+%%-- FRENCH -------------------------------------
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\RSfrench{%
+ \def\RSrngtxt{\space \`{a}~}%
+ \def\RSlsttwotxt{\space et~}%
+ \def\RSlsttxt{\space et~}%
+ \def\RSparttxt{partie~}%
+ \def\RSpartstxt{parties~}%
+ \def\RSParttxt{La partie~}%
+ \def\RSPartstxt{Les parties~}%
+ \def\RSappendixname{appendice~}%
+ \def\RSappendicesname{appendices~}%
+ \def\RSAppendixname{L'appendice~}%
+ \def\RSAppendicesname{Les appendices~}%
+ \def\RSchaptername{chapitre~}%
+ \def\RSchaptersname{chapitres~}%
+ \def\RSChaptername{Le chapitre~}%
+ \def\RSChaptersname{Les chapitres~}%
+ \def\RSsectxt{section~}%
+ \def\RSsecstxt{sections~}%
+ \def\RSSectxt{La section~}%
+ \def\RSSecstxt{Les sections~}%
+ \def\RSeqtxt{\'{e}quation~}%
+ \def\RSeqstxt{\'{e}quations~}%
+ \def\RSEqtxt{L'\'{e}quation~}%
+ \def\RSEqstxt{Les \'{e}quations~}%
+ \def\RSfigtxt{figure~}%
+ \def\RSfigstxt{figures~}%
+ \def\RSFigtxt{La figure~}%
+ \def\RSFigstxt{Les figures~}%
+ \def\RStabtxt{tableau~}%
+ \def\RStabstxt{tableaux~}%
+ \def\RSTabtxt{Le tableau~}%
+ \def\RSTabstxt{Les tableaux~}%
+ \def\RSfootntxt{note~}%
+ \def\RSfootnstxt{notes~}%
+ \def\RSFootntxt{La note~}%
+ \def\RSFootnstxt{Les notes~}%
+}
+% \end{macrocode}
+% \end{RSframed}
+% \end{macro}
+%
+% \noindent Options
+% \begin{RSframed}
+% \begin{macrocode}
+\DeclareLangOpt{french}{\RSfrench}
+% \end{macrocode}
+% \end{RSframed}
+%
+%
+%
+% \subsubsection{German}
+%
+% \begin{macro}{\RSgerman}
+% \changes{v0.2}{2003/07/30}{Add German language support}
+% Harald Harders: \texttt{<\,h.harders AT tu-bs DOT de>}
+% provided the definitions for German.
+% \begin{RSframed}
+% \begin{macrocode}
+%%-- GERMAN -------------------------------------
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\RSgerman{%
+ \def\RSrngtxt{\space bis~}%
+ \def\RSlsttwotxt{\space und~}%
+ \def\RSlsttxt{\space und~}%
+ \def\RSparttxt{Teil~}%
+ \def\RSpartstxt{Teile~}%
+ \def\RSParttxt{Teil~}%
+ \def\RSPartstxt{Teile~}%
+ \def\RSappendixname{Anhang~}%
+ \def\RSappendicesname{Anh\"{a}nge~}%
+ \def\RSAppendixname{Anhang~}%
+ \def\RSAppendicesname{Anh\"{a}nge~}%
+ \def\RSchaptername{Kapitel~}%
+ \def\RSchaptersname{Kapitel~}%
+ \def\RSChaptername{Kapitel~}%
+ \def\RSChaptersname{Kapitel~}%
+ \def\RSsectxt{Abschnitt~}%
+ \def\RSsecstxt{Abschnitt~}%
+ \def\RSSectxt{Abschnitt~}%
+ \def\RSSecstxt{Abschnitt~}%
+ \def\RSeqtxt{Gleichung~}%
+ \def\RSeqstxt{Gleichungen~}%
+ \def\RSEqtxt{Gleichung~}%
+ \def\RSEqstxt{Gleichungen~}%
+ \def\RSfigtxt{Abbildung~}%
+ \def\RSfigstxt{Abbildung~}%
+ \def\RSFigtxt{Abbildung~}%
+ \def\RSFigstxt{Abbildung~}%
+ \def\RStabtxt{Tabelle~}%
+ \def\RStabstxt{Tabellen~}%
+ \def\RSTabtxt{Tabelle~}%
+ \def\RSTabstxt{Tabellen~}%
+ \def\RSfootntxt{Fu\ss note~}%
+ \def\RSfootnstxt{Fu\ss noten~}%
+ \def\RSFootntxt{Fu\ss note~}%
+ \def\RSFootnstxt{Fu\ss noten~}%
+}
+% \end{macrocode}
+% \end{RSframed}
+% \end{macro}
+%
+% \noindent Options
+% \begin{RSframed}
+% \begin{macrocode}
+\DeclareLangOpt{german}{\RSgerman}
+\DeclareLangOpt{ngerman}{\RSgerman}
+\DeclareLangOpt{austrian}{\RSgerman}
+\DeclareLangOpt{naustrian}{\RSgerman}
+% \end{macrocode}
+% \end{RSframed}
+%
+%
+% \subsubsection{Italian}
+%
+% \begin{macro}{\RSitalian}
+% \changes{v0.4}{2010/10/21}{Add Italian language support}
+% Nicola Lunghi: \texttt{<\,nick83ola AT gmail DOT com>}
+% provided the definitions for Italian.
+% \begin{RSframed}
+% \begin{macrocode}
+%%-- ITALIAN ------------------------------------
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\RSitalian{%
+ \def\RSrngtxt{--}%
+ \def\RSlsttwotxt{\space e~}%
+ \def\RSlsttxt{\space e~}%
+ \def\RSparttxt{Parte~}%
+ \def\RSpartstxt{Parti~}%
+ \def\RSParttxt{Parte~}%
+ \def\RSPartstxt{Parti~}%
+ \def\RSappendixname{l'appendice~}%
+ \def\RSappendicesname{le appendici~}%
+ \def\RSAppendixname{l'Appendice~}%
+ \def\RSAppendicesname{le Appendici~}%
+ \def\RSchaptername{il capitolo~}%
+ \def\RSchaptersname{i capitoli~}%
+ \def\RSChaptername{il Capitolo~}%
+ \def\RSChaptersname{i Capitoli~}%
+ \def\RSsectxt{la sezione~}%
+ \def\RSsecstxt{le sezioni~}%
+ \def\RSSectxt{la Sezione~}%
+ \def\RSSecstxt{la Sezioni~}%
+ \def\RSeqtxt{l'equazione~}%
+ \def\RSeqstxt{le equazioni~}%
+ \def\RSEqtxt{l'Equazione~}%
+ \def\RSEqstxt{le Equazioni~}%
+ \def\RSfigtxt{la figura~}%
+ \def\RSfigstxt{le figure~}%
+ \def\RSFigtxt{la Figura~}%
+ \def\RSFigstxt{le Figure~}%
+ \def\RStabtxt{la tabella~}%
+ \def\RStabstxt{le tabelle~}%
+ \def\RSTabtxt{la Tabella~}%
+ \def\RSTabstxt{le Tabelle~}%
+ \def\RSfootntxt{la nota~}%
+ \def\RSfootnstxt{le note~}%
+ \def\RSFootntxt{la Nota~}%
+ \def\RSFootnstxt{le Note~}%
+}
+% \end{macrocode}
+% \end{RSframed}
+% \end{macro}
+%
+% \noindent Options
+% \begin{RSframed}
+% \begin{macrocode}
+\DeclareLangOpt{italian}{\RSitalian}
+% \end{macrocode}
+% \end{RSframed}
+%
+%
+%
+% \subsubsection{Norwegian}
+%
+% \begin{macro}{\RSnorwegian}
+% \changes{v0.3}{2006/09/07}{Add Norwegian language support}
+% Karl Ove Hufthammer: \texttt{<\,karloh AT mi DOT uib DOT no>}
+% provided the definitions for Norwegian.
+%
+% Norway has two official languages Norwegian Nynorsk and
+% Norwegian Bokm{\aa}l (commonly 'nynorsk' and 'norsk' in LaTeX),
+% but the \pkg{refstyle} definitions are identically in both variants.
+% \begin{RSframed}
+% \begin{macrocode}
+%%-- NORWEGIAN -------------------------------------
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\RSnorwegian{%
+ \def\RSrngtxt{\space til~}%
+ \def\RSlsttwotxt{\space og~}%
+ \def\RSlsttxt{\space og~}%
+ \def\RSparttxt{del~}%
+ \def\RSpartstxt{del~}%
+ \def\RSParttxt{Del~}%
+ \def\RSPartstxt{Del~}%
+ \def\RSappendixname{tillegg~}%
+ \def\RSappendicesname{tillegg~}%
+ \def\RSAppendixname{Tillegg~}%
+ \def\RSAppendicesname{Tillegg~}%
+ \def\RSchaptername{kapittel~}%
+ \def\RSchaptersname{kapittel~}%
+ \def\RSChaptername{Kapittel~}%
+ \def\RSChaptersname{Kapittel~}%
+ \def\RSsectxt{avsnitt~}%
+ \def\RSsecstxt{avsnitt~}%
+ \def\RSSectxt{Avsnitt~}%
+ \def\RSSecstxt{Avsnitt~}%
+ \def\RSeqtxt{formel~}%
+ \def\RSeqstxt{formel~}%
+ \def\RSEqtxt{Formel~}%
+ \def\RSEqstxt{Formel~}%
+ \def\RSfigtxt{figur~}%
+ \def\RSfigstxt{figur~}%
+ \def\RSFigtxt{Figur~}%
+ \def\RSFigstxt{Figur~}%
+ \def\RStabtxt{tabell~}%
+ \def\RStabstxt{tabell~}%
+ \def\RSTabtxt{Tabell~}%
+ \def\RSTabstxt{Tabell~}%
+ \def\RSfootntxt{fotnote~}%
+ \def\RSfootnstxt{fotnote~}%
+ \def\RSFootntxt{Fotnote~}%
+ \def\RSFootnstxt{Fotnote~}%
+}
+% \end{macrocode}
+% \end{RSframed}
+% \end{macro}
+%
+% \noindent Options
+% \begin{RSframed}
+% \begin{macrocode}
+\DeclareLangOpt{norwegian}{\RSnorwegian}
+\DeclareLangOpt{nynorsk}{\RSnorwegian}
+\DeclareLangOpt{bokmal}{\RSnorwegian}% Not in babel yet
+\DeclareLangOpt{norsk}{\RSnorwegian}
+% \end{macrocode}
+% \end{RSframed}
+%
+%
+% \subsubsection{Portuguese/Brazilian}
+%
+% \begin{macro}{\RSportuguese,\RSbrazilian}
+% \changes{v0.4}{2010/10/21}{Add Portuguese language support}
+% Bernhard Enders and Flavio Costa \texttt{<\,flaviocosta AT yahoo DOT com DOT br>}
+% provided the definitions for Portuguese.
+% \begin{RSframed}
+% \begin{macrocode}
+%%-- PORTUGUESE -----------------------------------
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\RSportuguese{%
+ \def\RSrngtxt{\space a~}%
+ \def\RSlsttwotxt{\space e~}%
+ \def\RSlsttxt{\space e~}%
+ \def\RSparttxt{Parte~}%
+ \def\RSpartstxt{Partes~}%
+ \def\RSParttxt{Parte~}%
+ \def\RSPartstxt{Partes~}%
+ \def\RSappendixname{ap\^{e}ndice~}%
+ \def\RSappendicesname{ap\^{e}ndices~}%
+ \def\RSAppendixname{Ap\^{e}ndice~}%
+ \def\RSAppendicesname{Ap\^{e}ndices~}%
+ \def\RSchaptername{cap\'{i}tulo~}%
+ \def\RSchaptersname{cap\'{i}tulos~}%
+ \def\RSChaptername{Cap\'{i}tulo~}%
+ \def\RSChaptersname{Cap\'{i}tulos~}%
+ \def\RSsectxt{se\c{c}\~{a}o~}%
+ \def\RSsecstxt{se\c{c}\~{o}es~}%
+ \def\RSSectxt{Se\c{c}\~{a}o~}%
+ \def\RSSecstxt{Se\c{c}\~{o}es~}%
+ \def\RSeqtxt{equa\c{c}\~{a}o~}%
+ \def\RSeqstxt{equa\c{c}\~{o}es~}%
+ \def\RSEqtxt{Equa\c{c}\~{a}o~}%
+ \def\RSEqstxt{Equa\c{c}\~{o}es~}%
+ \def\RSfigtxt{figura~}%
+ \def\RSfigstxt{figuras~}%
+ \def\RSFigtxt{Figura~}%
+ \def\RSFigstxt{Figuras~}%
+ \def\RStabtxt{tabela~}%
+ \def\RStabstxt{tabelas~}%
+ \def\RSTabtxt{Tabela~}%
+ \def\RSTabstxt{Tabelas~}%
+ \def\RSfootntxt{nota de rodap\'{e}~}%
+ \def\RSfootnstxt{notas de rodap\'{e}~}%
+ \def\RSFootntxt{Nota de rodap\'{e}~}%
+ \def\RSFootnstxt{Notas de rodap\'{e}~}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\RSbrazilian{%
+ \def\RSrngtxt{\space a~}%
+ \def\RSlsttwotxt{\space e~}%
+ \def\RSlsttxt{\space e~}%
+ \def\RSparttxt{Parte~}%
+ \def\RSpartstxt{Partes~}%
+ \def\RSParttxt{Parte~}%
+ \def\RSPartstxt{Partes~}%
+ \def\RSappendixname{ap\^{e}ndice~}%
+ \def\RSappendicesname{ap\^{e}ndices~}%
+ \def\RSAppendixname{Ap\^{e}ndice~}%
+ \def\RSAppendicesname{Ap\^{e}ndices~}%
+ \def\RSchaptername{cap\'{i}tulo~}%
+ \def\RSchaptersname{cap\'{i}tulos~}%
+ \def\RSChaptername{Cap\'{i}tulo~}%
+ \def\RSChaptersname{Cap\'{i}tulos~}%
+ \def\RSsectxt{sec\c{c}\~{a}o~}%<---------------
+ \def\RSsecstxt{sec\c{c}\~{o}es~}%<-------------
+ \def\RSSectxt{Sec\c{c}\~{a}o~}%<---------------
+ \def\RSSecstxt{Sec\c{c}\~{o}es~}%<-------------
+ \def\RSeqtxt{equa\c{c}\~{a}o~}%
+ \def\RSeqstxt{equa\c{c}\~{o}es~}%
+ \def\RSEqtxt{Equa\c{c}\~{a}o~}%
+ \def\RSEqstxt{Equa\c{c}\~{o}es~}%
+ \def\RSfigtxt{figura~}%
+ \def\RSfigstxt{figuras~}%
+ \def\RSFigtxt{Figura~}%
+ \def\RSFigstxt{Figuras~}%
+ \def\RStabtxt{tabela~}%
+ \def\RStabstxt{tabelas~}%
+ \def\RSTabtxt{Tabela~}%
+ \def\RSTabstxt{Tabelas~}%
+ \def\RSfootntxt{nota de rodap\'{e}~}%
+ \def\RSfootnstxt{notas de rodap\'{e}~}%
+ \def\RSFootntxt{Nota de rodap\'{e}~}%
+ \def\RSFootnstxt{Notas de rodap\'{e}~}%
+}
+% \end{macrocode}
+% \end{RSframed}
+% \end{macro}
+%
+% \noindent Options
+% \begin{RSframed}
+% \begin{macrocode}
+\DeclareLangOpt{portuges}{\RSportuguese}
+\DeclareLangOpt{portuguese}{\RSportuguese}
+\DeclareLangOpt{brazilian}{\RSbrazilian}
+\DeclareLangOpt{brazil}{\RSbrazilian}
+% \end{macrocode}
+% \end{RSframed}
+%
+%
+%
+% \subsubsection{Swedish}
+%
+% \begin{macro}{\RSswedish}
+% \changes{v0.2}{2003/07/30}{Add Swedish language support}
+% Bj\"{o}rn Thors \texttt{<\,bjorn.thors AT alfvenlab DOT kth DOT se>}
+% provided the definitions for Swedish.
+% \begin{RSframed}
+% \begin{macrocode}
+%%-- SWEDISH ------------------------------------
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\RSswedish{%
+ \def\RSrngtxt{\space till~}%
+ \def\RSlsttwotxt{\space och~}%
+ \def\RSlsttxt{\space och~}%
+ \def\RSparttxt{del~}%
+ \def\RSpartstxt{del~}%
+ \def\RSParttxt{Del~}%
+ \def\RSPartstxt{Del~}%
+ \def\RSappendixname{appendix~}%
+ \def\RSappendicesname{appendix~}%
+ \def\RSAppendixname{Appendix~}%
+ \def\RSAppendicesname{Appendix~}%
+ \def\RSchaptername{kapitel~}%
+ \def\RSchaptersname{kapitel~}%
+ \def\RSChaptername{Kapitel~}%
+ \def\RSChaptersname{Kapitel~}%
+ \def\RSsectxt{sektion~}%
+ \def\RSsecstxt{sektion~}%
+ \def\RSSectxt{Sektion~}%
+ \def\RSSecstxt{Sektion~}%
+ \def\RSeqtxt{ekvation~}%
+ \def\RSeqstxt{ekvation~}%
+ \def\RSEqtxt{Ekvation~}%
+ \def\RSEqstxt{Ekvation~}%
+ \def\RSfigtxt{figur~}%
+ \def\RSfigstxt{figur~}%
+ \def\RSFigtxt{Figur~}%
+ \def\RSFigstxt{Figur~}%
+ \def\RStabtxt{tabell~}%
+ \def\RStabstxt{tabell~}%
+ \def\RSTabtxt{Tabell~}%
+ \def\RSTabstxt{Tabell~}%
+ \def\RSfootntxt{fotnot~}%
+ \def\RSfootnstxt{fotnot~}%
+ \def\RSFootntxt{Fotnot~}%
+ \def\RSFootnstxt{Fotnot~}%
+}
+% \end{macrocode}
+% \end{RSframed}
+% \end{macro}
+% \noindent Options
+% \begin{RSframed}
+% \begin{macrocode}
+\DeclareLangOpt{swedish}{\RSswedish}
+% \end{macrocode}
+% \end{RSframed}
+%
+%
+%
+%
+% \subsection{Templates for the \RS Package}
+%
+% The user can also define his or her own templates and put it
+% in a separate configuration file to ensure uniformity
+% of reference formats in your documents.
+%
+% \subsubsection{Parts}
+%
+% References to parts are usually straight forward, except that the
+% document division ``Part'' must be distinguished from the normal
+% usage of the word ``part'' in a sentence. A personal preference
+% is to use small caps.
+%
+% \begin{RSframed}
+% \begin{macrocode}
+%%-- TEMPLATE FOR PARTS -------------------------
+% \end{macrocode}
+% \begin{macrocode}
+ \newref{part}{%
+ name = \RSparttxt,
+ names = \RSpartstxt,
+ Name = \RSPparttxt,
+ Names = \RSPartstxt,
+ rngtxt = \RSrngtxt,
+ lsttxt = \RSlsttxt}
+% \end{macrocode}
+% \end{RSframed}
+%
+%
+%
+% \subsubsection{Chapters and Appendices}
+%
+% A major problem with a reference to a chapter is that at the time
+% when the reference label, |\label|\marg{chap-label}, is created,
+% it is unknown whether it would eventually ends up in the main
+% matter or the appendix part of a book or report.
+%
+% A simple solution is to use the prefix to the \meta{chapter}
+% counter, |\p@chapter|, to write the definition of |\@chapapp| to
+% the auxiliary file (|.aux|) together with information of the
+% label. The command |\@chapapp| expands to either |\chaptername| or
+% |\appendixname| depending on whether the reference label is
+% defined in the main matter or after the |\appendix| was called.
+% (Note that |\@chapapp| is not defined in the AMS book class.)
+%
+% \begin{Ipara}
+% |\renewcommand*{\p@chapter}{\string\chname{\@chapapp}}|\\
+% |\newcommand*{\chname}[1]{}%<-make it harmless |\\
+% |\newcommand*{\chapref}[1]{{\renewcommand*{\chname}[1]{##1~}\ref{#1}}}|
+% \end{Ipara}
+%
+% \noindent The reference to a chapter, |\chapref|\marg{chap-label},
+% will then be prefixed with |\chaptername| or |\appendixname| and
+% it does not matter where it was defined or where it was called.
+%
+% To utilize the full functionality of the \RS package for
+% references to chapters and appendices, a complex form of
+% \cmd{\newref} needs to be implemented.
+% The following is a template for a book or report classes.
+%
+%
+% \begin{RSframed}
+% \begin{macrocode}
+%%-- TEMPLATE FOR CHAPTERS & APPENDIXES ---------
+% \end{macrocode}
+% Prevent crashes for non-book type classes.
+% \begin{macrocode}
+\providecommand*{\p@chapter}{}
+% \end{macrocode}
+% Add \cmd{\@chapapp} to \cmd{\p@chapter} for writeout to auxiliary file.
+% If an AMS book class is loaded, then \cmd{\chaptername} must
+% be used.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \RS@ifundefined{chapter}{}{%
+ \RS@ifundefined{@chapapp}%
+ {\renewcommand*{\p@chapter}{\string\chpname{\chaptername}}}%AMS
+ {\renewcommand*{\p@chapter}{\string\chpname{\@chapapp}}}% Normal
+ }%
+ }
+% \end{macrocode}
+% Define \cmd{\chpname} to gobble its contents outside the
+% reference commands.
+% \begin{macrocode}
+\newcommand*{\chpname}[1]{}
+% \end{macrocode}
+% Define the \cmd{\RSchpname} to typeset all the different
+% perturbations of chapter and appendix names.
+% Use the conditionals to switch between the
+% different options.
+%
+% \begin{macrocode}
+\newcommand*{\RS@chpname}[1]{%
+ \ifRSnameon
+ \edef\RS@tmpa{#1}%
+ \edef\RS@tmpb{\appendixname}%
+ \ifx\RS@tmpa\RS@tmpb\relax%
+ \ifRSplural
+ \ifRScapname \RSAppendicesname \else \RSappendicesname \fi
+ \else
+ \ifRScapname \RSAppendixname \else \RSappendixname \fi
+ \fi
+ \else
+ \ifRSplural
+ \ifRScapname \RSChaptersname \else \RSchaptersname \fi
+ \else
+ \ifRScapname \RSChaptername \else \RSchaptername \fi
+ \fi
+ \fi
+ \fi}
+% \end{macrocode}
+% Define the \cmd{\newref} for chapters.
+% \begin{macrocode}
+ \newref{chap}{%
+ refcmd = {{\let\chpname=\RS@chpname\ref{#1}}},
+ rngtxt = \RSrngtxt,
+ lsttwotxt = \RSlsttwotxt,
+ lsttxt = \RSlsttxt}
+% \end{macrocode}
+% \end{RSframed}
+%
+%
+% \subsubsection{Sections and paragraphs}\seclabel{secTempl}
+%
+% A template for references to sections is given below. References
+% to paragraphs are similar and is left as an exercise to the users.
+%
+% \begin{RSframed}
+% \begin{macrocode}
+%%-- TEMPLATE FOR SECTIONS ----------------------
+% \end{macrocode}
+% \begin{macrocode}
+ \newref{sec}{%
+ name = \RSsectxt,
+ names = \RSsecstxt,
+ Name = \RSSectxt,
+ Names = \RSSecstxt,
+ refcmd = {\S\ref{#1}},
+ rngtxt = \RSrngtxt,
+ lsttwotxt = \RSlsttwotxt,
+ lsttxt = \RSlsttxt}
+% \end{macrocode}
+% \end{RSframed}
+%
+% \subsubsection{Equations}\seclabel{EqTempl}
+%
+% The equation number in references to equations are traditionally
+% written in an upright text, irrespective of the surrounding text.
+%
+% \begin{RSframed}
+% \begin{macrocode}
+%%-- TEMPLATE FOR EQUATIONS ---------------------
+% \end{macrocode}
+% The standard equation ref format if \pkg{amsmath.sty} is not loaded.
+% \begin{macrocode}
+\newcommand*{\RSeqrefform}[1]{\textup{(\ref{#1})}}
+% \end{macrocode}
+% If \pkg{amsmath.sty} is loaded, store \cmd{\eqref}
+% and then undefine it before the template is created.
+% \begin{macrocode}
+\AddToHook{package/amsmath/after}%
+ {\NewCommandCopy\AMSeqref\eqref
+ \RS@removedef{eqref}}%
+% \end{macrocode}
+% \begin{macrocode}
+\newref{eq}{%
+ name = \RSeqtxt,
+ names = \RSeqstxt,
+ Name = \RSEqtxt,
+ Names = \RSEqstxt,
+ refcmd = \RSeqrefform{#1},
+ rngtxt = \RSrngtxt,
+ lsttwotxt = \RSlsttwotxt,
+ lsttxt = \RSlsttxt}
+% \end{macrocode}
+% Make way for \pkg{amsmath.sty} definitions
+% \begin{macrocode}
+\let\RSeqref\eqref
+\let\eqref\relax
+% \end{macrocode}
+% Some footwork to bring the AMS definition of
+% \cmd{\eqref} back if \pkg{amsmath.sty} is loaded
+% afterwards.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \@ifpackageloaded{amsmath}%
+ {\DeclareCommandCopy\RSeqrefform\AMSeqref}%
+ {}%
+ \let\eqref=\RSeqref
+ }
+% \end{macrocode}
+% \end{RSframed}
+%
+%
+% \subsubsection{Figures and Tables}\seclabel{tabtemp}
+% References to figures and tables are usually
+% straight forward.
+% \begin{RSframed}
+% \begin{macrocode}
+%%-- TEMPLATE FOR FIGURES -----------------------
+% \end{macrocode}
+% \begin{macrocode}
+ \newref{fig}{%
+ name = \RSfigtxt,
+ names = \RSfigstxt,
+ Name = \RSFigtxt,
+ Names = \RSFigstxt,
+ rngtxt = \RSrngtxt,
+ lsttwotxt = \RSlsttwotxt,
+ lsttxt = \RSlsttxt}
+% \end{macrocode}
+% \end{RSframed}
+%
+% \begin{RSframed}
+% \begin{macrocode}
+%%-- TEMPLATE FOR TABLES ------------------------
+% \end{macrocode}
+% \begin{macrocode}
+ \newref{tab}{%
+ name = \RStabtxt,
+ names = \RStabstxt,
+ Name = \RSTabtxt,
+ Names = \RSTabstxt,
+ rngtxt = \RSrngtxt,
+ lsttwotxt = \RSlsttwotxt,
+ lsttxt = \RSlsttxt}
+% \end{macrocode}
+% \end{RSframed}
+%
+% \pagebreak[2]
+% \subsubsection{Footnotes}\seclabel{fnTempl}
+%
+% A reference to a footnote differs from other references in that
+% it is only defined inside the footnote definition itself:
+% \begin{Ipara}
+% |\footnote{This is a footnote with ... \label{fn:xx}}|
+% \end{Ipara}
+% It can then be referred to with |\ref{fn:xx}|.
+%
+% A useful application of the \RS package is for references to
+% footnotes, were you need a duplicate footnote mark that refers to
+% a previously defined footnote.\footnote{^^A
+% This is a footnote with \cmd{\fnlabel}\texttt{\{xx\}} ...\fnlabel{xx}}
+% You can use the stared form of the reference
+% command to format the reference as a footnote mark, while the
+% reference commands without a star behave as normal.
+% \begin{Itabb}
+% \hspace*{2cm}\=\kill
+% |\fnref*{xx}| \ArTab \fnref*{xx}\\
+% |\fnref{xx}| \ArTab \fnref{xx}\\
+% \end{Itabb}
+%
+% \begin{RSframed}
+% \begin{macrocode}
+%%-- TEMPLATE FOR FOOTNOTES ---------------------
+% \end{macrocode}
+% Define the \cmd{\RSfnmark} to reproduce the footnote mark.
+% Use the |\ifRSstar| conditional to switch between a superscripted
+% and a normal reference.
+% \begin{macrocode}
+ \newcommand{\RSfnmark}[1]{%
+ \begingroup
+ \unrestored@protected@xdef\@thefnmark{\ref{#1}}%
+ \endgroup
+ \@footnotemark}
+% \end{macrocode}
+% \begin{macrocode}
+ \newref{fn}{%
+ name = \RSfootntxt,
+ names = \RSfootnstxt,
+ Name = \RSFootntxt,
+ Names = \RSFootnstxt,
+ refcmd = {\ifRSstar\RSfnmark{#1}\else(\ref{#1})\fi},
+ rngtxt = \RSrngtxt,
+ lsttwotxt = \RSlsttwotxt,
+ lsttxt = \RSlsttxt}
+% \end{macrocode}
+% \end{RSframed}
+%
+% \subsubsection{Enumerated lists}
+%
+% A reference to an item in an enumerated list can be obtained
+% by placing the labelling command after the \cmd{\item} command
+% inside the list. The second level numbering of the \cmd{\ref}
+% label in the standard \LaTeX{} is: 2a, 2b, etc.
+%
+% If you want to change the reference labels to 2(a), 2(b),
+% etc., without effecting the display in the \env{enumerate}
+% environment, you can make the following redefinition:
+% \begin{Ipara}
+% |\makeatletter|\\
+% |\renewcommand{\p@enumii}{\expandafter\p@@enumii}|\\
+% |\newcommand{\p@@enumii}[1]{\theenumi(#1)}|\\
+% |\makeatother|
+% \end{Ipara}
+% The contents of the \cmd{\@currentlable} is then
+% \begin{Ipara}
+% |{\expandafter\p@@enumii\theenumii}| ~$\rightarrow$~
+% |{\theenumi(\theenumii)}|
+% \end{Ipara}
+%
+% Writing a template for enumerated lists is left to the user.
+%
+%
+% \subsubsection{Theorems, lemmas, etc.}\seclabel{Thm}
+%
+% There exists many perturbations to the theorem environment such
+% as, Theorem, Lemma, Exercise, etc., and it is left to the user as
+% an exercise to construct his or her own templates.
+%
+% As an example to add reference for theorems to an exiting setup:
+%
+% \begin{Ipara}
+% |\usepackage{refstyle} |\\
+% |\newref{thm}{ |\\
+% | name = {theorem~}, |\\
+% | names = {theorems~},|\\
+% | Name = {Theorem~}, |\\
+% | Names = {Theorems~},|\\
+% | rngtxt = \RSrngtxt,|\\
+% | lsttwotxt = \RSlsttxt,|\\
+% | lsttxt = \RSlsttxt}|
+% \end{Ipara}
+%
+% If you want to add it to a specific language setup with \pkg{babel} then
+% you can do the following, for example for a dual language document with
+% English and Norwegian:
+% \begin{Ipara}
+% |\documentclass[english, norwegian]{article}% NB: Languages as global opts! |\\
+% |\usepackage{babel} %Use global languages |\\
+% |\usepackage{varioref} %Use global languages |\\
+% |\usepackage{refstyle} %Use global languages |\\
+% |\RSaddto{\RSnorwegian}{% |\\
+% | \def\RSthmtxt{teorem~}% |\\
+% | \def\RSthmstxt{teorem~}% |\\
+% | \def\RSThmtxt{Teorem~}% |\\
+% | \def\RSThmstxt{Teorem~}} |\\
+% |\RSaddto{\RSenglish}{% |\\
+% | \def\RSthmtxt{theorem~}% |\\
+% | \def\RSthmstxt{theorems~}% |\\
+% | \def\RSThmtxt{Theorem~}% |\\
+% | \def\RSThmstxt{Theorems~}} |\\
+% |\newref{thm}{ |\\
+% | name = \RSthmtxt, |\\
+% | names = \RSthmstxt, |\\
+% | Name = \RSThmtxt, |\\
+% | Names = \RSThmstxt, |\\
+% | rngtxt = \RSrngtxt, |\\
+% | lsttwotxt = \RSlsttxt, |\\
+% | lsttxt = \RSlsttwotxt} |
+% \end{Ipara}
+%
+% \noindent All \pkg{babel} language changes will then activate
+% the proper code setup. In this example the \pkg{refstyle}
+% mechanism is used where the code is appended to the |\RSenglish|
+% and |\RSnorwegian| container functions. These functions are added
+% by the package
+% to the \pkg{babel} containers |\extrasenglish| and |\extrasnorwegian|,
+% that is called every time a language change occurs.
+% Please see the contents of \pkg{refstyle.cfg} for the names of the
+% \pkg{refstyle} containers associated with the different languages.
+%
+% Note that the extended definitions
+% can also be added directly to the \pkg{babel} containers without using
+% \pkg{refstyle}'s mechanism.
+%
+% \begin{macrocode}
+%</cfg>
+% \end{macrocode}
+%
+% \Finale
+\endinput
diff --git a/macros/latex/contrib/refstyle/refconfig.pdf b/macros/latex/contrib/refstyle/refconfig.pdf
index f4dcb8d15a..c16ae09cca 100644
--- a/macros/latex/contrib/refstyle/refconfig.pdf
+++ b/macros/latex/contrib/refstyle/refconfig.pdf
Binary files differ
diff --git a/macros/latex/contrib/refstyle/refstyle.cfg b/macros/latex/contrib/refstyle/refstyle.cfg
deleted file mode 100644
index 2ca7d62dd2..0000000000
--- a/macros/latex/contrib/refstyle/refstyle.cfg
+++ /dev/null
@@ -1,571 +0,0 @@
-%%
-%% This is file `refstyle.cfg',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% refconfig.dtx (with options: `cfg')
-%%
-%% -------------------------------------------------------------------
-%% The refstyle package
-%% for the formatting of references
-%% -------------------------------------------------------------------
-%% This file may be customized to suit specific user requirements.
-%%
-%% Original by Danie Els <dnjels@sun.ac.za>
-%% -------------------------------------------------------------------
-%%
-\ProvidesFile{refstyle.cfg}[2010/11/02\space
- 0.5\space
- Configuration file for refstyle (DNJ Els)]
-%%-- ENGLISH ------------------------------------
-\newcommand\RSukenglish{%
- \def\RSrngtxt{\space to~}%........... Range: figures 5 to 6
- \def\RSlsttwotxt{\space and~}%....... List two: figures 5 and 6
- \def\RSlsttxt{, and~}%............... List more: figures 5, 6, and 7
- \def\RSparttxt{Part~}%............... Part lowercase singular
- \def\RSpartstxt{Parts~}%............. lowercase plural
- \def\RSParttxt{Part~}%............... uppercase singular (sentence start)
- \def\RSPartstxt{Parts~}%............. uppercase plural (sentence start)
- \def\RSappendixname{appendix~}%...... Appendix lowercase singular
- \def\RSappendicesname{appendices~}%.. lowercase plural
- \def\RSAppendixname{Appendix~}%...... uppercase singular (sentence start)
- \def\RSAppendicesname{Appendices~}%.. uppercase plural (sentence start)
- \def\RSchaptername{chapter~}%........ Chapter lowercase singular
- \def\RSchaptersname{chapters~}%...... lowercase plural
- \def\RSChaptername{Chapter~}%........ uppercase singular (sentence start)
- \def\RSChaptersname{Chapters~}%...... uppercase plural (sentence start)
- \def\RSsectxt{section~}%............. Section lowercase singular
- \def\RSsecstxt{sections~}%........... lowercase plural
- \def\RSSectxt{Section~}%............. uppercase singular (sentence start)
- \def\RSSecstxt{Sections~}%........... uppercase plural (sentence start)
- \def\RSeqtxt{equation~}%............. Equation lowercase singular
- \def\RSeqstxt{equations~}%........... lowercase plural
- \def\RSEqtxt{Equation~}%............. uppercase singular (sentence start)
- \def\RSEqstxt{Equations~}%........... uppercase plural (sentence start)
- \def\RSfigtxt{figure~}%.............. Figure lowercase singular
- \def\RSfigstxt{figures~}%............ lowercase plural
- \def\RSFigtxt{Figure~}%.............. uppercase singular (sentence start)
- \def\RSFigstxt{Figures~}%............ uppercase plural (sentence start)
- \def\RStabtxt{table~}%............... Table lowercase singular
- \def\RStabstxt{tables~}%............. lowercase plural
- \def\RSTabtxt{Table~}%............... uppercase singular (sentence start)
- \def\RSTabstxt{Tables~}%............. uppercase plural (sentence start)
- \def\RSfootntxt{footnote~}%.......... Footnote lowercase singular
- \def\RSfootnstxt{footnotes~}%........ lowercase plural
- \def\RSFootntxt{Footnote~}%.......... uppercase singular (sentence start)
- \def\RSFootnstxt{Footnotes~}%........ uppercase plural (sentence start)
-}
-\newcommand\RSenglish{%
- \def\RSrngtxt{\space to~}%
- \def\RSlsttwotxt{\space and~}%
- \def\RSlsttxt{\space and~}%
- \def\RSparttxt{Part~}%
- \def\RSpartstxt{Parts~}%
- \def\RSParttxt{Part~}%
- \def\RSPartstxt{Parts~}%
- \def\RSappendixname{appendix~}%
- \def\RSappendicesname{appendices~}%
- \def\RSAppendixname{Appendix~}%
- \def\RSAppendicesname{Appendices~}%
- \def\RSchaptername{chapter~}%
- \def\RSchaptersname{chapters~}%
- \def\RSChaptername{Chapter~}%
- \def\RSChaptersname{Chapters~}%
- \def\RSsectxt{section~}%
- \def\RSsecstxt{sections~}%
- \def\RSSectxt{Section~}%
- \def\RSSecstxt{Sections~}%
- \def\RSeqtxt{equation~}%
- \def\RSeqstxt{equations~}%
- \def\RSEqtxt{Equation~}%
- \def\RSEqstxt{Equations~}%
- \def\RSfigtxt{figure~}%
- \def\RSfigstxt{figures~}%
- \def\RSFigtxt{Figure~}%
- \def\RSFigstxt{Figures~}%
- \def\RStabtxt{table~}%
- \def\RStabstxt{tables~}%
- \def\RSTabtxt{Table~}%
- \def\RSTabstxt{Tables~}%
- \def\RSfootntxt{footnote~}%
- \def\RSfootnstxt{footnotes~}%
- \def\RSFootntxt{Footnote~}%
- \def\RSFootnstxt{Footnotes~}%
-}
-\RSenglish% Default
-\DeclareLangOpt{english}{\RSenglish}
-\DeclareLangOpt{USenglish}{\RSenglish}
-\DeclareLangOpt{american}{\RSenglish}
-\DeclareLangOpt{canadian}{\RSenglish}
-\DeclareLangOpt{UKenglish}{\RSukenglish}
-\DeclareLangOpt{british}{\RSukenglish}
-%%-- AFRIKAANS ----------------------------------
-\newcommand\RSafrikaans{%
- \def\RSrngtxt{\space tot~}%
- \def\RSlsttwotxt{\space en~}%
- \def\RSlsttxt{\space en~}%
- \def\RSparttxt{Deel~}%
- \def\RSpartstxt{Dele~}%
- \def\RSParttxt{Deel~}%
- \def\RSPartstxt{Dele~}%
- \def\RSappendixname{bylae~}%
- \def\RSappendicesname{bylaes~}%
- \def\RSAppendixname{Bylae~}%
- \def\RSAppendicesname{Bylaes~}%
- \def\RSchaptername{hoofstuk~}%
- \def\RSchaptersname{hoofstukke~}%
- \def\RSChaptername{Hoofstuk~}%
- \def\RSChaptersname{Hoofstukke~}%
- \def\RSsectxt{afdeling~}%
- \def\RSsecstxt{afdelings~}%
- \def\RSSectxt{Afdeling~}%
- \def\RSSecstxt{Afdelings~}%
- \def\RSeqtxt{vergelyking~}%
- \def\RSeqstxt{vergelykings~}%
- \def\RSEqtxt{Vergelyking~}%
- \def\RSEqstxt{Vergelyking~}%
- \def\RSfigtxt{figuur~}%
- \def\RSfigstxt{figure~}%
- \def\RSFigtxt{Figuur~}%
- \def\RSFigstxt{Figure~}%
- \def\RStabtxt{tabel~}%
- \def\RStabstxt{tabelle~}%
- \def\RSTabtxt{Tabel~}%
- \def\RSTabstxt{Tabelle~}%
- \def\RSfootntxt{footnota~}%
- \def\RSfootnstxt{footnotas~}%
- \def\RSFootntxt{Footnota~}%
- \def\RSFootnstxt{Footnotas~}%
-}
-\DeclareLangOpt{afrikaans}{\RSafrikaans}
-%%-- DANISH -------------------------------------
-\newcommand\RSdanish{%
- \def\RSrngtxt{\space til~}%
- \def\RSlsttwotxt{\space og~}%
- \def\RSlsttxt{\space og~}%
- \def\RSparttxt{del~}%
- \def\RSpartstxt{del~}%
- \def\RSParttxt{Del~}%
- \def\RSPartstxt{Del~}%
- \def\RSappendixname{bilag~}% % 'appendiks' is also possible,
- \def\RSappendicesname{bilag~}% % but 'bilag' is used in Babel
- \def\RSAppendixname{Bilag~}%
- \def\RSAppendicesname{Bilag~}%
- \def\RSchaptername{kapitel~}%
- \def\RSchaptersname{kapitel~}%
- \def\RSChaptername{Kapitel~}%
- \def\RSChaptersname{Kapitel~}%
- \def\RSsectxt{afsnit~}%
- \def\RSsecstxt{afsnit~}%
- \def\RSSectxt{Afsnit~}%
- \def\RSSecstxt{Afsnit~}%
- \def\RSeqtxt{ligning~}%
- \def\RSeqstxt{ligning~}%
- \def\RSEqtxt{Ligning~}%
- \def\RSEqstxt{Ligning~}%
- \def\RSfigtxt{figur~}%
- \def\RSfigstxt{figur~}%
- \def\RSFigtxt{Figur~}%
- \def\RSFigstxt{Figur~}%
- \def\RStabtxt{tabel~}%
- \def\RStabstxt{tablel~}%
- \def\RSTabtxt{Tabel~}%
- \def\RSTabstxt{Tabel~}%
- \def\RSfootntxt{fodnote~}%
- \def\RSfootnstxt{fodnote~}%
- \def\RSFootntxt{Fodnote~}%
- \def\RSFootnstxt{Fodnote~}%
-}
-\DeclareLangOpt{danish}{\RSdanish}
-%%-- FRENCH -------------------------------------
-\newcommand\RSfrench{%
- \def\RSrngtxt{\space \`{a}~}%
- \def\RSlsttwotxt{\space et~}%
- \def\RSlsttxt{\space et~}%
- \def\RSparttxt{partie~}%
- \def\RSpartstxt{parties~}%
- \def\RSParttxt{La partie~}%
- \def\RSPartstxt{Les parties~}%
- \def\RSappendixname{appendice~}%
- \def\RSappendicesname{appendices~}%
- \def\RSAppendixname{L'appendice~}%
- \def\RSAppendicesname{Les appendices~}%
- \def\RSchaptername{chapitre~}%
- \def\RSchaptersname{chapitres~}%
- \def\RSChaptername{Le chapitre~}%
- \def\RSChaptersname{Les chapitres~}%
- \def\RSsectxt{section~}%
- \def\RSsecstxt{sections~}%
- \def\RSSectxt{La section~}%
- \def\RSSecstxt{Les sections~}%
- \def\RSeqtxt{\'{e}quation~}%
- \def\RSeqstxt{\'{e}quations~}%
- \def\RSEqtxt{L'\'{e}quation~}%
- \def\RSEqstxt{Les \'{e}quations~}%
- \def\RSfigtxt{figure~}%
- \def\RSfigstxt{figures~}%
- \def\RSFigtxt{La figure~}%
- \def\RSFigstxt{Les figures~}%
- \def\RStabtxt{tableau~}%
- \def\RStabstxt{tableaux~}%
- \def\RSTabtxt{Le tableau~}%
- \def\RSTabstxt{Les tableaux~}%
- \def\RSfootntxt{note~}%
- \def\RSfootnstxt{notes~}%
- \def\RSFootntxt{La note~}%
- \def\RSFootnstxt{Les notes~}%
-}
-\DeclareLangOpt{french}{\RSfrench}
-%%-- GERMAN -------------------------------------
-\newcommand\RSgerman{%
- \def\RSrngtxt{\space bis~}%
- \def\RSlsttwotxt{\space und~}%
- \def\RSlsttxt{\space und~}%
- \def\RSparttxt{Teil~}%
- \def\RSpartstxt{Teile~}%
- \def\RSParttxt{Teil~}%
- \def\RSPartstxt{Teile~}%
- \def\RSappendixname{Anhang~}%
- \def\RSappendicesname{Anh\"{a}nge~}%
- \def\RSAppendixname{Anhang~}%
- \def\RSAppendicesname{Anh\"{a}nge~}%
- \def\RSchaptername{Kapitel~}%
- \def\RSchaptersname{Kapitel~}%
- \def\RSChaptername{Kapitel~}%
- \def\RSChaptersname{Kapitel~}%
- \def\RSsectxt{Abschnitt~}%
- \def\RSsecstxt{Abschnitt~}%
- \def\RSSectxt{Abschnitt~}%
- \def\RSSecstxt{Abschnitt~}%
- \def\RSeqtxt{Gleichung~}%
- \def\RSeqstxt{Gleichungen~}%
- \def\RSEqtxt{Gleichung~}%
- \def\RSEqstxt{Gleichungen~}%
- \def\RSfigtxt{Abbildung~}%
- \def\RSfigstxt{Abbildung~}%
- \def\RSFigtxt{Abbildung~}%
- \def\RSFigstxt{Abbildung~}%
- \def\RStabtxt{Tabelle~}%
- \def\RStabstxt{Tabellen~}%
- \def\RSTabtxt{Tabelle~}%
- \def\RSTabstxt{Tabellen~}%
- \def\RSfootntxt{Fu\ss note~}%
- \def\RSfootnstxt{Fu\ss noten~}%
- \def\RSFootntxt{Fu\ss note~}%
- \def\RSFootnstxt{Fu\ss noten~}%
-}
-\DeclareLangOpt{german}{\RSgerman}
-\DeclareLangOpt{ngerman}{\RSgerman}
-\DeclareLangOpt{austrian}{\RSgerman}
-\DeclareLangOpt{naustrian}{\RSgerman}
-%%-- ITALIAN ------------------------------------
-\newcommand\RSitalian{%
- \def\RSrngtxt{--}%
- \def\RSlsttwotxt{\space e~}%
- \def\RSlsttxt{\space e~}%
- \def\RSparttxt{Parte~}%
- \def\RSpartstxt{Parti~}%
- \def\RSParttxt{Parte~}%
- \def\RSPartstxt{Parti~}%
- \def\RSappendixname{l'appendice~}%
- \def\RSappendicesname{le appendici~}%
- \def\RSAppendixname{l'Appendice~}%
- \def\RSAppendicesname{le Appendici~}%
- \def\RSchaptername{il capitolo~}%
- \def\RSchaptersname{i capitoli~}%
- \def\RSChaptername{il Capitolo~}%
- \def\RSChaptersname{i Capitoli~}%
- \def\RSsectxt{la sezione~}%
- \def\RSsecstxt{le sezioni~}%
- \def\RSSectxt{la Sezione~}%
- \def\RSSecstxt{la Sezioni~}%
- \def\RSeqtxt{l'equazione~}%
- \def\RSeqstxt{le equazioni~}%
- \def\RSEqtxt{l'Equazione~}%
- \def\RSEqstxt{le Equazioni~}%
- \def\RSfigtxt{la figura~}%
- \def\RSfigstxt{le figure~}%
- \def\RSFigtxt{la Figura~}%
- \def\RSFigstxt{le Figure~}%
- \def\RStabtxt{la tabella~}%
- \def\RStabstxt{le tabelle~}%
- \def\RSTabtxt{la Tabella~}%
- \def\RSTabstxt{le Tabelle~}%
- \def\RSfootntxt{la nota~}%
- \def\RSfootnstxt{le note~}%
- \def\RSFootntxt{la Nota~}%
- \def\RSFootnstxt{le Note~}%
-}
-\DeclareLangOpt{italian}{\RSitalian}
-%%-- NORWEGIAN -------------------------------------
-\newcommand\RSnorwegian{%
- \def\RSrngtxt{\space til~}%
- \def\RSlsttwotxt{\space og~}%
- \def\RSlsttxt{\space og~}%
- \def\RSparttxt{del~}%
- \def\RSpartstxt{del~}%
- \def\RSParttxt{Del~}%
- \def\RSPartstxt{Del~}%
- \def\RSappendixname{tillegg~}%
- \def\RSappendicesname{tillegg~}%
- \def\RSAppendixname{Tillegg~}%
- \def\RSAppendicesname{Tillegg~}%
- \def\RSchaptername{kapittel~}%
- \def\RSchaptersname{kapittel~}%
- \def\RSChaptername{Kapittel~}%
- \def\RSChaptersname{Kapittel~}%
- \def\RSsectxt{avsnitt~}%
- \def\RSsecstxt{avsnitt~}%
- \def\RSSectxt{Avsnitt~}%
- \def\RSSecstxt{Avsnitt~}%
- \def\RSeqtxt{formel~}%
- \def\RSeqstxt{formel~}%
- \def\RSEqtxt{Formel~}%
- \def\RSEqstxt{Formel~}%
- \def\RSfigtxt{figur~}%
- \def\RSfigstxt{figur~}%
- \def\RSFigtxt{Figur~}%
- \def\RSFigstxt{Figur~}%
- \def\RStabtxt{tabell~}%
- \def\RStabstxt{tabell~}%
- \def\RSTabtxt{Tabell~}%
- \def\RSTabstxt{Tabell~}%
- \def\RSfootntxt{fotnote~}%
- \def\RSfootnstxt{fotnote~}%
- \def\RSFootntxt{Fotnote~}%
- \def\RSFootnstxt{Fotnote~}%
-}
-\DeclareLangOpt{norwegian}{\RSnorwegian}
-\DeclareLangOpt{nynorsk}{\RSnorwegian}
-\DeclareLangOpt{bokmal}{\RSnorwegian}% Not in babel yet
-\DeclareLangOpt{norsk}{\RSnorwegian}
-%%-- PORTUGUESE -----------------------------------
-\newcommand\RSportuguese{%
- \def\RSrngtxt{\space a~}%
- \def\RSlsttwotxt{\space e~}%
- \def\RSlsttxt{\space e~}%
- \def\RSparttxt{Parte~}%
- \def\RSpartstxt{Partes~}%
- \def\RSParttxt{Parte~}%
- \def\RSPartstxt{Partes~}%
- \def\RSappendixname{ap\^{e}ndice~}%
- \def\RSappendicesname{ap\^{e}ndices~}%
- \def\RSAppendixname{Ap\^{e}ndice~}%
- \def\RSAppendicesname{Ap\^{e}ndices~}%
- \def\RSchaptername{cap\'{i}tulo~}%
- \def\RSchaptersname{cap\'{i}tulos~}%
- \def\RSChaptername{Cap\'{i}tulo~}%
- \def\RSChaptersname{Cap\'{i}tulos~}%
- \def\RSsectxt{se\c{c}\~{a}o~}%
- \def\RSsecstxt{se\c{c}\~{o}es~}%
- \def\RSSectxt{Se\c{c}\~{a}o~}%
- \def\RSSecstxt{Se\c{c}\~{o}es~}%
- \def\RSeqtxt{equa\c{c}\~{a}o~}%
- \def\RSeqstxt{equa\c{c}\~{o}es~}%
- \def\RSEqtxt{Equa\c{c}\~{a}o~}%
- \def\RSEqstxt{Equa\c{c}\~{o}es~}%
- \def\RSfigtxt{figura~}%
- \def\RSfigstxt{figuras~}%
- \def\RSFigtxt{Figura~}%
- \def\RSFigstxt{Figuras~}%
- \def\RStabtxt{tabela~}%
- \def\RStabstxt{tabelas~}%
- \def\RSTabtxt{Tabela~}%
- \def\RSTabstxt{Tabelas~}%
- \def\RSfootntxt{nota de rodap\'{e}~}%
- \def\RSfootnstxt{notas de rodap\'{e}~}%
- \def\RSFootntxt{Nota de rodap\'{e}~}%
- \def\RSFootnstxt{Notas de rodap\'{e}~}%
-}
-\newcommand\RSbrazilian{%
- \def\RSrngtxt{\space a~}%
- \def\RSlsttwotxt{\space e~}%
- \def\RSlsttxt{\space e~}%
- \def\RSparttxt{Parte~}%
- \def\RSpartstxt{Partes~}%
- \def\RSParttxt{Parte~}%
- \def\RSPartstxt{Partes~}%
- \def\RSappendixname{ap\^{e}ndice~}%
- \def\RSappendicesname{ap\^{e}ndices~}%
- \def\RSAppendixname{Ap\^{e}ndice~}%
- \def\RSAppendicesname{Ap\^{e}ndices~}%
- \def\RSchaptername{cap\'{i}tulo~}%
- \def\RSchaptersname{cap\'{i}tulos~}%
- \def\RSChaptername{Cap\'{i}tulo~}%
- \def\RSChaptersname{Cap\'{i}tulos~}%
- \def\RSsectxt{sec\c{c}\~{a}o~}%<---------------
- \def\RSsecstxt{sec\c{c}\~{o}es~}%<-------------
- \def\RSSectxt{Sec\c{c}\~{a}o~}%<---------------
- \def\RSSecstxt{Sec\c{c}\~{o}es~}%<-------------
- \def\RSeqtxt{equa\c{c}\~{a}o~}%
- \def\RSeqstxt{equa\c{c}\~{o}es~}%
- \def\RSEqtxt{Equa\c{c}\~{a}o~}%
- \def\RSEqstxt{Equa\c{c}\~{o}es~}%
- \def\RSfigtxt{figura~}%
- \def\RSfigstxt{figuras~}%
- \def\RSFigtxt{Figura~}%
- \def\RSFigstxt{Figuras~}%
- \def\RStabtxt{tabela~}%
- \def\RStabstxt{tabelas~}%
- \def\RSTabtxt{Tabela~}%
- \def\RSTabstxt{Tabelas~}%
- \def\RSfootntxt{nota de rodap\'{e}~}%
- \def\RSfootnstxt{notas de rodap\'{e}~}%
- \def\RSFootntxt{Nota de rodap\'{e}~}%
- \def\RSFootnstxt{Notas de rodap\'{e}~}%
-}
-\DeclareLangOpt{portuges}{\RSportuguese}
-\DeclareLangOpt{portuguese}{\RSportuguese}
-\DeclareLangOpt{brazilian}{\RSbrazilian}
-\DeclareLangOpt{brazil}{\RSbrazilian}
-%%-- SWEDISH ------------------------------------
-\newcommand\RSswedish{%
- \def\RSrngtxt{\space till~}%
- \def\RSlsttwotxt{\space och~}%
- \def\RSlsttxt{\space och~}%
- \def\RSparttxt{del~}%
- \def\RSpartstxt{del~}%
- \def\RSParttxt{Del~}%
- \def\RSPartstxt{Del~}%
- \def\RSappendixname{appendix~}%
- \def\RSappendicesname{appendix~}%
- \def\RSAppendixname{Appendix~}%
- \def\RSAppendicesname{Appendix~}%
- \def\RSchaptername{kapitel~}%
- \def\RSchaptersname{kapitel~}%
- \def\RSChaptername{Kapitel~}%
- \def\RSChaptersname{Kapitel~}%
- \def\RSsectxt{sektion~}%
- \def\RSsecstxt{sektion~}%
- \def\RSSectxt{Sektion~}%
- \def\RSSecstxt{Sektion~}%
- \def\RSeqtxt{ekvation~}%
- \def\RSeqstxt{ekvation~}%
- \def\RSEqtxt{Ekvation~}%
- \def\RSEqstxt{Ekvation~}%
- \def\RSfigtxt{figur~}%
- \def\RSfigstxt{figur~}%
- \def\RSFigtxt{Figur~}%
- \def\RSFigstxt{Figur~}%
- \def\RStabtxt{tabell~}%
- \def\RStabstxt{tabell~}%
- \def\RSTabtxt{Tabell~}%
- \def\RSTabstxt{Tabell~}%
- \def\RSfootntxt{fotnot~}%
- \def\RSfootnstxt{fotnot~}%
- \def\RSFootntxt{Fotnot~}%
- \def\RSFootnstxt{Fotnot~}%
-}
-\DeclareLangOpt{swedish}{\RSswedish}
-%%-- TEMPLATE FOR PARTS -------------------------
- \newref{part}{%
- name = \RSparttxt,
- names = \RSpartstxt,
- Name = \RSPparttxt,
- Names = \RSPartstxt,
- rngtxt = \RSrngtxt,
- lsttxt = \RSlsttxt}
-%%-- TEMPLATE FOR CHAPTERS & APPENDIXES ---------
-\providecommand*{\p@chapter}{}
-\AtBeginDocument{%
- \RS@ifundefined{chapter}{}{%
- \RS@ifundefined{@chapapp}%
- {\renewcommand*{\p@chapter}{\string\chpname{\chaptername}}}%AMS
- {\renewcommand*{\p@chapter}{\string\chpname{\@chapapp}}}% Normal
- }%
- }
-\newcommand*{\chpname}[1]{}
-\newcommand*{\RS@chpname}[1]{%
- \ifRSnameon
- \edef\RS@tmpa{#1}%
- \edef\RS@tmpb{\appendixname}%
- \ifx\RS@tmpa\RS@tmpb\relax%
- \ifRSplural
- \ifRScapname \RSAppendicesname \else \RSappendicesname \fi
- \else
- \ifRScapname \RSAppendixname \else \RSappendixname \fi
- \fi
- \else
- \ifRSplural
- \ifRScapname \RSChaptersname \else \RSchaptersname \fi
- \else
- \ifRScapname \RSChaptername \else \RSchaptername \fi
- \fi
- \fi
- \fi}
- \newref{chap}{%
- refcmd = {{\let\chpname=\RS@chpname\ref{#1}}},
- rngtxt = \RSrngtxt,
- lsttwotxt = \RSlsttwotxt,
- lsttxt = \RSlsttxt}
-%%-- TEMPLATE FOR SECTIONS ----------------------
- \newref{sec}{%
- name = \RSsectxt,
- names = \RSsecstxt,
- Name = \RSSectxt,
- Names = \RSSecstxt,
- refcmd = {\S\ref{#1}},
- rngtxt = \RSrngtxt,
- lsttwotxt = \RSlsttwotxt,
- lsttxt = \RSlsttxt}
-%%-- TEMPLATE FOR EQUATIONS ---------------------
-\newcommand*{\RSeqrefform}[1]{\textup{(\ref{#1})}}
-\@ifpackageloaded{amsmath}%
- {\let\AMSeqref\eqref
- \let\eqref\relax}%
- {}
-\newref{eq}{%
- name = \RSeqtxt,
- names = \RSeqstxt,
- Name = \RSEqtxt,
- Names = \RSEqstxt,
- refcmd = \RSeqrefform{#1},
- rngtxt = \RSrngtxt,
- lsttwotxt = \RSlsttwotxt,
- lsttxt = \RSlsttxt}
-\let\RSeqref\eqref
-\let\eqref\relax
-\AtBeginDocument{%
- \@ifpackageloaded{amsmath}%
- {\RS@ifundefined{AMSeqref}{\let\AMSeqref\eqref}{}%
- \let\RSeqrefform\AMSeqref}%
- {}%
- \let\eqref=\RSeqref
- }
-%%-- TEMPLATE FOR FIGURES -----------------------
- \newref{fig}{%
- name = \RSfigtxt,
- names = \RSfigstxt,
- Name = \RSFigtxt,
- Names = \RSFigstxt,
- rngtxt = \RSrngtxt,
- lsttwotxt = \RSlsttwotxt,
- lsttxt = \RSlsttxt}
-%%-- TEMPLATE FOR TABLES ------------------------
- \newref{tab}{%
- name = \RStabtxt,
- names = \RStabstxt,
- Name = \RSTabtxt,
- Names = \RSTabstxt,
- rngtxt = \RSrngtxt,
- lsttwotxt = \RSlsttwotxt,
- lsttxt = \RSlsttxt}
-%%-- TEMPLATE FOR FOOTNOTES ---------------------
- \newcommand{\RSfnmark}[1]{%
- \begingroup
- \unrestored@protected@xdef\@thefnmark{\ref{#1}}%
- \endgroup
- \@footnotemark}
- \newref{fn}{%
- name = \RSfootntxt,
- names = \RSfootnstxt,
- Name = \RSFootntxt,
- Names = \RSFootnstxt,
- refcmd = {\ifRSstar\RSfnmark{#1}\else(\ref{#1})\fi},
- rngtxt = \RSrngtxt,
- lsttwotxt = \RSlsttwotxt,
- lsttxt = \RSlsttxt}
-\endinput
-%%
-%% End of file `refstyle.cfg'.
diff --git a/macros/latex/contrib/refstyle/refstyle.dtx b/macros/latex/contrib/refstyle/refstyle.dtx
index c2c3acab8e..1b5b6509d6 100644
--- a/macros/latex/contrib/refstyle/refstyle.dtx
+++ b/macros/latex/contrib/refstyle/refstyle.dtx
@@ -1,1796 +1,1795 @@
-% \iffalse
-%
-% refstyle.dtx
-% Copyright (C) 2002--2010 Danie Els
-%
-% -------------------------------------------------------------------
-% The refstyle package
-% for the formatting of references
-% -------------------------------------------------------------------
-% This work may be distributed and/or modified under the conditions
-% of the LaTeX Project Public License, either version 1.3c 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.3c or later is part of all distributions of LaTeX
-% version 2005/12/01 or later.
-%
-% This work is "maintained" (as per LPPL maintenance status)
-% by Danie Els (dnjels@sun.ac.za).
-%
-% This package consists of the files: refstyle.dtx
-% refconfig.dtx
-% refstyle.ins
-% and the derived files: refstyle.sty
-% refstyle.cfg
-% -------------------------------------------------------------------
-%
-%<*pkg>
-\newcommand*{\RefstyleFileDate}{2010/11/02}
-\newcommand*{\RefstyleFileVersion}{v0.5}
-%</pkg>
-%
-%
-%<*driver>
-\documentclass[a4paper]{ltxdoc}
-\let\RefstyleFileDate\relax
-\let\RefstyleFileVersion\relax
-\usepackage{amsmath}
-\usepackage{amsfonts}
- \DeclareMathSymbol{\square} {\mathord}{AMSa}{"03}
- \DeclareMathSymbol{\blacksquare}{\mathord}{AMSa}{"04}
-\usepackage{calc}
-\usepackage{rotating}
-\usepackage[rounded]{syntax}
-\usepackage{varioref}
-\usepackage{refstyle}
-\usepackage{color}
- \definecolor{hrefcol}{rgb}{0.00,0.00,1.00}
-\usepackage[pdfpagelabels]{hyperref}
-\hypersetup{breaklinks=true,
- linktocpage,
- pdfstartview=FitH,
- colorlinks = true,
- linkcolor = hrefcol,
- urlcolor = hrefcol,
- menucolor = hrefcol,
- filecolor = hrefcol,
- citecolor = hrefcol,
- linkbordercolor = {0.8 0.8 0.8},
- urlbordercolor = {0.8 0.8 0.8},
- menubordercolor = {0.8 0.8 0.8},
- filebordercolor = {0.8 0.8 0.8},
- runbordercolor = {0.8 0.8 0.8},
- citebordercolor = {0.8 0.8 0.8},
- pdftitle={refstyle},
- pdfauthor={Danie Els}}
-
-%---- macrocode env changes -------------------------------
-
-\setlength{\MacroIndent}{1.5em}
-
-%---- Scratches -------------------------------------------
-
-\newlength{\tdima}
-\newsavebox{\tboxa}
-
-%---- Spacing ---------------------------------------------
-
-\newlength{\myskip}
-\setlength{\myskip}{\topsep}
- \addtolength{\myskip}{\parskip}
- \addtolength{\myskip}{\partopsep}
-\newcommand*{\blankline}{\par\addvspace{\myskip}}
-\newlength{\mytab}
-\setlength{\mytab}{2\parindent}
-\newcommand{\tab}{\hspace*{\mytab}}
-
-%---- Indented environments -------------------------------
-
-\newenvironment{IndentPara}[1][1]
- {\list{}{\setlength{\leftmargin}{#1\mytab}%
- \setlength{\labelwidth}{0pt}%
- \setlength{\labelsep}{0pt}%
- \setlength{\itemindent}{\parindent}%
- \setlength{\listparindent}{\parindent}%
- }\item[]}%
- {\endlist}
-\newenvironment{IndentParaX}[1][1]
- {\list{}{\setlength{\leftmargin}{#1\mytab}%
- \setlength{\topsep}{0pt}%
- \setlength{\partopsep}{0pt}%
- \setlength{\labelwidth}{0pt}%
- \setlength{\labelsep}{0pt}%
- \setlength{\itemindent}{\parindent}%
- \setlength{\listparindent}{\parindent}%
- }\item[]}%
- {\endlist}
-\newcommand\bNP{\begin{IndentParaX}}
-\newcommand\eNP{\end{IndentParaX}}
-\newenvironment{Ipara}[1][\small]%
- {\begin{IndentPara}\noindent#1\ignorespaces}%
- {\end{IndentPara}}
-\newenvironment{Itabb}[1][\small]%
- {\begin{IndentPara}#1\ignorespaces\begin{tabbing}\ignorespaces}%
- {\end{tabbing}\end{IndentPara}}
-
-%---- Ruled & colored minipage ----------------------------
-
-\definecolor{shadecolor}{gray}{0.9}
-
-\newenvironment{fminipage}[1][\linewidth]
- {\setlength{\tdima}{#1-2\fboxsep-2\fboxrule}%
- \begin{lrbox}{\tboxa}\begin{minipage}{\tdima}}%
- {\end{minipage}\end{lrbox}\noindent\fbox{\usebox{\tboxa}}}
-\newenvironment{cminipage}[1][\linewidth]
- {\setlength{\tdima}{#1-2\fboxsep-2\fboxrule}%
- \begin{lrbox}{\tboxa}\begin{minipage}{\tdima}}%
- {\end{minipage}\end{lrbox}%
- \noindent\colorbox{shadecolor}{\usebox{\tboxa}}}
-
-%---- Additional documenting commands ---------------------
-
-\def\lcbrack{\symbol{`\{}}
-\def\rcbrack{\symbol{`\}}}
-\makeatletter
-\def\meta@font@select{\normalfont\slshape}
-\makeatother
-\DeclareRobustCommand{\cmeta}[1]{%<- \<xxx>
- \texttt{\bslash}\meta{#1}}
-\DeclareRobustCommand{\cmarg}[1]{%<- {\<xxx>}
- \texttt{\lcbrack}\cmeta{#1}\texttt{\rcbrack}}
-\DeclareRobustCommand{\coarg}[1]{%<- [\<xxx>]
- \texttt{[}\cmeta{#1}\texttt{]}}
-\DeclareRobustCommand{\argcmd}[2]{%<- \<xxx>yyy
- \cmeta{#1}\texttt{#2}}
-\newcommand{\rmeta}[3][]{%
- \texttt{\lcbrack#1}\meta{#2}\texttt{#3\rcbrack}}
-\newcommand{\refmeta}[3][]{\cmd{\brref}\rmeta[#1]{#2}{#3}}
-
-\newcommand*{\file}[1]{\texttt{#1}}
-\newcommand*{\pkg}[1]{\textsf{#1}}
-\newcommand*{\env}[1]{\texttt{#1}}
-\newcommand*{\opt}[1]{\texorpdfstring{\normalfont\texttt{\slshape#1}}{#1}}
-\newcommand*{\RS}{\pkg{refstyle}}
-\newcommand*{\RScfg}{\file{refstyle.cfg}}
-\newcommand*{\rtp}{type}
-\newcommand*{\Rtp}{Type}
-\newcommand*{\okeylst}{\oarg{key\_lst}}
-\newcommand*{\mkeylst}{\marg{key\_lst}}
-
-%---- Special eq tag command ------------------------------
-
-\def\spestag#1{\stepcounter{equation}%
- \gdef\tagextra##1{%
- \makebox[0pt][l]{\small\quad%
- \cmd{\eqlabel}\texttt{\lcbrack##1\rcbrack}}%
- \gdef\tagextra####1{}}%
- \tag{\theequation\tagextra{#1}}\eqlabel{#1}}
-
-%---- other stuff -----------------------------------------
-
-\newcommand*{\ArTab}{\>\quad$\rightarrow$\quad}
-
-%----------------------------------------------------------
-
-\EnableCrossrefs
-\CodelineIndex
-\RecordChanges
-\setlength\hfuzz{15pt}
-\hbadness=7000
-\begin{document}
- \DocInput{refstyle.dtx}
-\end{document}
-
-%</driver>
-% \fi
-%
-% \CheckSum{552}
-%
-% \CharacterTable
-% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
-% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
-% Digits \0\1\2\3\4\5\6\7\8\9
-% Exclamation \! Double quote \" Hash (number) \#
-% Dollar \$ Percent \% Ampersand \&
-% Acute accent \' Left paren \( Right paren \)
-% Asterisk \* Plus \+ Comma \,
-% Minus \- Point \. Solidus \/
-% Colon \: Semicolon \; Less than \<
-% Equals \= Greater than \> Question mark \?
-% Commercial at \@ Left bracket \[ Backslash \\
-% Right bracket \] Circumflex \^ Underscore \_
-% Grave accent \` Left brace \{ Vertical bar \|
-% Right brace \} Tilde \~}
-%
-% \changes{v0.0}{2002/12/01}{Initial version}
-% \changes{v0.1}{2003/04/01}{First stable version}
-% \changes{v0.2}{2003/07/30}{First updated version}
-% \changes{v0.3}{2006/09/09}{Documentation update}
-% \changes{v0.4}{2010/10/21}{Documentation update}
-% \changes{v0.4}{2010/10/21}{Add \texttt{nokeyprefix} option}
-% \changes{v0.5}{2010/11/02}{Documentation update}
-%
-% \DoNotIndex{
-% \@backslashchar, \@carcube, \@ehc, \@empty, \@firstoftwo,
-% \@ifnextchar, \@ifpackageloaded, \@ifstar, \@ifundefined, \@nil,
-% \@qend, \@qrelax, \@secondoftwo, \@tempa, \@undefined,
-% \AtEndOfPackage, \begingroup, \csname, \CurrentOption,
-% \DeclareOption, \def, \edef, \else, \endcsname, \endgroup,
-% \expandafter, \fi, \gdef, \iffalse, \ifx, \InputIfFileExists,
-% \let, \long, \lowercase, \MakeLowercase, \mbox, \MessageBreak,
-% \NeedsTeXFormat, \newcommand, \newif, \noexpand, \PackageError, \PackageInfo,
-% \PassOptionsToPackage, \RS@pkgname, \ProcessOptions, \protect,
-% \providecommand, \ProvidesPackage, \relax, \renewcommand,
-% \RequirePackage, \reserved@a, \reserved@b, \RS@tmpa,
-% \RS@tmpb, \S, \RS@setkeys, \space, \string, \textsc, \textup,
-% \unrestored@protected@xdef, \unskip, \uppercase,
-% \zap@space}
-%
-%^^A==== Titling ==========================================
-% \GetFileInfo{refstyle.sty}
-% \title{\vspace*{-1cm}
-% The \RS\ package\thanks{This file has version number
-% \fileversion, last revised
-% \filedate.}}
-% \author{Danie Els\\[1ex]
-% \small Department of Mechanical and Mechatronics Engineering\\
-% \small University of Stellenbosch, South Africa.\\
-% \normalsize e-mail: \texttt{\href{mailto:dnjels@sun.ac.za}%
-% {dnjels@sun.ac.za}}}
-% \date{\filedate}
-% \maketitle
-% \begin{center}
-% \textbf{Overview of the \RS\ package}
-% \end{center}
-% \noindent
-% When writing complex documents, often a large number of commands
-% for different type of references are defined, for example:
-% \begin{Ipara}
-% |\newcommand*{\eqref}[1]{eqn~(\ref{#1})}|\\
-% |\newcommand*{\Eqref}[1]{Equation~(\ref{#1})}|
-% \end{Ipara}
-% The \RS\ package was developed to automate this process. The
-% package provides a user interface to define sets of reference
-% and label commands for each referable object such as an equation
-% or a table, etc. When you declare, for example, a set of
-% reference commands to an equation:
-% \begin{Ipara}
-% \cmd{\newref}|{eq}|\mkeylst\
-% \end{Ipara}
-% \noindent
-% a series of commands of the format \cmd{\eq...} and \cmd{\Eq...}
-% are produced. The configuration options are set with a list of
-% key-values. Prefixes, inserts and other options for all the
-% different perturbations such as capitalized first letters,
-% singular and plural from, etc.\ can be defined. The
-% configuration can be changed temporarily with an optional list
-% of key-values when the commands are used. A direct interface to
-% the \pkg{varioref} package is also provided.
-% This enables compact reference formats:
-% \begin{Itabb}
-% \hspace{14em}\=\kill
-% |\eqref{e1} ...| \ArTab\eqref{e1} ...\\
-% |\Eqref[vref]{e1} ...| \ArTab\Eqref[vref]{e1} ...\\
-% |\eqref[s]{e1} and ...| \ArTab\eqref[s]{e1} and ...\\
-% |\eqref[name=eq.~]{e1} ...| \ArTab\eqref[name=eq.~]{e1} ...
-% \end{Itabb}
-% A range or a list of references can also be referred to in a
-% consistent way.
-% \begin{Itabb}
-% \hspace{14em}\=\kill
-% |\eqref{e1,e2,e3} ...| \ArTab\eqref{e1,e2,e3} ...\\
-% |\eqrangeref[vref]{e1}{e3} ...| \ArTab\eqrangeref[vref]{e1}{e3} ...
-% \end{Itabb}
-%
-% Templates for the different reference types and different
-% languages can be loaded with a configuring file.
-%
-% The package is aimed at large projects, enabling a consistent
-% way of producing references throughout a project. Enough
-% flexibility is provided to make local changes to a single
-% reference. For large projects such as a series of books or a
-% multi volume thesis, written as freestanding documents, a
-% facility is provided to interface to the \pkg{xr} package for
-% external document references.
-%
-% \medskip
-%
-% \begin{center}
-% \begin{fminipage}[.6\textwidth]
-% See also \pkg{refconfig.pdf} for setup and examples.
-% \end{fminipage}
-% \end{center}
-
-% \clearpage
-%
-% \tableofcontents
-% \clearpage
-%
-%
-% \section{Loading the \RS\ Package}
-%
-% \subsection{Document preamble}
-%
-% The \RS\ package is loaded in the preamble of the document:
-% \begin{enumerate}
-% \item[(a)] With a config file with \pkg{babel} language support
-% \begin{Ipara}
-% |\usepackage{varioref}[2001/09/04]%|~
-% ${\leftarrow}$ To use the \opt{vref} option\\
-% |\usepackage{refstyle}|
-% \end{Ipara}
-% When the package is loaded, it first searchers for a local user defined
-% configuration file \file{refstyle.def}. If it is not available it
-% looks for the global default config file \RScfg\ provided with this package.
-% These configuration files are loaded before the package options are precess.
-% It can therefore contain option commands using globally defined language
-% options and can interface to \pkg{babel} for language changes. The macro
-% \begin{Ipara}
-% |\DeclareLangOpt{|\meta{language}|}{|\meta{definitions}|}|
-% \end{Ipara}
-% is provided to declare the package option \meta{language} and add
-% \meta{definitions} to the |\extras|\meta{language} token for \pkg{babel}.
-% It can only be used inside \RScfg\ or \file{refstyle.def}.
-%
-% \item[(b)]
-% Or with an existing configuration with language support and addition
-% of your own extensions
-% \begin{Ipara}
-% |\documentclass[norwegian]{article}|\\
-% |\usepackage{babel} |\\
-% |\usepackage{refstyle} |\\
-% |\RSaddto{\RSnorwegian}{% |\\
-% | \def\RSthmtxt{teorem~}% |\\
-% | \def\RSthmstxt{teorem~}% |\\
-% | \def\RSThmtxt{Teorem~}% |\\
-% | \def\RSThmstxt{Teorem~}} |\\
-% |\newref{thm}{ |\\
-% | name = \RSthmtxt, |\\
-% | names = \RSthmstxt, |\\
-% | Name = \RSThmtxt, |\\
-% | Names = \RSThmstxt, |\\
-% | rngtxt = \RSrngtxt, |\\
-% | lsttxt = \RSlsttxt, |\\
-% | lsttwotxt = \RSlsttwotxt} |
-% \end{Ipara}
-%
-% \item[(c)]
-% Or without any configuration file, but by declaring your own
-% reference commands in the preamble.
-% \begin{Itabb}
-% \cmd{\usepackage}|[noconfig]{refstyle}|\\
-% \qquad\cmd{\newref}\marg{reftype$_{\,1}$}\mkeylst \\
-% \qquad\cmd{\newref}\marg{reftype$_{\,2}$}\mkeylst\\
-% \tab$\vdots$
-% \end{Itabb}
-%
-% \item[(d)]
-% Or with your own configuration file (without babel language support) for a specific project:
-% \begin{Itabb}
-% |\usepackage[noconfig]{refstyle}|\\
-% |\input{thisproject.ref}|
-% \end{Itabb}
-%
-% \end{enumerate}
-%
-% \subsection{Package options}
-%
-% \begin{description}
-% \item[\opt{noconfig}] Neither of the user supplied \file{refstyle.def} config
-% file or \file{refstyle.cfg} the config file supplied with this package
-% are loaded. The user must declare his or her own definitions and templates.
-% Note that these definitions are not passed on to \pkg{babel}'s language
-% changing mechanisms.
-%
-% \item[\opt{nokeyprefix}] Custom labeling commands \argcmd{\rtp}{label} are generated
-% by \pkg{refstyle} for every \meta{type} definition. It defaults to
-% \begin{Itabb}
-% \hspace{5em}\=hspace{5em}\=\kill
-% \argcmd{\rtp}{label}|{abc}|
-% \>\>~ $\rightarrow$ \cmd{\label}\rmeta{type\,:\,}{abc}
-% \end{Itabb}
-% With the \opt{nokeyprefix} option, the prefix is turned of and the
-% labeling commands defaults to
-% \begin{Itabb}
-% \hspace{5em}\=hspace{5em}\=\kill
-% \argcmd{\rtp}{label}|{abc}|
-% \>\>~ $\rightarrow$ \cmd{\label}|{abc}|
-% \end{Itabb}
-% This is useful for old documents with existing labeling commands or
-% where the user prefer not to use the \argcmd{\rtp}{label} commands.
-%
-%
-% \end{description}
-%
-%
-%
-%
-% \subsection{Companion packages}
-%
-% The \RS\ packages is intended for large projects. It is therefore
-% important that it works together with, or has direct interfaces
-% to the following packages:
-% \begin{description}
-% \item[\pkg{varioref}:\footnotemark]
-% \footnotetext{\pkg{varioref} v1.3c, 2001/09/04 or later,
-% because the starred versions of the commands
-% are used.}
-% Produce sophisticated page and page range references.
-%
-% \item[\pkg{hyperref}:\footnotemark]
-% \footnotetext{\pkg{hyperref} v6.72r, 2002/05/27 or later,
-% where a bug for interference with
-% \pkg{varioref} was fixed.}
-% To establish hyper links between the references and the
-% labels.
-%
-% \item[\pkg{xr, xr-hyper}:]
-% To establish references to external documents.
-%
-% \item[\pkg{showkeys}:]
-% To show all the labels and references. This is very useful
-% to find labels in large documents.
-% \end{description}
-%
-% \clearpage
-% \section{User Interface}
-%
-% The \RS\ package has one configuring command, \DescribeMacro{\newref}
-% \cmd{\newref}, that internally creates a series of label and
-% reference commands:
-% \blankline
-%
-% \begin{cminipage}[\linewidth]
-% \newcommand*{\crsi}{\smash{\rule[0pt]{.4pt}{1.25em}\rule[.5ex]{1.5em}{.4pt}}}^^A
-% \newcommand*{\crsl}{\smash{\rule[.5ex]{.4pt}{1.5em}\rule[.5ex]{1.5em}{.4pt}}}^^A
-% \begin{Itabb}
-% \hspace*{2em}\=\hspace{2em}\=\hspace{10em}\=\kill
-% \cmd{\newref}\marg{\rtp}\mkeylst\tab\mbox{}\\[.75ex]
-% \>\crsi \>\argcmd{{\rtp}}{key} \> Reference argument prefix \\[.75ex]
-% \>\crsl \>\argcmd{{\rtp}}{label} \> Custom label \\[.75ex]
-% \>\crsl \>\argcmd{{\rtp}}{ref} \> In text reference \\[.75ex]
-% \>\crsl \>\argcmd{{\Rtp}}{ref} \> Start of sentence reference \\[.75ex]
-% \>\crsl \>\argcmd{{\rtp}}{rangeref} \> In text range reference \\[.75ex]
-% \>\crsl \>\argcmd{{\Rtp}}{rangeref} \> Start of sentence range reference\quad\mbox{}\\[.75ex]
-% \>\crsl \>\argcmd{{\rtp}}{pageref} \> Page reference
-% \end{Itabb}
-% \end{cminipage}
-% \blankline
-%
-% \noindent
-% All the \cmeta{\rtp}... commands, excluding \argcmd{{\rtp}}{key}
-% and \argcmd{{\rtp}}{label} are robust.
-% All the options for the referencing commands are set with a
-% key-value list. \Tabref[vref=far]{refopt} gives a full list of all the
-% key-values and defaults.
-%
-% The \RS\ package do not redefine any internal \LaTeX\ commands and
-% depends only on the \cmd{\label}, \cmd{\ref}, \cmd{\pageref} and
-% the \pkg{varioref} commands.
-% The internally defined commands do not overwrite any
-% existing command with the same name, and an error results if a command
-% already exists. The exception is commands declared with a previous
-% \cmd{\newref} call, can be redefined by calling \cmd{\newref} again
-% with a new set of parameter.
-% If the \pkg{amsmath} package is loaded, and you define
-% \cmd{\newref}|{eq}| for references to equations, you need to
-% undefine \cmd{\eqref} before issuing \cmd{\newref} by
-% \begin{Ipara}
-% \cmd{\let}\cmd{\eqref}|=|\cmd{\relax}
-% \end{Ipara}
-%
-%
-% \section{Command Descriptions}
-%
-% The structure of the label and reference commands is given by the
-% syntax diagrams that follows. Examples are included for references
-% to equations, defined according to the template in
-% \RScfg\ with the
-% \cmd{\newref}|{eq}|\mkeylst. See also \secref{keyvals} for
-% explanations of the key-values.
-%
-% \subsection{The reference key}
-%
-% \begin{cminipage}[\linewidth]
-% \begin{syntdiag}
-% \tok{\argcmd{\rtp}{key}}
-% \end{syntdiag}
-% \end{cminipage}
-% \blankline
-% \noindent
-% The \argcmd{\rtp}{key} command returns the prefix added to the
-% argument of the label and the reference commands, for example:
-%
-% \begin{Itabb}
-% \hspace{10em}\=hspace{5em}\=\kill
-% \cmd{\newref}\marg{\rtp}|{}|
-% \>\>\argcmd{\rtp}{key} $\rightarrow$ \meta{type\,:\,}\\
-% \cmd{\newref}\marg{\rtp}|{key=xxx-}|
-% \>\>\argcmd{\rtp}{key} $\rightarrow$ |xxx-|
-% \end{Itabb}
-%
-% \noindent
-% The \argcmd{\rtp}{key} command is not a general command, but was
-% provided only as a link to the standard \LaTeX{} \cmd{\ref} and
-% \cmd{\pageref} commands:
-%
-% \begin{Itabb}
-% \hspace{10em}\=hspace{5em}\=\kill
-% \cmd{\label}|{|\argcmd{\rtp}{key}| abc}|
-% \>\>~ $\rightarrow$ \cmd{\label}\rmeta{type\,:\,}{abc}\\
-% \cmd{\ref}|{|\argcmd{\rtp}{key}| abc}|
-% \>\>~ $\rightarrow$ \cmd{\ref}\rmeta{type\,:\,}{abc}
-% \end{Itabb}
-% Note if the the \opt{nokeyprefix} option is active then the \argcmd{\rtp}{key}
-% is empty.
-%
-% \blankline
-% \noindent
-% \textbf{\slshape Examples:} equations
-% with \cmd{\newref}|{eq}|\mkeylst:
-%
-% \begin{Itabb}
-% \hspace*{18em}\=\kill
-% |\eqkey| \> \eqkey \\
-% |in eq.~\ref{\eqkey e1} ...| \>in eq.~\ref{\eqkey e1} ... \\
-% |on page \pageref{\eqkey e1} ...|\>on page \pageref{\eqkey e1} ... \\
-% |\vpageref*{\eqkey e1} ... | \>\vpageref*{\eqkey e1} ...
-% \end{Itabb}
-%
-% \subsection{Reference label}
-%
-% \begin{cminipage}[\linewidth]
-% \begin{syntdiag}
-% \tok{\argcmd{\rtp}{label}"{"<lbl>"}"}
-% \end{syntdiag}
-% \end{cminipage}
-% \blankline
-%
-% \noindent
-% The command \argcmd{\rtp}{label} prefix the reference
-% string in the \cmd{\label} with the string \meta{type\,:\,}, or its
-% redefinition with the \opt{key} option.
-%
-% \begin{Itabb}
-% \hspace{10em}\=hspace{5em}\=\kill
-% \argcmd{\rtp}{label}|{abc}|
-% \>\>~ $\rightarrow$ \cmd{\label}\rmeta{type\,:\,}{abc}
-% \end{Itabb}
-% \blankline
-%
-% \noindent
-% \textbf{\slshape Examples:}
-%
-% \begingroup
-% \begin{Ipara}
-% Let $z = x+\mathrm{i} y$ and $\alpha = \beta + \mathrm{i}
-% \gamma$, with $\mathrm{i}^2 = -1$, then
-% \begin{align}
-% &\mathrm{e}^z = \mathrm{e}^x \left(\cos y + \mathrm{i} \sin y \right)
-% \spestag{e1}\\
-% &z^\alpha = \mathrm{e}^{\alpha \ln z}
-% \spestag{e2}\\
-% \intertext{\Eqref{e1,e2} lead to the following interesting results:}
-% &\mathrm{e}^{\mathrm{i} \pi} + 1 = 0 \spestag{e3}\\
-% &\mathrm{i}^\mathrm{i} = \mathrm{e}^{-\pi/2}\spestag{e4}
-% \end{align}
-% \end{Ipara}
-% \endgroup
-%
-%
-% \subsection{Reference commands}
-%
-% \begin{cminipage}[1.05\textwidth]
-% \begin{syntdiag}
-% \tok{\argcmd{\rtp}{ref}}
-% \begin{stack}\\ \tok{$\ast$} \end{stack}
-% \begin{stack}\\ \tok{\okeylst} \end{stack}
-% "{"
-% \begin{rep} \tok{<lbl>} \\ ~,~ \end{rep}
-% "}"
-% \end{syntdiag}
-% \end{cminipage}
-% \smallskip
-%
-% \begin{cminipage}[1.05\textwidth]
-% \begin{syntdiag}
-% \tok{\argcmd{\Rtp}{ref}}
-% \begin{stack}\\ \tok{$\ast$} \end{stack}
-% \begin{stack}\\ \tok{\okeylst} \end{stack}
-% \tok{"{"}
-% \begin{rep} \tok{<lbl>} \\ ~,~ \end{rep}
-% \tok{"}"}
-% \end{syntdiag}
-% \end{cminipage}
-% \blankline
-% \noindent
-% The |*| optional form of the \argcmd{\rtp}{ref} and
-% \argcmd{\Rtp}{ref} commands eliminates the
-% name prefix. The |[s]| optional key-value argument is for the
-% plural form of the name prefix.
-% \blankline
-%
-% \noindent
-% \textbf{\slshape Examples:}
-% \begin{Itabb}
-% \hspace*{21em}\=\kill
-% |in \eqref{e1} ...| \>in \eqref{e1} ... \\
-% |in \eqref[s]{e1}--\eqref*{e4} ...|\>in \eqref[s]{e1}--\eqref*{e4} ...\\
-% |in \eqref[name=eq.~]{e2} ...| \>in \eqref[name=eq.~]{e2} ...
-% \end{Itabb}
-% \pagebreak[1]
-% \noindent
-% A list of references can be used:
-% \begin{Itabb}
-% \hspace*{21em}\=\kill
-% |in \eqref{e1,e2} ...| \>in \eqref{e1,e2} ... \\
-% |in \eqref{e1,e2,e3} ...| \>in \eqref{e1,e2,e3} ... \\
-% |in \eqref[lsttxt={, and~}]{e1,e2,e3} ...| \>in \eqref[lsttxt={, and~}]{e1,e2,e3} ...
-% \end{Itabb}
-% \pagebreak[2]
-% The reference to the page can be included with the \opt{vref} or \opt{vref=far}
-% options that activates the \pkg{varioref} reference.
-% \begin{Itabb}
-% \hspace*{18em}\=\kill
-% |in \eqref[vref]{e1} ...| \>in \eqref[vref]{e1} ...\\
-% |in \eqref[vref=far]{e1} ...| \>in \eqref[vref=far]{e1} ...
-% \end{Itabb}
-% The \argcmd{\Rtp}{ref} command is identical to the
-% \argcmd{\rtp}{ref} command except that it uses the \opt{Name} and
-% \opt{Names} key-value options.
-% \begin{Itabb}
-% \hspace*{18em}\=\kill
-% |\Eqref{e1} is ...| \>\Eqref{e1} is ... \\
-% |\Eqref{e1,e2} are ...| \>\Eqref{e1,e2} are ... \\
-% |\Eqref[lsttxt={\ or~}]{e1,e2,e3}| \>\Eqref[lsttxt={\ or~}]{e1,e2,e3}
-% \end{Itabb}
-% \noindent
-% References to external documents can be added with the \opt{xr}
-% option. Please read the documentation of the \pkg{xr} package.
-%
-% \begin{Itabb}
-% \hspace{10em}\=hspace{5em}\=\kill
-% \cmd{\eqref}|[|\opt{xr}|=A-]{xyz}| \> \>$\rightarrow$~
-% |equation~\ref{A-eq:xyz}|
-% \end{Itabb}
-%
-%
-% \subsection{Range reference commands}
-%
-% \begin{cminipage}[\linewidth]
-% \begin{syntdiag}
-% \tok{\argcmd{\rtp}{rangeref}}
-% \begin{stack}\\ \tok{$\ast$} \end{stack}
-% \begin{stack}\\ \tok{\okeylst} \end{stack}
-% \tok{"{"<lbl>$_1$"}{"<lbl>$_2$"}"}
-% \end{syntdiag}
-% \end{cminipage}
-% \smallskip
-%
-% \begin{cminipage}[\linewidth]
-% \begin{syntdiag}
-% \tok{\argcmd{\Rtp}{rangeref}}
-% \begin{stack}\\ \tok{$\ast$} \end{stack}
-% \begin{stack}\\ \tok{\okeylst} \end{stack}
-% \tok{"{"<lbl>$_1$"}{"<lbl>$_2$"}"}
-% \end{syntdiag}
-% \end{cminipage}
-% \blankline
-%
-% \noindent
-% The \argcmd{\rtp}{rangeref} and \argcmd{\Rtp}{rangeref} commands
-% return a range of references and take two arguments. The |*|
-% optional form again eliminates the name prefix.
-% \blankline
-%
-% \noindent
-% \textbf{\slshape Examples:}
-% \begin{Itabb}
-% \hspace*{19em}\=\kill
-% |in \eqrangeref{e1}{e4} ...| \>in \eqrangeref{e1}{e4} ... \\
-% |... and \eqrangeref*{e1}{e4} ...| \>... and \eqrangeref*{e1}{e4} ... \\
-% |\Eqrangeref{e1}{e4} are ...| \>\Eqrangeref{e1}{e4} are ... \\
-% |\Eqrangeref[vref,rngtxt=--]{e1}{e4}| \>\Eqrangeref[rngtxt=--,vref]{e1}{e4}
-% \end{Itabb}
-%
-%
-% \subsection{Page reference command}\seclabel{PRefCmds}
-%
-% \begin{cminipage}
-% \begin{syntdiag}
-% \tok{\argcmd{\rtp}{pageref}}
-% \begin{stack}\\ \tok{\okeylst} \end{stack}
-% \tok{"{"<lbl>"}"}
-% \end{syntdiag}
-% \end{cminipage}
-% \blankline
-% \noindent
-% The \argcmd{\rtp}{pageref} commands returns the page number of a
-% reference.
-% \blankline
-%
-% \noindent
-% \textbf{\slshape Examples:}
-% \begin{Itabb}
-% \hspace*{18em}\=\kill
-% |it is on page \eqpageref{e1} ...| \>it is on page \eqpageref{e1} ...\\
-% |it is \eqpageref[vref]{e1} ...| \>it is \eqpageref[vref]{e1} ...
-% \end{Itabb}
-%
-%
-%^^A=================================================================
-% \begin{table}
-% \newcommand*{\Q}{\ensuremath{\blacksquare}}^^A
-% \newcommand*{\X}{\ensuremath{\square}}^^A
-% \setlength{\fboxsep}{1em}^^A
-% \centering
-% \caption[The available options and key-value parameters]^^A
-% {The available options and key-value parameters for
-% the label and reference commands of the \RS\ package.}
-% \tablabel{refopt}
-% \blankline
-% \begin{cminipage}[.9\textwidth]
-% \renewcommand{\thempfootnote}{\fnsymbol{mpfootnote}}
-% \renewcommand{\footnoterule}{}
-% \begin{tabular*}{\linewidth}{@{\extracolsep{\fill}}llccccccc@{}}
-% & & \multicolumn{7}{c}{Commands\footnote{^^A
-% The commands are obtained by calling the configuring command
-% \cmd{\newref} and setting the default key-values. The
-% active key-values can be changed temporarily inside the
-% commands.}} \\
-% \cline{3-9}
-% Parameter & Default &
-% \begin{turn}{90}\argcmd{{\rtp}}{key}~ \end{turn}&
-% \begin{turn}{90}\argcmd{{\rtp}}{label}~ \end{turn}&
-% \begin{turn}{90}\argcmd{{\rtp}}{ref}~ \end{turn}&
-% \begin{turn}{90}\argcmd{{\Rtp}}{ref}~ \end{turn}&
-% \begin{turn}{90}\argcmd{{\rtp}}{rangeref}~ \end{turn}&
-% \begin{turn}{90}\argcmd{{\Rtp}}{rangeref}~ \end{turn}&
-% \begin{turn}{90}\argcmd{{\rtp}}{pageref}~ \end{turn}\\
-% \hline
-% \noalign{\smallskip}
-% ~$\ast$ & &\X &\X &\Q &\Q &\Q &\Q &\X\\
-% \okeylst & &\X &\X &\Q &\Q &\Q &\Q &\Q\\[1ex]
-% \opt{key} &|={|\meta{\rtp:}|},| &\X &\X &\Q &\Q &\Q &\Q &\Q\\
-% \opt{s} & |={true}|\footnote{^^A
-% Options defaults to \opt{true} but is initialized
-% as \opt{false}. The \argcmd{{\rtp}}{ref}\texttt{[s]}\marg{lbl}
-% command results in the plural: \opt{names}.
-% The same principle is also valid for the \opt{vref}
-% option.\fnlabel{b}}|,|
-% &\X &\X &\Q &\Q &\X &\X &\X\\
-% \opt{vref} &|={true}|\fnref*{b}|,|
-% &\X &\X &\Q &\Q &\Q &\Q &\Q\\
-% \opt{xr} &|={},| &\X &\X &\Q &\Q &\Q &\Q &\Q\\[1ex]
-% \opt{name} &|={},| &\X &\X &\Q &\X &\X &\X &\X\\
-% \opt{names}\footnote{^^A
-% Option depends on the selection of the \texttt{s=true/false}
-% optional key-value for singular or plural.\fnlabel{c}}
-% &|={},| &\X &\X &\Q &\X &\Q &\X &\X\\
-% \opt{Name} &|={},| &\X &\X &\X &\Q &\X &\X &\X\\
-% \opt{Names}\fnref*{c}
-% &|={},| &\X &\X &\X &\Q &\X &\Q &\X\\
-% \opt{lsttwotxt} &|={\space and~},| &\X &\X &\Q &\Q &\X &\X &\X\\
-% \opt{lsttxt} &|={\space and~},| &\X &\X &\Q &\Q &\X &\X &\X\\
-% \opt{rngtxt} &|={\space to~},| &\X &\X &\X &\X &\Q &\Q &\X\\[1ex]
-% \opt{refcmd} &|=\ref{#1},| &\X &\X &\Q &\Q &\Q &\Q &\Q\\
-%
-% \hline
-% \noalign{\smallskip}
-%
-% \footnotesize \Q\ -- \makebox[0pt][l]{\footnotesize Available}\\
-% \footnotesize \X\ -- \makebox[0pt][l]{Not available}
-% \end{tabular*}
-% \end{cminipage}
-% \end{table}
-%^^A=================================================================
-%
-%
-%
-% \clearpage
-% \section{\pkg{Keyval} Optional Arguments}\seclabel{keyvals}
-%
-% Al the options for the referencing commands are set with a key-value
-% list. \Tabref[vref]{refopt} gives a full list of all the key-values and
-% defaults. The options can also be changed locally with the
-% \okeylst\ optional arguments.
-%
-%
-% \subsection{Identifier: \opt{key}}
-%
-% The \opt{key} key-value is the prefix to the reference label
-% of the \cmd{\ref} and \cmd{\pageref} commands.
-% The default is \opt{key=}\meta{type\,:\,}.
-% With the default \RScfg:
-%
-% \begin{Itabb}
-% \tab\=\hspace{3.5cm}\=\hspace{2em}\=\kill
-% \cmd{\newref}|{tab}{...}|\\[1ex]
-% \>|\tablabel{abc}|
-% \>~ $\rightarrow$ |\label{tab:abc}|\\
-% \>|\tabref{abc}|
-% \>~ $\rightarrow$ |table~\ref{tab:abc}|\\[1ex]
-% \cmd{\newref}|{tab}{key=xxx-,...}|\\[1ex]
-% \>|\tablabel{abc}|
-% \>~ $\rightarrow$ |\label{xxx-abc}|\\
-% \>|\tabref{abc}|
-% \>~ $\rightarrow$ |table~\ref{xxx-abc}|
-% \end{Itabb}
-% For existing documents containing labels such as |\label{tab:xx}|,
-% you can use the \opt{nokeyprefix} option which defines \opt{key}|={}|. The
-% normal \cmd{\label} command can then be used and the reference
-% commands defaults to
-% \begin{Itabb}
-% \tab\=\hspace{3.5cm}\=\hspace{2em}\=\kill
-% \>\cmd{\label}|{tab:xx}| \\
-% \>|\tabref{tab:xx}| \>~ $\rightarrow$ |table~\ref{tab:xx}|
-% \end{Itabb}
-%
-%
-% \subsection{Plural form: \opt{s}}
-%
-% The \opt{s} conditional option (\texttt{true/false}) switches the
-% singular/plural form of the reference on and off. The default is
-% \opt{s}\texttt{=true}, but it is initialized to \texttt{false}.
-% \begin{Itabb}
-% \tab\=\hspace{3.5cm}\=\hspace{2em}\=\kill
-% |\tabref{abc}|
-% \>\>~ $\rightarrow$ |table~\ref{tab:abc}|\\
-% |\tabref[s]{abc}|
-% \>\>~ $\rightarrow$ |tables~\ref{tab:abc}|
-% \end{Itabb}
-%
-%
-% \subsection{Extended reference: \opt{vref}}
-%
-% The \opt{vref} conditional option (\texttt{true/far/false}) switches the
-% \pkg{varioref} page referencing on and off. The default is
-% \opt{vref}\texttt{=true}, but it is initialized to \texttt{false}.
-%
-% \begin{Itabb}
-% \tab\=\hspace{3.5cm}\=\hspace{2em}\=\kill
-% |\tabref{abc}|
-% \>\>~ $\rightarrow$ |table~\ref{tab:abc}|\\
-% |\tabref[vref]{abc}|
-% \>\>~ $\rightarrow$ |table~\ref{tab:abc}|
-% |\vpageref[\unskip]{tab:abc}|\\
-% |\tabref[vref=far]{abc}|^^A
-% \>\>~ $\rightarrow$ |table~\ref{tab:abc}|
-% |\reftextfaraway{tab:abc}|
-% \end{Itabb}
-%
-%
-% \subsection{External interfaces: \opt{xr}}
-%
-% The \opt{xr} option is for references to external documents.
-% It inserts a prefix in the reference label, compatible with the
-% \pkg{xr} package. The default is \opt{xr}|={}|.
-%
-% External document can be defined in the preamble with the
-% \pkg{xr} or \pkg{xr-hyper} packages:
-% \begin{Ipara}
-% \cmd{\usepackage}|{xr}|\\
-% \cmd{\externaldocument}\oarg{xr\_key}\marg{filename}
-% \end{Ipara}
-%
-% \noindent
-% If, for example, an external document defined with
-% \meta{xr\_key}\texttt{=\{A-\}}, uses an identical setup (e.g.\ the same
-% \RScfg), then it can be referenced with
-%
-% \begin{Itabb}
-% \tab\=\hspace{3.5cm}\=\hspace{2em}\=\kill
-% |\tabref[xr=A-]{abc}|
-% \>\>~ $\rightarrow$ |table~\ref{A-tab:abc}|
-% \end{Itabb}
-% \noindent or otherwise
-% \begin{Itabb}
-% \tab\=\hspace{3.5cm}\=\hspace{2em}\=\kill
-% |\tabref[xr=A-,key=]{abc}|
-% \>\>~ $\rightarrow$ |table~\ref{A-abc}|
-% \end{Itabb}
-%
-%
-% \subsection{Language parameters: \opt{name}, \opt{names},
-% \opt{Name}, \opt{Names}, \opt{rngtxt}, \opt{lsttwotxt}, \opt{lsttxt}}
-% \seclabel{langopts}
-%
-% This key-values contain the text prefixes and insertions.
-% Every house style or user has his or her own preference for naming the reference types,
-% therefore are there no defaults provided.
-%
-% \begin{Itabb}
-% \hspace*{1.5cm}\=\hspace{7cm}\=\kill
-% \opt{name} \> ---~Inside sentence reference prefix (singular)
-% \> default=|{}|\\
-% \opt{names}\> ---~Inside sentence reference prefix (plural)
-% \> default=|{}|\\
-% \opt{Name} \> ---~First word reference prefix (singular)
-% \> default=|{}|\\
-% \opt{Names}\> ---~First word reference prefix (plural)
-% \> default=|{}|\\
-% \opt{rngtxt}\> ---~Range of references
-% \> default=|{\ to~}|\\
-% \opt{lsttwotxt}\> ---~List of references (two)
-% \> default=|{\ and~}|\\
-% \opt{lsttxt}\> ---~List of references (more than two)
-% \> default=|{\ and~}|
-% \end{Itabb}
-% \noindent
-% Good typographic style manuals recommend the minimum use of
-% capital letters and punctuation that breaks the flow of a sentence
-% or paragraph. For abbreviations, Bringhurst\cite{Bring1996}
-% recommends the Oxford house style: Use a period only when the word
-% stops prematurely. The period is omitted if the abbreviation
-% begins with the first letter and end with the last. As an example
-% for equations, use eq.~(1) or eqn~(1).
-% A good guideline is not to abbreviate any reference type names.
-% If a sentence starts with a
-% reference then the type name must always be written in full.
-% A typical example for references to a table is:
-% \begin{Ipara}
-% \opt{name}| ={table~}, |\opt{names}| ={tables~},|\\
-% \opt{Name}| ={Table~}, |\opt{Names}| ={Tables~},|\\
-% \opt{rngtxt}|={\ to~}, |\opt{lsttxt}|={, and~}, |\opt{lsttwotxt}|={\ and~},|
-% \end{Ipara}
-% Note the hardspace after the text. It is needed to keep the text
-% and the reference together on the same line.
-%
-% The \RS\ configuration file can be setup to interface with \pkg{babel}
-% for different languages or for automatic language changes inside a
-% document. The language specific key-values can be added to the
-% \pkg{babel} hook |\extras|\meta{language}. The command
-% \DescribeMacro{\DeclareLangOpt}\cmd{\DeclareLangOpt}\footnote{^^A
-% Only for use in \RScfg\ the default config file}
-% is provided to supply a \meta{language} option to the package
-% and to add the option contents to |\extras|\meta{language}. The
-% default config file contains the following lines for equations:
-% \begin{Ipara}
-% |\newcommand\RSenglish{% |\\
-% | \def\RSeqtxt{equation~}% |\\
-% | \def\RSeqstxt{equations~}%|\\
-% | \def\RSEqtxt{Equation~}% |\\
-% | \def\RSEqstxt{Equations~}%|\\
-% | : |\\
-% | } |\\
-% |\DeclareLangOpt{english}{\RSenglish}|
-% \end{Ipara}
-% \DescribeMacro{\RSaddto}or manually with the \cmd{\RSaddto} command
-% \begin{Ipara}
-% |\RSaddto{\extrasenglish}{\RSenglish}|
-% \end{Ipara}
-% The key-value options for language specific options
-% are then set as:
-% \begin{Ipara}
-% |\newref{eq}{% |\\
-% | name = \RSeqtxt, |\\
-% | names = \RSeqstxt,|\\
-% | Name = \RSEqtxt, |\\
-% | Names = \RSEqstxt,|\\
-% | : |\\
-% | } |
-% \end{Ipara}
-%
-% \noindent\LaTeX{}/\pkg{babel} provides some language specific
-% names that can be utilized.
-%
-% \begin{Ipara}
-% |\chaptername \appendixname|\\
-% |\figurename \tablename|\\
-% |\partname \pagename|
-% \end{Ipara}
-%
-% To setup a multilingual document with \pkg{babel},
-% \emph{always} make the language options global so that other
-% language compliant packages can detect it.
-% A typical setup for an Afrikaans/English document would be:
-% {\makeatletter\def\meta@font@select{\normalfont\ttfamily\slshape}
-% \begin{Ipara}
-% |\documentclass[UKenglish,afrikaans,|\meta{options}|]{|\meta{LaTeX\_class}|}|\\
-% |\usepackage[T1]{fontenc}%..|\texttt{\slshape hyphenation of words with accents}\\
-% |\usepackage{babel}%........|\texttt{\slshape language def's}\\
-% |\usepackage{varioref}%.....|\texttt{\slshape for \opt{vref} option}\\
-% |\usepackage{refstyle}|
-% \end{Ipara}}
-%
-%
-% \subsection{Reference formatting command: \opt{refcmd}}
-%
-% The \opt{refcmd} key-value holds the contents of the internal
-% command that formats the reference. The |#1| parameter
-% passed to the command is the full reference label.
-% For example:
-% \begin{Itabb}
-% \hspace{10em}\=hspace{5em}\=\kill
-% \opt{refcmd}|=(\ref{#1})| \> $\rightarrow$~
-% |(\ref{|\meta{label}|})|
-% \end{Itabb}
-%
-% External commands can be employed. For example, to make references
-% to equations identical to the \AmS\ \cmd{\eqref} command:
-% \begin{Itabb}
-% \opt{refcmd}|={\textup{\tagform@{\ref{#1}}}}%|~~It needs \file{amsmath.sty}
-% \end{Itabb}
-%
-% The \opt{refcmd} can be used in conjuntion with the |\ifRSstar|,
-% |\ifRSnameon|, |\ifRSplural| and |\ifRScapname| internal
-% conditional variables to format the reference. As an example for a
-% reference to a footnote, where a duplicate footnote mark is needed,
-% can the \opt{refcmd} be configured so that the starred form of the
-% reference command produce a superscripted duplicate mark:
-% \begin{Itabb}
-% |\newcommand{\RSfnmark}[1]{%|\\
-% | \begingroup |\\
-% | \unrestored@protected@xdef\@thefnmark{#1}%|\\
-% | \endgroup |\\
-% | \@footnotemark} |\\[1ex]
-% \opt{refcmd}|={\ifRSstar\RSfnmark{\ref{#1}}\else(\ref{#1})\fi}|
-% \end{Itabb}
-% \noindent The second footnote mark, \fnref*[name]{b}, in
-% \tabref[vref]{refopt}, was obtained in this way with the reference
-% |\fnref*{b}|. See \RScfg\ for another
-% example for references to chapters and appendices.
-%
-% The \pkg{nameref} package can easily be incorporated if you need elaborate
-% references which include the section or chapter name:
-% \begin{Ipara}
-% |\Secref[vref, refcmd={\S\ref{#1}, `\nameref{#1}'}]{PRefCmds}|
-% \end{Ipara}
-% gives
-% \begin{Ipara}
-% \Secref[vref, refcmd={\S\ref{#1}, `\nameref{#1}'}]{PRefCmds}
-% \end{Ipara}
-%
-% \section{Default configuration files}
-%
-% The \pkg{refstyle} package first searches for the \file{refstyle.def}
-% configuration file, and if it not found, then it uses the default
-% configuration file \RScfg\ that is supplied with the package.
-%
-% The default configuration file, \RScfg, makes a
-% number of default reference declarations and provides language
-% definitions for the language parameters. See the file
-% \file{refconfig.pdf} for the documentation.
-% \medskip
-%
-% \begin{center}
-% \begin{fminipage}[.55\textwidth]
-% \slshape Any user is welcome to customize the
-% local copy of the \RScfg\ file or copy
-% the relevant contents to your own \file{refstyle.def}
-% configuration file.
-% \end{fminipage}
-% \end{center}
-%
-% \begin{thebibliography}{99}
-% \bibitem{Bring1996}
-% {Bringhurst, R.} (1996), \emph{The elements of typographic style},
-% Hartley \& Marks Publishers, Point Roberts, WA, USA and Vancouver,
-% BC, Canada, second edn.
-% \end{thebibliography}
-%
-% \StopEventually{\PrintChanges\PrintIndex}
-% \clearpage
-%
-% \section{Implementation: \pkg{refstyle.sty}}
-%
-% \subsection{Identification}
-% \begin{macrocode}
-%<*pkg>
-\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-\ProvidesPackage{refstyle}[\RefstyleFileDate\space
- \RefstyleFileVersion\space
- Reference formatting (DNJ Els)]
-\newcommand*{\RS@pkgname}{refstyle}
-% \end{macrocode}
-%
-%
-% \subsection{External packages}
-%
-% Load all the external packages.
-% \begin{macrocode}
-\RequirePackage{keyval}
-% \end{macrocode}
-%
-% \begin{macro}{\RS@setkeys}
-% \changes{v0.3}{2006/09/09}{original \cmd{\setkeys} copy}
-% Note if \pkg{xkeyval} is loaded, it redefines \pkg{keyval}'s
-% macros. To fix this bug, we need the original \cmd{\setkeys}
-% command.
-% \begin{macrocode}
-\def\RS@setkeys#1#2{%
- \def\KV@prefix{KV@#1@}%
- \let\@tempc\relax
- \KV@do#2,\relax,}
-% \end{macrocode}
-% \end{macro}
-%
-% \noindent A small bug-fix for \pkg{showkeys}. Will be removed
-% after release of new version.
-%
-% \begin{macrocode}
-\@ifundefined{vref@space}{\let\vref@space\space}{}
-% \end{macrocode}
-%
-% \begin{macro}{\@safe@activestrue}
-% \changes{v0.5}{2010/11/02}{Add \cmd{\@safe@activesfalse}}
-% \begin{macro}{\@safe@activesfalse}
-% \changes{v0.5}{2010/11/02}{Add \cmd{\@safe@activestrue}}
-% If \pkg{babel} is not loaded, make the following
-% commands inactive.
-% \begin{macrocode}
-\providecommand*{\@safe@activestrue}{}
-\providecommand*{\@safe@activesfalse}{}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Utility commands}
-%
-% \begin{macro}{\RS@namelet}
-% \begin{macro}{\RS@nameuse}
-% \begin{macro}{\RS@namedef}
-% \begin{macro}{\RS@robustnamedef}
-% \noindent
-% The following is a list of commands that take a variable \marg{name}
-% as argument. This enables on-the-fly definitions of user commands.
-% \begin{Itabb}
-% Usage:~\=\cmd{\RS@robustnamedef}\marg{name}~\=\kill
-% Usage:
-% \>\cmd{\RS@namelet}\marg{name}
-% \> $\rightarrow$ \cmd{\let}\cmeta{name}\\
-% \>\cmd{\RS@nameuse}\marg{name}
-% \> $\rightarrow$ \cmeta{name}\\
-% \>\cmd{\RS@namedef}\marg{name}
-% \> $\rightarrow$ \cmd{\def}\cmeta{name}\\
-% \>\cmd{\RS@robustnamedef}\marg{name}
-% \> $\rightarrow$
-% \cmd{\def}\cmeta{name}|{\protect|\cmeta{name\textvisiblespace}|}|^^A
-% \cmd{\def}\cmeta{name\textvisiblespace}
-% \end{Itabb}
-% \begin{macrocode}
-\newcommand*{\RS@namelet}[1]{\expandafter\let\csname #1\endcsname}
-\newcommand*{\RS@nameuse}[1]{\csname #1\endcsname}
-\newcommand*{\RS@namedef}[1]{\expandafter\def\csname #1\endcsname}
-\newcommand*{\RS@robustnamedef}[1]{%
- \expandafter\edef\csname #1\endcsname{%
- \noexpand\protect\RS@nameuse{#1 }}%
- \RS@namedef{#1 }}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\RS@ifundefined}
-% This is an improved definition\footnote{Posted by Markus Kohm
-% on c.t.t. 2002/11/11} for the \LaTeX{} kernel command
-% \cmd{\@ifundefined} that do not leave an undefined command
-% defined as \cmd{\relax} after the test.
-%
-% The usage is:
-% \cmd{\RS@ifundefined}\marg{name}\marg{true}\marg{false} executes
-% the contents of \meta{true} if \cmeta{name} is not defined and
-% \meta{false} if defined.
-% \begin{macrocode}
-\def\RS@ifundefined#1{%
- \begingroup\expandafter\expandafter\expandafter\endgroup
- \expandafter\ifx\csname#1\endcsname\relax
- \expandafter\@firstoftwo
- \else
- \expandafter\@secondoftwo
- \fi}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\RS@removedef}
-% The command removes the definition of a command, including
-% robust definitions.
-% \begin{macrocode}
-\newcommand*{\RS@removedef}[1]{%
- \RS@namelet{#1}\@undefined%
- \RS@ifundefined{#1 }{}{\RS@namelet{#1 }\@undefined}}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\RS@testednamedef}
-% \begin{macro}{\RS@testedrobustnamedef}
-% These command are identical to \cmd{\RS@namedef} and
-% \cmd{\RS@robustnamedef}, but only define the \cmeta{name}
-% command if it is legal. Otherwise an error message
-% is written to the log file and the program is terminated.
-% \begin{macrocode}
-\newcommand*{\RS@testednamedef}[1]{%
- \RS@ifnamedefinable{#1}\RS@namedef{#1}}
-% \end{macrocode}
-% \begin{macrocode}
-\newcommand*{\RS@testedrobustnamedef}[1]{%
- \RS@ifnamedefinable{#1}\RS@robustnamedef{#1}}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\RS@ifnamedefinable}
-% A modified version of the \LaTeX{} kernel command
-% (from ltdefns.dtx).
-% \begin{macrocode}
-\long\def\RS@ifnamedefinable #1{%
- \edef\reserved@a{#1}%
- \RS@ifundefined\reserved@a
- {\edef\reserved@b{\expandafter\@carcube \reserved@a xxx\@nil}%
- \ifx \reserved@b\@qend \RS@notdefinable\else
- \ifx \reserved@a\@qrelax \RS@notdefinable\else
- \PackageInfo{\RS@pkgname}{\@backslashchar\reserved@a\space created}%
- \fi
- \fi}%
- \RS@notdefinable}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\RS@notdefinable}
-% The error message when an illegal definition is attempted.
-% \begin{macrocode}
-\gdef\RS@notdefinable{%
- \PackageError{\RS@pkgname}{%
- Command \@backslashchar\reserved@a\space
- already defined.\MessageBreak
- Or name \@backslashchar\@qend... illegal.\MessageBreak
- It can not be redefined by the \@backslashchar newref%
- }{%
- If \@backslashchar\reserved@a\space is not important\MessageBreak
- then \protect\let\@backslashchar\reserved@a%
- =\protect\relax,\MessageBreak
- else use a different \@backslashchar newref.}%
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\RS@setbool}
-% The command\footnote{Taken from the \pkg{ifthen} package.}
-% \cmd{\RS@setbool}\marg{conditional}\marg{true/false}
-% sets the \meta{conditional} to |true| or |false|.
-% \begin{Itabb}
-% Usage:~\=
-% \cmd{\RS@setbool}|{RSplural}{false}|\quad\=$\rightarrow$\quad
-% |\RSpluralfalse|\\
-% \>\cmd{\RS@setbool}|{RSplural}{true}|\quad\>$\rightarrow$\quad
-% |\RSpluraltrue|
-% \end{Itabb}
-%
-% \begin{macrocode}
-\newcommand*{\RS@setbool}[2]{%
- \lowercase{\def\@tempa{#2}}%
- \@ifundefined{@tempswa\@tempa}%
- {\PackageError{\RS@pkgname}%
- {You can only set the option to `true' or `false'}\@ehc}%
- {\csname#1\@tempa\endcsname}}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{First character case changes}
-%
-% \begin{macro}{\RS@firstcap}
-% This macro\footnote{Posted by Dan Luecking on c.t.t.} change the
-% first character of a string to uppercase and returns the result
-% in \cmd{\RS@cap}.
-% \begin{Ipara}
-% Usage:~|\RS@fistcap xxxx\@nil| then |\RS@cap| $\rightarrow$ |Xxxx|
-% \end{Ipara}
-% \begin{macrocode}
-\def\RS@firstcap#1#2\@nil{%
- \iffalse{\fi
- \uppercase{\edef\RS@cap{\iffalse}\fi#1}#2}}%
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \subsection{Reference building commands}
-%
-% \begin{macro}{\ifRS@keyactive}
-% \changes{v0.4}{2010/10/21}{Add \opt{nokeyprefix} to turn of the key prefix}
-% We need to peek into the options list for the \opt{nokeyprefix} option
-% before the options are processed to find out if the key prefix must be
-% included in the |\|\meta{key}|label| command. Make \opt{nokeyprefix}
-% not used afterwards.
-% \begin{macrocode}
-\newif\ifRS@keyactive
-\@ifpackagewith{\@currname}{nokeyprefix}%
- {\RS@keyactivefalse}%
- {\RS@keyactivetrue}
-\DeclareOption{nokeyprefix}{\OptionNotUsed}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\ifRSstar}
-% \begin{macro}{\ifRSnameon}
-% \begin{macro}{\ifRScapname}
-% \begin{macro}{\ifRSplural}
-% \begin{macro}{\ifRSlsttwo}
-% \changes{v0.4}{2010/10/21}{Add \cmd{\ifRSlsttwo} test for list containing only two parameter}
-% The |\if| conditional values that are set by the reference commands.
-% These values can be accessed by user defined key-values.
-% \begin{macrocode}
-\newif\ifRSstar\RSstarfalse
-\newif\ifRSnameon\RSnameontrue
-\newif\ifRScapname\RScapnamefalse
-\newif\ifRSplural\RSpluralfalse
-\newif\ifRSlsttwo\RSlsttwofalse
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-%
-% \begin{macro}{\newref}
-% The main user interface for template setup. It take the |#1| or
-% \meta{key} parameter and make it lowercase before passing it on to
-% \cmd{\RS@newref}.
-%
-%
-% \begin{macrocode}
-\newcommand*{\newref}[1]{%
- \lowercase{\def\RS@tempa{#1}}%
- \expandafter\RS@newref\expandafter{\RS@tempa}}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\RS@newref}
-% \changes{v0.4}{2010/10/21}{Ad \texttt{lsttwotxt} option}
-% This command configures a new template.
-% \begin{macrocode}
-\newcommand*{\RS@newref}[2]{%
-% \end{macrocode}
-% \bNP[2.0]\noindent Clears an existing template before defining a new one.\eNP
-% \begin{macrocode}
- \RS@clearref{#1}%
-% \end{macrocode}
-% \bNP[2.0]\noindent Create |\ifRS@|\meta{key}|vref| conditional \eNP
-% \begin{macrocode}
-% \expandafter\newif\csname ifRS@#1vref\endcsname%
-% \end{macrocode}
-% \bNP[2.0]\noindent Creates a series of key-values for every template
-% that stores the setup for the specific template.\eNP
-% \begin{macrocode}
- \ifRS@keyactive
- \define@key{RS@#1}{key}[#1:]{\RS@namedef{RS@#1@key}{##1}}%
- \else
- \define@key{RS@#1}{key}[]{\RS@namedef{RS@#1@key}{##1}}%
- \fi
- \define@key{RS@#1}{s}[true]{\RS@setbool{RSplural}{##1}}%
- \define@key{RS@#1}{name}[]{\RS@namedef{RS@#1@name}{##1}}%
- \define@key{RS@#1}{names}[]{\RS@namedef{RS@#1@names}{##1}}%
- \define@key{RS@#1}{Name}[]{\RS@namedef{RS@#1@Name}{##1}}%
- \define@key{RS@#1}{Names}[]{\RS@namedef{RS@#1@Names}{##1}}%
- \define@key{RS@#1}{rngtxt}[\space to~]{\RS@namedef{RS@#1@rngtxt}{##1}}%
- \define@key{RS@#1}{lsttwotxt}[\space and~]{\RS@namedef{RS@#1@lsttwotxt}{##1}}%
- \define@key{RS@#1}{lsttxt}[\space and~]{\RS@namedef{RS@#1@lsttxt}{##1}}%
- \define@key{RS@#1}{refcmd}[\ref{####1}]{\RS@namedef{RS@#1@rcmd}####1{##1}}%
- \define@key{RS@#1}{xr}[]{\RS@namedef{RS@#1@xr}{##1}}%
- \define@key{RS@#1}{vref}[true]{\RS@namedef{RS@#1vref}{##1}}%
-% \end{macrocode}
-% \bNP[2.0]\noindent Set default key-value parameters.\eNP
-% \begin{macrocode}
- \RS@setkeys{RS@#1}{key,
- s=false,
- name,names,Name,Names,
- rngtxt,lsttwotxt,lsttxt,
- refcmd,
- xr,
- vref=false}%
-% \end{macrocode}
-% \bNP[2.0]\noindent Set key-values according to user definitions.\eNP
-% \begin{macrocode}
- \RS@setkeys{RS@#1}{#2}%
-% \end{macrocode}
-% \bNP[2.0]\noindent Build the reference commands.\eNP
-% \begin{macrocode}
- \RS@buildref{#1}%
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\RS@clearref}
-% Clear a reference template for redefinition. It check
-% if the template already exists and clear it if it does.
-%
-% \begin{macrocode}
-\newcommand*{\RS@clearref}[1]{%
- \RS@ifundefined{RS@#1@template}
- {\RS@namedef{RS@#1@template}{#1}%
- \PackageInfo{\RS@pkgname}%
- {New reference template \protect\newref{#1}}{}}
- {\PackageInfo{\RS@pkgname}%
- {Reference template \protect\newref{#1} redefined}{}
- \RS@firstcap#1\@nil
- \RS@removedef{#1key}%
- \RS@removedef{#1label}%
- \RS@removedef{#1ref}%
- \RS@removedef{\RS@cap ref}%
- \RS@removedef{#1rangeref}%
- \RS@removedef{\RS@cap rangeref}%
- \RS@removedef{#1pageref}%
- }%
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\RS@buildref}
-% Build the reference commands. See \tabref{refopt} for the list of
-% commands. The \cmd{\RS@buildref}\marg{key} build commands to
-% call \cmd{\RS@cmd}\marg{cmd}\marg{key}, for example:
-% \begin{Ipara}
-% \cmeta{key}|ref| \quad$\rightarrow$\quad
-% |{\RScapnamefalse\RS@cmd{ref}|\marg{key}|}|
-% \end{Ipara}
-% \changes{v0.2}{2003/07/30}{Remove robust def of \argcmd{{\rtp}}{label}}
-% \begin{macrocode}
-\newcommand*{\RS@buildref}[1]{%
- \RS@firstcap#1\@nil
- \RS@testednamedef{#1key}{\RS@nameuse{RS@#1@key}}
- \RS@testednamedef{#1label}##1{\label{\RS@nameuse{RS@#1@key}##1}}
- \RS@testedrobustnamedef{#1ref}{\RScapnamefalse\RS@cmd{ref}{#1}}
- \RS@testedrobustnamedef{\RS@cap ref}{\RScapnametrue\RS@cmd{ref}{#1}}
- \RS@testedrobustnamedef{#1rangeref}{\RScapnamefalse\RS@cmd{rangeref}{#1}}
- \RS@testedrobustnamedef{\RS@cap rangeref}{\RScapnametrue\RS@cmd{rangeref}{#1}}
- \RS@testedrobustnamedef{#1pageref}{\RScapnamefalse\RS@cmd{pageref}{#1}}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\RS@cmd}
-% \begin{macro}{\RS@@cmd}
-% The command \cmd{\RS@cmd}\marg{cmd}\marg{key} calls the final
-% reference formatting commands.
-% It checks for the starred form and set the conditionals
-% |\ifRSstar| and |\ifRSnameon| accordingly.
-% It also extracts the optional key-value list.
-% \begin{Itabb}
-% \hspace*{4.5cm}\=\kill
-% \cmd{\RS@cmd}|{ref}|\marg{key} \>$\rightarrow$\quad
-% |\RS@ref|\marg{key}\okeylst\\
-% \cmd{\RS@cmd}|{rangeref}|\marg{key} \>$\rightarrow$\quad
-% |\RS@rangeref|\marg{key}\okeylst\\
-% \cmd{\RS@cmd}|{pageref}|\marg{key} \>$\rightarrow$\quad
-% |\RS@pageref|\marg{key}\okeylst
-% \end{Itabb}
-% \begin{macrocode}
-\newcommand*{\RS@cmd}[2]{%
- \@ifstar{\RSstartrue\RSnameonfalse\RS@@cmd{#1}{#2}}%
- {\RSstarfalse\RSnameontrue\RS@@cmd{#1}{#2}}}
-% \end{macrocode}
-% \begin{macrocode}
-\newcommand*{\RS@@cmd}[2]{%
- \@ifnextchar[%
- {\RS@nameuse{RS@#1}{#2}}%
- {\RS@nameuse{RS@#1}{#2}[]}}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-% \subsection{Reference formatting commands}
-%
-% \begin{macro}{\RS@ref}
-% \changes{v0.5}{2010/11/02}{Add \cmd{\@safe@activestrue} to avoid active chars is ref list}
-% \begin{macro}{\RS@@ref}
-% \begin{macro}{\RS@@@ref}
-% \changes{v0.4}{2010/10/21}{Add \cmd{\ifRSlsttwo} test for list containing only two parameter}
-% The command \cmd{\RS@ref}\marg{key}\okeylst\marg{label\_lst}
-% typeset the references to the comma-separated reference
-% label list according to the configuration for \meta{key}.
-%
-% First of all, remove all spaces for the reference label list.
-% \begin{macrocode}
-\def\RS@ref#1[#2]#3{%
- \begingroup
- \RS@setkeys{RS@#1}{#2}%
- \@safe@activestrue%
- \edef\RS@tmpa{\zap@space#3 \@empty}%
- \@safe@activesfalse%
- \edef\RS@tmpa{\noexpand\RS@@ref{#1} \RS@tmpa,\relax\noexpand\@eolst}%
- \RS@tmpa%
- \endgroup}
-% \end{macrocode}
-% \end{macro}
-% Check if there is a single or multiple references in the
-% reference label list. If a single reference label then use the
-% form set by the \opt{s} key-value. If multiple reference labels
-% the use the plural form of the name prefix.\footnote{
-% The list of reference commands came from the \pkg{typedref} package.}
-%
-% \begin{macrocode}
-\def\RS@@ref#1 #2,#3\@eolst{%
- \ifx\relax#3\relax
- \RS@makename{#1}%
- \RS@makeref{#1}{#2}%
- \RS@makevpageref{#1}{#2}%
- \else
- \RSpluraltrue%
- \RS@makename{#1}%
- \RS@makeref{#1}{#2}%
- \RS@makevpageref{#1}{#2}%
- \RSnameonfalse%
- \RSlsttwotrue%
- \RS@@@ref{#1} #3\@eolst%
- \fi}
-% \end{macrocode}
-% \end{macro}
-% For more than one reference in the reference list, typeset the
-% rest of the references.
-% \begin{macrocode}
-\def\RS@@@ref#1 #2,#3\@eolst{%
- \ifx\relax#3\relax
- \ifRSlsttwo
- \RS@nameuse{RS@#1@lsttwotxt}%
- \else
- \RS@nameuse{RS@#1@lsttxt}%
- \fi
- \RS@makeref{#1}{#2}%
- \RS@makevpageref{#1}{#2}%
- \else
- \RSlsttwofalse%
- \unskip,\space%
- \RS@makeref{#1}{#2}%
- \RS@makevpageref{#1}{#2}%
- \RS@@@ref{#1} #3\@eolst%
- \fi}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\RS@rangeref}
-% The command \cmd{\RS@rangeref}\marg{key}\okeylst\marg{lbl1}\marg{lbl2}
-% typeset the references as a range.
-% \begin{macrocode}
-\def\RS@rangeref#1[#2]#3#4{%
- \begingroup
- \RS@setkeys{RS@#1}{#2}%
- \RSpluraltrue%
- \RS@makename{#1}%
- \RS@makeref{#1}{#3}%
- \RS@nameuse{RS@#1@rngtxt}%
- \RSnameonfalse%
- \RS@makeref{#1}{#4}%
- \RS@makevpagerefrange{#1}{#3}{#4}%
- \endgroup}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\RS@pageref}
-% The command \cmd{\RS@pageref}\marg{key}\okeylst\marg{lbl} type
-% the page where \marg{lbl} was defined.
-% \begin{macrocode}
-\def\RS@pageref#1[#2]#3{%
- \begingroup%
- \RS@setkeys{RS@#1}{#2}%
- \RS@ifvref{#1}%
- {\mbox{}\vpageref*{\RS@lbl{#1}{#3}}}%
- {\reftextfaraway{\RS@lbl{#1}{#3}}}%
- {\pageref{\RS@lbl{#1}{#3}}}%
- \endgroup}
-% \end{macrocode}
-% \end{macro}
-%
-% \changes{v0.2}{2003/07/30}{Remove redundant \cmd{\RS@label}}
-%
-% \begin{macrocode}
-\newcommand*{\RS@true}{true}
-\newcommand*{\RS@false}{false}
-\newcommand*{\RS@far}{far}
-% \end{macrocode}
-%
-% \begin{macro}{\RS@ifvref}
-% The command \cmd{\RS@ifvref}\marg{key}\marg{true}\marg{faraway}\marg{false}
-% executes the contents of \meta{true} if the \opt{vref} option for
-% the \meta{key} reference type is true and \meta{false} otherwise.
-% \begin{macrocode}
-\newcommand{\RS@ifvref}[4]{%
- \edef\RS@tempa{\RS@nameuse{RS@#1vref}}%
- \ifx\RS@tempa\RS@true\relax
- #2%
- \else\ifx\RS@tempa\RS@far\relax
- #3%
- \else\ifx\RS@tempa\RS@false\relax
- #4%
- \else
- \PackageError{\RS@pkgname}%
- {You can only set the vref option to `true', `far' or `false'}\@ehc
- \fi\fi\fi}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\RS@makename}
-% The command \cmd{\RS@makename}\marg{key} build the prefix
-% to the reference commands.
-% \begin{macrocode}
-\newcommand{\RS@makename}[1]{%
- \ifRSstar\else\ifRSnameon
- \ifRSplural
- \ifRScapname
- \RS@nameuse{RS@#1@Names}%
- \else
- \RS@nameuse{RS@#1@names}%
- \fi
- \else
- \ifRScapname
- \RS@nameuse{RS@#1@Name}%
- \else
- \RS@nameuse{RS@#1@name}%
- \fi
- \fi
- \fi\fi
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\RS@lbl}
-% This command builds the full label string for the \cmd{\ref}
-% command.
-% \begin{Ipara}
-% \cmd{\RS@lbl}\marg{key}\marg{label} \quad$\rightarrow$\quad
-% |{|\meta{xr_key}\meta{key}\meta{label}|}|
-% \end{Ipara}
-% \begin{macrocode}
-\newcommand*{\RS@lbl}[2]{%
- \RS@nameuse{RS@#1@xr}\RS@nameuse{RS@#1@key}#2%
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\RS@makeref}
-% The command \cmd{\RS@makeref}\marg{key}\marg{label} formats
-% the \cmd{\ref} output
-% \begin{Ipara}
-% \cmd{\RS@makeref}\marg{key}\marg{label} \quad$\rightarrow$\quad
-% \cmeta{rcmd}|{\ref{|\meta{xr_key}\meta{key}\meta{label}|}}|
-% \end{Ipara}
-% \begin{macrocode}
-\newcommand{\RS@makeref}[2]{%
- \RS@nameuse{RS@#1@rcmd}{\RS@lbl{#1}{#2}}%
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\RS@makevpageref}
-% The command \cmd{\RS@makevpageref}\marg{key}\marg{label} adds the
-% \pkg{varioref} page reference if the \opt{vref} option is true.
-% \begin{macrocode}
-\newcommand{\RS@makevpageref}[2]{%
- \RS@ifvref{#1}%
- {\vpageref[\unskip]{\RS@lbl{#1}{#2}}}%
- { \reftextfaraway{\RS@lbl{#1}{#2}}}%
- {}%
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\RS@makevpagerefrange}
-% The command \cmd{\RS@makevpagerefrange}\marg{key}\marg{lbl1}\marg{lbl1}
-% adds the \pkg{varioref} page range reference if the \opt{vref}
-% option is true.
-% \begin{macrocode}
-\newcommand{\RS@makevpagerefrange}[3]{%
- \RS@ifvref{#1}%
- {\space\vpagerefrange[\unskip]{\RS@lbl{#1}{#2}}{\RS@lbl{#1}{#3}}}%
- {\space\vpagerefrange[\unskip]{\RS@lbl{#1}{#2}}{\RS@lbl{#1}{#3}}}%
- {}%
- }
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{\pkg{varioref} command predefinitions}
-%
-% \begin{macrocode}
-\AtBeginDocument{%
- \providecommand{\vpageref}{%
- \PackageError{\RS@pkgname}%
- {The vref option used, but varioref.sty not loaded.}%
- {Load varioref.sty}}
- \providecommand{\reftextfaraway}{%
- \PackageError{\RS@pkgname}%
- {The vref=far option used, but varioref.sty not loaded.}%
- {Load varioref.sty}}
- \providecommand{\vpagerefrange}{%
- \PackageError{\RS@pkgname}%
- {The vref option used, but varioref.sty not loaded.}%
- {Load varioref.sty}}
- }
-% \end{macrocode}
-%
-%
-% \subsection{Support for language option inclusions in config file}
-%
-% \begin{macro}{\RSaddto}
-% \changes{v0.2}{2003/07/30}{Rename \cmd{\RS@addto} to \cmd{\RSaddto}}
-% Command from the \pkg{varioref} package is used to add
-% language definitions to the |\extras|\meta{language} token
-% for \pkg{babel}.
-% \begin{macrocode}
-\def\RSaddto#1#2{%
- #2%
- \@temptokena{#2}%
- \ifx#1\relax
- \let#1\@empty
- \fi
- \ifx#1\undefined
- \edef#1{\the\@temptokena}%
- \else
- \toks@\expandafter{#1}%
- \edef#1{\the\toks@\the\@temptokena}%
- \fi
- \@temptokena{}\toks@\@temptokena}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DeclareLangOpt}
-% \changes{v0.5}{2010/11/02}{Add \cmd{\extras}\meta{language} to beginning of document.}
-% Command to declare a language option and add
-% language definitions to the |\extras|\meta{language} token
-% for \pkg{babel}.
-% \begin{macrocode}
-\def\DeclareLangOpt#1#2{%
- \edef\RS@tempa{\expandafter\@gobble\string#2}%
- \RS@ifundefined{\RS@tempa}%
- {\PackageError{\RS@pkgname}{%
- Unknown definitions \@backslashchar\RS@tempa\MessageBreak
- for language option `#1'}{}}%
- {\DeclareOption{#1}{%
- \AtBeginDocument{\expandafter\RSaddto\csname extras#1\endcsname #2}}}%
- }
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \subsection{Configuration files}
-%
-% \begin{macro}{\RS@cfgfile,\RS@reffile}
-% \changes{v0.4}{2010/10/21}{Ad alternative definition file \cmd{refstyle.def}}
-% Define the config file and alternate definition file names.
-% \begin{macrocode}
-\newcommand*{\RS@cfgfile}{refstyle.cfg}
-\newcommand*{\RS@reffile}{refstyle.def}
-% \end{macrocode}
-% \end{macro}
-%
-% We need to peek into the options list before the
-% options are processed to find out if the config
-% file is to be loaded or not. The config file can
-% contain options and must be loaded before
-% \cmd{\ProcessOptions}. Make \opt{noconfig} not used
-% afterwards.
-%
-% We first test for a local config file \file{refstyle.def}
-% and then for the global config file \file{refstyle.cfg}.
-% \begin{macrocode}
-\@ifpackagewith{\@currname}{noconfig}%
- {\PackageInfo{\RS@pkgname}{No config file loaded}}%
- {\InputIfFileExists{\RS@reffile}%
- {\PackageInfo{\RS@pkgname}{Local config file \RS@reffile\space used}}
- {\InputIfFileExists{\RS@cfgfile}%
- {\PackageInfo{\RS@pkgname}{Config file \RS@cfgfile\space used}}%
- {\PackageInfo{\RS@pkgname}{No config file found}}}}
-% \end{macrocode}
-%
-% \begin{macrocode}
-\DeclareOption{noconfig}{\OptionNotUsed}%
-% \end{macrocode}
-%
-% Process the options, including options in config file.
-% \begin{macrocode}
-\ProcessOptions*\relax
-% \end{macrocode}
-%
-% The end of this package.
-% \begin{macrocode}
-%</pkg>
-% \end{macrocode}
-%
-% \Finale
-\endinput
+% \iffalse
+%
+% refstyle.dtx
+% Copyright (C) 2002--2024 Danie Els
+%
+% -------------------------------------------------------------------
+% The refstyle package
+% for the formatting of references
+% -------------------------------------------------------------------
+% This work may be distributed and/or modified under the conditions
+% of the LaTeX Project Public License, either version 1.3c 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.3c or later is part of all distributions of LaTeX
+% version 2008/12/01 or later.
+%
+% This work has the LPPL maintenance status 'maintained'.
+%
+% This Current Maintainer of this work is Danie Els (dnjels@gmail.com)
+%
+% This package consists of the files: refstyle.dtx
+% refconfig.dtx
+% refstyle.ins
+% and the derived files: refstyle.sty
+% refstyle.cfg
+% -------------------------------------------------------------------
+%
+%<*pkg>
+\newcommand*{\RefstyleFileDate}{2024/01/31}
+\newcommand*{\RefstyleFileVersion}{v0.6}
+%</pkg>
+%
+%
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\let\RefstyleFileDate\relax
+\let\RefstyleFileVersion\relax
+\usepackage{amsmath}
+\usepackage{amsfonts}
+ \DeclareMathSymbol{\square} {\mathord}{AMSa}{"03}
+ \DeclareMathSymbol{\blacksquare}{\mathord}{AMSa}{"04}
+\usepackage{calc}
+\usepackage{rotating}
+\usepackage[rounded]{syntax}
+\usepackage{varioref}
+\usepackage{refstyle}
+\usepackage{color}
+ \definecolor{hrefcol}{rgb}{0.00,0.00,1.00}
+\usepackage[pdfpagelabels]{hyperref}
+\hypersetup{breaklinks=true,
+ linktocpage,
+ pdfstartview=FitH,
+ colorlinks = true,
+ linkcolor = hrefcol,
+ urlcolor = hrefcol,
+ menucolor = hrefcol,
+ filecolor = hrefcol,
+ citecolor = hrefcol,
+ linkbordercolor = {0.8 0.8 0.8},
+ urlbordercolor = {0.8 0.8 0.8},
+ menubordercolor = {0.8 0.8 0.8},
+ filebordercolor = {0.8 0.8 0.8},
+ runbordercolor = {0.8 0.8 0.8},
+ citebordercolor = {0.8 0.8 0.8},
+ pdftitle={refstyle},
+ pdfauthor={Danie Els}}
+
+%---- macrocode env changes -------------------------------
+
+\setlength{\MacroIndent}{1.5em}
+
+%---- Scratches -------------------------------------------
+
+\newlength{\tdima}
+\newsavebox{\tboxa}
+
+%---- Spacing ---------------------------------------------
+
+\newlength{\myskip}
+\setlength{\myskip}{\topsep}
+ \addtolength{\myskip}{\parskip}
+ \addtolength{\myskip}{\partopsep}
+\newcommand*{\blankline}{\par\addvspace{\myskip}}
+\newlength{\mytab}
+\setlength{\mytab}{2\parindent}
+\newcommand{\tab}{\hspace*{\mytab}}
+
+%---- Indented environments -------------------------------
+
+\newenvironment{IndentPara}[1][1]
+ {\list{}{\setlength{\leftmargin}{#1\mytab}%
+ \setlength{\labelwidth}{0pt}%
+ \setlength{\labelsep}{0pt}%
+ \setlength{\itemindent}{\parindent}%
+ \setlength{\listparindent}{\parindent}%
+ }\item[]}%
+ {\endlist}
+\newenvironment{IndentParaX}[1][1]
+ {\list{}{\setlength{\leftmargin}{#1\mytab}%
+ \setlength{\topsep}{0pt}%
+ \setlength{\partopsep}{0pt}%
+ \setlength{\labelwidth}{0pt}%
+ \setlength{\labelsep}{0pt}%
+ \setlength{\itemindent}{\parindent}%
+ \setlength{\listparindent}{\parindent}%
+ }\item[]}%
+ {\endlist}
+\newcommand\bNP{\begin{IndentParaX}}
+\newcommand\eNP{\end{IndentParaX}}
+\newenvironment{Ipara}[1][\small]%
+ {\begin{IndentPara}\noindent#1\ignorespaces}%
+ {\end{IndentPara}}
+\newenvironment{Itabb}[1][\small]%
+ {\begin{IndentPara}#1\ignorespaces\begin{tabbing}\ignorespaces}%
+ {\end{tabbing}\end{IndentPara}}
+
+%---- Ruled & colored minipage ----------------------------
+
+\definecolor{shadecolor}{gray}{0.9}
+
+\newenvironment{fminipage}[1][\linewidth]
+ {\setlength{\tdima}{#1-2\fboxsep-2\fboxrule}%
+ \begin{lrbox}{\tboxa}\begin{minipage}{\tdima}}%
+ {\end{minipage}\end{lrbox}\noindent\fbox{\usebox{\tboxa}}}
+\newenvironment{cminipage}[1][\linewidth]
+ {\setlength{\tdima}{#1-2\fboxsep-2\fboxrule}%
+ \begin{lrbox}{\tboxa}\begin{minipage}{\tdima}}%
+ {\end{minipage}\end{lrbox}%
+ \noindent\colorbox{shadecolor}{\usebox{\tboxa}}}
+
+%---- Additional documenting commands ---------------------
+
+\def\lcbrack{\symbol{`\{}}
+\def\rcbrack{\symbol{`\}}}
+\makeatletter
+\def\meta@font@select{\normalfont\slshape}
+\makeatother
+\DeclareRobustCommand{\cmeta}[1]{%<- \<xxx>
+ \texttt{\bslash}\meta{#1}}
+\DeclareRobustCommand{\cmarg}[1]{%<- {\<xxx>}
+ \texttt{\lcbrack}\cmeta{#1}\texttt{\rcbrack}}
+\DeclareRobustCommand{\coarg}[1]{%<- [\<xxx>]
+ \texttt{[}\cmeta{#1}\texttt{]}}
+\DeclareRobustCommand{\argcmd}[2]{%<- \<xxx>yyy
+ \cmeta{#1}\texttt{#2}}
+\newcommand{\rmeta}[3][]{%
+ \texttt{\lcbrack#1}\meta{#2}\texttt{#3\rcbrack}}
+\newcommand{\refmeta}[3][]{\cmd{\brref}\rmeta[#1]{#2}{#3}}
+
+\newcommand*{\file}[1]{\texttt{#1}}
+\newcommand*{\pkg}[1]{\textsf{#1}}
+\newcommand*{\env}[1]{\texttt{#1}}
+\newcommand*{\opt}[1]{\texorpdfstring{\normalfont\texttt{\slshape#1}}{#1}}
+\newcommand*{\RS}{\pkg{refstyle}}
+\newcommand*{\RScfg}{\file{refstyle.cfg}}
+\newcommand*{\rtp}{type}
+\newcommand*{\Rtp}{Type}
+\newcommand*{\okeylst}{\oarg{key\_lst}}
+\newcommand*{\mkeylst}{\marg{key\_lst}}
+
+%---- Special eq tag command ------------------------------
+
+\def\spestag#1{\stepcounter{equation}%
+ \gdef\tagextra##1{%
+ \makebox[0pt][l]{\small\quad%
+ \cmd{\eqlabel}\texttt{\lcbrack##1\rcbrack}}%
+ \gdef\tagextra####1{}}%
+ \tag{\theequation\tagextra{#1}}\eqlabel{#1}}
+
+%---- other stuff -----------------------------------------
+
+\newcommand*{\ArTab}{\>\quad$\rightarrow$\quad}
+
+%----------------------------------------------------------
+
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\setlength\hfuzz{15pt}
+\hbadness=7000
+\begin{document}
+ \DocInput{refstyle.dtx}
+\end{document}
+
+%</driver>
+% \fi
+%
+% \CheckSum{552}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \changes{v0.0}{2002/12/01}{Initial version}
+% \changes{v0.1}{2003/04/01}{First stable version}
+% \changes{v0.2}{2003/07/30}{First updated version}
+% \changes{v0.3}{2006/09/09}{Documentation update}
+% \changes{v0.4}{2010/10/21}{Documentation update}
+% \changes{v0.4}{2010/10/21}{Add \texttt{nokeyprefix} option}
+% \changes{v0.5}{2010/11/02}{Documentation update}
+%
+% \DoNotIndex{
+% \@backslashchar, \@carcube, \@ehc, \@empty, \@firstoftwo,
+% \@ifnextchar, \@ifpackageloaded, \@ifstar, \@ifundefined, \@nil,
+% \@qend, \@qrelax, \@secondoftwo, \@tempa, \@undefined,
+% \AtEndOfPackage, \begingroup, \csname, \CurrentOption,
+% \DeclareOption, \def, \edef, \else, \endcsname, \endgroup,
+% \expandafter, \fi, \gdef, \iffalse, \ifx, \InputIfFileExists,
+% \let, \long, \lowercase, \MakeLowercase, \mbox, \MessageBreak,
+% \NeedsTeXFormat, \newcommand, \newif, \noexpand, \PackageError, \PackageInfo,
+% \PassOptionsToPackage, \RS@pkgname, \ProcessOptions, \protect,
+% \providecommand, \ProvidesPackage, \relax, \renewcommand,
+% \RequirePackage, \reserved@a, \reserved@b, \RS@tmpa,
+% \RS@tmpb, \S, \RS@setkeys, \space, \string, \textsc, \textup,
+% \unrestored@protected@xdef, \unskip, \uppercase,
+% \zap@space}
+%
+%^^A==== Titling ==========================================
+% \GetFileInfo{refstyle.sty}
+% \title{\vspace*{-1cm}
+% The \RS\ package\thanks{This file has version number
+% \fileversion, last revised
+% \filedate.}}
+% \author{Danie Els\\[1ex]
+% \normalsize e-mail: \texttt{\href{mailto:dnjels@gmail.com}%
+% {dnjels@gmail.com}}}
+% \date{\filedate}
+% \maketitle
+% \begin{center}
+% \textbf{Overview of the \RS\ package}
+% \end{center}
+% \noindent
+% When writing complex documents, often a large number of commands
+% for different type of references are defined, for example:
+% \begin{Ipara}
+% |\newcommand*{\eqref}[1]{eqn~(\ref{#1})}|\\
+% |\newcommand*{\Eqref}[1]{Equation~(\ref{#1})}|
+% \end{Ipara}
+% The \RS\ package was developed to automate this process. The
+% package provides a user interface to define sets of reference
+% and label commands for each referable object such as an equation
+% or a table, etc. When you declare, for example, a set of
+% reference commands to an equation:
+% \begin{Ipara}
+% \cmd{\newref}|{eq}|\mkeylst\
+% \end{Ipara}
+% \noindent
+% a series of commands of the format \cmd{\eq...} and \cmd{\Eq...}
+% are produced. The configuration options are set with a list of
+% key-values. Prefixes, inserts and other options for all the
+% different perturbations such as capitalized first letters,
+% singular and plural from, etc.\ can be defined. The
+% configuration can be changed temporarily with an optional list
+% of key-values when the commands are used. A direct interface to
+% the \pkg{varioref} package is also provided.
+% This enables compact reference formats:
+% \begin{Itabb}
+% \hspace{14em}\=\kill
+% |\eqref{e1} ...| \ArTab\eqref{e1} ...\\
+% |\Eqref[vref]{e1} ...| \ArTab\Eqref[vref]{e1} ...\\
+% |\eqref[s]{e1} and ...| \ArTab\eqref[s]{e1} and ...\\
+% |\eqref[name=eq.~]{e1} ...| \ArTab\eqref[name=eq.~]{e1} ...
+% \end{Itabb}
+% A range or a list of references can also be referred to in a
+% consistent way.
+% \begin{Itabb}
+% \hspace{14em}\=\kill
+% |\eqref{e1,e2,e3} ...| \ArTab\eqref{e1,e2,e3} ...\\
+% |\eqrangeref[vref]{e1}{e3} ...| \ArTab\eqrangeref[vref]{e1}{e3} ...
+% \end{Itabb}
+%
+% Templates for the different reference types and different
+% languages can be loaded with a configuring file.
+%
+% The package is aimed at large projects, enabling a consistent
+% way of producing references throughout a project. Enough
+% flexibility is provided to make local changes to a single
+% reference. For large projects such as a series of books or a
+% multi volume thesis, written as freestanding documents, a
+% facility is provided to interface to the \pkg{xr} package for
+% external document references.
+%
+% \medskip
+%
+% \begin{center}
+% \begin{fminipage}[.6\textwidth]
+% See also \pkg{refconfig.pdf} for setup and examples.
+% \end{fminipage}
+% \end{center}
+
+% \clearpage
+%
+% \tableofcontents
+% \clearpage
+%
+%
+% \section{Loading the \RS\ Package}
+%
+% \subsection{Document preamble}
+%
+% The \RS\ package is loaded in the preamble of the document:
+% \begin{enumerate}
+% \item[(a)] With a config file with \pkg{babel} language support
+% \begin{Ipara}
+% |\usepackage{varioref}[2001/09/04]%|~
+% ${\leftarrow}$ To use the \opt{vref} option\\
+% |\usepackage{refstyle}|
+% \end{Ipara}
+% When the package is loaded, it first searchers for a local user defined
+% configuration file \file{refstyle.def}. If it is not available it
+% looks for the global default config file \RScfg\ provided with this package.
+% These configuration files are loaded before the package options are precess.
+% It can therefore contain option commands using globally defined language
+% options and can interface to \pkg{babel} for language changes. The macro
+% \begin{Ipara}
+% |\DeclareLangOpt{|\meta{language}|}{|\meta{definitions}|}|
+% \end{Ipara}
+% is provided to declare the package option \meta{language} and add
+% \meta{definitions} to the |\extras|\meta{language} token for \pkg{babel}.
+% It can only be used inside \RScfg\ or \file{refstyle.def}.
+%
+% \item[(b)]
+% Or with an existing configuration with language support and addition
+% of your own extensions
+% \begin{Ipara}
+% |\documentclass[norwegian]{article}|\\
+% |\usepackage{babel} |\\
+% |\usepackage{refstyle} |\\
+% |\RSaddto{\RSnorwegian}{% |\\
+% | \def\RSthmtxt{teorem~}% |\\
+% | \def\RSthmstxt{teorem~}% |\\
+% | \def\RSThmtxt{Teorem~}% |\\
+% | \def\RSThmstxt{Teorem~}} |\\
+% |\newref{thm}{ |\\
+% | name = \RSthmtxt, |\\
+% | names = \RSthmstxt, |\\
+% | Name = \RSThmtxt, |\\
+% | Names = \RSThmstxt, |\\
+% | rngtxt = \RSrngtxt, |\\
+% | lsttxt = \RSlsttxt, |\\
+% | lsttwotxt = \RSlsttwotxt} |
+% \end{Ipara}
+%
+% \item[(c)]
+% Or without any configuration file, but by declaring your own
+% reference commands in the preamble.
+% \begin{Itabb}
+% \cmd{\usepackage}|[noconfig]{refstyle}|\\
+% \qquad\cmd{\newref}\marg{reftype$_{\,1}$}\mkeylst \\
+% \qquad\cmd{\newref}\marg{reftype$_{\,2}$}\mkeylst\\
+% \tab$\vdots$
+% \end{Itabb}
+%
+% \item[(d)]
+% Or with your own configuration file (without babel language support) for a specific project:
+% \begin{Itabb}
+% |\usepackage[noconfig]{refstyle}|\\
+% |\input{thisproject.ref}|
+% \end{Itabb}
+%
+% \end{enumerate}
+%
+% \subsection{Package options}
+%
+% \begin{description}
+% \item[\opt{noconfig}] Neither of the user supplied \file{refstyle.def} config
+% file or \file{refstyle.cfg} the config file supplied with this package
+% are loaded. The user must declare his or her own definitions and templates.
+% Note that these definitions are not passed on to \pkg{babel}'s language
+% changing mechanisms.
+%
+% \item[\opt{nokeyprefix}] Custom labeling commands \argcmd{\rtp}{label} are generated
+% by \pkg{refstyle} for every \meta{type} definition. It defaults to
+% \begin{Itabb}
+% \hspace{5em}\=hspace{5em}\=\kill
+% \argcmd{\rtp}{label}|{abc}|
+% \>\>~ $\rightarrow$ \cmd{\label}\rmeta{type\,:\,}{abc}
+% \end{Itabb}
+% With the \opt{nokeyprefix} option, the prefix is turned of and the
+% labeling commands defaults to
+% \begin{Itabb}
+% \hspace{5em}\=hspace{5em}\=\kill
+% \argcmd{\rtp}{label}|{abc}|
+% \>\>~ $\rightarrow$ \cmd{\label}|{abc}|
+% \end{Itabb}
+% This is useful for old documents with existing labeling commands or
+% where the user prefer not to use the \argcmd{\rtp}{label} commands.
+%
+%
+% \end{description}
+%
+%
+%
+%
+% \subsection{Companion packages}
+%
+% The \RS\ packages is intended for large projects. It is therefore
+% important that it works together with, or has direct interfaces
+% to the following packages:
+% \begin{description}
+% \item[\pkg{varioref}:\footnotemark]
+% \footnotetext{\pkg{varioref} v1.3c, 2001/09/04 or later,
+% because the starred versions of the commands
+% are used.}
+% Produce sophisticated page and page range references.
+%
+% \item[\pkg{hyperref}:\footnotemark]
+% \footnotetext{\pkg{hyperref} v6.72r, 2002/05/27 or later,
+% where a bug for interference with
+% \pkg{varioref} was fixed.}
+% To establish hyper links between the references and the
+% labels.
+%
+% \item[\pkg{xr, xr-hyper}:]
+% To establish references to external documents.
+%
+% \item[\pkg{showkeys}:]
+% To show all the labels and references. This is very useful
+% to find labels in large documents.
+% \end{description}
+%
+% \clearpage
+% \section{User Interface}
+%
+% The \RS\ package has one configuring command, \DescribeMacro{\newref}
+% \cmd{\newref}, that internally creates a series of label and
+% reference commands:
+% \blankline
+%
+% \begin{cminipage}[\linewidth]
+% \newcommand*{\crsi}{\smash{\rule[0pt]{.4pt}{1.25em}\rule[.5ex]{1.5em}{.4pt}}}^^A
+% \newcommand*{\crsl}{\smash{\rule[.5ex]{.4pt}{1.5em}\rule[.5ex]{1.5em}{.4pt}}}^^A
+% \begin{Itabb}
+% \hspace*{2em}\=\hspace{2em}\=\hspace{10em}\=\kill
+% \cmd{\newref}\marg{\rtp}\mkeylst\tab\mbox{}\\[.75ex]
+% \>\crsi \>\argcmd{{\rtp}}{key} \> Reference argument prefix \\[.75ex]
+% \>\crsl \>\argcmd{{\rtp}}{label} \> Custom label \\[.75ex]
+% \>\crsl \>\argcmd{{\rtp}}{ref} \> In text reference \\[.75ex]
+% \>\crsl \>\argcmd{{\Rtp}}{ref} \> Start of sentence reference \\[.75ex]
+% \>\crsl \>\argcmd{{\rtp}}{rangeref} \> In text range reference \\[.75ex]
+% \>\crsl \>\argcmd{{\Rtp}}{rangeref} \> Start of sentence range reference\quad\mbox{}\\[.75ex]
+% \>\crsl \>\argcmd{{\rtp}}{pageref} \> Page reference
+% \end{Itabb}
+% \end{cminipage}
+% \blankline
+%
+% \noindent
+% All the \cmeta{\rtp}... commands, excluding \argcmd{{\rtp}}{key}
+% and \argcmd{{\rtp}}{label} are robust.
+% All the options for the referencing commands are set with a
+% key-value list. \Tabref[vref=far]{refopt} gives a full list of all the
+% key-values and defaults.
+%
+% The \RS\ package do not redefine any internal \LaTeX\ commands and
+% depends only on the \cmd{\label}, \cmd{\ref}, \cmd{\pageref} and
+% the \pkg{varioref} commands.
+% The internally defined commands do not overwrite any
+% existing command with the same name, and an error results if a command
+% already exists. The exception is commands declared with a previous
+% \cmd{\newref} call, can be redefined by calling \cmd{\newref} again
+% with a new set of parameter.
+% If the \pkg{amsmath} package is loaded, and you define
+% \cmd{\newref}|{eq}| for references to equations, you need to
+% undefine \cmd{\eqref} before issuing \cmd{\newref} by
+% \begin{Ipara}
+% \cmd{\let}\cmd{\eqref}|=|\cmd{\relax}
+% \end{Ipara}
+%
+%
+% \section{Command Descriptions}
+%
+% The structure of the label and reference commands is given by the
+% syntax diagrams that follows. Examples are included for references
+% to equations, defined according to the template in
+% \RScfg\ with the
+% \cmd{\newref}|{eq}|\mkeylst. See also \secref{keyvals} for
+% explanations of the key-values.
+%
+% \subsection{The reference key}
+%
+% \begin{cminipage}[\linewidth]
+% \begin{syntdiag}
+% \tok{\argcmd{\rtp}{key}}
+% \end{syntdiag}
+% \end{cminipage}
+% \blankline
+% \noindent
+% The \argcmd{\rtp}{key} command returns the prefix added to the
+% argument of the label and the reference commands, for example:
+%
+% \begin{Itabb}
+% \hspace{10em}\=hspace{5em}\=\kill
+% \cmd{\newref}\marg{\rtp}|{}|
+% \>\>\argcmd{\rtp}{key} $\rightarrow$ \meta{type\,:\,}\\
+% \cmd{\newref}\marg{\rtp}|{key=xxx-}|
+% \>\>\argcmd{\rtp}{key} $\rightarrow$ |xxx-|
+% \end{Itabb}
+%
+% \noindent
+% The \argcmd{\rtp}{key} command is not a general command, but was
+% provided only as a link to the standard \LaTeX{} \cmd{\ref} and
+% \cmd{\pageref} commands:
+%
+% \begin{Itabb}
+% \hspace{10em}\=hspace{5em}\=\kill
+% \cmd{\label}|{|\argcmd{\rtp}{key}| abc}|
+% \>\>~ $\rightarrow$ \cmd{\label}\rmeta{type\,:\,}{abc}\\
+% \cmd{\ref}|{|\argcmd{\rtp}{key}| abc}|
+% \>\>~ $\rightarrow$ \cmd{\ref}\rmeta{type\,:\,}{abc}
+% \end{Itabb}
+% Note if the the \opt{nokeyprefix} option is active then the \argcmd{\rtp}{key}
+% is empty.
+%
+% \blankline
+% \noindent
+% \textbf{\slshape Examples:} equations
+% with \cmd{\newref}|{eq}|\mkeylst:
+%
+% \begin{Itabb}
+% \hspace*{18em}\=\kill
+% |\eqkey| \> \eqkey \\
+% |in eq.~\ref{\eqkey e1} ...| \>in eq.~\ref{\eqkey e1} ... \\
+% |on page \pageref{\eqkey e1} ...|\>on page \pageref{\eqkey e1} ... \\
+% |\vpageref*{\eqkey e1} ... | \>\vpageref*{\eqkey e1} ...
+% \end{Itabb}
+%
+% \subsection{Reference label}
+%
+% \begin{cminipage}[\linewidth]
+% \begin{syntdiag}
+% \tok{\argcmd{\rtp}{label}"{"<lbl>"}"}
+% \end{syntdiag}
+% \end{cminipage}
+% \blankline
+%
+% \noindent
+% The command \argcmd{\rtp}{label} prefix the reference
+% string in the \cmd{\label} with the string \meta{type\,:\,}, or its
+% redefinition with the \opt{key} option.
+%
+% \begin{Itabb}
+% \hspace{10em}\=hspace{5em}\=\kill
+% \argcmd{\rtp}{label}|{abc}|
+% \>\>~ $\rightarrow$ \cmd{\label}\rmeta{type\,:\,}{abc}
+% \end{Itabb}
+% \blankline
+%
+% \noindent
+% \textbf{\slshape Examples:}
+%
+% \begingroup
+% \begin{Ipara}
+% Let $z = x+\mathrm{i} y$ and $\alpha = \beta + \mathrm{i}
+% \gamma$, with $\mathrm{i}^2 = -1$, then
+% \begin{align}
+% &\mathrm{e}^z = \mathrm{e}^x \left(\cos y + \mathrm{i} \sin y \right)
+% \spestag{e1}\\
+% &z^\alpha = \mathrm{e}^{\alpha \ln z}
+% \spestag{e2}\\
+% \intertext{\Eqref{e1,e2} lead to the following interesting results:}
+% &\mathrm{e}^{\mathrm{i} \pi} + 1 = 0 \spestag{e3}\\
+% &\mathrm{i}^\mathrm{i} = \mathrm{e}^{-\pi/2}\spestag{e4}
+% \end{align}
+% \end{Ipara}
+% \endgroup
+%
+%
+% \subsection{Reference commands}
+%
+% \begin{cminipage}[1.05\textwidth]
+% \begin{syntdiag}
+% \tok{\argcmd{\rtp}{ref}}
+% \begin{stack}\\ \tok{$\ast$} \end{stack}
+% \begin{stack}\\ \tok{\okeylst} \end{stack}
+% "{"
+% \begin{rep} \tok{<lbl>} \\ ~,~ \end{rep}
+% "}"
+% \end{syntdiag}
+% \end{cminipage}
+% \smallskip
+%
+% \begin{cminipage}[1.05\textwidth]
+% \begin{syntdiag}
+% \tok{\argcmd{\Rtp}{ref}}
+% \begin{stack}\\ \tok{$\ast$} \end{stack}
+% \begin{stack}\\ \tok{\okeylst} \end{stack}
+% \tok{"{"}
+% \begin{rep} \tok{<lbl>} \\ ~,~ \end{rep}
+% \tok{"}"}
+% \end{syntdiag}
+% \end{cminipage}
+% \blankline
+% \noindent
+% The |*| optional form of the \argcmd{\rtp}{ref} and
+% \argcmd{\Rtp}{ref} commands eliminates the
+% name prefix. The |[s]| optional key-value argument is for the
+% plural form of the name prefix.
+% \blankline
+%
+% \noindent
+% \textbf{\slshape Examples:}
+% \begin{Itabb}
+% \hspace*{21em}\=\kill
+% |in \eqref{e1} ...| \>in \eqref{e1} ... \\
+% |in \eqref[s]{e1}--\eqref*{e4} ...|\>in \eqref[s]{e1}--\eqref*{e4} ...\\
+% |in \eqref[name=eq.~]{e2} ...| \>in \eqref[name=eq.~]{e2} ...
+% \end{Itabb}
+% \pagebreak[1]
+% \noindent
+% A list of references can be used:
+% \begin{Itabb}
+% \hspace*{21em}\=\kill
+% |in \eqref{e1,e2} ...| \>in \eqref{e1,e2} ... \\
+% |in \eqref{e1,e2,e3} ...| \>in \eqref{e1,e2,e3} ... \\
+% |in \eqref[lsttxt={, and~}]{e1,e2,e3} ...| \>in \eqref[lsttxt={, and~}]{e1,e2,e3} ...
+% \end{Itabb}
+% \pagebreak[2]
+% The reference to the page can be included with the \opt{vref} or \opt{vref=far}
+% options that activates the \pkg{varioref} reference.
+% \begin{Itabb}
+% \hspace*{18em}\=\kill
+% |in \eqref[vref]{e1} ...| \>in \eqref[vref]{e1} ...\\
+% |in \eqref[vref=far]{e1} ...| \>in \eqref[vref=far]{e1} ...
+% \end{Itabb}
+% The \argcmd{\Rtp}{ref} command is identical to the
+% \argcmd{\rtp}{ref} command except that it uses the \opt{Name} and
+% \opt{Names} key-value options.
+% \begin{Itabb}
+% \hspace*{18em}\=\kill
+% |\Eqref{e1} is ...| \>\Eqref{e1} is ... \\
+% |\Eqref{e1,e2} are ...| \>\Eqref{e1,e2} are ... \\
+% |\Eqref[lsttxt={\ or~}]{e1,e2,e3}| \>\Eqref[lsttxt={\ or~}]{e1,e2,e3}
+% \end{Itabb}
+% \noindent
+% References to external documents can be added with the \opt{xr}
+% option. Please read the documentation of the \pkg{xr} package.
+%
+% \begin{Itabb}
+% \hspace{10em}\=hspace{5em}\=\kill
+% \cmd{\eqref}|[|\opt{xr}|=A-]{xyz}| \> \>$\rightarrow$~
+% |equation~\ref{A-eq:xyz}|
+% \end{Itabb}
+%
+%
+% \subsection{Range reference commands}
+%
+% \begin{cminipage}[\linewidth]
+% \begin{syntdiag}
+% \tok{\argcmd{\rtp}{rangeref}}
+% \begin{stack}\\ \tok{$\ast$} \end{stack}
+% \begin{stack}\\ \tok{\okeylst} \end{stack}
+% \tok{"{"<lbl>$_1$"}{"<lbl>$_2$"}"}
+% \end{syntdiag}
+% \end{cminipage}
+% \smallskip
+%
+% \begin{cminipage}[\linewidth]
+% \begin{syntdiag}
+% \tok{\argcmd{\Rtp}{rangeref}}
+% \begin{stack}\\ \tok{$\ast$} \end{stack}
+% \begin{stack}\\ \tok{\okeylst} \end{stack}
+% \tok{"{"<lbl>$_1$"}{"<lbl>$_2$"}"}
+% \end{syntdiag}
+% \end{cminipage}
+% \blankline
+%
+% \noindent
+% The \argcmd{\rtp}{rangeref} and \argcmd{\Rtp}{rangeref} commands
+% return a range of references and take two arguments. The |*|
+% optional form again eliminates the name prefix.
+% \blankline
+%
+% \noindent
+% \textbf{\slshape Examples:}
+% \begin{Itabb}
+% \hspace*{19em}\=\kill
+% |in \eqrangeref{e1}{e4} ...| \>in \eqrangeref{e1}{e4} ... \\
+% |... and \eqrangeref*{e1}{e4} ...| \>... and \eqrangeref*{e1}{e4} ... \\
+% |\Eqrangeref{e1}{e4} are ...| \>\Eqrangeref{e1}{e4} are ... \\
+% |\Eqrangeref[vref,rngtxt=--]{e1}{e4}| \>\Eqrangeref[rngtxt=--,vref]{e1}{e4}
+% \end{Itabb}
+%
+%
+% \subsection{Page reference command}\seclabel{PRefCmds}
+%
+% \begin{cminipage}
+% \begin{syntdiag}
+% \tok{\argcmd{\rtp}{pageref}}
+% \begin{stack}\\ \tok{\okeylst} \end{stack}
+% \tok{"{"<lbl>"}"}
+% \end{syntdiag}
+% \end{cminipage}
+% \blankline
+% \noindent
+% The \argcmd{\rtp}{pageref} commands returns the page number of a
+% reference.
+% \blankline
+%
+% \noindent
+% \textbf{\slshape Examples:}
+% \begin{Itabb}
+% \hspace*{18em}\=\kill
+% |it is on page \eqpageref{e1} ...| \>it is on page \eqpageref{e1} ...\\
+% |it is \eqpageref[vref]{e1} ...| \>it is \eqpageref[vref]{e1} ...
+% \end{Itabb}
+%
+%
+%^^A=================================================================
+% \begin{table}
+% \newcommand*{\Q}{\ensuremath{\blacksquare}}^^A
+% \newcommand*{\X}{\ensuremath{\square}}^^A
+% \setlength{\fboxsep}{1em}^^A
+% \centering
+% \caption[The available options and key-value parameters]^^A
+% {The available options and key-value parameters for
+% the label and reference commands of the \RS\ package.}
+% \tablabel{refopt}
+% \blankline
+% \begin{cminipage}[.9\textwidth]
+% \renewcommand{\thempfootnote}{\fnsymbol{mpfootnote}}
+% \renewcommand{\footnoterule}{}
+% \begin{tabular*}{\linewidth}{@{\extracolsep{\fill}}llccccccc@{}}
+% & & \multicolumn{7}{c}{Commands\footnote{^^A
+% The commands are obtained by calling the configuring command
+% \cmd{\newref} and setting the default key-values. The
+% active key-values can be changed temporarily inside the
+% commands.}} \\
+% \cline{3-9}
+% Parameter & Default &
+% \begin{turn}{90}\argcmd{{\rtp}}{key}~ \end{turn}&
+% \begin{turn}{90}\argcmd{{\rtp}}{label}~ \end{turn}&
+% \begin{turn}{90}\argcmd{{\rtp}}{ref}~ \end{turn}&
+% \begin{turn}{90}\argcmd{{\Rtp}}{ref}~ \end{turn}&
+% \begin{turn}{90}\argcmd{{\rtp}}{rangeref}~ \end{turn}&
+% \begin{turn}{90}\argcmd{{\Rtp}}{rangeref}~ \end{turn}&
+% \begin{turn}{90}\argcmd{{\rtp}}{pageref}~ \end{turn}\\
+% \hline
+% \noalign{\smallskip}
+% ~$\ast$ & &\X &\X &\Q &\Q &\Q &\Q &\X\\
+% \okeylst & &\X &\X &\Q &\Q &\Q &\Q &\Q\\[1ex]
+% \opt{key} &|={|\meta{\rtp:}|},| &\X &\X &\Q &\Q &\Q &\Q &\Q\\
+% \opt{s} & |={true}|\footnote{^^A
+% Options defaults to \opt{true} but is initialized
+% as \opt{false}. The \argcmd{{\rtp}}{ref}\texttt{[s]}\marg{lbl}
+% command results in the plural: \opt{names}.
+% The same principle is also valid for the \opt{vref}
+% option.\fnlabel{b}}|,|
+% &\X &\X &\Q &\Q &\X &\X &\X\\
+% \opt{vref} &|={true}|\fnref*{b}|,|
+% &\X &\X &\Q &\Q &\Q &\Q &\Q\\
+% \opt{xr} &|={},| &\X &\X &\Q &\Q &\Q &\Q &\Q\\[1ex]
+% \opt{name} &|={},| &\X &\X &\Q &\X &\X &\X &\X\\
+% \opt{names}\footnote{^^A
+% Option depends on the selection of the \texttt{s=true/false}
+% optional key-value for singular or plural.\fnlabel{c}}
+% &|={},| &\X &\X &\Q &\X &\Q &\X &\X\\
+% \opt{Name} &|={},| &\X &\X &\X &\Q &\X &\X &\X\\
+% \opt{Names}\fnref*{c}
+% &|={},| &\X &\X &\X &\Q &\X &\Q &\X\\
+% \opt{lsttwotxt} &|={\space and~},| &\X &\X &\Q &\Q &\X &\X &\X\\
+% \opt{lsttxt} &|={\space and~},| &\X &\X &\Q &\Q &\X &\X &\X\\
+% \opt{rngtxt} &|={\space to~},| &\X &\X &\X &\X &\Q &\Q &\X\\[1ex]
+% \opt{refcmd} &|=\ref{#1},| &\X &\X &\Q &\Q &\Q &\Q &\Q\\
+%
+% \hline
+% \noalign{\smallskip}
+%
+% \footnotesize \Q\ -- \makebox[0pt][l]{\footnotesize Available}\\
+% \footnotesize \X\ -- \makebox[0pt][l]{Not available}
+% \end{tabular*}
+% \end{cminipage}
+% \end{table}
+%^^A=================================================================
+%
+%
+%
+% \clearpage
+% \section{\pkg{Keyval} Optional Arguments}\seclabel{keyvals}
+%
+% Al the options for the referencing commands are set with a key-value
+% list. \Tabref[vref]{refopt} gives a full list of all the key-values and
+% defaults. The options can also be changed locally with the
+% \okeylst\ optional arguments.
+%
+%
+% \subsection{Identifier: \opt{key}}
+%
+% The \opt{key} key-value is the prefix to the reference label
+% of the \cmd{\ref} and \cmd{\pageref} commands.
+% The default is \opt{key=}\meta{type\,:\,}.
+% With the default \RScfg:
+%
+% \begin{Itabb}
+% \tab\=\hspace{3.5cm}\=\hspace{2em}\=\kill
+% \cmd{\newref}|{tab}{...}|\\[1ex]
+% \>|\tablabel{abc}|
+% \>~ $\rightarrow$ |\label{tab:abc}|\\
+% \>|\tabref{abc}|
+% \>~ $\rightarrow$ |table~\ref{tab:abc}|\\[1ex]
+% \cmd{\newref}|{tab}{key=xxx-,...}|\\[1ex]
+% \>|\tablabel{abc}|
+% \>~ $\rightarrow$ |\label{xxx-abc}|\\
+% \>|\tabref{abc}|
+% \>~ $\rightarrow$ |table~\ref{xxx-abc}|
+% \end{Itabb}
+% For existing documents containing labels such as |\label{tab:xx}|,
+% you can use the \opt{nokeyprefix} option which defines \opt{key}|={}|. The
+% normal \cmd{\label} command can then be used and the reference
+% commands defaults to
+% \begin{Itabb}
+% \tab\=\hspace{3.5cm}\=\hspace{2em}\=\kill
+% \>\cmd{\label}|{tab:xx}| \\
+% \>|\tabref{tab:xx}| \>~ $\rightarrow$ |table~\ref{tab:xx}|
+% \end{Itabb}
+%
+%
+% \subsection{Plural form: \opt{s}}
+%
+% The \opt{s} conditional option (\texttt{true/false}) switches the
+% singular/plural form of the reference on and off. The default is
+% \opt{s}\texttt{=true}, but it is initialized to \texttt{false}.
+% \begin{Itabb}
+% \tab\=\hspace{3.5cm}\=\hspace{2em}\=\kill
+% |\tabref{abc}|
+% \>\>~ $\rightarrow$ |table~\ref{tab:abc}|\\
+% |\tabref[s]{abc}|
+% \>\>~ $\rightarrow$ |tables~\ref{tab:abc}|
+% \end{Itabb}
+%
+%
+% \subsection{Extended reference: \opt{vref}}
+%
+% The \opt{vref} conditional option (\texttt{true/far/false}) switches the
+% \pkg{varioref} page referencing on and off. The default is
+% \opt{vref}\texttt{=true}, but it is initialized to \texttt{false}.
+%
+% \begin{Itabb}
+% \tab\=\hspace{3.5cm}\=\hspace{2em}\=\kill
+% |\tabref{abc}|
+% \>\>~ $\rightarrow$ |table~\ref{tab:abc}|\\
+% |\tabref[vref]{abc}|
+% \>\>~ $\rightarrow$ |table~\ref{tab:abc}|
+% |\vpageref[\unskip]{tab:abc}|\\
+% |\tabref[vref=far]{abc}|^^A
+% \>\>~ $\rightarrow$ |table~\ref{tab:abc}|
+% |\reftextfaraway{tab:abc}|
+% \end{Itabb}
+%
+%
+% \subsection{External interfaces: \opt{xr}}
+%
+% The \opt{xr} option is for references to external documents.
+% It inserts a prefix in the reference label, compatible with the
+% \pkg{xr} package. The default is \opt{xr}|={}|.
+%
+% External document can be defined in the preamble with the
+% \pkg{xr} or \pkg{xr-hyper} packages:
+% \begin{Ipara}
+% \cmd{\usepackage}|{xr}|\\
+% \cmd{\externaldocument}\oarg{xr\_key}\marg{filename}
+% \end{Ipara}
+%
+% \noindent
+% If, for example, an external document defined with
+% \meta{xr\_key}\texttt{=\{A-\}}, uses an identical setup (e.g.\ the same
+% \RScfg), then it can be referenced with
+%
+% \begin{Itabb}
+% \tab\=\hspace{3.5cm}\=\hspace{2em}\=\kill
+% |\tabref[xr=A-]{abc}|
+% \>\>~ $\rightarrow$ |table~\ref{A-tab:abc}|
+% \end{Itabb}
+% \noindent or otherwise
+% \begin{Itabb}
+% \tab\=\hspace{3.5cm}\=\hspace{2em}\=\kill
+% |\tabref[xr=A-,key=]{abc}|
+% \>\>~ $\rightarrow$ |table~\ref{A-abc}|
+% \end{Itabb}
+%
+%
+% \subsection{Language parameters: \opt{name}, \opt{names},
+% \opt{Name}, \opt{Names}, \opt{rngtxt}, \opt{lsttwotxt}, \opt{lsttxt}}
+% \seclabel{langopts}
+%
+% This key-values contain the text prefixes and insertions.
+% Every house style or user has his or her own preference for naming the reference types,
+% therefore are there no defaults provided.
+%
+% \begin{Itabb}
+% \hspace*{1.5cm}\=\hspace{7cm}\=\kill
+% \opt{name} \> ---~Inside sentence reference prefix (singular)
+% \> default=|{}|\\
+% \opt{names}\> ---~Inside sentence reference prefix (plural)
+% \> default=|{}|\\
+% \opt{Name} \> ---~First word reference prefix (singular)
+% \> default=|{}|\\
+% \opt{Names}\> ---~First word reference prefix (plural)
+% \> default=|{}|\\
+% \opt{rngtxt}\> ---~Range of references
+% \> default=|{\ to~}|\\
+% \opt{lsttwotxt}\> ---~List of references (two)
+% \> default=|{\ and~}|\\
+% \opt{lsttxt}\> ---~List of references (more than two)
+% \> default=|{\ and~}|
+% \end{Itabb}
+% \noindent
+% Good typographic style manuals recommend the minimum use of
+% capital letters and punctuation that breaks the flow of a sentence
+% or paragraph. For abbreviations, Bringhurst\cite{Bring1996}
+% recommends the Oxford house style: Use a period only when the word
+% stops prematurely. The period is omitted if the abbreviation
+% begins with the first letter and end with the last. As an example
+% for equations, use eq.~(1) or eqn~(1).
+% A good guideline is not to abbreviate any reference type names.
+% If a sentence starts with a
+% reference then the type name must always be written in full.
+% A typical example for references to a table is:
+% \begin{Ipara}
+% \opt{name}| ={table~}, |\opt{names}| ={tables~},|\\
+% \opt{Name}| ={Table~}, |\opt{Names}| ={Tables~},|\\
+% \opt{rngtxt}|={\ to~}, |\opt{lsttxt}|={, and~}, |\opt{lsttwotxt}|={\ and~},|
+% \end{Ipara}
+% Note the hardspace after the text. It is needed to keep the text
+% and the reference together on the same line.
+%
+% The \RS\ configuration file can be setup to interface with \pkg{babel}
+% for different languages or for automatic language changes inside a
+% document. The language specific key-values can be added to the
+% \pkg{babel} hook |\extras|\meta{language}. The command
+% \DescribeMacro{\DeclareLangOpt}\cmd{\DeclareLangOpt}\footnote{^^A
+% Only for use in \RScfg\ the default config file}
+% is provided to supply a \meta{language} option to the package
+% and to add the option contents to |\extras|\meta{language}. The
+% default config file contains the following lines for equations:
+% \begin{Ipara}
+% |\newcommand\RSenglish{% |\\
+% | \def\RSeqtxt{equation~}% |\\
+% | \def\RSeqstxt{equations~}%|\\
+% | \def\RSEqtxt{Equation~}% |\\
+% | \def\RSEqstxt{Equations~}%|\\
+% | : |\\
+% | } |\\
+% |\DeclareLangOpt{english}{\RSenglish}|
+% \end{Ipara}
+% \DescribeMacro{\RSaddto}or manually with the \cmd{\RSaddto} command
+% \begin{Ipara}
+% |\RSaddto{\extrasenglish}{\RSenglish}|
+% \end{Ipara}
+% The key-value options for language specific options
+% are then set as:
+% \begin{Ipara}
+% |\newref{eq}{% |\\
+% | name = \RSeqtxt, |\\
+% | names = \RSeqstxt,|\\
+% | Name = \RSEqtxt, |\\
+% | Names = \RSEqstxt,|\\
+% | : |\\
+% | } |
+% \end{Ipara}
+%
+% \noindent\LaTeX{}/\pkg{babel} provides some language specific
+% names that can be utilized.
+%
+% \begin{Ipara}
+% |\chaptername \appendixname|\\
+% |\figurename \tablename|\\
+% |\partname \pagename|
+% \end{Ipara}
+%
+% To setup a multilingual document with \pkg{babel},
+% \emph{always} make the language options global so that other
+% language compliant packages can detect it.
+% A typical setup for an Afrikaans/English document would be:
+% {\makeatletter\def\meta@font@select{\normalfont\ttfamily\slshape}
+% \begin{Ipara}
+% |\documentclass[UKenglish,afrikaans,|\meta{options}|]{|\meta{LaTeX\_class}|}|\\
+% |\usepackage[T1]{fontenc}%..|\texttt{\slshape hyphenation of words with accents}\\
+% |\usepackage{babel}%........|\texttt{\slshape language def's}\\
+% |\usepackage{varioref}%.....|\texttt{\slshape for \opt{vref} option}\\
+% |\usepackage{refstyle}|
+% \end{Ipara}}
+%
+%
+% \subsection{Reference formatting command: \opt{refcmd}}
+%
+% The \opt{refcmd} key-value holds the contents of the internal
+% command that formats the reference. The |#1| parameter
+% passed to the command is the full reference label.
+% For example:
+% \begin{Itabb}
+% \hspace{10em}\=hspace{5em}\=\kill
+% \opt{refcmd}|=(\ref{#1})| \> $\rightarrow$~
+% |(\ref{|\meta{label}|})|
+% \end{Itabb}
+%
+% External commands can be employed. For example, to make references
+% to equations identical to the \AmS\ \cmd{\eqref} command:
+% \begin{Itabb}
+% \opt{refcmd}|={\textup{\tagform@{\ref{#1}}}}%|~~It needs \file{amsmath.sty}
+% \end{Itabb}
+%
+% The \opt{refcmd} can be used in conjuntion with the |\ifRSstar|,
+% |\ifRSnameon|, |\ifRSplural| and |\ifRScapname| internal
+% conditional variables to format the reference. As an example for a
+% reference to a footnote, where a duplicate footnote mark is needed,
+% can the \opt{refcmd} be configured so that the starred form of the
+% reference command produce a superscripted duplicate mark:
+% \begin{Itabb}
+% |\newcommand{\RSfnmark}[1]{%|\\
+% | \begingroup |\\
+% | \unrestored@protected@xdef\@thefnmark{#1}%|\\
+% | \endgroup |\\
+% | \@footnotemark} |\\[1ex]
+% \opt{refcmd}|={\ifRSstar\RSfnmark{\ref{#1}}\else(\ref{#1})\fi}|
+% \end{Itabb}
+% \noindent The second footnote mark, \fnref*[name]{b}, in
+% \tabref[vref]{refopt}, was obtained in this way with the reference
+% |\fnref*{b}|. See \RScfg\ for another
+% example for references to chapters and appendices.
+%
+% The \pkg{nameref} package can easily be incorporated if you need elaborate
+% references which include the section or chapter name:
+% \begin{Ipara}
+% |\Secref[vref, refcmd={\S\ref{#1}, `\nameref{#1}'}]{PRefCmds}|
+% \end{Ipara}
+% gives
+% \begin{Ipara}
+% \Secref[vref, refcmd={\S\ref{#1}, `\nameref{#1}'}]{PRefCmds}
+% \end{Ipara}
+%
+% \section{Default configuration files}
+%
+% The \pkg{refstyle} package first searches for the \file{refstyle.def}
+% configuration file, and if it not found, then it uses the default
+% configuration file \RScfg\ that is supplied with the package.
+%
+% The default configuration file, \RScfg, makes a
+% number of default reference declarations and provides language
+% definitions for the language parameters. See the file
+% \file{refconfig.pdf} for the documentation.
+% \medskip
+%
+% \begin{center}
+% \begin{fminipage}[.55\textwidth]
+% \slshape Any user is welcome to customize the
+% local copy of the \RScfg\ file or copy
+% the relevant contents to your own \file{refstyle.def}
+% configuration file.
+% \end{fminipage}
+% \end{center}
+%
+% \begin{thebibliography}{99}
+% \bibitem{Bring1996}
+% {Bringhurst, R.} (1996), \emph{The elements of typographic style},
+% Hartley \& Marks Publishers, Point Roberts, WA, USA and Vancouver,
+% BC, Canada, second edn.
+% \end{thebibliography}
+%
+% \StopEventually{\PrintChanges\PrintIndex}
+% \clearpage
+%
+% \section{Implementation: \pkg{refstyle.sty}}
+%
+% \subsection{Identification}
+% \begin{macrocode}
+%<*pkg>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{refstyle}[\RefstyleFileDate\space
+ \RefstyleFileVersion\space
+ Reference formatting (DNJ Els)]
+\newcommand*{\RS@pkgname}{refstyle}
+% \end{macrocode}
+%
+%
+% \subsection{External packages}
+%
+% Load all the external packages.
+% \begin{macrocode}
+\RequirePackage{keyval}
+% \end{macrocode}
+%
+% \begin{macro}{\RS@setkeys}
+% \changes{v0.3}{2006/09/09}{original \cmd{\setkeys} copy}
+% Note if \pkg{xkeyval} is loaded, it redefines \pkg{keyval}'s
+% macros. To fix this bug, we need the original \cmd{\setkeys}
+% command.
+% \begin{macrocode}
+\def\RS@setkeys#1#2{%
+ \def\KV@prefix{KV@#1@}%
+ \let\@tempc\relax
+ \KV@do#2,\relax,}
+% \end{macrocode}
+% \end{macro}
+%
+% \noindent A small bug-fix for \pkg{showkeys}. Will be removed
+% after release of new version.
+%
+% \begin{macrocode}
+\@ifundefined{vref@space}{\let\vref@space\space}{}
+% \end{macrocode}
+%
+% \begin{macro}{\@safe@activestrue}
+% \changes{v0.5}{2010/11/02}{Add \cmd{\@safe@activesfalse}}
+% \begin{macro}{\@safe@activesfalse}
+% \changes{v0.5}{2010/11/02}{Add \cmd{\@safe@activestrue}}
+% If \pkg{babel} is not loaded, make the following
+% commands inactive.
+% \begin{macrocode}
+\providecommand*{\@safe@activestrue}{}
+\providecommand*{\@safe@activesfalse}{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Utility commands}
+%
+% \begin{macro}{\RS@namelet}
+% \begin{macro}{\RS@nameuse}
+% \begin{macro}{\RS@namedef}
+% \begin{macro}{\RS@robustnamedef}
+% \noindent
+% The following is a list of commands that take a variable \marg{name}
+% as argument. This enables on-the-fly definitions of user commands.
+% \begin{Itabb}
+% Usage:~\=\cmd{\RS@robustnamedef}\marg{name}~\=\kill
+% Usage:
+% \>\cmd{\RS@namelet}\marg{name}
+% \> $\rightarrow$ \cmd{\let}\cmeta{name}\\
+% \>\cmd{\RS@nameuse}\marg{name}
+% \> $\rightarrow$ \cmeta{name}\\
+% \>\cmd{\RS@namedef}\marg{name}
+% \> $\rightarrow$ \cmd{\def}\cmeta{name}\\
+% \>\cmd{\RS@robustnamedef}\marg{name}
+% \> $\rightarrow$
+% \cmd{\def}\cmeta{name}|{\protect|\cmeta{name\textvisiblespace}|}|^^A
+% \cmd{\def}\cmeta{name\textvisiblespace}
+% \end{Itabb}
+% \begin{macrocode}
+\newcommand*{\RS@namelet}[1]{\expandafter\let\csname #1\endcsname}
+\newcommand*{\RS@nameuse}[1]{\csname #1\endcsname}
+\newcommand*{\RS@namedef}[1]{\expandafter\def\csname #1\endcsname}
+\newcommand*{\RS@robustnamedef}[1]{%
+ \expandafter\edef\csname #1\endcsname{%
+ \noexpand\protect\RS@nameuse{#1 }}%
+ \RS@namedef{#1 }}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\RS@ifundefined}
+% This is an improved definition\footnote{Posted by Markus Kohm
+% on c.t.t. 2002/11/11} for the \LaTeX{} kernel command
+% \cmd{\@ifundefined} that do not leave an undefined command
+% defined as \cmd{\relax} after the test.
+%
+% The usage is:
+% \cmd{\RS@ifundefined}\marg{name}\marg{true}\marg{false} executes
+% the contents of \meta{true} if \cmeta{name} is not defined and
+% \meta{false} if defined.
+% \begin{macrocode}
+\def\RS@ifundefined#1{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname#1\endcsname\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RS@removedef}
+% The command removes the definition of a command, including
+% robust definitions.
+% \begin{macrocode}
+\newcommand*{\RS@removedef}[1]{%
+ \RS@namelet{#1}\@undefined%
+ \RS@ifundefined{#1 }{}{\RS@namelet{#1 }\@undefined}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RS@testednamedef}
+% \begin{macro}{\RS@testedrobustnamedef}
+% These command are identical to \cmd{\RS@namedef} and
+% \cmd{\RS@robustnamedef}, but only define the \cmeta{name}
+% command if it is legal. Otherwise an error message
+% is written to the log file and the program is terminated.
+% \begin{macrocode}
+\newcommand*{\RS@testednamedef}[1]{%
+ \RS@ifnamedefinable{#1}\RS@namedef{#1}}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*{\RS@testedrobustnamedef}[1]{%
+ \RS@ifnamedefinable{#1}\RS@robustnamedef{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\RS@ifnamedefinable}
+% A modified version of the \LaTeX{} kernel command
+% (from ltdefns.dtx).
+% \begin{macrocode}
+\long\def\RS@ifnamedefinable #1{%
+ \edef\reserved@a{#1}%
+ \RS@ifundefined\reserved@a
+ {\edef\reserved@b{\expandafter\@carcube \reserved@a xxx\@nil}%
+ \ifx \reserved@b\@qend \RS@notdefinable\else
+ \ifx \reserved@a\@qrelax \RS@notdefinable\else
+ \PackageInfo{\RS@pkgname}{\@backslashchar\reserved@a\space created}%
+ \fi
+ \fi}%
+ \RS@notdefinable}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RS@notdefinable}
+% The error message when an illegal definition is attempted.
+% \begin{macrocode}
+\gdef\RS@notdefinable{%
+ \PackageError{\RS@pkgname}{%
+ Command \@backslashchar\reserved@a\space
+ already defined.\MessageBreak
+ Or name \@backslashchar\@qend... illegal.\MessageBreak
+ It can not be redefined by the \@backslashchar newref%
+ }{%
+ If \@backslashchar\reserved@a\space is not important\MessageBreak
+ then \protect\let\@backslashchar\reserved@a%
+ =\protect\relax,\MessageBreak
+ else use a different \@backslashchar newref.}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RS@setbool}
+% The command\footnote{Taken from the \pkg{ifthen} package.}
+% \cmd{\RS@setbool}\marg{conditional}\marg{true/false}
+% sets the \meta{conditional} to |true| or |false|.
+% \begin{Itabb}
+% Usage:~\=
+% \cmd{\RS@setbool}|{RSplural}{false}|\quad\=$\rightarrow$\quad
+% |\RSpluralfalse|\\
+% \>\cmd{\RS@setbool}|{RSplural}{true}|\quad\>$\rightarrow$\quad
+% |\RSpluraltrue|
+% \end{Itabb}
+%
+% \begin{macrocode}
+\newcommand*{\RS@setbool}[2]{%
+ \lowercase{\def\@tempa{#2}}%
+ \@ifundefined{@tempswa\@tempa}%
+ {\PackageError{\RS@pkgname}%
+ {You can only set the option to `true' or `false'}\@ehc}%
+ {\csname#1\@tempa\endcsname}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{First character case changes}
+%
+% \begin{macro}{\RS@firstcap}
+% This macro\footnote{Posted by Dan Luecking on c.t.t.} change the
+% first character of a string to uppercase and returns the result
+% in \cmd{\RS@cap}.
+% \begin{Ipara}
+% Usage:~|\RS@fistcap xxxx\@nil| then |\RS@cap| $\rightarrow$ |Xxxx|
+% \end{Ipara}
+% \begin{macrocode}
+\def\RS@firstcap#1#2\@nil{%
+ \iffalse{\fi
+ \uppercase{\edef\RS@cap{\iffalse}\fi#1}#2}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{Reference building commands}
+%
+% \begin{macro}{\ifRS@keyactive}
+% \changes{v0.4}{2010/10/21}{Add \opt{nokeyprefix} to turn of the key prefix}
+% We need to peek into the options list for the \opt{nokeyprefix} option
+% before the options are processed to find out if the key prefix must be
+% included in the |\|\meta{key}|label| command. Make \opt{nokeyprefix}
+% not used afterwards.
+% \begin{macrocode}
+\newif\ifRS@keyactive
+\@ifpackagewith{\@currname}{nokeyprefix}%
+ {\RS@keyactivefalse}%
+ {\RS@keyactivetrue}
+\DeclareOption{nokeyprefix}{\OptionNotUsed}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\ifRSstar}
+% \begin{macro}{\ifRSnameon}
+% \begin{macro}{\ifRScapname}
+% \begin{macro}{\ifRSplural}
+% \begin{macro}{\ifRSlsttwo}
+% \changes{v0.4}{2010/10/21}{Add \cmd{\ifRSlsttwo} test for list containing only two parameter}
+% The |\if| conditional values that are set by the reference commands.
+% These values can be accessed by user defined key-values.
+% \begin{macrocode}
+\newif\ifRSstar\RSstarfalse
+\newif\ifRSnameon\RSnameontrue
+\newif\ifRScapname\RScapnamefalse
+\newif\ifRSplural\RSpluralfalse
+\newif\ifRSlsttwo\RSlsttwofalse
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\newref}
+% The main user interface for template setup. It take the |#1| or
+% \meta{key} parameter and make it lowercase before passing it on to
+% \cmd{\RS@newref}.
+%
+%
+% \begin{macrocode}
+\newcommand*{\newref}[1]{%
+ \lowercase{\def\RS@tempa{#1}}%
+ \expandafter\RS@newref\expandafter{\RS@tempa}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RS@newref}
+% \changes{v0.4}{2010/10/21}{Ad \texttt{lsttwotxt} option}
+% This command configures a new template.
+% \begin{macrocode}
+\newcommand*{\RS@newref}[2]{%
+% \end{macrocode}
+% \bNP[2.0]\noindent Clears an existing template before defining a new one.\eNP
+% \begin{macrocode}
+ \RS@clearref{#1}%
+% \end{macrocode}
+% \bNP[2.0]\noindent Create |\ifRS@|\meta{key}|vref| conditional \eNP
+% \begin{macrocode}
+% \expandafter\newif\csname ifRS@#1vref\endcsname%
+% \end{macrocode}
+% \bNP[2.0]\noindent Creates a series of key-values for every template
+% that stores the setup for the specific template.\eNP
+% \begin{macrocode}
+ \ifRS@keyactive
+ \define@key{RS@#1}{key}[#1:]{\RS@namedef{RS@#1@key}{##1}}%
+ \else
+ \define@key{RS@#1}{key}[]{\RS@namedef{RS@#1@key}{##1}}%
+ \fi
+ \define@key{RS@#1}{s}[true]{\RS@setbool{RSplural}{##1}}%
+ \define@key{RS@#1}{name}[]{\RS@namedef{RS@#1@name}{##1}}%
+ \define@key{RS@#1}{names}[]{\RS@namedef{RS@#1@names}{##1}}%
+ \define@key{RS@#1}{Name}[]{\RS@namedef{RS@#1@Name}{##1}}%
+ \define@key{RS@#1}{Names}[]{\RS@namedef{RS@#1@Names}{##1}}%
+ \define@key{RS@#1}{rngtxt}[\space to~]{\RS@namedef{RS@#1@rngtxt}{##1}}%
+ \define@key{RS@#1}{lsttwotxt}[\space and~]{\RS@namedef{RS@#1@lsttwotxt}{##1}}%
+ \define@key{RS@#1}{lsttxt}[\space and~]{\RS@namedef{RS@#1@lsttxt}{##1}}%
+ \define@key{RS@#1}{refcmd}[\ref{####1}]{\RS@namedef{RS@#1@rcmd}####1{##1}}%
+ \define@key{RS@#1}{xr}[]{\RS@namedef{RS@#1@xr}{##1}}%
+ \define@key{RS@#1}{vref}[true]{\RS@namedef{RS@#1vref}{##1}}%
+% \end{macrocode}
+% \bNP[2.0]\noindent Set default key-value parameters.\eNP
+% \begin{macrocode}
+ \RS@setkeys{RS@#1}{key,
+ s=false,
+ name,names,Name,Names,
+ rngtxt,lsttwotxt,lsttxt,
+ refcmd,
+ xr,
+ vref=false}%
+% \end{macrocode}
+% \bNP[2.0]\noindent Set key-values according to user definitions.\eNP
+% \begin{macrocode}
+ \RS@setkeys{RS@#1}{#2}%
+% \end{macrocode}
+% \bNP[2.0]\noindent Build the reference commands.\eNP
+% \begin{macrocode}
+ \RS@buildref{#1}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RS@clearref}
+% Clear a reference template for redefinition. It check
+% if the template already exists and clear it if it does.
+%
+% \begin{macrocode}
+\newcommand*{\RS@clearref}[1]{%
+ \RS@ifundefined{RS@#1@template}
+ {\RS@namedef{RS@#1@template}{#1}%
+ \PackageInfo{\RS@pkgname}%
+ {New reference template \protect\newref{#1}}{}}
+ {\PackageInfo{\RS@pkgname}%
+ {Reference template \protect\newref{#1} redefined}{}
+ \RS@firstcap#1\@nil
+ \RS@removedef{#1key}%
+ \RS@removedef{#1label}%
+ \RS@removedef{#1ref}%
+ \RS@removedef{\RS@cap ref}%
+ \RS@removedef{#1rangeref}%
+ \RS@removedef{\RS@cap rangeref}%
+ \RS@removedef{#1pageref}%
+ }%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RS@buildref}
+% Build the reference commands. See \tabref{refopt} for the list of
+% commands. The \cmd{\RS@buildref}\marg{key} build commands to
+% call \cmd{\RS@cmd}\marg{cmd}\marg{key}, for example:
+% \begin{Ipara}
+% \cmeta{key}|ref| \quad$\rightarrow$\quad
+% |{\RScapnamefalse\RS@cmd{ref}|\marg{key}|}|
+% \end{Ipara}
+% \changes{v0.2}{2003/07/30}{Remove robust def of \argcmd{{\rtp}}{label}}
+% \begin{macrocode}
+\newcommand*{\RS@buildref}[1]{%
+ \RS@firstcap#1\@nil
+ \RS@testednamedef{#1key}{\RS@nameuse{RS@#1@key}}
+ \RS@testednamedef{#1label}##1{\label{\RS@nameuse{RS@#1@key}##1}}
+ \RS@testedrobustnamedef{#1ref}{\RScapnamefalse\RS@cmd{ref}{#1}}
+ \RS@testedrobustnamedef{\RS@cap ref}{\RScapnametrue\RS@cmd{ref}{#1}}
+ \RS@testedrobustnamedef{#1rangeref}{\RScapnamefalse\RS@cmd{rangeref}{#1}}
+ \RS@testedrobustnamedef{\RS@cap rangeref}{\RScapnametrue\RS@cmd{rangeref}{#1}}
+ \RS@testedrobustnamedef{#1pageref}{\RScapnamefalse\RS@cmd{pageref}{#1}}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RS@cmd}
+% \begin{macro}{\RS@@cmd}
+% The command \cmd{\RS@cmd}\marg{cmd}\marg{key} calls the final
+% reference formatting commands.
+% It checks for the starred form and set the conditionals
+% |\ifRSstar| and |\ifRSnameon| accordingly.
+% It also extracts the optional key-value list.
+% \begin{Itabb}
+% \hspace*{4.5cm}\=\kill
+% \cmd{\RS@cmd}|{ref}|\marg{key} \>$\rightarrow$\quad
+% |\RS@ref|\marg{key}\okeylst\\
+% \cmd{\RS@cmd}|{rangeref}|\marg{key} \>$\rightarrow$\quad
+% |\RS@rangeref|\marg{key}\okeylst\\
+% \cmd{\RS@cmd}|{pageref}|\marg{key} \>$\rightarrow$\quad
+% |\RS@pageref|\marg{key}\okeylst
+% \end{Itabb}
+% \begin{macrocode}
+\newcommand*{\RS@cmd}[2]{%
+ \@ifstar{\RSstartrue\RSnameonfalse\RS@@cmd{#1}{#2}}%
+ {\RSstarfalse\RSnameontrue\RS@@cmd{#1}{#2}}}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*{\RS@@cmd}[2]{%
+ \@ifnextchar[%
+ {\RS@nameuse{RS@#1}{#2}}%
+ {\RS@nameuse{RS@#1}{#2}[]}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Reference formatting commands}
+%
+% \begin{macro}{\RS@ref}
+% \changes{v0.5}{2010/11/02}{Add \cmd{\@safe@activestrue} to avoid active chars is ref list}
+% \begin{macro}{\RS@@ref}
+% \begin{macro}{\RS@@@ref}
+% \changes{v0.4}{2010/10/21}{Add \cmd{\ifRSlsttwo} test for list containing only two parameter}
+% The command \cmd{\RS@ref}\marg{key}\okeylst\marg{label\_lst}
+% typeset the references to the comma-separated reference
+% label list according to the configuration for \meta{key}.
+%
+% First of all, remove all spaces for the reference label list.
+% \begin{macrocode}
+\def\RS@ref#1[#2]#3{%
+ \begingroup
+ \RS@setkeys{RS@#1}{#2}%
+ \@safe@activestrue%
+ \edef\RS@tmpa{\zap@space#3 \@empty}%
+ \@safe@activesfalse%
+ \edef\RS@tmpa{\noexpand\RS@@ref{#1} \RS@tmpa,\relax\noexpand\@eolst}%
+ \RS@tmpa%
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+% Check if there is a single or multiple references in the
+% reference label list. If a single reference label then use the
+% form set by the \opt{s} key-value. If multiple reference labels
+% the use the plural form of the name prefix.\footnote{
+% The list of reference commands came from the \pkg{typedref} package.}
+%
+% \begin{macrocode}
+\def\RS@@ref#1 #2,#3\@eolst{%
+ \ifx\relax#3\relax
+ \RS@makename{#1}%
+ \RS@makeref{#1}{#2}%
+ \RS@makevpageref{#1}{#2}%
+ \else
+ \RSpluraltrue%
+ \RS@makename{#1}%
+ \RS@makeref{#1}{#2}%
+ \RS@makevpageref{#1}{#2}%
+ \RSnameonfalse%
+ \RSlsttwotrue%
+ \RS@@@ref{#1} #3\@eolst%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% For more than one reference in the reference list, typeset the
+% rest of the references.
+% \begin{macrocode}
+\def\RS@@@ref#1 #2,#3\@eolst{%
+ \ifx\relax#3\relax
+ \ifRSlsttwo
+ \RS@nameuse{RS@#1@lsttwotxt}%
+ \else
+ \RS@nameuse{RS@#1@lsttxt}%
+ \fi
+ \RS@makeref{#1}{#2}%
+ \RS@makevpageref{#1}{#2}%
+ \else
+ \RSlsttwofalse%
+ \unskip,\space%
+ \RS@makeref{#1}{#2}%
+ \RS@makevpageref{#1}{#2}%
+ \RS@@@ref{#1} #3\@eolst%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RS@rangeref}
+% The command \cmd{\RS@rangeref}\marg{key}\okeylst\marg{lbl1}\marg{lbl2}
+% typeset the references as a range.
+% \begin{macrocode}
+\def\RS@rangeref#1[#2]#3#4{%
+ \begingroup
+ \RS@setkeys{RS@#1}{#2}%
+ \RSpluraltrue%
+ \RS@makename{#1}%
+ \RS@makeref{#1}{#3}%
+ \RS@nameuse{RS@#1@rngtxt}%
+ \RSnameonfalse%
+ \RS@makeref{#1}{#4}%
+ \RS@makevpagerefrange{#1}{#3}{#4}%
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RS@pageref}
+% The command \cmd{\RS@pageref}\marg{key}\okeylst\marg{lbl} type
+% the page where \marg{lbl} was defined.
+% \begin{macrocode}
+\def\RS@pageref#1[#2]#3{%
+ \begingroup%
+ \RS@setkeys{RS@#1}{#2}%
+ \RS@ifvref{#1}%
+ {\mbox{}\vpageref*{\RS@lbl{#1}{#3}}}%
+ {\reftextfaraway{\RS@lbl{#1}{#3}}}%
+ {\pageref{\RS@lbl{#1}{#3}}}%
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v0.2}{2003/07/30}{Remove redundant \cmd{\RS@label}}
+%
+% \begin{macrocode}
+\newcommand*{\RS@true}{true}
+\newcommand*{\RS@false}{false}
+\newcommand*{\RS@far}{far}
+% \end{macrocode}
+%
+% \begin{macro}{\RS@ifvref}
+% The command \cmd{\RS@ifvref}\marg{key}\marg{true}\marg{faraway}\marg{false}
+% executes the contents of \meta{true} if the \opt{vref} option for
+% the \meta{key} reference type is true and \meta{false} otherwise.
+% \begin{macrocode}
+\newcommand{\RS@ifvref}[4]{%
+ \edef\RS@tempa{\RS@nameuse{RS@#1vref}}%
+ \ifx\RS@tempa\RS@true\relax
+ #2%
+ \else\ifx\RS@tempa\RS@far\relax
+ #3%
+ \else\ifx\RS@tempa\RS@false\relax
+ #4%
+ \else
+ \PackageError{\RS@pkgname}%
+ {You can only set the vref option to `true', `far' or `false'}\@ehc
+ \fi\fi\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RS@makename}
+% The command \cmd{\RS@makename}\marg{key} build the prefix
+% to the reference commands.
+% \begin{macrocode}
+\newcommand{\RS@makename}[1]{%
+ \ifRSstar\else\ifRSnameon
+ \ifRSplural
+ \ifRScapname
+ \RS@nameuse{RS@#1@Names}%
+ \else
+ \RS@nameuse{RS@#1@names}%
+ \fi
+ \else
+ \ifRScapname
+ \RS@nameuse{RS@#1@Name}%
+ \else
+ \RS@nameuse{RS@#1@name}%
+ \fi
+ \fi
+ \fi\fi
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RS@lbl}
+% This command builds the full label string for the \cmd{\ref}
+% command.
+% \begin{Ipara}
+% \cmd{\RS@lbl}\marg{key}\marg{label} \quad$\rightarrow$\quad
+% |{|\meta{xr_key}\meta{key}\meta{label}|}|
+% \end{Ipara}
+% \begin{macrocode}
+\newcommand*{\RS@lbl}[2]{%
+ \RS@nameuse{RS@#1@xr}\RS@nameuse{RS@#1@key}#2%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RS@makeref}
+% The command \cmd{\RS@makeref}\marg{key}\marg{label} formats
+% the \cmd{\ref} output
+% \begin{Ipara}
+% \cmd{\RS@makeref}\marg{key}\marg{label} \quad$\rightarrow$\quad
+% \cmeta{rcmd}|{\ref{|\meta{xr_key}\meta{key}\meta{label}|}}|
+% \end{Ipara}
+% \begin{macrocode}
+\newcommand{\RS@makeref}[2]{%
+ \RS@nameuse{RS@#1@rcmd}{\RS@lbl{#1}{#2}}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RS@makevpageref}
+% The command \cmd{\RS@makevpageref}\marg{key}\marg{label} adds the
+% \pkg{varioref} page reference if the \opt{vref} option is true.
+% \begin{macrocode}
+\newcommand{\RS@makevpageref}[2]{%
+ \RS@ifvref{#1}%
+ {\vpageref[\unskip]{\RS@lbl{#1}{#2}}}%
+ { \reftextfaraway{\RS@lbl{#1}{#2}}}%
+ {}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RS@makevpagerefrange}
+% The command \cmd{\RS@makevpagerefrange}\marg{key}\marg{lbl1}\marg{lbl1}
+% adds the \pkg{varioref} page range reference if the \opt{vref}
+% option is true.
+% \begin{macrocode}
+\newcommand{\RS@makevpagerefrange}[3]{%
+ \RS@ifvref{#1}%
+ {\space\vpagerefrange[\unskip]{\RS@lbl{#1}{#2}}{\RS@lbl{#1}{#3}}}%
+ {\space\vpagerefrange[\unskip]{\RS@lbl{#1}{#2}}{\RS@lbl{#1}{#3}}}%
+ {}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{\pkg{varioref} command predefinitions}
+%
+% \begin{macrocode}
+\AtBeginDocument{%
+ \providecommand{\vpageref}{%
+ \PackageError{\RS@pkgname}%
+ {The vref option used, but varioref.sty not loaded.}%
+ {Load varioref.sty}}
+ \providecommand{\reftextfaraway}{%
+ \PackageError{\RS@pkgname}%
+ {The vref=far option used, but varioref.sty not loaded.}%
+ {Load varioref.sty}}
+ \providecommand{\vpagerefrange}{%
+ \PackageError{\RS@pkgname}%
+ {The vref option used, but varioref.sty not loaded.}%
+ {Load varioref.sty}}
+ }
+% \end{macrocode}
+%
+%
+% \subsection{Support for language option inclusions in config file}
+%
+% \begin{macro}{\RSaddto}
+% \changes{v0.2}{2003/07/30}{Rename \cmd{\RS@addto} to \cmd{\RSaddto}}
+% Command from the \pkg{varioref} package is used to add
+% language definitions to the |\extras|\meta{language} token
+% for \pkg{babel}.
+% \begin{macrocode}
+\def\RSaddto#1#2{%
+ #2%
+ \@temptokena{#2}%
+ \ifx#1\relax
+ \let#1\@empty
+ \fi
+ \ifx#1\undefined
+ \edef#1{\the\@temptokena}%
+ \else
+ \toks@\expandafter{#1}%
+ \edef#1{\the\toks@\the\@temptokena}%
+ \fi
+ \@temptokena{}\toks@\@temptokena}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DeclareLangOpt}
+% \changes{v0.5}{2010/11/02}{Add \cmd{\extras}\meta{language} to beginning of document.}
+% Command to declare a language option and add
+% language definitions to the |\extras|\meta{language} token
+% for \pkg{babel}.
+% \begin{macrocode}
+\def\DeclareLangOpt#1#2{%
+ \edef\RS@tempa{\expandafter\@gobble\string#2}%
+ \RS@ifundefined{\RS@tempa}%
+ {\PackageError{\RS@pkgname}{%
+ Unknown definitions \@backslashchar\RS@tempa\MessageBreak
+ for language option `#1'}{}}%
+ {\DeclareOption{#1}{%
+ \AtBeginDocument{\expandafter\RSaddto\csname extras#1\endcsname #2}}}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{Configuration files}
+%
+% \begin{macro}{\RS@cfgfile,\RS@reffile}
+% \changes{v0.4}{2010/10/21}{Ad alternative definition file \cmd{refstyle.def}}
+% Define the config file and alternate definition file names.
+% \begin{macrocode}
+\newcommand*{\RS@cfgfile}{refstyle.cfg}
+\newcommand*{\RS@reffile}{refstyle.def}
+% \end{macrocode}
+% \end{macro}
+%
+% We need to peek into the options list before the
+% options are processed to find out if the config
+% file is to be loaded or not. The config file can
+% contain options and must be loaded before
+% \cmd{\ProcessOptions}. Make \opt{noconfig} not used
+% afterwards.
+%
+% We first test for a local config file \file{refstyle.def}
+% and then for the global config file \file{refstyle.cfg}.
+% \begin{macrocode}
+\@ifpackagewith{\@currname}{noconfig}%
+ {\PackageInfo{\RS@pkgname}{No config file loaded}}%
+ {\InputIfFileExists{\RS@reffile}%
+ {\PackageInfo{\RS@pkgname}{Local config file \RS@reffile\space used}}
+ {\InputIfFileExists{\RS@cfgfile}%
+ {\PackageInfo{\RS@pkgname}{Config file \RS@cfgfile\space used}}%
+ {\PackageInfo{\RS@pkgname}{No config file found}}}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareOption{noconfig}{\OptionNotUsed}%
+% \end{macrocode}
+%
+% Process the options, including options in config file.
+% \begin{macrocode}
+\ProcessOptions*\relax
+% \end{macrocode}
+%
+% The end of this package.
+% \begin{macrocode}
+%</pkg>
+% \end{macrocode}
+%
+% \Finale
+\endinput
diff --git a/macros/latex/contrib/refstyle/refstyle.ins b/macros/latex/contrib/refstyle/refstyle.ins
index ced9ef9722..5d69497509 100644
--- a/macros/latex/contrib/refstyle/refstyle.ins
+++ b/macros/latex/contrib/refstyle/refstyle.ins
@@ -1,97 +1,92 @@
-% refstyle.ins
-% Copyright (C) 2002--2010 Danie Els
-%
-% -------------------------------------------------------------------
-% The refstyle package
-% for the formatting of references
-% -------------------------------------------------------------------
-% This work may be distributed and/or modified under the conditions
-% of the LaTeX Project Public License, either version 1.3c 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.3c or later is part of all distributions of LaTeX
-% version 2005/12/01 or later.
-%
-% This work is "maintained" (as per LPPL maintenance status)
-% by Danie Els (dnjels@sun.ac.za).
-%
-% This package consists of the files: refstyle.dtx
-% refconfig.dtx
-% refstyle.ins
-% and the derived files: refstyle.sty
-% refstyle.cfg
-% -------------------------------------------------------------------
-% This file will generate fast loadable files and documentation
-% driver files from the doc files in this package when run through
-% LaTeX or TeX.
-% -------------------------------------------------------------------
-
-\def\batchfile{refstyle.ins}
-\def\filedate{2010/10/21}
-\input docstrip.tex
-\keepsilent
-
-\declarepreamble\package
-
-Copyright (C) 2002--2010 Danie Els
-
--------------------------------------------------------------------
- The refstyle package
- for the formatting of references
--------------------------------------------------------------------
-This work may be distributed and/or modified under the conditions
-of the LaTeX Project Public License, either version 1.3c 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.3c or later is part of all distributions of LaTeX
-version 2005/12/01 or later.
-
-This work is "maintained" (as per LPPL maintenance status)
-by Danie Els (dnjels@sun.ac.za).
--------------------------------------------------------------------
-
-\endpreamble
-
-\generate{%
- \askforoverwritefalse
- \usepreamble\package
- \file{refstyle.sty}{\from{refstyle.dtx}{pkg}}}
-
-
-
-
-\declarepreamble\config
-
--------------------------------------------------------------------
- The refstyle package
- for the formatting of references
--------------------------------------------------------------------
-This file may be customized to suit specific user requirements.
-
-Original by Danie Els <dnjels@sun.ac.za>
--------------------------------------------------------------------
-
-\endpreamble
-\generate{%
- \askforoverwritefalse
- \usepreamble\config
- \file{refstyle.cfg}{\from{refconfig.dtx}{cfg}}}
-
-
-\obeyspaces
-\Msg{**********************************************************}
-\Msg{* *}
-\Msg{* To finish the installation you have to move the *}
-\Msg{* following files into a directory searched by TeX: *}
-\Msg{* *}
-\Msg{* refstyle.sty *}
-\Msg{* refstyle.cfg *}
-\Msg{* *}
-\Msg{* To produce the documentation run the file ustitle.dtx *}
-\Msg{* through LaTeX. *}
-\Msg{* *}
-\Msg{* Happy TeXing! *}
-\Msg{**********************************************************}
-\endbatchfile
+% refstyle.ins
+% Copyright (C) 2002--2024 Danie Els
+%
+% -------------------------------------------------------------------
+% The refstyle package
+% for the formatting of references
+% -------------------------------------------------------------------
+% This work may be distributed and/or modified under the conditions
+% of the LaTeX Project Public License, either version 1.3c 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.3c or later is part of all distributions of LaTeX
+% version 2008/12/01 or later.
+%
+% This work has the LPPL maintenance status 'maintained'.
+%
+% This Current Maintainer of this work is Danie Els (dnjels@gmail.com)
+%
+% This package consists of the files: refstyle.dtx
+% refconfig.dtx
+% refstyle.ins
+% and the derived files: refstyle.sty
+% refstyle.cfg
+% -------------------------------------------------------------------
+
+\def\batchfile{refstyle.ins}
+\def\filedate{2024/01/31}
+\input docstrip.tex
+\keepsilent
+
+\declarepreamble\package
+
+Copyright (C) 2002--2024 Danie Els
+
+-------------------------------------------------------------------
+ The refstyle package
+ for the formatting of references
+-------------------------------------------------------------------
+This work may be distributed and/or modified under the conditions
+of the LaTeX Project Public License, either version 1.3c 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.3c or later is part of all distributions of LaTeX
+version 2008/12/01 or later.
+
+This work has the LPPL maintenance status 'maintained'.
+
+This Current Maintainer of this work is Danie Els (dnjels@gmail.com)
+-------------------------------------------------------------------
+
+\endpreamble
+
+\generate{%
+ \askforoverwritefalse
+ \usepreamble\package
+ \file{refstyle.sty}{\from{refstyle.dtx}{pkg}}}
+
+
+\declarepreamble\config
+
+-------------------------------------------------------------------
+ The refstyle package
+ for the formatting of references
+-------------------------------------------------------------------
+This file may be customized to suit specific user requirements.
+
+Original by Danie Els (dnjels@gmail.com)
+-------------------------------------------------------------------
+
+\endpreamble
+\generate{%
+ \askforoverwritefalse
+ \usepreamble\config
+ \file{refstyle.cfg}{\from{refconfig.dtx}{cfg}}}
+
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* To finish the installation you have to move the *}
+\Msg{* following files into a directory searched by TeX: *}
+\Msg{* refstyle.sty *}
+\Msg{* refstyle.cfg *}
+\Msg{* *}
+\Msg{* To produce the documentation run through LaTeX the files: *}
+\Msg{* refstyle.dtx *}
+\Msg{* refconfig.dtx *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{*************************************************************}
+\endbatchfile
diff --git a/macros/latex/contrib/refstyle/refstyle.pdf b/macros/latex/contrib/refstyle/refstyle.pdf
index 0e94b7db28..a7bc463295 100644
--- a/macros/latex/contrib/refstyle/refstyle.pdf
+++ b/macros/latex/contrib/refstyle/refstyle.pdf
Binary files differ
diff --git a/macros/latex/contrib/refstyle/refstyle.sty b/macros/latex/contrib/refstyle/refstyle.sty
deleted file mode 100644
index 11f0c3606b..0000000000
--- a/macros/latex/contrib/refstyle/refstyle.sty
+++ /dev/null
@@ -1,327 +0,0 @@
-%%
-%% This is file `refstyle.sty',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% refstyle.dtx (with options: `pkg')
-%%
-%% Copyright (C) 2002--2010 Danie Els
-%%
-%% -------------------------------------------------------------------
-%% The refstyle package
-%% for the formatting of references
-%% -------------------------------------------------------------------
-%% This work may be distributed and/or modified under the conditions
-%% of the LaTeX Project Public License, either version 1.3c 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.3c or later is part of all distributions of LaTeX
-%% version 2005/12/01 or later.
-%%
-%% This work is "maintained" (as per LPPL maintenance status)
-%% by Danie Els (dnjels@sun.ac.za).
-%% -------------------------------------------------------------------
-%%
-\newcommand*{\RefstyleFileDate}{2010/11/02}
-\newcommand*{\RefstyleFileVersion}{v0.5}
-
-\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-\ProvidesPackage{refstyle}[\RefstyleFileDate\space
- \RefstyleFileVersion\space
- Reference formatting (DNJ Els)]
-\newcommand*{\RS@pkgname}{refstyle}
-\RequirePackage{keyval}
-\def\RS@setkeys#1#2{%
- \def\KV@prefix{KV@#1@}%
- \let\@tempc\relax
- \KV@do#2,\relax,}
-\@ifundefined{vref@space}{\let\vref@space\space}{}
-\providecommand*{\@safe@activestrue}{}
-\providecommand*{\@safe@activesfalse}{}
-\newcommand*{\RS@namelet}[1]{\expandafter\let\csname #1\endcsname}
-\newcommand*{\RS@nameuse}[1]{\csname #1\endcsname}
-\newcommand*{\RS@namedef}[1]{\expandafter\def\csname #1\endcsname}
-\newcommand*{\RS@robustnamedef}[1]{%
- \expandafter\edef\csname #1\endcsname{%
- \noexpand\protect\RS@nameuse{#1 }}%
- \RS@namedef{#1 }}
-\def\RS@ifundefined#1{%
- \begingroup\expandafter\expandafter\expandafter\endgroup
- \expandafter\ifx\csname#1\endcsname\relax
- \expandafter\@firstoftwo
- \else
- \expandafter\@secondoftwo
- \fi}
-\newcommand*{\RS@removedef}[1]{%
- \RS@namelet{#1}\@undefined%
- \RS@ifundefined{#1 }{}{\RS@namelet{#1 }\@undefined}}
-\newcommand*{\RS@testednamedef}[1]{%
- \RS@ifnamedefinable{#1}\RS@namedef{#1}}
-\newcommand*{\RS@testedrobustnamedef}[1]{%
- \RS@ifnamedefinable{#1}\RS@robustnamedef{#1}}
-\long\def\RS@ifnamedefinable #1{%
- \edef\reserved@a{#1}%
- \RS@ifundefined\reserved@a
- {\edef\reserved@b{\expandafter\@carcube \reserved@a xxx\@nil}%
- \ifx \reserved@b\@qend \RS@notdefinable\else
- \ifx \reserved@a\@qrelax \RS@notdefinable\else
- \PackageInfo{\RS@pkgname}{\@backslashchar\reserved@a\space created}%
- \fi
- \fi}%
- \RS@notdefinable}
-\gdef\RS@notdefinable{%
- \PackageError{\RS@pkgname}{%
- Command \@backslashchar\reserved@a\space
- already defined.\MessageBreak
- Or name \@backslashchar\@qend... illegal.\MessageBreak
- It can not be redefined by the \@backslashchar newref%
- }{%
- If \@backslashchar\reserved@a\space is not important\MessageBreak
- then \protect\let\@backslashchar\reserved@a%
- =\protect\relax,\MessageBreak
- else use a different \@backslashchar newref.}%
- }
-\newcommand*{\RS@setbool}[2]{%
- \lowercase{\def\@tempa{#2}}%
- \@ifundefined{@tempswa\@tempa}%
- {\PackageError{\RS@pkgname}%
- {You can only set the option to `true' or `false'}\@ehc}%
- {\csname#1\@tempa\endcsname}}
-\def\RS@firstcap#1#2\@nil{%
- \iffalse{\fi
- \uppercase{\edef\RS@cap{\iffalse}\fi#1}#2}}%
-\newif\ifRS@keyactive
-\@ifpackagewith{\@currname}{nokeyprefix}%
- {\RS@keyactivefalse}%
- {\RS@keyactivetrue}
-\DeclareOption{nokeyprefix}{\OptionNotUsed}
-\newif\ifRSstar\RSstarfalse
-\newif\ifRSnameon\RSnameontrue
-\newif\ifRScapname\RScapnamefalse
-\newif\ifRSplural\RSpluralfalse
-\newif\ifRSlsttwo\RSlsttwofalse
-\newcommand*{\newref}[1]{%
- \lowercase{\def\RS@tempa{#1}}%
- \expandafter\RS@newref\expandafter{\RS@tempa}}
-\newcommand*{\RS@newref}[2]{%
- \RS@clearref{#1}%
- \ifRS@keyactive
- \define@key{RS@#1}{key}[#1:]{\RS@namedef{RS@#1@key}{##1}}%
- \else
- \define@key{RS@#1}{key}[]{\RS@namedef{RS@#1@key}{##1}}%
- \fi
- \define@key{RS@#1}{s}[true]{\RS@setbool{RSplural}{##1}}%
- \define@key{RS@#1}{name}[]{\RS@namedef{RS@#1@name}{##1}}%
- \define@key{RS@#1}{names}[]{\RS@namedef{RS@#1@names}{##1}}%
- \define@key{RS@#1}{Name}[]{\RS@namedef{RS@#1@Name}{##1}}%
- \define@key{RS@#1}{Names}[]{\RS@namedef{RS@#1@Names}{##1}}%
- \define@key{RS@#1}{rngtxt}[\space to~]{\RS@namedef{RS@#1@rngtxt}{##1}}%
- \define@key{RS@#1}{lsttwotxt}[\space and~]{\RS@namedef{RS@#1@lsttwotxt}{##1}}%
- \define@key{RS@#1}{lsttxt}[\space and~]{\RS@namedef{RS@#1@lsttxt}{##1}}%
- \define@key{RS@#1}{refcmd}[\ref{####1}]{\RS@namedef{RS@#1@rcmd}####1{##1}}%
- \define@key{RS@#1}{xr}[]{\RS@namedef{RS@#1@xr}{##1}}%
- \define@key{RS@#1}{vref}[true]{\RS@namedef{RS@#1vref}{##1}}%
- \RS@setkeys{RS@#1}{key,
- s=false,
- name,names,Name,Names,
- rngtxt,lsttwotxt,lsttxt,
- refcmd,
- xr,
- vref=false}%
- \RS@setkeys{RS@#1}{#2}%
- \RS@buildref{#1}%
- }
-\newcommand*{\RS@clearref}[1]{%
- \RS@ifundefined{RS@#1@template}
- {\RS@namedef{RS@#1@template}{#1}%
- \PackageInfo{\RS@pkgname}%
- {New reference template \protect\newref{#1}}{}}
- {\PackageInfo{\RS@pkgname}%
- {Reference template \protect\newref{#1} redefined}{}
- \RS@firstcap#1\@nil
- \RS@removedef{#1key}%
- \RS@removedef{#1label}%
- \RS@removedef{#1ref}%
- \RS@removedef{\RS@cap ref}%
- \RS@removedef{#1rangeref}%
- \RS@removedef{\RS@cap rangeref}%
- \RS@removedef{#1pageref}%
- }%
- }
-\newcommand*{\RS@buildref}[1]{%
- \RS@firstcap#1\@nil
- \RS@testednamedef{#1key}{\RS@nameuse{RS@#1@key}}
- \RS@testednamedef{#1label}##1{\label{\RS@nameuse{RS@#1@key}##1}}
- \RS@testedrobustnamedef{#1ref}{\RScapnamefalse\RS@cmd{ref}{#1}}
- \RS@testedrobustnamedef{\RS@cap ref}{\RScapnametrue\RS@cmd{ref}{#1}}
- \RS@testedrobustnamedef{#1rangeref}{\RScapnamefalse\RS@cmd{rangeref}{#1}}
- \RS@testedrobustnamedef{\RS@cap rangeref}{\RScapnametrue\RS@cmd{rangeref}{#1}}
- \RS@testedrobustnamedef{#1pageref}{\RScapnamefalse\RS@cmd{pageref}{#1}}
- }
-\newcommand*{\RS@cmd}[2]{%
- \@ifstar{\RSstartrue\RSnameonfalse\RS@@cmd{#1}{#2}}%
- {\RSstarfalse\RSnameontrue\RS@@cmd{#1}{#2}}}
-\newcommand*{\RS@@cmd}[2]{%
- \@ifnextchar[%
- {\RS@nameuse{RS@#1}{#2}}%
- {\RS@nameuse{RS@#1}{#2}[]}}
-\def\RS@ref#1[#2]#3{%
- \begingroup
- \RS@setkeys{RS@#1}{#2}%
- \@safe@activestrue%
- \edef\RS@tmpa{\zap@space#3 \@empty}%
- \@safe@activesfalse%
- \edef\RS@tmpa{\noexpand\RS@@ref{#1} \RS@tmpa,\relax\noexpand\@eolst}%
- \RS@tmpa%
- \endgroup}
-\def\RS@@ref#1 #2,#3\@eolst{%
- \ifx\relax#3\relax
- \RS@makename{#1}%
- \RS@makeref{#1}{#2}%
- \RS@makevpageref{#1}{#2}%
- \else
- \RSpluraltrue%
- \RS@makename{#1}%
- \RS@makeref{#1}{#2}%
- \RS@makevpageref{#1}{#2}%
- \RSnameonfalse%
- \RSlsttwotrue%
- \RS@@@ref{#1} #3\@eolst%
- \fi}
-\def\RS@@@ref#1 #2,#3\@eolst{%
- \ifx\relax#3\relax
- \ifRSlsttwo
- \RS@nameuse{RS@#1@lsttwotxt}%
- \else
- \RS@nameuse{RS@#1@lsttxt}%
- \fi
- \RS@makeref{#1}{#2}%
- \RS@makevpageref{#1}{#2}%
- \else
- \RSlsttwofalse%
- \unskip,\space%
- \RS@makeref{#1}{#2}%
- \RS@makevpageref{#1}{#2}%
- \RS@@@ref{#1} #3\@eolst%
- \fi}
-\def\RS@rangeref#1[#2]#3#4{%
- \begingroup
- \RS@setkeys{RS@#1}{#2}%
- \RSpluraltrue%
- \RS@makename{#1}%
- \RS@makeref{#1}{#3}%
- \RS@nameuse{RS@#1@rngtxt}%
- \RSnameonfalse%
- \RS@makeref{#1}{#4}%
- \RS@makevpagerefrange{#1}{#3}{#4}%
- \endgroup}
-\def\RS@pageref#1[#2]#3{%
- \begingroup%
- \RS@setkeys{RS@#1}{#2}%
- \RS@ifvref{#1}%
- {\mbox{}\vpageref*{\RS@lbl{#1}{#3}}}%
- {\reftextfaraway{\RS@lbl{#1}{#3}}}%
- {\pageref{\RS@lbl{#1}{#3}}}%
- \endgroup}
-\newcommand*{\RS@true}{true}
-\newcommand*{\RS@false}{false}
-\newcommand*{\RS@far}{far}
-\newcommand{\RS@ifvref}[4]{%
- \edef\RS@tempa{\RS@nameuse{RS@#1vref}}%
- \ifx\RS@tempa\RS@true\relax
- #2%
- \else\ifx\RS@tempa\RS@far\relax
- #3%
- \else\ifx\RS@tempa\RS@false\relax
- #4%
- \else
- \PackageError{\RS@pkgname}%
- {You can only set the vref option to `true', `far' or `false'}\@ehc
- \fi\fi\fi}
-\newcommand{\RS@makename}[1]{%
- \ifRSstar\else\ifRSnameon
- \ifRSplural
- \ifRScapname
- \RS@nameuse{RS@#1@Names}%
- \else
- \RS@nameuse{RS@#1@names}%
- \fi
- \else
- \ifRScapname
- \RS@nameuse{RS@#1@Name}%
- \else
- \RS@nameuse{RS@#1@name}%
- \fi
- \fi
- \fi\fi
- }
-\newcommand*{\RS@lbl}[2]{%
- \RS@nameuse{RS@#1@xr}\RS@nameuse{RS@#1@key}#2%
- }
-\newcommand{\RS@makeref}[2]{%
- \RS@nameuse{RS@#1@rcmd}{\RS@lbl{#1}{#2}}%
- }
-\newcommand{\RS@makevpageref}[2]{%
- \RS@ifvref{#1}%
- {\vpageref[\unskip]{\RS@lbl{#1}{#2}}}%
- { \reftextfaraway{\RS@lbl{#1}{#2}}}%
- {}%
- }
-\newcommand{\RS@makevpagerefrange}[3]{%
- \RS@ifvref{#1}%
- {\space\vpagerefrange[\unskip]{\RS@lbl{#1}{#2}}{\RS@lbl{#1}{#3}}}%
- {\space\vpagerefrange[\unskip]{\RS@lbl{#1}{#2}}{\RS@lbl{#1}{#3}}}%
- {}%
- }
-\AtBeginDocument{%
- \providecommand{\vpageref}{%
- \PackageError{\RS@pkgname}%
- {The vref option used, but varioref.sty not loaded.}%
- {Load varioref.sty}}
- \providecommand{\reftextfaraway}{%
- \PackageError{\RS@pkgname}%
- {The vref=far option used, but varioref.sty not loaded.}%
- {Load varioref.sty}}
- \providecommand{\vpagerefrange}{%
- \PackageError{\RS@pkgname}%
- {The vref option used, but varioref.sty not loaded.}%
- {Load varioref.sty}}
- }
-\def\RSaddto#1#2{%
- #2%
- \@temptokena{#2}%
- \ifx#1\relax
- \let#1\@empty
- \fi
- \ifx#1\undefined
- \edef#1{\the\@temptokena}%
- \else
- \toks@\expandafter{#1}%
- \edef#1{\the\toks@\the\@temptokena}%
- \fi
- \@temptokena{}\toks@\@temptokena}
-\def\DeclareLangOpt#1#2{%
- \edef\RS@tempa{\expandafter\@gobble\string#2}%
- \RS@ifundefined{\RS@tempa}%
- {\PackageError{\RS@pkgname}{%
- Unknown definitions \@backslashchar\RS@tempa\MessageBreak
- for language option `#1'}{}}%
- {\DeclareOption{#1}{%
- \AtBeginDocument{\expandafter\RSaddto\csname extras#1\endcsname #2}}}%
- }
-\newcommand*{\RS@cfgfile}{refstyle.cfg}
-\newcommand*{\RS@reffile}{refstyle.def}
-\@ifpackagewith{\@currname}{noconfig}%
- {\PackageInfo{\RS@pkgname}{No config file loaded}}%
- {\InputIfFileExists{\RS@reffile}%
- {\PackageInfo{\RS@pkgname}{Local config file \RS@reffile\space used}}
- {\InputIfFileExists{\RS@cfgfile}%
- {\PackageInfo{\RS@pkgname}{Config file \RS@cfgfile\space used}}%
- {\PackageInfo{\RS@pkgname}{No config file found}}}}
-\DeclareOption{noconfig}{\OptionNotUsed}%
-\ProcessOptions*\relax
-\endinput
-%%
-%% End of file `refstyle.sty'.
diff --git a/macros/latex/contrib/schooldocs/schooldocs-examples.pdf b/macros/latex/contrib/schooldocs/schooldocs-examples.pdf
index e4277bbdbe..1d653303b0 100644
--- a/macros/latex/contrib/schooldocs/schooldocs-examples.pdf
+++ b/macros/latex/contrib/schooldocs/schooldocs-examples.pdf
Binary files differ
diff --git a/macros/latex/contrib/schooldocs/schooldocs-examples.tex b/macros/latex/contrib/schooldocs/schooldocs-examples.tex
new file mode 100644
index 0000000000..0c35f10b7a
--- /dev/null
+++ b/macros/latex/contrib/schooldocs/schooldocs-examples.tex
@@ -0,0 +1,327 @@
+
+\documentclass[a4paper,11pt]{article}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[english]{babel}
+\usepackage{times,lmodern,charter}
+\usepackage{schooldocs}
+\usepackage{enumerate}
+\usepackage{multicol}
+\usepackage{centeredline}
+\usepackage{hyperref}
+\usepackage{lipsum}
+
+\definecolor{darkbrown}{rgb}{0.5,0.1,0.1}
+
+\pagestyle{collection}
+\title{The schooldocs package}
+\subject{Example file for titles and styles}
+\author{Antoine Missier}
+\institute{Royal College of Pataphysics}
+\date{December 28, 2023}
+\renewcommand{\titlestyle}{\Huge} %\sffamily
+\hypersetup{colorlinks, linkcolor=blue}
+%\setcounter{tocdepth}{0}
+
+\begin{document}
+
+\maketitle
+
+On the following pages we showcase various title formatting options
+and the different styles.
+This initial page has been created using the \textbf{collection} style, for which
+the main title style has been redefined through
+\verb|\renewcommand{\titlestyle}{\Huge}|.
+
+
+\medskip
+In most examples (dated may 4, 2020), we have utilized
+the \textsf{lmodern} package font, which pairs well with a sans-serif title style.
+To achieve this, simply redefine the title style using
+\smallskip
+\centeredline{\verb|\renewcommand\titelstyle{\LARGE\bfseries\sffamily}|.}
+
+\smallskip
+For examples dated january 25 or december 28, 2023, we have opted
+for the \textsf{charter}, or \textsf{times} fonts.
+For these fonts, the default title style setting
+\verb|\LARGE\bfseries| is suitable.
+
+
+\seprule
+
+\begin{center} \Large \color{darkbrown}
+\bfseries Table of contents
+\end{center}
+
+\bigskip
+
+\begin{multicols}{2}
+\begin{enumerate}[\bfseries 1.]
+ \item \hyperlink{schooldocs-example-center}{\bfseries The standard title}
+ \item \hyperlink{schooldocs-example-left}{\bfseries A left-aligned title}
+ \item \hyperlink{schooldocs-example-right}{\bfseries A right-aligned title}
+ \item \hyperlink{schooldocs-example-norule}{\bfseries
+ The standard title without rule}
+ \item \hyperlink{schooldocs-example-boxed}{\bfseries A title in boxed shape}
+ \item \hyperlink{schooldocs-example-seprule}{\bfseries
+ The \texttt{\textbackslash seprule} and \texttt{\textbackslash correct} macros}
+ \item \hyperlink{schooldocs-example-small}{\bfseries A ``small'' title}
+ \item \hyperlink{schooldocs-example-classic}{\bfseries The classic style layout}
+ \item \hyperlink{schooldocs-example-elegant}{\bfseries The elegant style layout}
+ \item \hyperlink{schooldocs-example-modern}{\bfseries The modern style layout}
+ \item \hyperlink{schooldocs-example-soft}{\bfseries The soft style layout}
+ \item \hyperlink{schooldocs-example-exam}{\bfseries The exam style layout}
+ \item \hyperlink{schooldocs-example-examcorrect}{\bfseries
+ Exam style with the \texttt{\textbackslash correct} macro}
+ \item \hyperlink{schooldocs-example-collection}{\bfseries The collection style layout}
+ \item \hyperlink{schooldocs-example-identity}{\bfseries
+ The identity style in collection}
+ \item \hyperlink{schooldocs-example-small-identity}{\bfseries
+ A ``small'' title with identity}
+ \item \hyperlink{schooldocs-example-modern-small-identity}{\bfseries
+ Small title, identity and modern style}
+ \item \hyperlink{schooldocs-example-left-identity}{\bfseries
+ A left-aligned title with identity}
+\end{enumerate}
+\end{multicols}
+
+\newpage
+\hypertarget{schooldocs-example-center}{}
+\addcontentsline{toc}{section}{The standard title}
+
+\fontfamily{lmr}\selectfont
+\pagestyle{empty}
+\lfoot{}
+\cfoot{}
+\rfoot{}
+\renewcommand{\subjectstyle}{}
+\renewcommand{\authorstyle}{}
+\renewcommand{\datestyle}{}
+\renewcommand{\titlestyle}{\LARGE\bfseries\sffamily}
+\renewcommand\subjectstyle{\large}
+\setlength{\titletopskip}{-1.32cm}
+\setlength\titlesep{2\medskipamount}
+\schooldocstitles
+\title{The standard title}
+\subject[Pathography / M2A]{Pathography / Master 2A}
+\date{May 4, 2020}
+
+\maketitle
+\lipsum[1]
+
+\newpage
+\hypertarget{schooldocs-example-left}{}
+\addcontentsline{toc}{section}{A left-aligned title}
+
+\renewcommand{\titleflush}{flushleft}
+\title{A left-aligned title}
+\maketitle
+\lipsum[1]
+
+\newpage
+\hypertarget{schooldocs-example-right}{}
+
+\renewcommand{\titleflush}{flushright}
+\title{A right-aligned title}
+\maketitle
+\lipsum[1]
+
+\newpage
+\hypertarget{schooldocs-example-norule}{}
+
+\renewcommand{\titleflush}{center}
+\title{The standard title without rule}
+\maketitle[0pt]
+\lipsum[1]
+
+\newpage
+\hypertarget{schooldocs-example-boxed}{}
+
+\renewcommand{\titlestyle}{\LARGE\sffamily\bfseries\boxedshape}
+\title{A title in boxed shape}
+\maketitle
+\lipsum[1]
+
+\newpage
+\hypertarget{schooldocs-example-seprule}{}
+
+\renewcommand{\titlestyle}{\LARGE\bfseries\sffamily}
+\title{The \textbackslash seprule and \textbackslash correct macros}
+\correct
+\maketitle
+\lipsum[1]\seprule\lipsum[2]\seprule\lipsum[3]
+
+\newpage
+\hypertarget{schooldocs-example-small}{}
+
+\fontfamily{bch}\selectfont
+\title{A ``small'' title}
+\date{January 25, 2023}
+\makesmalltitle
+\lipsum[1]
+
+\newpage
+\hypertarget{schooldocs-example-classic}{}
+
+\fontfamily{lmr}\selectfont
+\setcounter{page}{1}
+\pagestyle{classic}
+\title[The classic style]{The classic style layout}
+\date{May 4, 2020}
+\maketitle
+\section*{Pellentesque a nulla}
+\lipsum[1-3]
+\section*{Vestibulum lectus}
+\lipsum[5-9]
+
+\newpage
+\hypertarget{schooldocs-example-elegant}{}
+
+\setcounter{page}{1}
+\setcounter{section}{0}
+\addtolength{\headheight}{-\baselineskip}
+\pagestyle{elegant}
+\title[The elegant style]{The elegant style layout}
+\schooldocstitles
+\maketitle
+\section*{Pellentesque a nulla}
+\lipsum[1-3]
+\section*{Vestibulum lectus}
+\lipsum[5-9]
+
+\newpage
+\hypertarget{schooldocs-example-modern}{}
+
+\setcounter{page}{1}
+\setcounter{section}{0}
+\renewcommand{\headrulewidth}{0.4pt}
+\pagestyle{modern}
+\title[The modern style]{The modern style layout}
+\maketitle
+\section*{Pellentesque a nulla}
+\lipsum[1-3]
+\section*{Vestibulum lectus}
+\lipsum[5-9]
+
+\newpage
+\hypertarget{schooldocs-example-soft}{}
+
+\setcounter{page}{1}
+\setcounter{section}{0}
+\pagestyle{soft}
+\title[The soft style]{The soft style layout}
+\maketitle
+\section*{Pellentesque a nulla}
+\lipsum[1-3]
+\section*{Vestibulum lectus}
+\lipsum[5-9]
+
+\newpage
+\hypertarget{schooldocs-example-exam}{}
+
+\setcounter{page}{1}
+\setcounter{section}{0}
+\fontfamily{ptm}\selectfont
+\pagestyle{exam}
+\title[The exam style]{The exam style layout}
+\date{December 28, 2023}
+\subtitle{Duration of the test: 2\,h}
+\maketitle
+\section*{Pellentesque a nulla}
+\lipsum[1-3]
+\section*{Vestibulum lectus}
+\lipsum[5-9]
+
+\newpage
+\hypertarget{schooldocs-example-examcorrect}{}
+
+\setcounter{page}{1}
+\setcounter{section}{0}
+\correct
+\maketitle
+\section*{Pellentesque a nulla}
+\lipsum[1-3]
+\section*{Vestibulum lectus}
+\lipsum[5-9]
+
+\newpage
+\hypertarget{schooldocs-example-collection}{}
+
+\setcounter{page}{1}
+\setcounter{section}{0}
+\fontfamily{bch}\selectfont
+\pagestyle{collection}
+\title[The collection style]{The collection style layout}
+\date{December 28, 2023}
+\subtitle{Duration of the test: 2\,h}
+\maketitle
+\section*{Ultrices bibendum}
+\lipsum
+\lipsum[1-3]
+\section*{Etiam facilisis}
+\lipsum[1-5]
+
+\newpage
+\hypertarget{schooldocs-example-identity}{}
+
+\thispagestyle{identity}
+Here we present a single page with the \textbf{identity} style
+within a document using the collection style.
+\par\medskip
+\textbf{Question:} Analyze the previous text and provide a written summary of its content.
+
+\newpage
+\lfoot{}
+\cfoot{\thepage}
+\rfoot{}
+\renewcommand{\subjectstyle}{}
+\renewcommand{\authorstyle}{}
+\renewcommand{\datestyle}{}
+\hypertarget{schooldocs-example-small-identity}{}
+
+\setcounter{page}{1}
+\renewcommand{\titlestyle}{\LARGE\bfseries}
+\renewcommand\subjectstyle{\large}
+\renewcommand{\headrulewidth}{0pt}
+\setlength{\titletopskip}{-1.32cm}
+\setlength\titlesep{2\medskipamount}
+\title{A ``small'' title}
+\date{January 25, 2023}
+\thispagestyle{identity}
+\schooldocstitles
+\makesmalltitle
+\lipsum[1]
+
+\newpage
+\hypertarget{schooldocs-example-modern-small-identity}{}
+
+\setcounter{page}{1}
+\setcounter{section}{0}
+\title[The modern style]{The modern style layout}
+\pagestyle{modern}
+\thispagestyle{identity}
+\makesmalltitle
+\section*{Pellentesque a nulla}
+\lipsum[1-3]
+\section*{Vestibulum lectus}
+\lipsum[5-6]
+
+\newpage
+\hypertarget{schooldocs-example-left-identity}{}
+
+\setcounter{page}{1}
+\lfoot{}
+\cfoot{}
+\rfoot{}
+\renewcommand{\titleflush}{flushleft}
+\title{A left-aligned title}
+\pagestyle{empty}
+\thispagestyle{identity}
+\schooldocstitles
+\maketitle
+\lipsum[1]
+
+\setcounter{page}{2} % for the lastpage field in headers or footers
+\end{document}
diff --git a/macros/latex/contrib/schooldocs/schooldocs.dtx b/macros/latex/contrib/schooldocs/schooldocs.dtx
index d1cd9a484b..4b1f1c451e 100644
--- a/macros/latex/contrib/schooldocs/schooldocs.dtx
+++ b/macros/latex/contrib/schooldocs/schooldocs.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2020-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+% Copyright (C) 2020-2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
% ----------------------------------------------------------------------
%
% This file may be distributed and/or modified under the
@@ -22,7 +22,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}[2005/12/01]
%<package>\ProvidesPackage{schooldocs}
%<*package>
- [2023/12/28 v1.4 .dtx Layout styles for school documents]
+ [2024/01/31 v1.5 .dtx Layout styles for school documents]
%</package>
%
%<*driver>
@@ -80,7 +80,7 @@
%</driver>
% \fi
%
-% \CheckSum{805}
+% \CheckSum{863}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -110,11 +110,15 @@
% - sffamily discarded from the default titlestyle
% - smalltitletopskip changed from -2.0cm to -1.32cm}
% \changes{v1.2}{2023/01/24}{
-% Small changes in the documentation (charter font is now used)
+% - Small changes in the documentation (charter font is now used)
% and the examples file (with several fonts)}
% \changes{v1.3}{2023/08/28}{English corrections in the documentation}
% \changes{v1.4}{2023/12/28}{
-% headtitlestyle in exam and collection styles set to scshape instead of MakeUppercase}
+% - Headtitlestyle in exam and collection styles set to scshape instead of MakeUppercase}
+% \changes{v1.5}{2024/01/30}{
+% - Possibility to call maketitle several times with different information fields
+% that can be changed outside the preamble
+% - The schooldocs-examples.pdf file is now generated in a single compilation}
%
% \GetFileInfo{schooldocs.dtx}
%
@@ -675,20 +679,30 @@
% \medskip
% \subsection{Information fields}
%
+% The PDF information fields are automatically filled in using the information macros,
+% but this only works in the preamble, hence the test |\ifx@onlypreamble@notprerr|.
+% This allows using these macros outside the preamble, which is the normal behavior
+% for |\title|, |\date|, |\author|, etc. with the 'article' class.
+%
% Once defined, information fields are initially set to empty
% to ensure that tests for empty fields work correctly.
+
%
% \begin{macrocode}
\renewcommand{\title}[2][]{\long\def\@title{#2}
\ifthenelse{\equal{#1}{}}{\def\@headtitle{#2}}{\def\@headtitle{#1}}
- \@ifpackageloaded{hyperref}{\hypersetup{pdftitle={\@headtitle}}}{}
+ \ifx\@onlypreamble\@notprerr\else
+ \@ifpackageloaded{hyperref}{\hypersetup{pdftitle={\@headtitle}}}{}
+ \fi
}
\title{}
\author{}
\newcommand\school[1]{\long\def\@school{#1}
- \@ifpackageloaded{hyperref}{
- \hypersetup{pdfauthor={\@author\ (\@school)}}}{}
+ \ifx\@onlypreamble\@notprerr\else
+ \@ifpackageloaded{hyperref}{
+ \hypersetup{pdfauthor={\@author\ (\@school)}}}{}
+ \fi
}
\school{}
\newcommand{\institute}{\school}
@@ -696,7 +710,9 @@
\let\subject\relax
\newcommand{\subject}[2][]{\long\def\@subject{#2}
\ifthenelse{\equal{#1}{}}{\def\@headsubject{#2}}{\def\@headsubject{#1}}
- \@ifpackageloaded{hyperref}{\hypersetup{pdfsubject={\@headsubject}}}{}
+ \ifx\@onlypreamble\@notprerr\else
+ \@ifpackageloaded{hyperref}{\hypersetup{pdfsubject={\@headsubject}}}{}
+ \fi
}
\def\@subject{}
\def\@headsubject{}
@@ -764,55 +780,64 @@
%
% \subsection{Title composition}
%
+% The first macro, |\schooldocstitles|, aims to define the default composition of titles.
+% Several styles redefine their own title composition.
+% This macro allows, when using |\maketitle| multiple times at different places
+% in the document, to revert to the default definition when a style has modified
+% the title definition.
% \begin{macrocode}
-\renewcommand{\maketitle}[1][\seprulelength]{
- \mbox{}\par\vspace{\titletopskip}
- \begin{\titleflush}
- {\color{titlecolor}
- {\titlestyle{\@title}}
- \ifx\@subject\@empty\else
- \par\vspace{\titlesep}\subjectstyle\@subject
- \fi
- \ifthenelse{\equal{\@date}{}}{}{%
- \par\vspace{0.5\titlesep} \datestyle\@date}
- \par\vspace{0.5\titlesep}
- }
- \ifthenelse{\lengthtest{#1 > 0cm}}{\rule{#1}{\seprulewidth}}{}
- \end{\titleflush}
- \vspace{\titlebottomskip}
-}
+\newcommand{\schooldocstitles}{
+ \renewcommand{\maketitle}[1][\seprulelength]{
+ \newpage\mbox{}\par\vspace{\titletopskip}
+ \begin{\titleflush}
+ {\color{titlecolor}
+ {\titlestyle{\@title}}
+ \ifx\@subject\@empty\else
+ \par\vspace{\titlesep}\subjectstyle\@subject
+ \fi
+ \ifthenelse{\equal{\@date}{}}{}{%
+ \par\vspace{0.5\titlesep} \datestyle\@date}
+ \par\vspace{0.5\titlesep}
+ }
+ \ifthenelse{\lengthtest{##1 > 0cm}}{\rule{##1}{\seprulewidth}}{}
+ \end{\titleflush}
+ \vspace{\titlebottomskip}
+ }
-\newcommand{\makesmalltitle}{
- \mbox{}\par\vspace{\smalltitletopskip}
- \begin{center}
- {\color{titlecolor}
- {\titlestyle{\@title}}
- \hfill \subjectstyle\@subject
- \ifthenelse{\equal{\@date}{}}{}{%
- \enskip --\enskip \smalltitledatestyle\@date}
- }
- \rule{\linewidth}{\seprulewidth}
- \end{center}
- \vspace{\titlebottomskip}
-}
+ \let\makesmalltitle\relax
+ \newcommand{\makesmalltitle}{
+ \newpage\mbox{}\par\vspace{\smalltitletopskip}
+ \begin{center}
+ {\color{titlecolor}
+ {\titlestyle{\@title}}
+ \hfill \subjectstyle\@subject
+ \ifthenelse{\equal{\@date}{}}{}{%
+ \enskip --\enskip \smalltitledatestyle\@date}
+ }
+ \rule{\linewidth}{\seprulewidth}
+ \end{center}
+ \vspace{\titlebottomskip}
+ }
-\newcommand\correct{%
- \let\@originalheadtitle\@headtitle
- \def\@headtitle{\@originalheadtitle ~--~\correctname}
- \@ifpackageloaded{hyperref}{%
- \AtBeginDocument{\hypersetup{pdftitle={\@headtitle}}}}{}
- \let\@originaltitle\@title
- \def\@title{\@originaltitle ~--~\correctname}
+ \let\correct\relax
+ \newcommand\correct{%
+ \let\@originalheadtitle\@headtitle
+ \def\@headtitle{\@originalheadtitle ~--~\correctname}
+ \ifx\@onlypreamble\@notprerr\else
+ \@ifpackageloaded{hyperref}{%
+ \AtBeginDocument{\hypersetup{pdftitle={\@headtitle}}}}{}
+ \fi
+ \let\@originaltitle\@title
+ \def\@title{\@originaltitle ~--~\correctname}
+ }
}
+\schooldocstitles
\newcommand{\seprule}[1][\seprulelength]{\begin{center}
\raisebox{0.25\baselineskip}{\rule{#1}{\seprulewidth}}\end{center}}
% \end{macrocode}
-% The use of |\AtBeginDocument| is necessary in the |\correct| macro because
-% |\correctname| could be redefined by \textsf{babel} at |\begin{document}|.
%
-% \bigskip
% \subsection{Basic styles}
%
% In the \textbf{classic} style, the header is displayed on two lines,
@@ -832,7 +857,7 @@
\cfoot{\footstyle \thepage /\pageref{LastPage}}
\setlength{\titletopskip}{-0.67cm}
\renewcommand{\maketitle}[1][\seprulelength]{%
- \mbox{}\par\vspace{\titletopskip}
+ \newpage\mbox{}\par\vspace{\titletopskip}
\begin{\titleflush}
{\color{titlecolor}\titlestyle{\@title}}
\par\vspace{0.5\titlesep}
@@ -841,7 +866,7 @@
\vspace{\titlebottomskip}
}
\renewcommand{\makesmalltitle}{
- \mbox{}\par\vspace{\smalltitletopskip}
+ \newpage\mbox{}\par\vspace{\smalltitletopskip}
\begin{center}
{\color{titlecolor}
{\titlestyle{\@title}}
@@ -879,7 +904,7 @@
\headdatestyle\@date\ignorespaces}{}
}
\renewcommand{\maketitle}[1][\seprulelength]{%
- \mbox{}\par\vspace{\titletopskip}
+ \newpage\mbox{}\par\vspace{\titletopskip}
\begin{\titleflush}
{\color{titlecolor}
{\titlestyle{\@title}}
@@ -893,7 +918,7 @@
\vspace{\titlebottomskip}
}
\renewcommand{\makesmalltitle}{
- \mbox{}\par\vspace{\smalltitletopskip}
+ \newpage\mbox{}\par\vspace{\smalltitletopskip}
\begin{center}
{\color{titlecolor}
{\titlestyle{\@title}}
@@ -922,7 +947,7 @@
}
\setlength{\titletopskip}{-0.67cm}
\renewcommand{\maketitle}[1][\seprulelength]{%
- \mbox{}\par\vspace{\titletopskip}
+ \newpage\mbox{}\par\vspace{\titletopskip}
\begin{\titleflush}
{\color{titlecolor}\titlestyle{\@title}}
\par\vspace{0.5\titlesep}
@@ -931,7 +956,7 @@
\vspace{\titlebottomskip}
}
\renewcommand{\makesmalltitle}{
- \mbox{}\par\vspace{\smalltitletopskip}
+ \newpage\mbox{}\par\vspace{\smalltitletopskip}
\begin{center}
{\color{titlecolor}
{\titlestyle{\@title}}
@@ -973,18 +998,22 @@
\setlength{\titlesep}{2\bigskipamount}
\renewcommand{\titlestyle}{\LARGE\MakeUppercase}
\renewcommand{\subjectstyle}{\Large\bfseries}
+ \let\subtitlestyle\relax
\newcommand{\subtitlestyle}{\large\slshape}
+ \let\titlecorrectstyle\relax
\newcommand*{\titlecorrectstyle}{\color{red}\large\scshape}
\renewcommand\correct{%
\let\@originalheadtitle\@headtitle
\def\@headtitle{\@originalheadtitle ~--~\correctname}
- \@ifpackageloaded{hyperref}{%
- \AtBeginDocument{\hypersetup{pdftitle={\@headtitle}}}}{}
+ \ifx\@onlypreamble\@notprerr\else
+ \@ifpackageloaded{hyperref}{%
+ \AtBeginDocument{\hypersetup{pdftitle={\@headtitle}}}}{}
+ \fi
\renewcommand{\subtitlestyle}{\titlecorrectstyle}
\subtitle{\correctname}
}
\renewcommand{\maketitle}[1][\seprulelength]{%
- \mbox{}\par\vspace{\titletopskip}
+ \newpage\mbox{}\par\vspace{\titletopskip}
\begin{center}
{\color{titlecolor}
{\titlestyle{\@title}}
@@ -1004,7 +1033,11 @@
\fancypagestyle{collection}{%
\lhead{\headstyle\headtitlestyle\@headtitle}
- \AtBeginDocument{\renewcommand{\sectionmark}[1]{\markboth{##1}{}}}
+ \ifx\@onlypreamble\@notprerr
+ \renewcommand{\sectionmark}[1]{\markboth{##1}{}}
+ \else
+ \AtBeginDocument{\renewcommand{\sectionmark}[1]{\markboth{##1}{}}}
+ \fi
\rhead{\headstyle\headsubjectstyle\leftmark} %\@section
\lfoot{\footstyle\schoolstyle \@school}
\cfoot{}
@@ -1017,7 +1050,7 @@
\renewcommand{\datestyle}{\Large}
\renewcommand{\maketitle}[1][\seprulelength]{%
\thispagestyle{empty}
- \mbox{}\par\vspace{\titletopskip}
+ \newpage\mbox{}\par\vspace{\titletopskip}
\begin{center}
{\color{titlecolor}
{\titlestyle{\@title}}
diff --git a/macros/latex/contrib/schooldocs/schooldocs.ins b/macros/latex/contrib/schooldocs/schooldocs.ins
index ec68fae155..4a6e0784ac 100644
--- a/macros/latex/contrib/schooldocs/schooldocs.ins
+++ b/macros/latex/contrib/schooldocs/schooldocs.ins
@@ -1,5 +1,5 @@
%%
-%% Copyright (C) 2020-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+%% Copyright (C) 2020-2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
%%
%% This file may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License, either version 1.3 of this license
@@ -21,7 +21,7 @@
This is a generated file.
-Copyright (C) 2020-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+Copyright (C) 2020-2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
This file may be distributed and/or modified under the conditions of
the LaTeX Project Public License, either version 1.3 of this license
diff --git a/macros/latex/contrib/schooldocs/schooldocs.pdf b/macros/latex/contrib/schooldocs/schooldocs.pdf
index 18ba710bac..760002f3c5 100644
--- a/macros/latex/contrib/schooldocs/schooldocs.pdf
+++ b/macros/latex/contrib/schooldocs/schooldocs.pdf
Binary files differ
diff --git a/macros/luatex/latex/novel/README.md b/macros/luatex/latex/novel/README.md
index 12a511ac4f..81ab14b3e2 100644
--- a/macros/luatex/latex/novel/README.md
+++ b/macros/luatex/latex/novel/README.md
@@ -2,14 +2,11 @@
The `novel` document class is intended for popular fiction books,
printed to paper: murder mystery, historical romance, etc.
-
Special attention to the needs of print-on-demand.
-Site github.com/rallg/novel is the canonical project page for the
-Novel document class, as seen in TeXlive and at CTAN. It is now
-in version 1.83, November 2023. Only change from 1.82 is a minor typo.
+Due to changes in print technology over the years, much of `novel` code
+is now unnecessary. Also, it offers many rarely-used features that bloat
+the code and its documentation. If you have not already used `novel`,
+the simpler `novelette` document class might be better for your
+purpose. Expected 2024.
-Also see the `novelette` document class, by the same developer.
-It is much simpler, yet does what it needs to do. Expected in
-late November, 2023. Site github.com/rallg/novelette but not yet
-at CTAN, since it is still Alpha stage.
diff --git a/macros/luatex/latex/novel/doc/extras/CPmodified.otf b/macros/luatex/latex/novel/doc/extras/CPmodified.otf
deleted file mode 100644
index 04ca84e6fb..0000000000
--- a/macros/luatex/latex/novel/doc/extras/CPmodified.otf
+++ /dev/null
Binary files differ
diff --git a/macros/luatex/latex/novel/doc/extras/novel-Gallery-ChapterStart.pdf b/macros/luatex/latex/novel/doc/extras/novel-Gallery-ChapterStart.pdf
deleted file mode 100644
index 2e623ca54b..0000000000
--- a/macros/luatex/latex/novel/doc/extras/novel-Gallery-ChapterStart.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/luatex/latex/novel/doc/extras/novel-example.pdf b/macros/luatex/latex/novel/doc/extras/novel-example.pdf
deleted file mode 100644
index 06dd430daf..0000000000
--- a/macros/luatex/latex/novel/doc/extras/novel-example.pdf
+++ /dev/null
@@ -1,1125 +0,0 @@
-%PDF-1.3
-%ÌÕÁÔÅØÐÄÆ
-4 0 obj
-<< /Type /Metadata /Subtype /XML /Length 2653 >>
-stream
-<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
- <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.1-c043 52.372728, 2009/01/18-15:08:04 ">
- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
- <rdf:Description rdf:about=""
- xmlns:xmp="http://ns.adobe.com/xap/1.0/">
- <xmp:ModifyDate>2023-11-09T11:35:37-08:00</xmp:ModifyDate>
- <xmp:CreateDate>2023-11-09T11:35:37-08:00</xmp:CreateDate>
- <xmp:CreatorTool>LuaLaTeX with novel and microtype</xmp:CreatorTool>
- <xmp:MetadataDate>2023-11-09T11:35:37-08:00</xmp:MetadataDate>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:dc="http://purl.org/dc/elements/1.1/">
- <dc:format>application/pdf</dc:format>
- <dc:title>
- <rdf:Alt>
- <rdf:li xml:lang="x-default">Dark and Stormy</rdf:li>
- </rdf:Alt>
- </dc:title>
- <dc:creator>
- <rdf:Bag>
- <rdf:li>Dirk Hardcase</rdf:li>
- </rdf:Bag>
- </dc:creator>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">
- <xmpMM:DocumentID>uuid:A12D98E081B6A0EC2CBA2D468474F922</xmpMM:DocumentID>
- <xmpMM:InstanceID>uuid:93EBAF4EA76B474D4D8883AFAAE9DBA6</xmpMM:InstanceID>
- <xmpMM:RenditionClass>default</xmpMM:RenditionClass>
- <xmpMM:VersionID>1</xmpMM:VersionID>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
- <pdf:Producer>LuaLaTeX with novel-pdfx and hyperref</pdf:Producer>
- <pdf:Trapped>False</pdf:Trapped>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/">
- <pdfx:GTS_PDFXVersion>PDF/X-1a:2001</pdfx:GTS_PDFXVersion>
- <pdfx:GTS_PDFXConformance>PDF/X-1a:2001</pdfx:GTS_PDFXConformance>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:pdfxid="http://www.npes.org/pdfx/ns/id/">
- <pdfxid:GTS_PDFXVersion>PDF/X-1a:2001</pdfxid:GTS_PDFXVersion>
- </rdf:Description>
- </rdf:RDF>
- </x:xmpmeta>
- <?xpacket end="w"?>
-endstream
-endobj
-7 0 obj
-<< /Length 435 >>
-stream
-0 g 0 G
-0 g 0 G
-0 g 0 G
-1 0 0 1 273.852 438.889 cm
-q
-1.8 0 0 1.8 0 0 cm
-1 0 0 1 -273.852 -438.889 cm
-BT
-/F95 11.3574 Tf
-1 0 0 1 273.852 438.889 Tm [<002500420053004C>-250<0042004F0045>]TJ
-ET
-1 0 0 1 273.852 438.889 cm
-Q
-1 0 0 1 -3.911 -29.589 cm
-q
-2.4 0 0 2.4 0 0 cm
-0.5 g 0.5 G
-1 0 0 1 -269.941 -409.3 cm
-BT
-/F95 11.3574 Tf
-1 0 0 1 269.941 409.3 Tm [<0034005500500053004E005A>]TJ
-0 g 0 G
-ET
-1 0 0 1 269.941 409.3 cm
-Q
-0 g 0 G
-0 g 0 G
-
-endstream
-endobj
-6 0 obj
-<< /Type /Page /Contents 7 0 R /Resources 5 0 R /MediaBox [ 0 0 396 612 ] /CropBox[0 0 396 612]
-
-/TrimBox[0 0 396 612] /Parent 9 0 R >>
-endobj
-5 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F95 8 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-12 0 obj
-<< /Length 32 >>
-stream
-0 g 0 G
-0 g 0 G
-0 g 0 G
-0 g 0 G
-
-endstream
-endobj
-11 0 obj
-<< /Type /Page /Contents 12 0 R /Resources 10 0 R /MediaBox [ 0 0 396 612 ] /CropBox[0 0 396 612]
-
-/TrimBox[0 0 396 612] /Parent 9 0 R >>
-endobj
-10 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ProcSet [ /PDF ] >>
-endobj
-15 0 obj
-<< /Length 1288 >>
-stream
-0 g 0 G
-0 g 0 G
-0 g 0 G
-0 g 0 G
-1 0 0 1 120.852 453.684 cm
-q
-3.6 0 0 3.6 0 0 cm
-1 0 0 1 -120.852 -453.684 cm
-BT
-/F95 11.3574 Tf
-1 0 0 1 120.852 453.684 Tm [<002500420053004C>-250<0042004F0045>]TJ
-ET
-1 0 0 1 120.852 453.684 cm
-Q
-1 0 0 1 -3.912 -44.384 cm
-q
-4.8 0 0 4.8 0 0 cm
-0.5 g 0.5 G
-1 0 0 1 -116.94 -409.3 cm
-BT
-/F95 11.3574 Tf
-1 0 0 1 116.94 409.3 Tm [<0034005500500053004E005A>]TJ
-0 g 0 G
-ET
-1 0 0 1 116.94 409.3 cm
-Q
-1 0 0 1 29.284 -36.986 cm
-q
-1.6 0 0 1.6 0 0 cm
-1 0 0 1 -146.224 -372.314 cm
-BT
-/F83 11.3574 Tf
-1 0 0 1 146.224 372.314 Tm [<0022>-250<0035>49<0042004D0046>-250<00500047>-250<002F004A0048004900550054>]TJ
-ET
-1 0 0 1 146.224 372.314 cm
-Q
-1 0 0 1 -7.368 -71.014 cm
-q
-6 0 0 6 0 0 cm
-1 0 0 1 -138.856 -301.3 cm
-BT
-/F96 11.3574 Tf
-1 0 0 1 138.856 301.3 Tm [<0176>]TJ
-ET
-1 0 0 1 138.856 301.3 cm
-Q
-1 0 0 1 -138.856 -301.3 cm
-BT
-/F83 34.07221 Tf
-1 0 0 1 106.742 215.381 Tm [<0025004A0053004C>-250<002900420053>8<00450044004200540046>]TJ
-/F83 14.19675 Tf
-1 0 0 1 134.49 54.231 Tm [<002F0050004F0046>7<0059004A005400550046004F0055>-250<003100560043004D004A004400420055004A0050004F0054>]TJ
-1 0 0 1 109.27 39.437 Tm [<0022004F005A00550050>7<0058004F>-250<06E8>-250<0022004F005A0051004D004200440046>-250<06E8>-250<0022004F005A>-15<0058004900460053>8<0046>]TJ
-0 g 0 G
-0 g 0 G
-ET
-
-endstream
-endobj
-14 0 obj
-<< /Type /Page /Contents 15 0 R /Resources 13 0 R /MediaBox [ 0 0 396 612 ] /CropBox[0 0 396 612]
-
-/TrimBox[0 0 396 612] /Parent 9 0 R >>
-endobj
-13 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F95 8 0 R /F83 16 0 R /F96 17 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-20 0 obj
-<< /Length 2311 >>
-stream
-0 g 0 G
-0 g 0 G
-0 g 0 G
-0 g 0 G
-BT
-/F101 11.3574 Tf
-1 0 0 1 146.785 290.944 Tm [<0025086D087E0877>-250<086D087A0870>-250<00340880>25<087B087E08790885>]TJ
-/F101 11.3574 Tf
-1 0 0 1 117.136 276.149 Tm [<002400500051>7<005A0053004A004800490055>-250<006908D308D108D208D8>-250<0025004A0053004C>-250<002900420053>8<00450044004200540046>10<000F>]TJ
-1 0 0 1 145.053 261.355 Tm [<0022004D004D>-250<0033004A0048004900550054>-250<00330046005400460053>-15<0057>8<0046>-7<0045000F>]TJ
-1 0 0 1 135.626 231.766 Tm [<00350049004A0054>-250<004A0054>-250<0042>-250<0058>8<00500053004C>-250<00500047>-250<084A00440055004A0050004F000F>]TJ
-1 0 0 1 130.566 216.971 Tm [<0022004D004D>-250<0051>-7<0046005300540050004F0054>-250<0042004F0045>-250<0046>7<0057>8<0046004F00550054>-250<00420053>8<0046>]TJ
-1 0 0 1 120.356 202.177 Tm [<00470053>8<0050004E>-250<005500490046>-250<00420056005500490050005306BC0054>-250<004A004E00420048004A004F00420055004A0050004F000F>]TJ
-1 0 0 1 118.152 187.382 Tm [<0033004600540046004E0043004D0042004F00440046>-250<00550050>-250<0042004F005A>-250<0053>8<00460042004D>-250<0051>-7<0046005300540050004F000D>]TJ
-1 0 0 1 122.707 172.588 Tm [<004D004A0057004A004F0048>-250<00500053>-250<0045004600420045000D>-250<004A0054>-250<00440050004A004F0044004A00450046004F00550042004D000F>]TJ
-1 0 0 1 147.466 142.999 Tm [<002A00340023002F>-250<08D1000E08D208D308D408D508D608D708D808D9000E08DA>]TJ
-1 0 0 1 93.092 113.41 Tm [<002A004F004500460051>-7<0046004F00450046004F0055004D005A>-250<003100560043004D004A005400490046>-7<0045>-250<0043005A>-250<0025004A0053004C>-250<002900420053>8<00450044004200540046>10<000D>]TJ
-1 0 0 1 134.729 98.615 Tm [<0022>50<004F005A00550050>7<0058004F000D>-250<0022>50<004F005A00540055004200550046>-250<003600340022>]TJ
-1 0 0 1 92.701 83.82 Tm [<0058>-15<0058>-15<0058>59<000F0046>7<00590042004E0051004D0046>10<000F00440050004E00100045004900420053>8<004500440042005400460010005100560043004D004A004400420055004A0050004F00540010>]TJ
-1 0 0 1 92.349 54.231 Tm [<003100560043004D004A005400490046005306BC0054>-250<0024004200550042004D00500048004A004F0048000E002A004F000E003100560043004D004A004400420055004A0050004F>-250<0025004200550042>]TJ
-1 0 0 1 137.67 39.437 Tm [<004200570042004A004D00420043004D0046>-250<00560051>-7<0050004F>-250<0053>8<0046>-7<00520056004600540055000F>]TJ
-0 g 0 G
-0 g 0 G
-ET
-
-endstream
-endobj
-19 0 obj
-<< /Type /Page /Contents 20 0 R /Resources 18 0 R /MediaBox [ 0 0 396 612 ] /CropBox[0 0 396 612]
-
-/TrimBox[0 0 396 612] /Parent 9 0 R >>
-endobj
-18 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F101 21 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-24 0 obj
-<< /Length 862 >>
-stream
-0 g 0 G
-0 g 0 G
-0 g 0 G
-0 g 0 G
-BT
-/F83 11.3574 Tf
-1 0 0 1 110.787 424.095 Tm [<003800490046004F>-250<005500490046>-250<004D0050004F0046>-250<00530042004400440050>-7<0050004F>-250<00490050>7<0058004D0054>-250<00420055>-250<004500560054004C000D>]TJ
-1 0 0 1 110.389 409.3 Tm [<0022004F0045>-250<00580049004A00550046>-250<0043004A0053>8<00450054>-250<00440046004200540046>-250<005500490046004A0053>-250<00550058004A0055005500460053>58<000D>]TJ
-0.997 0 0 1 110.446 394.506 Tm [<003500490046004F>-250<005400490042004D004D>-251<005500490046>-251<0053004A0057>7<004600530054>-249<0050>6<0057>8<00460053093A0050>7<0058>-250<0058004A00550049>-250<004E004600420045000F>]TJ
-1 0 0 1 198.975 379.711 Tm [<06DA>]TJ
-/F101 11.3574 Tf
-1 0 0 1 207.402 379.711 Tm [<00310053>8<0050005100490046>-7<0044005A>-250<00500047>-250<0024004D004200560045004A00560054>]TJ
-0 g 0 G
-0 g 0 G
-ET
-
-endstream
-endobj
-23 0 obj
-<< /Type /Page /Contents 24 0 R /Resources 22 0 R /MediaBox [ 0 0 396 612 ] /CropBox[0 0 396 612]
-
-/TrimBox[0 0 396 612] /Parent 9 0 R >>
-endobj
-22 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F83 16 0 R /F101 21 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-27 0 obj
-<< /Length 32 >>
-stream
-0 g 0 G
-0 g 0 G
-0 g 0 G
-0 g 0 G
-
-endstream
-endobj
-26 0 obj
-<< /Type /Page /Contents 27 0 R /Resources 25 0 R /MediaBox [ 0 0 396 612 ] /CropBox[0 0 396 612]
-
-/TrimBox[0 0 396 612] /Parent 9 0 R >>
-endobj
-25 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ProcSet [ /PDF ] >>
-endobj
-30 0 obj
-<< /Length 7553 >>
-stream
-0 g 0 G
-0 g 0 G
-BT
-/F83 18.17191 Tf
-1 0 0 1 159.426 489.674 Tm [<0024004900420051005500460053>-250<0030004F0046>]TJ
-/F83 11.3574 Tf
-0.98 0 0 1 54 394.506 Tm [<002A0055>-178<005800420054>-178<0042>-179<004500420053004C>-178<0042004F0045>-179<0054005500500053004E005A>-178<004F004A004800490055000F>-315<002D00500053>8<0045>-178<0038004A005500490046004F0054>-178<0053>7<0050>-6<00450046>-179<0049004A0054>-178<00490050005300540046>-179<005500490053>8<0050005600480049>]TJ
-0.993 0 0 1 54 379.711 Tm [<005500490046>-250<0048004D0050>-7<0050004E000D>-251<00580049004A00440049>-251<005800420054000D>-251<00420054>-251<004900460053>8<004600550050004700500053>8<0046>-250<004E0046004F0055004A0050004F0046>-7<0045000D>-251<004500420053004C000F>-335<002E005000540055>-251<0048004D0050>-7<0050004E>]TJ
-1 0 0 1 54 364.917 Tm [<004A0054>-250<004500420053004C000D>-250<00460049>-250<0058>8<005000550020>]TJ
-1.002 0 0 1 71.036 350.122 Tm [<002E0050>7<0057004A004F0048>-249<0053004A004800490055>-249<0042004D0050004F0048000D>-249<0049004A0054>-249<00490050005300540046>-249<004200530053004A0057>7<0046>-6<0045>-249<00420055>-249<005500490046>-249<004300420044004C>-249<00450050>-7<00500053>-249<00500047>-250<002D00420045005A>]TJ
-1.02 0 0 1 53.455 335.327 Tm [<0038004A00540049004A004F00550042004D0046>24<06DF0054>-256<00520056004200530055004600530054000F>-359<003400420045004D005A>58<000D>-258<002D00500053>7<0045>-255<0038004A005500490046004F0054>-256<005800420054>-256<004F00500055>-256<0050004F>-256<004A0055000D>-259<004900420057004A004F0048>]TJ
-0.982 0 0 1 54 320.533 Tm [<0054004D004A00510051>-7<0046>-7<0045>-255<00500938>-256<0049004A0054>-255<0054004200450045004D0046>-256<0042004D0050004F0048>-255<005500490046>-255<00580042005A>60<000F>-341<0035004900420055>-255<005800420054>-256<0043>-10<0046>-7<00440042005600540046>-255<005500490046>-256<0058>8<004600420055004900460053>]TJ
-1 0 0 1 53.58 305.738 Tm [<005800420054>-250<0054005500500053004E005A>59<000F>]TJ
-0.98 0 0 1 71.036 290.944 Tm [<002D00500053>8<0046004E>-248<004A005100540056004E>-248<00450050004D00500053>-249<0054004A0055>-248<0042004E00460055000D>-250<00440050004F00540046>-7<0044005500460055005600460053>-249<00420045004A0051004A00540044004A004F0048>-249<0046004D004A0055000F>-337<00360055>-249<00510056000E>]TJ
-0.985 0 0 1 54 276.149 Tm [<005300560054>-253<0046004D004A0055000D>-253<0057>7<004600540055004A00430056004D0056004E>-252<00560055000D>-253<0051004D004200440046005300420055>-253<00420044000D>-254<00420045004A0051004A00540044004A004F0048>-253<0057004A005500420046>10<000D>-253<00470046004D004A0054000F>-338<00240056005300420043004A005500560053>]TJ
-1.02 0 0 1 54 261.355 Tm [<0045004A004400550056004E>-243<0048005300420057004A00450042>-243<004E004200560053004A0054000F>-327<002F0042004E>-243<00420053>7<00440056>-243<004D004A0043>-10<00460053>7<0050>10<000D>-242<004F0050004F0056004E004E005A>-244<0046004800460055000D>-244<00440050004F00540046>-7<0044000E>]TJ
-1.02 0 0 1 54 246.56 Tm [<005500460055005600460053>-335<004A0045000D>-358<00570056004D005100560055004200550046>-335<0042000D>-358<004E00420048004F0042000F>-598<00250050004F0046>-7<0044>-335<0057>7<00460049004A00440056004D0042>-335<00420056004800560046>-335<00460056>-335<004F0046>-7<005200560046>9<000F>]TJ
-1.02 0 0 1 54 231.766 Tm [<00310046004D004D0046004F005500460054005200560046>-319<004900420043004A00550042004F0055>-320<004E005000530043004A>-320<00550053004A00540055004A005200560046>-320<00540046004F0046>-7<0044005500560054>-320<00460055>-320<004F0046005500560054>-320<00460055>-320<004E0042004D0046000E>]TJ
-1.02 0 0 1 54 216.971 Tm [<00540056004200450042>-261<00470042004E00460054>-262<00420044>-261<0055005600530051004A0054>-262<0046004800460054005500420054000F>-376<002E004200560053004A0054>-262<00560055>-262<004D0046>-7<0050>10<000F>-376<0024005300420054>-261<0057004A0057>7<0046005300530042>-261<004E0046005500560054>]TJ
-0.98 0 0 1 54 202.177 Tm [<005300490050004F004400560054>-226<00540046004E000F>-331<002F0056004D004D0042>-227<00460055>-226<004D0046>-8<0044005500560054>-226<0057>7<004600540055004A00430056004D0056004E>-226<00560053004F0042>-227<00470053004A004F0048004A004D004D0042>-226<0056004D00550053004A004400460054000F>-331<0031>-13<00490042000E>]TJ
-1.004 0 0 1 54 187.382 Tm [<00540046004D004D00560054>-248<00460056>-249<00550046004D004D00560054>-249<0054004A0055>-249<0042004E00460055>-249<005500500053005500500053>-249<0048005300420057004A00450042>-249<0051004D004200440046005300420055000F>-332<002A004F00550046004800460053>-249<005400420051004A0046004F>-249<004600540055000D>]TJ
-0.99 0 0 1 54 172.588 Tm [<004A004200440056004D004A0054>-253<004A004F000D>-253<00510053>7<00460055004A0056004E>-253<00520056004A0054000D>-253<0057004A0057>7<0046005300530042>-252<00420044000D>-254<004F0056004F0044000F>-339<003100530042004600540046004F0055>-253<0046004800460055>-254<00540046004E>-253<0057>7<0046004D>-252<004D0046>-7<0050>]TJ
-0.99 0 0 1 54 157.793 Tm [<0056004D00550053004A004400460054>-252<0043004A0043>-11<0046004F00450056004E000F>-337<0022>12<0046004F00460042004F>-252<0047004200560044004A004300560054000F>-337<002E005000530043004A>-253<00450050004D00500053>-253<004F0056004D004D0042000D>-252<004E0042004D004600540056004200450042>]TJ
-1.02 0 0 1 54 142.999 Tm [<00460056000D>-331<00510056004D0057004A004F00420053>-314<00420055000D>-332<004E0050004D004D004A0054>-314<00420044000D>-332<004F0056004D004D0042000F>-534<00240056005300420043004A005500560053>-315<004200560044005500500053>-314<00540046004E0051>-7<00460053>-314<004F0056004D004D0042000F>]TJ
-1.02 0 0 1 54 128.204 Tm [<00250050004F0046>-7<0044>-252<005700420053004A00560054>-253<00500053>8<0044004A>-252<0046004800460055>-253<0053004A005400560054000F>-349<00250056004A0054>-252<004F004A00430049>-253<004E004A000D>-254<00440050004F004800560046>-253<00460056000D>-254<0042004400440056004E00540042004F>]TJ
-1.007 0 0 1 54 113.41 Tm [<0046004D0046004A00470046004F0045000D>-249<005400420048004A00550055004A0054>-249<00520056004A0054000D>-250<0045004A0042004E000F>-333<00250056004A0054>-249<0046004800460055>-250<00500053>8<0044004A>-249<0054004A0055>-249<0042004E00460055>-249<00500053>7<0044004A>-248<0045004A0048004F004A00540054004A004E>]TJ
-1 0 0 1 54 98.615 Tm [<00530056005500530056004E000F>]TJ
-1.02 0 0 1 71.036 83.82 Tm [<002F0042004E>-328<00450056004A>-328<004D004A00480056004D0042000D>-349<00470053004A004F0048004A004D004D0042>-329<0042000D>-349<00460056004A0054004E0050>-7<0045>-328<00540050>-7<00450042004D00460054000D>-349<00540050004D004D004A0044004A005500560045004A004F>-329<0057>7<0046004D000D>]TJ
-1.016 0 0 1 53.58 69.026 Tm [<0058004A0054004A000F>-328<002E005000530043004A>-245<004200560044005500500053>-246<004D00500053>7<0046004E>-245<004F0050004F>-246<004B0056005400550050>9<000F>-327<002F0042004E>-245<004D0042004400560054>-246<004D004A0043>-10<00460053>7<0050>10<000D>-245<00510053>7<00460055004A0056004E>-245<00420055000D>]TJ
-0.98 0 0 1 54 54.231 Tm [<004D00500043>-10<005000530055004A0054>-215<0057004A005500420046>10<000D>-222<0056004D00550053004A0044004A00460054>-215<00460055000D>-223<00550046004D004D00560054000F>-327<00250050004F0046>-7<0044>-215<0042004D004A0052005600460055000D>-223<005500500053005500500053>-215<00540046>-7<0045>-215<0042004400440056004E00540042004F>]TJ
-0.995 0 0 1 54 39.437 Tm [<0043004A0043>-10<0046004F00450056004E000D>-251<0046005300420055>-250<004D004A00480056004D0042>-251<0042004D004A0052005600460055>-251<004E00420048004F0042000D>-250<0057004A005500420046>-251<00500053004F00420053>7<0046>-250<0050>-7<0045004A0050>-251<004E0046005500560054>-250<0042>-251<004E004A000F>]TJ
-0 g 0 G
-0 g 0 G
-ET
-
-endstream
-endobj
-29 0 obj
-<< /Type /Page /Contents 30 0 R /Resources 28 0 R /MediaBox [ 0 0 396 612 ] /CropBox[0 0 396 612]
-
-/TrimBox[0 0 396 612] /Parent 9 0 R >>
-endobj
-28 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F83 16 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-33 0 obj
-<< /Length 10995 >>
-stream
-0 g 0 G
-BT
-/F83 10.44878 Tf
-1 0 0 1 36 565.121 Tm [<0013>]TJ
-/F83 10.44878 Tf
-1 0 0 1 151.292 565.121 Tm [<0025>-50<0964>-50<096C>-50<095B>-341<0029>-50<095C>-50<096C>-50<095F>-50<095E>-50<095C>-50<096D>-50<0960>]TJ
-0 g 0 G
-/F83 11.3574 Tf
-1.011 0 0 1 36 542.451 Tm [<002E005000530043004A>-247<00420044>-248<00500053>7<0044004A>-246<00460055>-248<004F004A0054004D>-247<00490046004F00450053>7<00460053004A0055>-247<004E0050004D004D004A0054000F>-330<0034005600540051>-7<0046004F0045004A005400540046>-248<00560055>-248<004E0042005400540042000F>-330<0024005300420054>]TJ
-1.02 0 0 1 36 527.656 Tm [<004F0046>-7<0044>-283<0042004F00550046>9<000F>-443<00310046004D004D0046004F005500460054005200560046>-284<0042>-283<004F0056004D004D0042000F>-444<00240056004E>-284<00540050>-6<0044004A004A0054>-284<004F004200550050>-7<005200560046>-284<0051>-7<0046004F00420055004A004300560054>-284<00460055>]TJ
-1.02 0 0 1 36 512.862 Tm [<004E00420048004F004A0054>-316<0045004A0054>-316<005100420053005500560053004A0046004F0055>-317<004E0050004F005500460054000D>-334<004F0042005400440046005500560053>-316<0053004A0045004A00440056004D00560054>-316<004E00560054000F>-541<0022004D004A005200560042004E>]TJ
-0.999 0 0 1 36 498.067 Tm [<0055004A004F0044004A00450056004F0055>-250<00560053004F0042000F>-336<002F0056004D004D0042>-251<0056004D004D0042004E0044005000530051>-7<00460053>-251<0057>7<004600540055004A00430056004D0056004E>-250<0055005600530051004A0054000F>-335<00310046004D004D0046004F005500460054005200560046>]TJ
-1 0 0 1 36 483.273 Tm [<004400560053005400560054>-250<004D00560044005500560054>-250<004E004200560053004A0054000F>]TJ
-1.011 0 0 1 53.036 468.478 Tm [<002F0056004D004D0042>-248<004E0042004D004600540056004200450042>-248<0051>-7<0050005300550055004A005500500053>-249<0045004A0042004E000F>-332<00250050004F0046>-7<0044>-249<00470046004D004A0054>-248<0046005300420055000D>-249<00440050004F004800560046>-248<004F0050004F000D>]TJ
-0.992 0 0 1 35.716 453.684 Tm [<0057>8<0050004D00560055005100420055>-251<00420055000D>-252<0055004A004F0044004A00450056004F0055>-251<00550053004A00540055004A005200560046>9<000D>-251<004D004A0043>-10<00460053>7<0050>10<000F>-335<0037004A00570042004E00560054>-251<0057004A0057>7<0046005300530042>-251<004700460053004E0046004F00550056004E>]TJ
-0.98 0 0 1 36 438.889 Tm [<00470046004D004A0054000F>-329<00250050004F0046>-7<0044>-222<004F0050004F0056004E004E005A>-221<0051>-7<0046004D004D0046004F005500460054005200560046>-222<0042004F00550046>9<000F>-328<0031>-12<0049004200540046004D004D00560054>-222<00420045004A0051004A00540044004A004F0048>-222<00540046004E000E>]TJ
-0.98 0 0 1 36 424.095 Tm [<0051>-7<00460053>-226<0046004D004A0055000F>-330<00310053>7<0050004A004F>-225<004700460053004E0046004F00550056004E>-226<004E0042005400540042>-226<00420044>-226<005200560042004E000F>-331<00340046>-7<0045>-226<0045004A0042004E>-226<0055005600530051004A0054000D>-232<004E0050004D004600540055004A0046>]TJ
-1.02 0 0 1 35.716 409.3 Tm [<0057004A005500420046>10<000D>-250<0051004D004200440046005300420055>-249<0042000D>-251<004E0050004D004600540055004A0046>-249<004F0046>-7<0044000D>-251<004D0046>-7<0050>9<000F>-338<002E00420046>-7<00440046004F00420054>-250<004D00420044004A004F004A0042000F>-339<002F0042004E>-250<004A005100540056004E>]TJ
-1.015 0 0 1 36 394.506 Tm [<004D004A00480056004D0042000D>-246<0046004D0046004A00470046004F0045>-247<00420055000D>-246<0042004400440056004E00540042004F>-247<004F0046>-7<0044000D>-246<0054005600540044004A0051004A0055>-247<0042000D>-247<004A005100540056004E000F>-329<002E005000530043004A>-246<0043004D0042004F0045004A0055>]TJ
-1.017 0 0 1 36 379.711 Tm [<004D004A00480056004D0042>-244<0047004600560048004A00420055>-245<004E00420048004F0042000F>-328<002F0056004F0044>-245<0046004D0046004A00470046004F0045>-245<00440050004F00540046>-7<0052005600420055>-245<004D00500053>8<0046004E000F>-327<00340046>-7<0045>-245<004D00420044004A004F004A0042>]TJ
-1.02 0 0 1 36 364.917 Tm [<004F0056004D004D0042>-305<0057004A005500420046>-306<0046004F004A004E000F>-510<00310046004D004D0046004F005500460054005200560046>-306<0055004A004F0044004A00450056004F0055>-306<00510056005300560054>-305<0057>7<0046004D>-305<004E00420048004F0042000F>-510<002A004F00550046000E>]TJ
-1.004 0 0 1 36 350.122 Tm [<004800460053>-248<004F0050004F>-249<0046004F004A004E000F>-332<003100530042004600540046004F0055>-248<00460056004A0054004E0050>-7<0045>-249<004F0056004F0044>-249<00460056>-248<00510056005300560054000F>-332<00250050004F0046>-7<0044>-249<0043004A0043>-10<0046004F00450056004E>]TJ
-1.014 0 0 1 36 335.327 Tm [<005200560042004E>-247<004A004F>-247<00550046004D004D00560054000F>-331<002F0056004D004D0042004E>-247<004400560053005400560054>-247<00510056004D0057004A004F00420053>-247<004D0046>-7<0044005500560054000F>-331<00250050004F0046>-7<0044>-247<00460055>-248<004E004A000F>-330<002F0042004E>]TJ
-1 0 0 1 35.716 320.533 Tm [<00570056004D005100560055004200550046>-250<004E0046005500560054>-250<00460056>-250<0046004F004A004E000F>-333<0037>79<004600540055004A00430056004D0056004E>-249<0051>-7<0046004D004D0046004F005500460054005200560046>-250<00470046004D004A0054>-250<00460056>-250<004E0042005400540042000F>]TJ
-0.98 0 0 1 53.036 305.738 Tm [<09550056004A0054005200560046>-228<0056004D004D0042004E0044005000530051>-7<00460053>-228<0051004D004200440046005300420055>-228<004A005100540056004E000F>-331<0024005300420054>-228<004F004A00430049000F>-331<002E005000530043004A>-228<0057>7<0046004D>-227<004B0056005400550050>]TJ
-0.98 0 0 1 35.716 290.944 Tm [<0057004A005500420046>-236<004D0042004400560054>-237<0055004A004F0044004A00450056004F0055>-236<0056004D00550053004A004400460054000F>-334<002D00500053>7<0046004E>-235<004A005100540056004E>-237<00450050004D00500053>-236<0054004A0055>-237<0042004E00460055000D>-240<00440050004F00540046>-7<004400550046000E>]TJ
-0.98 0 0 1 36 276.149 Tm [<0055005600460053>-193<00420045004A0051004A00540044004A004F0048>-193<0046004D004A0055000F>-319<002A004F>-193<004900420044>-193<004900420043004A00550042005400540046>-194<0051004D0042005500460042>-193<0045004A004400550056004E00540055000F>-319<002A004F00550046004800460053>-193<00550046004E005100560054>]TJ
-0.996 0 0 1 36 261.355 Tm [<00440050004F00570042004D004D004A0054>-250<00420056004800560046>9<000F>-333<00260055004A0042004E>-251<004700420044004A004D004A0054004A0054000F>-334<002F0056004F0044>-251<0046004D0046004E0046004F00550056004E>-250<004700460053004E0046004F00550056004E>-251<0058004A0054004A000F>]TJ
-1.01 0 0 1 35.602 246.56 Tm [<0022>12<0046004F00460042004F>-246<0051004D004200440046005300420055000F>-330<00360055>-247<004A004E0051>-7<00460053>7<0045004A00460055000D>-246<0046004F004A004E>-247<00540046>-7<0045>-247<0048005300420057004A00450042>-246<00540050004D004D004A0044004A005500560045004A004F000D>-247<00470046004D004A0054>]TJ
-1.02 0 0 1 36 231.766 Tm [<0050>-7<0045004A0050>-259<0051004D004200440046005300420055>-260<005200560042004E000D>-264<00420044>-260<00510056004D0057004A004F00420053>-260<0046004D004A0055>-260<00510056005300560054>-260<0046004800460055>-260<0046004F004A004E000F>-371<002F0056004F0044>-260<0057004A005500420046>]TJ
-1.014 0 0 1 36 216.971 Tm [<005500500053005500500053>59<000F>-330<00310053>7<0050004A004F>-246<00550046004E005100560054>-247<004F004A00430049>-247<0054004A0055>-247<0042004E00460055>-247<004F004A0054004D000F>-331<0037004A00570042004E00560054>-247<00520056004A0054>-247<005500500053005500500053>-247<0057004A005500420046>]TJ
-1 0 0 1 36 202.177 Tm [<0053004A005400560054>-250<0051>-7<0050005300550042>-250<0057>8<00460049004A00440056004D0042000F>]TJ
-0.999 0 0 1 53.036 187.382 Tm [<00270056005400440046>-250<004E004200560053004A0054000F>-333<0037>80<004600540055004A00430056004D0056004E>-249<004D00560044005500560054>-250<004F004A00430049>-250<00420055>-251<004D0046>-7<0044005500560054000F>-333<00340046>-7<0045>-251<0043004A0043>-10<0046004F00450056004E000D>]TJ
-1.004 0 0 1 36 172.588 Tm [<004F0056004D004D0042>-248<0042>-248<0047004200560044004A004300560054>-248<00540046004E0051>-7<00460053>59<000D>-247<004D0046>-7<0050>-248<0057>7<0046004D004A0055>-247<0056004D00550053004A0044004A00460054>-248<00550046004D004D00560054000D>-248<00420044>-248<0057>7<0046004F0046004F00420055004A0054>-247<00420053>7<00440056>]TJ
-1.016 0 0 1 35.58 157.793 Tm [<0058004A0054004A>-246<0057>7<0046004D>-245<004F004A0054004D000F>-328<0037>79<004600540055004A00430056004D0056004E>-245<0045004A0042004E000F>-329<0022004D004A005200560042004E>-246<0051>-7<0046004D004D0046004F005500460054005200560046>9<000D>-245<00420056004800560046>-246<00520056004A0054>]TJ
-1.007 0 0 1 36 142.999 Tm [<005400420048004A00550055004A0054>-247<0051>-7<00500054005600460053>7<0046>10<000D>-247<0055005600530051004A0054>-247<004D0042004400560054>-248<00440050004F004800560046>-248<005200560042004E000D>-247<004A004F>-248<00490046004F00450053>7<00460053004A0055>-247<0053004A005400560054>-247<00460053>7<00500054>]TJ
-0.98 0 0 1 36 128.204 Tm [<0046004800460055>-237<00470046004D004A0054000F>-334<002E00420046>-7<00440046004F00420054>-237<0046004800460055>-237<0046005300420055>-237<004A004F>-237<005400420051004A0046004F>-237<004E004200550055004A0054>-237<0051>-8<0050005300550055004A005500500053>61<000F>-333<0037>82<004600540055004A00430056004D0056004E>]TJ
-1.02 0 0 1 36 113.41 Tm [<0051>-7<0050005300550055004A005500500053>59<000F>-483<002F0056004D004D0042>-297<004700420044004A004D004A0054004A000F>-484<00340046>-7<0045>-297<0042>-298<0055005600530051004A0054>-297<00460056>-297<004D0042004400560054>-298<00440050004E004E0050>-7<00450050>-297<004700420044004A004D004A0054004A0054000F>]TJ
-0.982 0 0 1 36 98.615 Tm [<002E005000530043004A>-254<00470053004A004F0048004A004D004D0042000D>-254<0058004A0054004A>-254<004A004F>-254<0045004A0048004F004A00540054004A004E>-254<004A004F005500460053>8<00450056004E000D>-254<004B0056005400550050>-254<004D0046>-7<0044005500560054>-254<005400420048004A00550055004A0054>-254<00450056004A000D>]TJ
-1.02 0 0 1 36 83.82 Tm [<00460055>-258<0057>7<00460049004A00440056004D0042>-258<004D004A0043>-10<00460053>7<0050>-258<00450056004A>-259<004400560053005400560054>-258<00450056004A000F>-368<002E004200560053004A0054>-259<00550046004E0051>-7<00500053>-259<004D004A00480056004D0042>-258<00540046>-7<0045>-259<004D0042004400560054000F>]TJ
-1.02 0 0 1 36 69.026 Tm [<00250056004A0054>-341<004400560053005400560054>-341<0046004F004A004E>-341<00560055>-341<00420056004800560046>9<000F>-614<0024005300420054>-341<00420044>-341<004E00420048004F0042000F>-615<0024005300420054>-341<004F0056004D004D0042000F>-615<002F0056004D004D0042>]TJ
-1.02 0 0 1 36 54.231 Tm [<0046004800460054005500420054000F>-526<00240056005300420043004A005500560053>-312<0042>-311<004D0046>-7<0050>9<000F>-526<09550056004A0054005200560046>-312<0046004800460054005500420054>-311<0058004A0054004A>-312<0046004800460055>-312<004F0056004F0044000F>-526<002F0042004E>]TJ
-1 0 0 1 36 39.437 Tm [<0047004600560048004A00420055>-250<004D0042004400560054>-250<0057>8<0046004D>-250<004600540055000F>-333<00240056005300420043004A005500560053>-250<00440050004F00540046>-7<0044005500460055005600460053>58<000F>]TJ
-0 g 0 G
-0 g 0 G
-ET
-
-endstream
-endobj
-32 0 obj
-<< /Type /Page /Contents 33 0 R /Resources 31 0 R /MediaBox [ 0 0 396 612 ] /CropBox[0 0 396 612]
-
-/TrimBox[0 0 396 612] /Parent 9 0 R >>
-endobj
-31 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F83 16 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-36 0 obj
-<< /Length 6171 >>
-stream
-0 g 0 G
-BT
-/F83 10.44878 Tf
-1 0 0 1 162.868 565.121 Tm [<0025>-50<095C>-50<096C>-50<095B>-341<095C>-50<0968>-50<095F>-342<0034>-50<096E>-25<0969>-50<096C>-50<0967>-50<0973>]TJ
-/F83 10.44878 Tf
-1 0 0 1 355.141 565.121 Tm [<0014>]TJ
-0 g 0 G
-/F83 11.3574 Tf
-0.98 0 0 1 71.036 542.451 Tm [<0034005600540051>-7<0046004F0045004A005400540046>-249<0057>7<0046004D>-248<00470046004D004A0054000F>-339<00360055>-249<004D00500053>7<0046004E>-248<004D00500053>7<0046004E000D>-249<004A004F005500460053>7<00450056004E>-249<00460056000D>-250<0055004A004F0044004A00450056004F0055>-250<0054004A0055>]TJ
-1.015 0 0 1 54 527.656 Tm [<0042004E00460055000D>-246<004D004200500053>7<0046>-6<00460055>-247<0057004A005500420046>9<000D>-246<00420053>7<00440056000F>-329<0022>12<0046004F00460042004F>-246<0047004200560044004A004300560054>-247<0051>-7<0046>-7<00450046>-247<00460056>-247<0042004F00550046>10<000F>-329<003100530042004600540046004F0055>]TJ
-1.02 0 0 1 54 512.862 Tm [<0046004F004A004E>-282<0046004D004A0055000D>-293<00530056005500530056004E>-283<00420055000D>-292<004E0050004D004600540055004A0046>-283<004F0050004F000D>-292<004F0050004F0056004E004E005A>-283<0057>7<0046004D000D>-291<004F004A0054004D000F>-440<00360055>-283<004D0046>-7<0044005500560054>]TJ
-1.02 0 0 1 54 498.067 Tm [<00460053>8<00500054000D>-318<004E0042004D004600540056004200450042>-304<0054004A0055>-304<0042004E00460055000D>-319<004700460053004E0046004F00550056004E>-304<00460056000D>-319<00540050>-6<00450042004D00460054>-304<004400560053005400560054000D>-319<004E00420048004F0042000F>]TJ
-1.007 0 0 1 54 483.273 Tm [<00250050004F0046>-7<0044>-248<00460056>-249<00510056005300560054000F>-332<09550056004A0054005200560046>-249<0057>7<00460049004A00440056004D0042000D>-248<00560053004F0042>-248<00540046>-7<0045>-249<0056004D00550053004A0044004A00460054>-249<004200560044005500500053>59<000D>-248<0051>-7<0046>-7<00450046>]TJ
-1.02 0 0 1 54 468.478 Tm [<004D00500053>8<0046004E>-316<0046004800460054005500420054>-316<00450056004A000D>-335<00460055>-316<00440050004F00570042004D004D004A0054>-317<0046004D004A0055>-316<0046005300420055>-316<00540046>-7<0045>-317<004F0056004D004D0042000F>-541<00250050004F0046>-7<0044>-316<004D00560044005500560054000F>]TJ
-0.98 0 0 1 54 453.684 Tm [<00240056005300420043004A005500560053>-241<00460055>-242<004F0056004F0044000F>-336<0022004D004A005200560042004E>-242<00450050004D00500053>-242<0050>-7<0045004A0050>10<000D>-244<00440050004E004E0050>-7<00450050>-242<00510053>7<00460055004A0056004E000D>-243<0056004D00550053004A0044004A00460054>]TJ
-1.018 0 0 1 54 438.889 Tm [<004F0050004F000D>-244<0051004900420053>7<0046005500530042>-243<004A004F000D>-245<0057>7<0046004D004A0055000F>-326<002A004F00550046004800460053>-244<00420053>7<00440056>-244<004600540055000D>-244<004F0050004F0056004E004E005A>-244<004A004F000D>-245<004700460053004E0046004F00550056004E>]TJ
-1 0 0 1 54 424.095 Tm [<0047004200560044004A004300560054000D>-250<0046004800460054005500420054>-250<0057>8<0046004D000D>-250<0050>-7<0045004A0050>10<000F>]TJ
-1.005 0 0 1 71.036 409.3 Tm [<00340046>-7<0045>-247<00440050004E004E0050>-7<00450050>-248<0051>-7<00500054005600460053>7<0046>-246<0051>-7<0046>-7<00450046>9<000F>-330<002E004200560053004A0054>-248<00560055>-247<004600540055000F>-332<00360055>-247<00520056004A0054>-247<00510056005300560054000F>-332<00340046>-7<0045>]TJ
-1.01 0 0 1 54 394.506 Tm [<00420044>-247<0050>-7<0045004A0050>9<000F>-330<00340046>-7<0045>-248<0057>7<00460049004A00440056004D0042>-247<00490046004F00450053>7<00460053004A0055>-247<00540046004E000F>-331<00250056004A0054>-248<004F0050004F>-247<0050>-8<0045004A0050>10<000F>-330<002E005000530043004A>-248<00560055>-248<00450056004A000F>]TJ
-1.02 0 0 1 54 379.711 Tm [<00340046>-7<0045>-316<0042004400440056004E00540042004F>-317<0053004A005400560054>-316<0046004800460055>-317<0050>-7<0045004A0050>9<000F>-541<002A004F>-316<004900420044>-317<004900420043004A00550042005400540046>-317<0051004D0042005500460042>-316<0045004A004400550056004E00540055000F>]TJ
-1.02 0 0 1 54 364.917 Tm [<00310046004D004D0046004F005500460054005200560046>-361<004F0050004F>-362<0046004D004A0055000F>-677<00270056005400440046>-361<00540046>-7<0045>-362<004B0056005400550050>-362<00460056>-362<00560053004F0042>-361<0051>-7<0050005300550042>-362<0055004A004F0044004A00450056004F0055000F>]TJ
-0.981 0 0 1 54 350.122 Tm [<002E004200560053004A0054>-255<00470046004D004A0054>-255<0050>-7<0045004A0050>9<000D>-254<00540050004D004D004A0044004A005500560045004A004F>-255<00540046>-8<0045000D>-255<0057>7<0050004D0056>1<0055005100420055>-255<0042000D>-255<00500053004F00420053>7<0046>-254<00420044000D>-255<0046005300420055000F>-341<002E005000530043004A>]TJ
-1.02 0 0 1 54 335.327 Tm [<00520056004A0054>-270<00450050004D00500053>59<000F>-401<00250050004F0046>-7<0044>-270<0051>-7<0046004D004D0046004F005500460054005200560046>9<000D>-275<0046005300420055>-270<00420044>-270<005400420048004A00550055004A0054>-270<00540046004E0051>-7<00460053>58<000D>-275<004F0056004F0044>-270<00450056004A>]TJ
-1.02 0 0 1 54 320.533 Tm [<004D00500043>-10<005000530055004A0054>-269<00510056005300560054000D>-275<00520056004A0054>-269<00440050004F004800560046>-269<00510056005300560054>-269<004E0046005500560054>-269<0056004D00550053004A0044004A00460054>-269<00550046004D004D00560054000F>-398<00310053>7<0050004A004F>-268<00460055>]TJ
-1.02 0 0 1 54 305.738 Tm [<005200560042004E000F>-341<0024004D004200540054>-250<0042005100550046004F0055>-250<005500420044004A0055004A>-250<00540050>-7<0044004A0050005400520056>-250<00420045>-250<004D004A0055005000530042>-250<005500500053>7<005200560046004F0055>-249<0051>-7<00460053>-250<00440050004F00560043004A0042>]TJ
-0.98 0 0 1 54 290.944 Tm [<004F00500054005500530042000D>-241<0051>-7<00460053>-238<004A004F004400460051005500500054>-239<0049005A004E0046004F00420046>-7<00500054000F>-334<003100530042004600540046004F0055>-239<005400420051004A0046004F>-238<0055005600530051004A0054000D>-241<004700460053004E0046004F00550056004E>]TJ
-1 0 0 1 53.716 276.149 Tm [<0057>8<0046004D000D>-250<0046004D0046004A00470046004F0045>-250<0047004200560044004A004300560054000D>-250<0057>8<00460049004A00440056004D0042>-250<00460056000D>-250<004D0042004400560054000F>]TJ
-0 g 0 G
-0 g 0 G
-ET
-
-endstream
-endobj
-35 0 obj
-<< /Type /Page /Contents 36 0 R /Resources 34 0 R /MediaBox [ 0 0 396 612 ] /CropBox[0 0 396 612]
-
-/TrimBox[0 0 396 612] /Parent 9 0 R >>
-endobj
-34 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F83 16 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-39 0 obj
-<< /Length 7861 >>
-stream
-0 g 0 G
-0 g 0 G
-BT
-/F83 18.17191 Tf
-1 0 0 1 140.517 489.674 Tm [<0024004900420051005500460053>-250<0035>49<0058>8<0050>]TJ
-/F83 11.3574 Tf
-0.988 0 0 1 35.659 394.506 Tm [<003500490046>-254<004F004A004800490055>-253<005800420054>-254<00540055004A004D004D>-254<004500420053004C>-254<0042004F0045>-254<0054005500500053004E005A>60<000F>-339<00350049004A0054>-254<0054004900500056004D0045>-254<004F00500055>-254<0043>-11<0046>-253<00540056005300510053004A0054004A004F0048000D>]TJ
-0.989 0 0 1 36 379.711 Tm [<00540046>-7<0046004A004F0048>-253<00420054>-254<00490050>7<0058>-253<0050004F004D005A>-253<00490042004D0047>-253<0042004F>-254<0049005000560053>-253<004900420054>-254<0046004D0042005100540046>-7<0045>-253<0054004A004F00440046>-254<005500490046>-253<0939005300540055>-253<0044004900420051005500460053>60<000F>]TJ
-1.02 0 0 1 35.659 364.917 Tm [<0035004900420055>-281<004A004F004700500053004E00420055004A0050004F>-282<005800420054>-282<004F0046>-7<004400460054005400420053>-15<005A>58<000D>-289<004A004F>-282<0044004200540046>-282<005A>7<00500056>-280<005100560055>-282<005500490046>-282<0043>-10<0050>-7<0050004C>-281<00450050>6<0058004F>]TJ
-1 0 0 1 36 350.122 Tm [<0042004F0045>-250<004900420057>8<0046004F06DF0055>-250<0053>8<004600420045>-250<0042004F005A>-250<00500047>-250<004A0055>-250<004700500053>-250<005500490046>-250<004D004200540055>-250<00550058>8<0050>-250<0058>8<0046>-7<0046004C0054000F>]TJ
-0.98 0 0 1 53.036 335.327 Tm [<002D00500053>8<0045>-209<0038004A005500490046004F0054000D>-220<0058>8<00460055>-209<0042004F0045>-210<004300530056004A00540046>-8<0045000D>-219<0939004F0042004D004D005A>-210<004200530053004A0057>7<0046>-6<0045>-210<00420055>-210<0049004A0054>-210<0045004600540055004A004F00420055004A0050004F000F>]TJ
-0.98 0 0 1 35.659 320.533 Tm [<003500490046>-234<0053>7<0046004200540050004F>-234<00490046>-234<005800420054>-235<0058>7<00460055>-233<005800420054>-235<0043>-10<0046>-8<00440042005600540046>10<000D>-238<00420054>-235<004900420054>-234<0043>-11<0046>-7<0046004F>-235<004F005000550046>-7<0045000D>-239<005500490046>-235<0058>8<004600420055004900460053>]TJ
-1 0 0 1 35.58 305.738 Tm [<005800420054>-250<0054005500500053004E005A>59<000F>-333<002A0055>-250<005800420054>-250<004500420053004C000D>-250<00550050>-7<0050>9<000F>]TJ
-0.98 0 0 1 53.036 290.944 Tm [<002D00500053>8<0046004E>-248<004A005100540056004E>-248<00450050004D00500053>-249<0054004A0055>-248<0042004E00460055000D>-250<00440050004F00540046>-7<0044005500460055005600460053>-249<00420045004A0051004A00540044004A004F0048>-249<0046004D004A0055000F>-337<00360055>-249<00510056000E>]TJ
-0.985 0 0 1 36 276.149 Tm [<005300560054>-253<0046004D004A0055000D>-253<0057>7<004600540055004A00430056004D0056004E>-252<00560055000D>-253<0051004D004200440046005300420055>-253<00420044000D>-254<00420045004A0051004A00540044004A004F0048>-253<0057004A005500420046>10<000D>-253<00470046004D004A0054000F>-338<00240056005300420043004A005500560053>]TJ
-1.02 0 0 1 36 261.355 Tm [<0045004A004400550056004E>-243<0048005300420057004A00450042>-243<004E004200560053004A0054000F>-327<002F0042004E>-243<00420053>7<00440056>-243<004D004A0043>-10<00460053>7<0050>10<000D>-242<004F0050004F0056004E004E005A>-244<0046004800460055000D>-244<00440050004F00540046>-7<0044000E>]TJ
-1.02 0 0 1 36 246.56 Tm [<005500460055005600460053>-335<004A0045000D>-358<00570056004D005100560055004200550046>-335<0042000D>-358<004E00420048004F0042000F>-598<00250050004F0046>-7<0044>-335<0057>7<00460049004A00440056004D0042>-335<00420056004800560046>-335<00460056>-335<004F0046>-7<005200560046>9<000F>]TJ
-1.02 0 0 1 36 231.766 Tm [<00310046004D004D0046004F005500460054005200560046>-319<004900420043004A00550042004F0055>-320<004E005000530043004A>-320<00550053004A00540055004A005200560046>-320<00540046004F0046>-7<0044005500560054>-320<00460055>-320<004F0046005500560054>-320<00460055>-320<004E0042004D0046000E>]TJ
-1.02 0 0 1 36 216.971 Tm [<00540056004200450042>-261<00470042004E00460054>-262<00420044>-261<0055005600530051004A0054>-262<0046004800460054005500420054000F>-376<002E004200560053004A0054>-262<00560055>-262<004D0046>-7<0050>10<000F>-376<0024005300420054>-261<0057004A0057>7<0046005300530042>-261<004E0046005500560054>]TJ
-0.98 0 0 1 36 202.177 Tm [<005300490050004F004400560054>-226<00540046004E000F>-331<002F0056004D004D0042>-227<00460055>-226<004D0046>-8<0044005500560054>-226<0057>7<004600540055004A00430056004D0056004E>-226<00560053004F0042>-227<00470053004A004F0048004A004D004D0042>-226<0056004D00550053004A004400460054000F>-331<0031>-13<00490042000E>]TJ
-1.004 0 0 1 36 187.382 Tm [<00540046004D004D00560054>-248<00460056>-249<00550046004D004D00560054>-249<0054004A0055>-249<0042004E00460055>-249<005500500053005500500053>-249<0048005300420057004A00450042>-249<0051004D004200440046005300420055000F>-332<002A004F00550046004800460053>-249<005400420051004A0046004F>-249<004600540055000D>]TJ
-0.99 0 0 1 36 172.588 Tm [<004A004200440056004D004A0054>-253<004A004F000D>-253<00510053>7<00460055004A0056004E>-253<00520056004A0054000D>-253<0057004A0057>7<0046005300530042>-252<00420044000D>-254<004F0056004F0044000F>-339<003100530042004600540046004F0055>-253<0046004800460055>-254<00540046004E>-253<0057>7<0046004D>-252<004D0046>-7<0050>]TJ
-0.99 0 0 1 36 157.793 Tm [<0056004D00550053004A004400460054>-252<0043004A0043>-11<0046004F00450056004E000F>-337<0022>12<0046004F00460042004F>-252<0047004200560044004A004300560054000F>-337<002E005000530043004A>-253<00450050004D00500053>-253<004F0056004D004D0042000D>-252<004E0042004D004600540056004200450042>]TJ
-1.02 0 0 1 36 142.999 Tm [<00460056000D>-331<00510056004D0057004A004F00420053>-314<00420055000D>-332<004E0050004D004D004A0054>-314<00420044000D>-332<004F0056004D004D0042000F>-534<00240056005300420043004A005500560053>-315<004200560044005500500053>-314<00540046004E0051>-7<00460053>-314<004F0056004D004D0042000F>]TJ
-1.02 0 0 1 36 128.204 Tm [<00250050004F0046>-7<0044>-252<005700420053004A00560054>-253<00500053>8<0044004A>-252<0046004800460055>-253<0053004A005400560054000F>-349<00250056004A0054>-252<004F004A00430049>-253<004E004A000D>-254<00440050004F004800560046>-253<00460056000D>-254<0042004400440056004E00540042004F>]TJ
-1.007 0 0 1 36 113.41 Tm [<0046004D0046004A00470046004F0045000D>-249<005400420048004A00550055004A0054>-249<00520056004A0054000D>-250<0045004A0042004E000F>-333<00250056004A0054>-249<0046004800460055>-250<00500053>8<0044004A>-249<0054004A0055>-249<0042004E00460055>-249<00500053>7<0044004A>-248<0045004A0048004F004A00540054004A004E>]TJ
-1 0 0 1 36 98.615 Tm [<00530056005500530056004E000F>]TJ
-1.02 0 0 1 53.036 83.82 Tm [<002F0042004E>-328<00450056004A>-328<004D004A00480056004D0042000D>-349<00470053004A004F0048004A004D004D0042>-329<0042000D>-349<00460056004A0054004E0050>-7<0045>-328<00540050>-7<00450042004D00460054000D>-349<00540050004D004D004A0044004A005500560045004A004F>-329<0057>7<0046004D000D>]TJ
-1.016 0 0 1 35.58 69.026 Tm [<0058004A0054004A000F>-328<002E005000530043004A>-245<004200560044005500500053>-246<004D00500053>7<0046004E>-245<004F0050004F>-246<004B0056005400550050>9<000F>-327<002F0042004E>-245<004D0042004400560054>-246<004D004A0043>-10<00460053>7<0050>10<000D>-245<00510053>7<00460055004A0056004E>-245<00420055000D>]TJ
-0.98 0 0 1 36 54.231 Tm [<004D00500043>-10<005000530055004A0054>-215<0057004A005500420046>10<000D>-222<0056004D00550053004A0044004A00460054>-215<00460055000D>-223<00550046004D004D00560054000F>-327<00250050004F0046>-7<0044>-215<0042004D004A0052005600460055000D>-223<005500500053005500500053>-215<00540046>-7<0045>-215<0042004400440056004E00540042004F>]TJ
-0.995 0 0 1 36 39.437 Tm [<0043004A0043>-10<0046004F00450056004E000D>-251<0046005300420055>-250<004D004A00480056004D0042>-251<0042004D004A0052005600460055>-251<004E00420048004F0042000D>-250<0057004A005500420046>-251<00500053004F00420053>7<0046>-250<0050>-7<0045004A0050>-251<004E0046005500560054>-250<0042>-251<004E004A000F>]TJ
-0 g 0 G
-0 g 0 G
-ET
-
-endstream
-endobj
-38 0 obj
-<< /Type /Page /Contents 39 0 R /Resources 37 0 R /MediaBox [ 0 0 396 612 ] /CropBox[0 0 396 612]
-
-/TrimBox[0 0 396 612] /Parent 9 0 R >>
-endobj
-37 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F83 16 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-42 0 obj
-<< /Length 11010 >>
-stream
-0 g 0 G
-BT
-/F83 10.44878 Tf
-1 0 0 1 162.868 565.121 Tm [<0025>-50<095C>-50<096C>-50<095B>-341<095C>-50<0968>-50<095F>-342<0034>-50<096E>-25<0969>-50<096C>-50<0967>-50<0973>]TJ
-/F83 10.44878 Tf
-1 0 0 1 355.141 565.121 Tm [<0016>]TJ
-0 g 0 G
-/F83 11.3574 Tf
-1.011 0 0 1 54 542.451 Tm [<002E005000530043004A>-247<00420044>-248<00500053>7<0044004A>-246<00460055>-248<004F004A0054004D>-247<00490046004F00450053>7<00460053004A0055>-247<004E0050004D004D004A0054000F>-330<0034005600540051>-7<0046004F0045004A005400540046>-248<00560055>-248<004E0042005400540042000F>-330<0024005300420054>]TJ
-1.02 0 0 1 54 527.656 Tm [<004F0046>-7<0044>-283<0042004F00550046>9<000F>-443<00310046004D004D0046004F005500460054005200560046>-284<0042>-283<004F0056004D004D0042000F>-444<00240056004E>-284<00540050>-6<0044004A004A0054>-284<004F004200550050>-7<005200560046>-284<0051>-7<0046004F00420055004A004300560054>-284<00460055>]TJ
-1.02 0 0 1 54 512.862 Tm [<004E00420048004F004A0054>-316<0045004A0054>-316<005100420053005500560053004A0046004F0055>-317<004E0050004F005500460054000D>-334<004F0042005400440046005500560053>-316<0053004A0045004A00440056004D00560054>-316<004E00560054000F>-541<0022004D004A005200560042004E>]TJ
-0.999 0 0 1 54 498.067 Tm [<0055004A004F0044004A00450056004F0055>-250<00560053004F0042000F>-336<002F0056004D004D0042>-251<0056004D004D0042004E0044005000530051>-7<00460053>-251<0057>7<004600540055004A00430056004D0056004E>-250<0055005600530051004A0054000F>-335<00310046004D004D0046004F005500460054005200560046>]TJ
-1 0 0 1 54 483.273 Tm [<004400560053005400560054>-250<004D00560044005500560054>-250<004E004200560053004A0054000F>]TJ
-1.011 0 0 1 71.036 468.478 Tm [<002F0056004D004D0042>-248<004E0042004D004600540056004200450042>-248<0051>-7<0050005300550055004A005500500053>-249<0045004A0042004E000F>-332<00250050004F0046>-7<0044>-249<00470046004D004A0054>-248<0046005300420055000D>-249<00440050004F004800560046>-248<004F0050004F000D>]TJ
-0.992 0 0 1 53.716 453.684 Tm [<0057>8<0050004D00560055005100420055>-251<00420055000D>-252<0055004A004F0044004A00450056004F0055>-251<00550053004A00540055004A005200560046>9<000D>-251<004D004A0043>-10<00460053>7<0050>10<000F>-335<0037004A00570042004E00560054>-251<0057004A0057>7<0046005300530042>-251<004700460053004E0046004F00550056004E>]TJ
-0.98 0 0 1 54 438.889 Tm [<00470046004D004A0054000F>-329<00250050004F0046>-7<0044>-222<004F0050004F0056004E004E005A>-221<0051>-7<0046004D004D0046004F005500460054005200560046>-222<0042004F00550046>9<000F>-328<0031>-12<0049004200540046004D004D00560054>-222<00420045004A0051004A00540044004A004F0048>-222<00540046004E000E>]TJ
-0.98 0 0 1 54 424.095 Tm [<0051>-7<00460053>-226<0046004D004A0055000F>-330<00310053>7<0050004A004F>-225<004700460053004E0046004F00550056004E>-226<004E0042005400540042>-226<00420044>-226<005200560042004E000F>-331<00340046>-7<0045>-226<0045004A0042004E>-226<0055005600530051004A0054000D>-232<004E0050004D004600540055004A0046>]TJ
-1.02 0 0 1 53.716 409.3 Tm [<0057004A005500420046>10<000D>-250<0051004D004200440046005300420055>-249<0042000D>-251<004E0050004D004600540055004A0046>-249<004F0046>-7<0044000D>-251<004D0046>-7<0050>9<000F>-338<002E00420046>-7<00440046004F00420054>-250<004D00420044004A004F004A0042000F>-339<002F0042004E>-250<004A005100540056004E>]TJ
-1.015 0 0 1 54 394.506 Tm [<004D004A00480056004D0042000D>-246<0046004D0046004A00470046004F0045>-247<00420055000D>-246<0042004400440056004E00540042004F>-247<004F0046>-7<0044000D>-246<0054005600540044004A0051004A0055>-247<0042000D>-247<004A005100540056004E000F>-329<002E005000530043004A>-246<0043004D0042004F0045004A0055>]TJ
-1.017 0 0 1 54 379.711 Tm [<004D004A00480056004D0042>-244<0047004600560048004A00420055>-245<004E00420048004F0042000F>-328<002F0056004F0044>-245<0046004D0046004A00470046004F0045>-245<00440050004F00540046>-7<0052005600420055>-245<004D00500053>8<0046004E000F>-327<00340046>-7<0045>-245<004D00420044004A004F004A0042>]TJ
-1.02 0 0 1 54 364.917 Tm [<004F0056004D004D0042>-305<0057004A005500420046>-306<0046004F004A004E000F>-510<00310046004D004D0046004F005500460054005200560046>-306<0055004A004F0044004A00450056004F0055>-306<00510056005300560054>-305<0057>7<0046004D>-305<004E00420048004F0042000F>-510<002A004F00550046000E>]TJ
-1.004 0 0 1 54 350.122 Tm [<004800460053>-248<004F0050004F>-249<0046004F004A004E000F>-332<003100530042004600540046004F0055>-248<00460056004A0054004E0050>-7<0045>-249<004F0056004F0044>-249<00460056>-248<00510056005300560054000F>-332<00250050004F0046>-7<0044>-249<0043004A0043>-10<0046004F00450056004E>]TJ
-1.014 0 0 1 54 335.327 Tm [<005200560042004E>-247<004A004F>-247<00550046004D004D00560054000F>-331<002F0056004D004D0042004E>-247<004400560053005400560054>-247<00510056004D0057004A004F00420053>-247<004D0046>-7<0044005500560054000F>-331<00250050004F0046>-7<0044>-247<00460055>-248<004E004A000F>-330<002F0042004E>]TJ
-1 0 0 1 53.716 320.533 Tm [<00570056004D005100560055004200550046>-250<004E0046005500560054>-250<00460056>-250<0046004F004A004E000F>-333<0037>79<004600540055004A00430056004D0056004E>-249<0051>-7<0046004D004D0046004F005500460054005200560046>-250<00470046004D004A0054>-250<00460056>-250<004E0042005400540042000F>]TJ
-0.98 0 0 1 71.036 305.738 Tm [<09550056004A0054005200560046>-228<0056004D004D0042004E0044005000530051>-7<00460053>-228<0051004D004200440046005300420055>-228<004A005100540056004E000F>-331<0024005300420054>-228<004F004A00430049000F>-331<002E005000530043004A>-228<0057>7<0046004D>-227<004B0056005400550050>]TJ
-0.98 0 0 1 53.716 290.944 Tm [<0057004A005500420046>-236<004D0042004400560054>-237<0055004A004F0044004A00450056004F0055>-236<0056004D00550053004A004400460054000F>-334<002D00500053>7<0046004E>-235<004A005100540056004E>-237<00450050004D00500053>-236<0054004A0055>-237<0042004E00460055000D>-240<00440050004F00540046>-7<004400550046000E>]TJ
-0.98 0 0 1 54 276.149 Tm [<0055005600460053>-193<00420045004A0051004A00540044004A004F0048>-193<0046004D004A0055000F>-319<002A004F>-193<004900420044>-193<004900420043004A00550042005400540046>-194<0051004D0042005500460042>-193<0045004A004400550056004E00540055000F>-319<002A004F00550046004800460053>-193<00550046004E005100560054>]TJ
-0.996 0 0 1 54 261.355 Tm [<00440050004F00570042004D004D004A0054>-250<00420056004800560046>9<000F>-333<00260055004A0042004E>-251<004700420044004A004D004A0054004A0054000F>-334<002F0056004F0044>-251<0046004D0046004E0046004F00550056004E>-250<004700460053004E0046004F00550056004E>-251<0058004A0054004A000F>]TJ
-1.01 0 0 1 53.602 246.56 Tm [<0022>12<0046004F00460042004F>-246<0051004D004200440046005300420055000F>-330<00360055>-247<004A004E0051>-7<00460053>7<0045004A00460055000D>-246<0046004F004A004E>-247<00540046>-7<0045>-247<0048005300420057004A00450042>-246<00540050004D004D004A0044004A005500560045004A004F000D>-247<00470046004D004A0054>]TJ
-1.02 0 0 1 54 231.766 Tm [<0050>-7<0045004A0050>-259<0051004D004200440046005300420055>-260<005200560042004E000D>-264<00420044>-260<00510056004D0057004A004F00420053>-260<0046004D004A0055>-260<00510056005300560054>-260<0046004800460055>-260<0046004F004A004E000F>-371<002F0056004F0044>-260<0057004A005500420046>]TJ
-1.014 0 0 1 54 216.971 Tm [<005500500053005500500053>59<000F>-330<00310053>7<0050004A004F>-246<00550046004E005100560054>-247<004F004A00430049>-247<0054004A0055>-247<0042004E00460055>-247<004F004A0054004D000F>-331<0037004A00570042004E00560054>-247<00520056004A0054>-247<005500500053005500500053>-247<0057004A005500420046>]TJ
-1 0 0 1 54 202.177 Tm [<0053004A005400560054>-250<0051>-7<0050005300550042>-250<0057>8<00460049004A00440056004D0042000F>]TJ
-0.999 0 0 1 71.036 187.382 Tm [<00270056005400440046>-250<004E004200560053004A0054000F>-333<0037>80<004600540055004A00430056004D0056004E>-249<004D00560044005500560054>-250<004F004A00430049>-250<00420055>-251<004D0046>-7<0044005500560054000F>-333<00340046>-7<0045>-251<0043004A0043>-10<0046004F00450056004E000D>]TJ
-1.004 0 0 1 54 172.588 Tm [<004F0056004D004D0042>-248<0042>-248<0047004200560044004A004300560054>-248<00540046004E0051>-7<00460053>59<000D>-247<004D0046>-7<0050>-248<0057>7<0046004D004A0055>-247<0056004D00550053004A0044004A00460054>-248<00550046004D004D00560054000D>-248<00420044>-248<0057>7<0046004F0046004F00420055004A0054>-247<00420053>7<00440056>]TJ
-1.016 0 0 1 53.58 157.793 Tm [<0058004A0054004A>-246<0057>7<0046004D>-245<004F004A0054004D000F>-328<0037>79<004600540055004A00430056004D0056004E>-245<0045004A0042004E000F>-329<0022004D004A005200560042004E>-246<0051>-7<0046004D004D0046004F005500460054005200560046>9<000D>-245<00420056004800560046>-246<00520056004A0054>]TJ
-1.007 0 0 1 54 142.999 Tm [<005400420048004A00550055004A0054>-247<0051>-7<00500054005600460053>7<0046>10<000D>-247<0055005600530051004A0054>-247<004D0042004400560054>-248<00440050004F004800560046>-248<005200560042004E000D>-247<004A004F>-248<00490046004F00450053>7<00460053004A0055>-247<0053004A005400560054>-247<00460053>7<00500054>]TJ
-0.98 0 0 1 54 128.204 Tm [<0046004800460055>-237<00470046004D004A0054000F>-334<002E00420046>-7<00440046004F00420054>-237<0046004800460055>-237<0046005300420055>-237<004A004F>-237<005400420051004A0046004F>-237<004E004200550055004A0054>-237<0051>-8<0050005300550055004A005500500053>61<000F>-333<0037>82<004600540055004A00430056004D0056004E>]TJ
-1.02 0 0 1 54 113.41 Tm [<0051>-7<0050005300550055004A005500500053>59<000F>-483<002F0056004D004D0042>-297<004700420044004A004D004A0054004A000F>-484<00340046>-7<0045>-297<0042>-298<0055005600530051004A0054>-297<00460056>-297<004D0042004400560054>-298<00440050004E004E0050>-7<00450050>-297<004700420044004A004D004A0054004A0054000F>]TJ
-0.982 0 0 1 54 98.615 Tm [<002E005000530043004A>-254<00470053004A004F0048004A004D004D0042000D>-254<0058004A0054004A>-254<004A004F>-254<0045004A0048004F004A00540054004A004E>-254<004A004F005500460053>8<00450056004E000D>-254<004B0056005400550050>-254<004D0046>-7<0044005500560054>-254<005400420048004A00550055004A0054>-254<00450056004A000D>]TJ
-1.02 0 0 1 54 83.82 Tm [<00460055>-258<0057>7<00460049004A00440056004D0042>-258<004D004A0043>-10<00460053>7<0050>-258<00450056004A>-259<004400560053005400560054>-258<00450056004A000F>-368<002E004200560053004A0054>-259<00550046004E0051>-7<00500053>-259<004D004A00480056004D0042>-258<00540046>-7<0045>-259<004D0042004400560054000F>]TJ
-1.02 0 0 1 54 69.026 Tm [<00250056004A0054>-341<004400560053005400560054>-341<0046004F004A004E>-341<00560055>-341<00420056004800560046>9<000F>-614<0024005300420054>-341<00420044>-341<004E00420048004F0042000F>-615<0024005300420054>-341<004F0056004D004D0042000F>-615<002F0056004D004D0042>]TJ
-1.02 0 0 1 54 54.231 Tm [<0046004800460054005500420054000F>-526<00240056005300420043004A005500560053>-312<0042>-311<004D0046>-7<0050>9<000F>-526<09550056004A0054005200560046>-312<0046004800460054005500420054>-311<0058004A0054004A>-312<0046004800460055>-312<004F0056004F0044000F>-526<002F0042004E>]TJ
-1 0 0 1 54 39.437 Tm [<0047004600560048004A00420055>-250<004D0042004400560054>-250<0057>8<0046004D>-250<004600540055000F>-333<00240056005300420043004A005500560053>-250<00440050004F00540046>-7<0044005500460055005600460053>58<000F>]TJ
-0 g 0 G
-0 g 0 G
-ET
-
-endstream
-endobj
-41 0 obj
-<< /Type /Page /Contents 42 0 R /Resources 40 0 R /MediaBox [ 0 0 396 612 ] /CropBox[0 0 396 612]
-
-/TrimBox[0 0 396 612] /Parent 43 0 R >>
-endobj
-40 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F83 16 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-46 0 obj
-<< /Length 6156 >>
-stream
-0 g 0 G
-BT
-/F83 10.44878 Tf
-1 0 0 1 36 565.121 Tm [<0017>]TJ
-/F83 10.44878 Tf
-1 0 0 1 151.292 565.121 Tm [<0025>-50<0964>-50<096C>-50<095B>-341<0029>-50<095C>-50<096C>-50<095F>-50<095E>-50<095C>-50<096D>-50<0960>]TJ
-0 g 0 G
-/F83 11.3574 Tf
-0.98 0 0 1 53.036 542.451 Tm [<0034005600540051>-7<0046004F0045004A005400540046>-249<0057>7<0046004D>-248<00470046004D004A0054000F>-339<00360055>-249<004D00500053>7<0046004E>-248<004D00500053>7<0046004E000D>-249<004A004F005500460053>7<00450056004E>-249<00460056000D>-250<0055004A004F0044004A00450056004F0055>-250<0054004A0055>]TJ
-1.015 0 0 1 36 527.656 Tm [<0042004E00460055000D>-246<004D004200500053>7<0046>-6<00460055>-247<0057004A005500420046>9<000D>-246<00420053>7<00440056000F>-329<0022>12<0046004F00460042004F>-246<0047004200560044004A004300560054>-247<0051>-7<0046>-7<00450046>-247<00460056>-247<0042004F00550046>10<000F>-329<003100530042004600540046004F0055>]TJ
-1.02 0 0 1 36 512.862 Tm [<0046004F004A004E>-282<0046004D004A0055000D>-293<00530056005500530056004E>-283<00420055000D>-292<004E0050004D004600540055004A0046>-283<004F0050004F000D>-292<004F0050004F0056004E004E005A>-283<0057>7<0046004D000D>-291<004F004A0054004D000F>-440<00360055>-283<004D0046>-7<0044005500560054>]TJ
-1.02 0 0 1 36 498.067 Tm [<00460053>8<00500054000D>-318<004E0042004D004600540056004200450042>-304<0054004A0055>-304<0042004E00460055000D>-319<004700460053004E0046004F00550056004E>-304<00460056000D>-319<00540050>-6<00450042004D00460054>-304<004400560053005400560054000D>-319<004E00420048004F0042000F>]TJ
-1.007 0 0 1 36 483.273 Tm [<00250050004F0046>-7<0044>-248<00460056>-249<00510056005300560054000F>-332<09550056004A0054005200560046>-249<0057>7<00460049004A00440056004D0042000D>-248<00560053004F0042>-248<00540046>-7<0045>-249<0056004D00550053004A0044004A00460054>-249<004200560044005500500053>59<000D>-248<0051>-7<0046>-7<00450046>]TJ
-1.02 0 0 1 36 468.478 Tm [<004D00500053>8<0046004E>-316<0046004800460054005500420054>-316<00450056004A000D>-335<00460055>-316<00440050004F00570042004D004D004A0054>-317<0046004D004A0055>-316<0046005300420055>-316<00540046>-7<0045>-317<004F0056004D004D0042000F>-541<00250050004F0046>-7<0044>-316<004D00560044005500560054000F>]TJ
-0.98 0 0 1 36 453.684 Tm [<00240056005300420043004A005500560053>-241<00460055>-242<004F0056004F0044000F>-336<0022004D004A005200560042004E>-242<00450050004D00500053>-242<0050>-7<0045004A0050>10<000D>-244<00440050004E004E0050>-7<00450050>-242<00510053>7<00460055004A0056004E000D>-243<0056004D00550053004A0044004A00460054>]TJ
-1.018 0 0 1 36 438.889 Tm [<004F0050004F000D>-244<0051004900420053>7<0046005500530042>-243<004A004F000D>-245<0057>7<0046004D004A0055000F>-326<002A004F00550046004800460053>-244<00420053>7<00440056>-244<004600540055000D>-244<004F0050004F0056004E004E005A>-244<004A004F000D>-245<004700460053004E0046004F00550056004E>]TJ
-1 0 0 1 36 424.095 Tm [<0047004200560044004A004300560054000D>-250<0046004800460054005500420054>-250<0057>8<0046004D000D>-250<0050>-7<0045004A0050>10<000F>]TJ
-1.005 0 0 1 53.036 409.3 Tm [<00340046>-7<0045>-247<00440050004E004E0050>-7<00450050>-248<0051>-7<00500054005600460053>7<0046>-246<0051>-7<0046>-7<00450046>9<000F>-330<002E004200560053004A0054>-248<00560055>-247<004600540055000F>-332<00360055>-247<00520056004A0054>-247<00510056005300560054000F>-332<00340046>-7<0045>]TJ
-1.01 0 0 1 36 394.506 Tm [<00420044>-247<0050>-7<0045004A0050>9<000F>-330<00340046>-7<0045>-248<0057>7<00460049004A00440056004D0042>-247<00490046004F00450053>7<00460053004A0055>-247<00540046004E000F>-331<00250056004A0054>-248<004F0050004F>-247<0050>-8<0045004A0050>10<000F>-330<002E005000530043004A>-248<00560055>-248<00450056004A000F>]TJ
-1.02 0 0 1 36 379.711 Tm [<00340046>-7<0045>-316<0042004400440056004E00540042004F>-317<0053004A005400560054>-316<0046004800460055>-317<0050>-7<0045004A0050>9<000F>-541<002A004F>-316<004900420044>-317<004900420043004A00550042005400540046>-317<0051004D0042005500460042>-316<0045004A004400550056004E00540055000F>]TJ
-1.02 0 0 1 36 364.917 Tm [<00310046004D004D0046004F005500460054005200560046>-361<004F0050004F>-362<0046004D004A0055000F>-677<00270056005400440046>-361<00540046>-7<0045>-362<004B0056005400550050>-362<00460056>-362<00560053004F0042>-361<0051>-7<0050005300550042>-362<0055004A004F0044004A00450056004F0055000F>]TJ
-0.981 0 0 1 36 350.122 Tm [<002E004200560053004A0054>-255<00470046004D004A0054>-255<0050>-7<0045004A0050>9<000D>-254<00540050004D004D004A0044004A005500560045004A004F>-255<00540046>-8<0045000D>-255<0057>7<0050004D0056>1<0055005100420055>-255<0042000D>-255<00500053004F00420053>7<0046>-254<00420044000D>-255<0046005300420055000F>-341<002E005000530043004A>]TJ
-1.02 0 0 1 36 335.327 Tm [<00520056004A0054>-270<00450050004D00500053>59<000F>-401<00250050004F0046>-7<0044>-270<0051>-7<0046004D004D0046004F005500460054005200560046>9<000D>-275<0046005300420055>-270<00420044>-270<005400420048004A00550055004A0054>-270<00540046004E0051>-7<00460053>58<000D>-275<004F0056004F0044>-270<00450056004A>]TJ
-1.02 0 0 1 36 320.533 Tm [<004D00500043>-10<005000530055004A0054>-269<00510056005300560054000D>-275<00520056004A0054>-269<00440050004F004800560046>-269<00510056005300560054>-269<004E0046005500560054>-269<0056004D00550053004A0044004A00460054>-269<00550046004D004D00560054000F>-398<00310053>7<0050004A004F>-268<00460055>]TJ
-1.02 0 0 1 36 305.738 Tm [<005200560042004E000F>-341<0024004D004200540054>-250<0042005100550046004F0055>-250<005500420044004A0055004A>-250<00540050>-7<0044004A0050005400520056>-250<00420045>-250<004D004A0055005000530042>-250<005500500053>7<005200560046004F0055>-249<0051>-7<00460053>-250<00440050004F00560043004A0042>]TJ
-0.98 0 0 1 36 290.944 Tm [<004F00500054005500530042000D>-241<0051>-7<00460053>-238<004A004F004400460051005500500054>-239<0049005A004E0046004F00420046>-7<00500054000F>-334<003100530042004600540046004F0055>-239<005400420051004A0046004F>-238<0055005600530051004A0054000D>-241<004700460053004E0046004F00550056004E>]TJ
-1 0 0 1 35.716 276.149 Tm [<0057>8<0046004D000D>-250<0046004D0046004A00470046004F0045>-250<0047004200560044004A004300560054000D>-250<0057>8<00460049004A00440056004D0042>-250<00460056000D>-250<004D0042004400560054000F>]TJ
-0 g 0 G
-0 g 0 G
-ET
-
-endstream
-endobj
-45 0 obj
-<< /Type /Page /Contents 46 0 R /Resources 44 0 R /MediaBox [ 0 0 396 612 ] /CropBox[0 0 396 612]
-
-/TrimBox[0 0 396 612] /Parent 43 0 R >>
-endobj
-44 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F83 16 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-49 0 obj
-<< /Length 32 >>
-stream
-0 g 0 G
-0 g 0 G
-0 g 0 G
-0 g 0 G
-
-endstream
-endobj
-48 0 obj
-<< /Type /Page /Contents 49 0 R /Resources 47 0 R /MediaBox [ 0 0 396 612 ] /CropBox[0 0 396 612]
-
-/TrimBox[0 0 396 612] /Parent 43 0 R >>
-endobj
-47 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ProcSet [ /PDF ] >>
-endobj
-52 0 obj
-<< /Length 32 >>
-stream
-0 g 0 G
-0 g 0 G
-0 g 0 G
-0 g 0 G
-
-endstream
-endobj
-51 0 obj
-<< /Type /Page /Contents 52 0 R /Resources 50 0 R /MediaBox [ 0 0 396 612 ] /CropBox[0 0 396 612]
-
-/TrimBox[0 0 396 612] /Parent 43 0 R >>
-endobj
-50 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ProcSet [ /PDF ] >>
-endobj
-1 0 obj
-<<>>
-endobj
-2 0 obj
-<<>>
-endobj
-3 0 obj
-<< /pgfprgb [/Pattern /DeviceRGB] >>
-endobj
-53 0 obj
-[ 13 [ 219 333 219 291 ] 34 [ 667 557 616 667 ] 41 [ 673 280 ] 47 [ 666 ] 49 [ 499 ] 51 [ 555 454 544 634 ] 66 [ 486 478 389 489 401 314 477 519 276 ] 76 [ 486 266 783 518 447 489 491 357 353 307 521 472 688 475 503 ] 105 [ 633 ] 1724 [ 268 ] 2122 [ 564 ] 2157 [ 519 ] 2160 [ 551 ] 2167 [ 568 ] 2169 [ 648 591 552 ] 2174 [ 462 ] 2176 [ 492 ] 2181 [ 474 ] 2257 [ 444 444 444 444 445 444 444 444 444 444 ] ]
-endobj
-55 0 obj
-<< /Length 284 >>
-stream
-
-endstream
-endobj
-56 0 obj
-<< /Subtype /CIDFontType0C /Length 10174 >>
-stream
-
-k
-Ö „ å š p"·{îôµ Þ"‰¨/òÁj;;õ‹]#ˆXö Å!!w!é"z##‡#õ$Z$ì%ZN‹½ø콋½ø$½‹øˆùPüˆÛý÷>÷“÷>û“üø¿÷>û“û>û“÷z÷“÷>÷“ü’û\÷Àû>÷“÷èûêû÷w÷»ɸsšž†›‡š‡yoX\Vˆ‚Žƒ“…÷ §å¿³t£lmnxlûx÷sÇØ÷¤÷Î÷sšŸ¬š’ˆƒûyuqzƒŽ‚’ûê€õÊ÷
-û3ûDû&ûYe†r‰srûÖû
-÷Bõ‰¨n­øÙ­n¨÷k×÷Ìælžˆy‰¸Œ±Œ²°°‰î $÷÷SË÷Šº¢¢ ÷/û÷ û5N‹R‰dfdŒ^ $ˆ‰œˆx†ŠŽˆ¥‰«‰—‡w†Š…Š„*ü†…kx€i‰n‰l‡‡‡†Š÷BÂíø‰®’­º÷;Äûûmˆm…mû^dûYû;y’ ‹Œ÷‰ÿ
-Óyåûû;<û1û Þ“å²÷&õ©›{oš—rŽfmc…5fS`ocyen`±ôCû}ÿ
-÷CŒŠ§q¦ø*§÷NÕ÷…Ú¸­ †w‰í§¹‰Û÷÷$¹÷C°œœ›÷9ÞûpOŠŠV)‰‰‡vˆŠŽ‰Ž¢¤•†}‡Š†Š…xEûÛl„~}mt¸‡‰ˆ‡Š÷.½Ó÷㤧Ž²÷²B8r‡r†rû$m4kûL|–ž‹Œ’Š¨o§÷P«÷N§÷ƒ’¸÷~÷Œ¬÷.Ÿ˜—«–ŽŒ Š‹L‰ol<‹ "‰‰‡uˆŠŽŠŸ¥–„|ˆ‹ˆŠ‡Cûåx‡}ykv‡ˆ‰‡†v‰‹ß§ªÄ‹ " ‰‡€r–›Ž‹ŒŽ«÷+¦Š—†™wxðû‘‚„„…Š‡Š…ˆ~÷&¸¡ŽŒ‡Žˆ†v|Ÿ}û÷J†’ˆ‘Œ‘Œ‘•”¤Ÿ÷î¶Áž²Ž¡ˆŒ‹_ŠroC‹ "‰Š†uˆ‰Ž˜œŠƒ†‡†|~û5ûqw|‡wŠ⊨€vøJ§÷"’ž’÷âÑ»’¶ø¶øŠ‡gûÑ‹s‰‚vw‡‡‰‡Š†v‰‹Ï§©Ä‹ " †ˆl{Œ¨ŽŒ²÷㤎½‘ŒŽŠû‰ûgûøC÷øûˆˆ‡v‰‰¬š‰}‰‹ˆŠˆ(ûäc~…d‡‡‰‡Š‡vŒ‰¾‹µ§ª¹‹ " ‡ˆm~Œœ‘’•æ÷Æv×ü†‰©Š¨xvøR§÷m’°øÝø¡›¡ª ŽŽ¡ˆŒ‹T‰moF‹ "†‰‡vˆ‰ ¥“{z‡‹‡ŠˆXû…z‡ˆ‚†‡„’›ûP÷Îûˆˆ‡x‡Š‰°•xy‘FûÚx‡{skvˆ„‰‡Š†vŽ‰‹Í¦ªÈ‹ " ˆˆvr‚™œ‹Œ¿÷‡£–‘’ƒ{”p÷UûÏ{–“…š—•’Ÿ‚«ø:«ÙÜ÷àÜøÊ÷žœœ÷6Õûû û ûû m‡w‰yyûÙF÷÷)÷ó÷#©ûe÷cÛÁ[)uˆr…oûqBA18X¾è Ž£¤÷*«ÞÅÖ(ƒ«r¨÷T©—÷J©o§÷ØÖ˜Ój÷Çw‡~kw‡ˆ‰‡Š†v‰‹Ô¦ªÑ‹ "Ž Œˆ‡q€’šŽ‹ŽŒ­÷4ÐœghšIjŒQؘ¡‘ ˆ£V‰´¥ŠÛ®q¨jŒŒ[ƒϼ˜È”Œ’“ÈM¡5s‹]‰ijcŒm $g†s‰‰©¤‰vƒ÷sZ8zYv@dk°÷FŽž¢Œ§¿¥eg‚‰‚‰FŠ¨ø(©mµ÷vÕÃ’÷+§Üø^øD¶”qC§Ž¼»”¸”·sÜ…ˆ€…{ûܼ{ƒ‘‘ŠrÜ‚_]z\¤ˆÓ¯œ¥¸¾¢”„|ˆŠ‡Š‡Cûèw‡}€lv‡ˆˆˆ†v‰‹Ó§©Û‹ " ŽˆŽˆvr€‘šŽ‹ŒŽÓ÷棗–§4Š¨ø*§òø_ûïÕà÷kÆw‡~€kw‡ˆˆˆŠ†v‰Ћԧ©Û‹ "Œ ŽŒˆŽˆvq€‘šŽ‹ŽŒª÷&÷2÷Z¢ž—“¢œ’ŒŽ {Š]Š„O… $‰Š†u‰ŠŒˆŽ¢›‰ƒ‰Š‡‡†ƒ€ûû4E÷4ŒŠ‹Œˆ•‰Œ’Œ‘Žš¡ŽŽŒ¡ŠŒ€Š6Š†M‚ $ˆ‰‡v‡ŠŠ¨˜v”àû^û ®ø®ÍÜ÷}Ü÷ÅøK"%2ûrû'nÍ9÷
-¢½ÎÐû ‰¬ø%•÷
-µ|µ`§b¦ô­¢§ž¡èûOübN©××ÑÄÏ·ªt¸j gd5YI8ôéøÈÁ­Zfnl*?t›R´¤¨º¿ËÆû ûK§÷t¯÷Ä©×Ô÷tÓ§û/‰‹‚Ž‚ëŽöºÙÚ÷÷÷1©÷B®Aû*û !K¥:÷°Á¢§­uH`M^_RS6fC‚÷Þ÷ÅgZk‚r9vнÒÅ÷Ó²Âi"aƒU„s
-× øÅ
-endstream
-endobj
-54 0 obj
-<< /Type /FontDescriptor /FontName /OKLFSU+LibertinusSerif-Italic /Flags 4 /FontBBox [ -1325 -312 1389 928 ] /Ascent 894 /CapHeight 647 /Descent -246 /ItalicAngle -12 /StemV 73 /XHeight 429 /FontFile3 56 0 R /CIDSet 55 0 R >>
-endobj
-57 0 obj
-<< /Length 1576 >>
-stream
-%!PS-Adobe-3.0 Resource-CMap
-%%DocumentNeededResources: ProcSet (CIDInit)
-%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-OKLFSU-LibertinusSerif-Italic-0)
-%%Title: (TeX-OKLFSU-LibertinusSerif-Italic-0 TeX OKLFSU-LibertinusSerif-Italic 0)
-%%Version: 1.000
-%%EndComments
-/CIDInit /ProcSet findresource begin
-12 dict begin
-begincmap
-/CIDSystemInfo
-<< /Registry (TeX)
-/Ordering (OKLFSU-LibertinusSerif-Italic)
-/Supplement 0
->> def
-/CMapName /TeX-Identity-OKLFSU-LibertinusSerif-Italic def
-/CMapType 2 def
-1 begincodespacerange
-<0000> <FFFF>
-endcodespacerange
-0 beginbfrange
-endbfrange
-62 beginbfchar
-<000D> <002C>
-<000E> <002D>
-<000F> <002E>
-<0010> <002F>
-<0022> <0041>
-<0023> <0042>
-<0024> <0043>
-<0025> <0044>
-<0029> <0048>
-<002A> <0049>
-<002F> <004E>
-<0031> <0050>
-<0033> <0052>
-<0034> <0053>
-<0035> <0054>
-<0036> <0055>
-<0042> <0061>
-<0043> <0062>
-<0044> <0063>
-<0045> <0064>
-<0046> <0065>
-<0047> <0066>
-<0048> <0067>
-<0049> <0068>
-<004A> <0069>
-<004C> <006B>
-<004D> <006C>
-<004E> <006D>
-<004F> <006E>
-<0050> <006F>
-<0051> <0070>
-<0052> <0071>
-<0053> <0072>
-<0054> <0073>
-<0055> <0074>
-<0056> <0075>
-<0057> <0076>
-<0058> <0077>
-<0059> <0078>
-<005A> <0079>
-<0069> <00A9>
-<06BC> <2019>
-<084A> <00660069>
-<086D> <0061>
-<0870> <0064>
-<0877> <006B>
-<0879> <006D>
-<087A> <006E>
-<087B> <006F>
-<087E> <0072>
-<0880> <0074>
-<0885> <0079>
-<08D1> <0030>
-<08D2> <0031>
-<08D3> <0032>
-<08D4> <0033>
-<08D5> <0034>
-<08D6> <0035>
-<08D7> <0036>
-<08D8> <0037>
-<08D9> <0038>
-<08DA> <0039>
-endbfchar
-endcmap
-CMapName currentdict /CMap defineresource pop
-end
-end
-%%EndResource
-%%EOF
-
-endstream
-endobj
-21 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /OKLFSU+LibertinusSerif-Italic /DescendantFonts [ 58 0 R ] /ToUnicode 57 0 R >>
-endobj
-58 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /OKLFSU+LibertinusSerif-Italic /FontDescriptor 54 0 R /W 53 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
-endobj
-59 0 obj
-[ 374 [ 2000 ] ]
-endobj
-61 0 obj
-<< /Length 47 >>
-stream
-
-endstream
-endobj
-62 0 obj
-<< /Subtype /CIDFontType0C /Length 472 >>
-stream
-
-¯ Ú Ú’
-endstream
-endobj
-60 0 obj
-<< /Type /FontDescriptor /FontName /ETXLAD+NovelDeco /Flags 4 /FontBBox [ -392 -234 1985 838 ] /Ascent 894 /CapHeight 537 /Descent -246 /ItalicAngle 0 /StemV 61 /XHeight 429 /FontFile3 62 0 R /CIDSet 61 0 R >>
-endobj
-63 0 obj
-<< /Length 652 >>
-stream
-%!PS-Adobe-3.0 Resource-CMap
-%%DocumentNeededResources: ProcSet (CIDInit)
-%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-ETXLAD-NovelDeco-0)
-%%Title: (TeX-ETXLAD-NovelDeco-0 TeX ETXLAD-NovelDeco 0)
-%%Version: 1.000
-%%EndComments
-/CIDInit /ProcSet findresource begin
-12 dict begin
-begincmap
-/CIDSystemInfo
-<< /Registry (TeX)
-/Ordering (ETXLAD-NovelDeco)
-/Supplement 0
->> def
-/CMapName /TeX-Identity-ETXLAD-NovelDeco def
-/CMapType 2 def
-1 begincodespacerange
-<0000> <FFFF>
-endcodespacerange
-0 beginbfrange
-endbfrange
-1 beginbfchar
-<0176> <254C>
-endbfchar
-endcmap
-CMapName currentdict /CMap defineresource pop
-end
-end
-%%EndResource
-%%EOF
-
-endstream
-endobj
-17 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /ETXLAD+NovelDeco /DescendantFonts [ 64 0 R ] /ToUnicode 63 0 R >>
-endobj
-64 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /ETXLAD+NovelDeco /FontDescriptor 60 0 R /W 59 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
-endobj
-65 0 obj
-[ 13 [ 220 338 220 ] 19 [ 465 465 ] 22 [ 465 465 ] 32 [ 435 ] 34 [ 695 ] 36 [ 646 701 557 485 ] 41 [ 730 297 ] 45 [ 528 839 699 702 541 ] 52 [ 485 597 661 652 951 ] 66 [ 457 493 428 506 447 310 500 538 271 272 512 264 790 542 504 519 503 372 390 316 531 497 747 490 515 ] 1754 [ 742 ] 1759 [ 268 ] 1768 [ 351 ] 2360 [ 582 560 540 ] 2389 [ 702 ] 2395 [ 554 556 ] 2398 [ 492 565 477 ] 2404 [ 311 ] 2407 [ 667 602 563 ] 2412 [ 511 412 529 ] 2419 [ 489 ] ]
-endobj
-67 0 obj
-<< /Length 303 >>
-stream
-
-endstream
-endobj
-68 0 obj
-<< /Subtype /CIDFontType0C /Length 10921 >>
-stream
-
-s   ü —9…E­4/ý~çAH]Ã]òf”a`5l‹M  Ö!±"="•##Â$!$Ü%„%Ì&''‹(3U‹½ø龋½ø$½‹øˆùNüˆÛý÷>÷’÷>û’üø½÷>û’û>û’÷z÷’÷>÷’üû\÷¿û>÷‘÷èûâû÷x÷²óêluvol¥ˆž‰œ…tvg]W~„’„Ç–Å»ÑÇq²cûl÷sdz÷–÷£÷s˜™§—•‡•ûo~ty‘‚”ûâõÄõĶn£s¨¨££¨¨s£nnssn2‹Ìø’®¿ÞAÖ@â÷BãÌÈøhvžy œ©¡“‰‘‰’Ô‰’…”“¤¥¯Ô¯¾r+KtWPOABä)'{[P‹¾«÷C«¹‰‹˜À•ÖŒ©…~‰DzzrgûF»ÐÏðìĶ·×÷
-Œ°ø÷1Mù+÷:‡ŠJˆ……‹v‘…°Œ³Œ©©¹Š¬ $‘‘‹ …‘GŽˆ…Þmø9‡Á™Ï‘‘‹ …‘û‰ûhü‡ˆ‡‰‰ˆ“ˆKûaøû%……‹v‘…Ї‘‰„@Mcü0…OrR†……‹v‘…©Œ«Œ££³Š© $‘‘‹ …‘I†ªÃ£±ø%÷cü›„Ž‘ƒ‘‘’“U÷uø¥÷%–v¨vøü¬ñ¼ø)¼xøÀø”ûÛx‹€„‡|°nûëøGû……‹v‘…¶ˆ©h‘qü52z…E„……‹v‘…¶Œ¸Œ£¢¹Šµ $‘‘‹ …‘E’zæ÷Æ­‹š“‘–€uœ¸÷ñüM|–˜‚›™”—žø䜑ђ‘‘‹ …‘bŠ\Šsv]Œ_ $……‹v‘…xÑ„œ‡0÷(¯ø诰ëøIëù.÷Ý÷cû#÷ûGûVûû.ûVûY÷#û÷>÷ã»Ù³ġÓßûã÷¹÷öûû^ûG5"ûûû÷÷T÷fîàî~‰¬÷­÷­†wóà÷uèìóøŸü%8z†Eˆ……‹v‘…¸Œ¼Œ¯®ÆŠ½ $‘‘‹ …‘=sÞ÷>„¡£ˆ®÷JÂ÷ àÆdöûMeP„cÜfWŒŒc……‹v‘…ìшœ†8નš®ÓÐÐtûû
-Že‰‰‰Š‡^W€[‡•—Š—ÐÛŸ¹¥Í¼°•eNü8z†;ˆ……‹v‘…¼Œ¾Œ³±¾Š½ $‘‘‹ …‘;ŽzÞö´øÛ¬âà÷ö¼÷@øŸޚ؎‘‘‹ …‘\ŠZŠddbŒd $……‹v‘…Ljœ†8û¶û`÷dñ÷a¼÷÷F÷xۜǒ‘‘‹ …‘eŠbŠtvZŒ] $……‹v‘…Ö„œˆ:ûŠû|ûû=[b¨mZº‰×Ìí”vù¬Œ÷:÷î÷øTøúÕ†‹pvUû2ü%‡û4ø+tÇ‘˜Ï’‘‘‹ …‘cŠ^ŠgghŒj $……Œv‘…†“z¦F÷Yü”{‘’„•–’”™‘÷cø’žº›²Ê’‘‘‹ …‘mŠhŠtt^Œb $……‹v‘…ø!”vù¬÷4÷B÷ATÂ÷Ä÷ôù¾øÉû0üFˆŒûø:zÁ®Ž­Ž‘‘‹ …‘bŠ_ŠcjhŒk $……‹v‘…ìÀˆ¡l”q¢IŽ‚Šƒƒzûû¹†Œû&øN®¦®‘‘‹ …‘jŠ_ŠdhnŒn $……‹v‘…¸ˆ’ŠžU÷Pü±{‘€–˜‘•œ’÷)÷㟔Ž€z‘÷ûàz‘—–’–š÷]ø¯˜®¢ÂŽ‘‘‹ …‘nŠkŠqq_Œc $……‹v‘…ô´ˆ³ˆ|`*´b»ø¬¯ÞKØ÷5Ù´÷¹»l‘–p½±¯œŸ l‰—‡”€‘…„z~nŠ²¹÷'÷"=¦B98URs—¢¨ ˜’Š’‰ŠŽŠ‘–ªµ–±­ºzû„ˆ‡ˆŠ5v´+sFVG9ÃqÑ®©“­·Ÿ›÷Mû~…„ƒ…vqitoYu³ª¸ ¹ÕžN­ˆvø·÷^©œ•‹wÙÚ÷iá§÷;ø……‡”÷L«Ì³‹’‡Ž‚sr@}cˆ‰ƒ{‘…ŽŽ‹Ž·ˆ–‹<ü|dŠyˆ}§ƒ‡—‘‘•”“”•—‘‹–‚x¢©…®ñ÷ è÷3÷1Ö4`ezol’l¢¥©”¨ȽA*û]5,lv¡¤w÷Ž •˜–û¼ø¬°áø"懔ƒ‚Œ_i`u`BNÕ÷ ÷»ÍÍÆ“hhpŽ™‚  §˜ªÂR³+(!2û"ûÓ2÷ÇÀžÝ½[º„¦÷ï®÷^©œ•‹w²á÷pÚ§÷â½”Œ„Žs“h‹“ˆŒ‘k¡®šÈ’‘‘‹š…‘K‚ž¼øY̳‹’‡Ž‚³r@}cˆ‰ƒ{‘…ŽŽ‹Ž·ˆ–‹<û„‰‰„‡bœjI_uec``qPAûÉ1÷
-wãÚ÷XÚ¸÷m²ºŸ³¼”Œ„Žr“i‹“ˆŒ‘x¡®šÈ’‘‘‹š…‘K‚ž¼÷T©Ô‹ŽˆŽ††Š|Š|kgŒi $……‹v‘…¼ˆ˜I¸ûUx‰ƒ}kfe{rmY™ä÷J©Ô‹ŽˆŽ††Š|Š|kgŒi $……‹v‘…»‡™€JûTF©HîR”vø.¬’÷/÷i÷ ÷Ùø"Á‡‘vX:ûX{d†‹{µC÷Uy»‡—À’‘‘‹ …‘jŠhŠjjmŒm $……‹v‘…À…’{ŸX÷ûÐ|‘‘…˜•’‘œ’÷÷Íž·–¤Ã‘‘‹ …‘wŠsŠqjiŒr $……‹v‘…÷U”vø.¬’÷.ò÷%÷i÷
-÷_ø"‘‘‹ …‘mŠhŠgepŒq $……‹v‘…º†– W÷û×}‘“…•”“‘›’ð÷ŠòûŒ}‘“…•”“‘š‘÷÷Ñ›´œ§¾Ž‘‘‹ …‘wŠuŠmmaŒm $……‹v‘…Ö‡n}h7ûdr‡‹ƒ 5÷oxº•À‘‘‹ …‘mŠcŠmrjŒm $……‹v‘…º‡—n^‘{EûE~j‰Š~«;÷bx»Œ›»ŽK‰¬÷ ã÷¬œ÷û÷9û6÷)¯Ò¢÷:û+÷4û÷¦@÷J÷út­’Œ¸‘‘‹ …‘pŠ_ŠmmmŒq $……‹v‘…­ˆ§z§bâû„‹ˆ‡†¨@7û
-÷)wy‚z€{\iccnc³w•™•˜–˜šž ”ÐÅx[÷
-lÖÓ|ßóð°ÆÊzfI;uY?X™®1û…ù|÷öûû^ûG5"ûûû÷÷T÷fîà¬÷L­÷H¬÷Ú÷A÷.û÷$ô÷÷æûl8€ˆN†……‹v‘…±Œ¸Œ¨¨­Š¬ $‘‘‹ …‘[‚ŽÞ衤†wš÷û™{Œ€~}–Œ¤Œ¥§¼‰‹ $‘‘‹ …‘pŽs–~šû(÷B†‘‡‘“‘–œáîø©®°³‘‘‹ …‘mŠjŠqnjŒn $……‹v‘…½ˆq>4[`n{jäÞ”Ž»‘‘‹ …‘kŠjŠln_Œd $……‹v‘…ôȆ–ˆ8‰¬÷ ­÷¨w‘÷÷§÷.êôw_rV†……‹v‘…Œ¡Œ¥¦±Šª $‘‘‹ …‘U„˜¢½ž¶“ŽŽŽ›÷O U¡UŒƒU†……‹v‘…®Œ²Œ«©¨Š¨ $‘‘‹ …‘V’ˆ“sÅû.ø |ƒxƒwˆçû¨û+w˜Ÿ“Õ÷=’ŒM±ø-¬°â÷¸©÷¨Ù»¨Êº‰’–ƒU]hwH(Qöî÷<Ù®ÖÛº_E—•ˆ•‹•‘´‰µ¸e^›;û%'û&LŸF¼^f³ÃwÕ–‰¬ø"¬÷Ú÷“â÷(ø`p^ŒŒd……‹v‘…ȇ–‡8ûl8€ˆN†……‹v‘…±Œ¸Œ¨¥³‰Û $÷÷¿÷C÷9óû;Gg‰n³ü÷Ö¤¤‘²÷<¢û #û Mfû?„œ§>‹ª÷V«÷>¬w÷Úè÷Œ÷uÍŒxf†‹Š¢Š­›™Œ«Œ¤†y‹††^‰‰€JR÷"œ˜–žÄݘjR•Š”“؇­Ù‰’ŠŒ‰èˆ}Šzûcn]ŒŒg……‹v‘…ȇ–‡8ûl8€ˆN†……‹v‘…Œ¯·Œ«÷.³Í‰‹—´–Â’µ‚ƒ€ˆP{nY8`a–¬÷*û‡žvødw÷Ú÷W÷æÞ–ŽÈ‘‘‹ …‘eŠ`ŠlmaŒd $……‹v‘…ȇ–‡8ûl8€ˆN†……‹v‘…°Œ´Œ­«·Š® $‘‘‹ …‘N€Þ÷”vªvøC¬£êÿy€
-Ú Ú’ ø¾
-endstream
-endobj
-66 0 obj
-<< /Type /FontDescriptor /FontName /FIJEIL+LibertinusSerif-Regular /Flags 4 /FontBBox [ -1325 -256 1269 928 ] /Ascent 894 /CapHeight 647 /Descent -246 /ItalicAngle 0 /StemV 73 /XHeight 429 /FontFile3 68 0 R /CIDSet 67 0 R >>
-endobj
-69 0 obj
-<< /Length 1701 >>
-stream
-%!PS-Adobe-3.0 Resource-CMap
-%%DocumentNeededResources: ProcSet (CIDInit)
-%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-FIJEIL-LibertinusSerif-Regular-0)
-%%Title: (TeX-FIJEIL-LibertinusSerif-Regular-0 TeX FIJEIL-LibertinusSerif-Regular 0)
-%%Version: 1.000
-%%EndComments
-/CIDInit /ProcSet findresource begin
-12 dict begin
-begincmap
-/CIDSystemInfo
-<< /Registry (TeX)
-/Ordering (FIJEIL-LibertinusSerif-Regular)
-/Supplement 0
->> def
-/CMapName /TeX-Identity-FIJEIL-LibertinusSerif-Regular def
-/CMapType 2 def
-1 begincodespacerange
-<0000> <FFFF>
-endcodespacerange
-0 beginbfrange
-endbfrange
-70 beginbfchar
-<000D> <002C>
-<000E> <002D>
-<000F> <002E>
-<0013> <0032>
-<0014> <0033>
-<0016> <0035>
-<0017> <0036>
-<0020> <003F>
-<0022> <0041>
-<0024> <0043>
-<0025> <0044>
-<0026> <0045>
-<0027> <0046>
-<0029> <0048>
-<002A> <0049>
-<002D> <004C>
-<002E> <004D>
-<002F> <004E>
-<0030> <004F>
-<0031> <0050>
-<0034> <0053>
-<0035> <0054>
-<0036> <0055>
-<0037> <0056>
-<0038> <0057>
-<0042> <0061>
-<0043> <0062>
-<0044> <0063>
-<0045> <0064>
-<0046> <0065>
-<0047> <0066>
-<0048> <0067>
-<0049> <0068>
-<004A> <0069>
-<004B> <006A>
-<004C> <006B>
-<004D> <006C>
-<004E> <006D>
-<004F> <006E>
-<0050> <006F>
-<0051> <0070>
-<0052> <0071>
-<0053> <0072>
-<0054> <0073>
-<0055> <0074>
-<0056> <0075>
-<0057> <0076>
-<0058> <0077>
-<0059> <0078>
-<005A> <0079>
-<06DA> <2014>
-<06DF> <2019>
-<06E8> <2022>
-<0938> <00660066>
-<0939> <00660069>
-<093A> <0066006C>
-<0955> <0051>
-<095B> <006B>
-<095C> <0061>
-<095E> <0063>
-<095F> <0064>
-<0960> <0065>
-<0964> <0069>
-<0967> <006D>
-<0968> <006E>
-<0969> <006F>
-<096C> <0072>
-<096D> <0073>
-<096E> <0074>
-<0973> <0079>
-endbfchar
-endcmap
-CMapName currentdict /CMap defineresource pop
-end
-end
-%%EndResource
-%%EOF
-
-endstream
-endobj
-16 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /FIJEIL+LibertinusSerif-Regular /DescendantFonts [ 70 0 R ] /ToUnicode 69 0 R >>
-endobj
-70 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /FIJEIL+LibertinusSerif-Regular /FontDescriptor 66 0 R /W 65 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
-endobj
-71 0 obj
-[ 37 [ 734 ] 52 [ 504 ] 66 [ 506 ] 69 [ 561 ] 76 [ 613 ] 78 [ 905 616 551 ] 83 [ 428 ] 85 [ 358 ] 90 [ 558 ] ]
-endobj
-73 0 obj
-<< /Length 12 >>
-stream
-
-endstream
-endobj
-74 0 obj
-<< /Subtype /CIDFontType0C /Length 2256 >>
-stream
-
-÷´÷»¼b’¦y·² ®°l‰—‡““~‡xu…¼÷$÷$2¨9BûaIo—u²¯¥¡£Š‘Š‘‰•‰••–Œ“—¬µ®yûHv´"jAn<F±gâ¨Å«¥¬Œ÷>ûwrr{y`|¨ª°ŽªÒ¢“Í÷îµ€w÷¤˜‹w°÷ ÷B÷Î÷÷»sz‹Œ“†™°•Ç™Ð”‘‰Ÿ‰‘U€›ÄøV¶ÌŽ°‹”„‚f;€DˆˆŒ~‚ʆŠFûΑxsnûûûûP F¼eo¯¤}æշ™ ‘ºzvVuYdÃ÷ À‘¹žª¦œ¦›©¥¤ˆj£ûŠƒ‹‚Œƒlj­÷E³÷-­÷˜‹wï÷÷-÷qûc÷Jîï÷8{‚Nˆ……‹u‘…µŒ¸ŒÂ··Š£ $‘‘‹¡…‘mz“Þݧªˆ{•¢i§bœf˜oŽ‚|q‰‹‹¸®´ÃŠ° $‘‘‹¡…‘duˆm¸û÷?†’‰“½Âõ«®¦®×“‘‘‹¡…‘uŠLŠqf\Œf $……‹u‘…Á‡›‚ncumuswy€~]zm÷âÌŽ°‹”„‚f;€DˆˆŒ€‚ʆŠF÷ôžvøÕzœí÷÷5÷÷5÷Ü÷x÷÷[‹£²®•œ³©yRû;7{‚bˆ……‹u‘…µŒ«Œ»»ªŠ¶ $‘‘‹¡…‘cŽz”ß÷0¤ŠŸˆ•ž±¶—›³§yRû;7{‚bˆ……‹u‘…µŒ«Œ»Â·Š¶ $‘‘‹¡…‘NŽ{”ß÷0÷c½5f7ckQ¶|c¨PgCekR¼ˆ©ˆ¢‹Ü—Šƒ}fO}F‚‰…w…†•ƒRûO8€‰N†……‹u‘…µŒµŒÀ¹§Š¶ $‘‘‹¡…‘aŽÞÊžvøÕí÷÷<÷÷x÷÷]¦³³Ÿ³©yRû;7{‚bˆ……‹u‘…µŒ«Œ»Â·Š¶ $‘‘‹¡…‘NŽ{”ß÷0÷\½5cD_eTˆ®‡©‹—Šƒ}fO}F‚‰…w…†•ƒRûO8€‰N†……‹u‘…µŒµŒÀ¹§Š¶ $‘‘‹¡…‘aŽÞ‰µøµ°÷ ÷Y÷ °÷cûó5÷ÒÆŸ°´¾¸œÏÃ÷2ìû)8Mn^de_zOP÷s÷WϹ:ûû \kg9k÷Õç›ÜÎûžv÷Ò÷í÷÷x÷ ¯–š˜š•“”’š”–‚“ƒ’œƒ¢¨§©µ¥m©ghemI]‡‰©†¼‹”Šƒ“}\V}I„‰…x…†•‚RûO8€‰N†……‹u‘…µŒµŒÀÀ´Š¶ $‘‘‹¡…‘N€ŽÞûWÑ÷ؽ÷'”ã÷û÷û÷ðÊøF}|‡€~n†ŒŠÌ‰&ŠûYh”i yx¢¯‚£Âȧ§Ÿ—…‘•~r‡xuuœ½½Šöïð•™”ªˆ†äû Œ­ÎŽ¹‹‘ˆŽ†è„f€„{z„n…„‚„‚‡p;û|ï'ó8vù­‘÷]÷4÷Nû÷:÷†û<›§š¯—©Û÷U¼÷
-÷ ÷• ø½
-endstream
-endobj
-72 0 obj
-<< /Type /FontDescriptor /FontName /COAJSK+LibertinusSerif-Bold /Flags 4 /FontBBox [ -1625 -328 1562 1014 ] /Ascent 894 /CapHeight 647 /Descent -246 /ItalicAngle 0 /StemV 81 /XHeight 433 /FontFile3 74 0 R /CIDSet 73 0 R >>
-endobj
-75 0 obj
-<< /Length 848 >>
-stream
-%!PS-Adobe-3.0 Resource-CMap
-%%DocumentNeededResources: ProcSet (CIDInit)
-%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-COAJSK-LibertinusSerif-Bold-0)
-%%Title: (TeX-COAJSK-LibertinusSerif-Bold-0 TeX COAJSK-LibertinusSerif-Bold 0)
-%%Version: 1.000
-%%EndComments
-/CIDInit /ProcSet findresource begin
-12 dict begin
-begincmap
-/CIDSystemInfo
-<< /Registry (TeX)
-/Ordering (COAJSK-LibertinusSerif-Bold)
-/Supplement 0
->> def
-/CMapName /TeX-Identity-COAJSK-LibertinusSerif-Bold def
-/CMapType 2 def
-1 begincodespacerange
-<0000> <FFFF>
-endcodespacerange
-0 beginbfrange
-endbfrange
-11 beginbfchar
-<0025> <0044>
-<0034> <0053>
-<0042> <0061>
-<0045> <0064>
-<004C> <006B>
-<004E> <006D>
-<004F> <006E>
-<0050> <006F>
-<0053> <0072>
-<0055> <0074>
-<005A> <0079>
-endbfchar
-endcmap
-CMapName currentdict /CMap defineresource pop
-end
-end
-%%EndResource
-%%EOF
-
-endstream
-endobj
-8 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /COAJSK+LibertinusSerif-Bold /DescendantFonts [ 76 0 R ] /ToUnicode 75 0 R >>
-endobj
-76 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /COAJSK+LibertinusSerif-Bold /FontDescriptor 72 0 R /W 71 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
-endobj
-9 0 obj
-<< /Type /Pages /Parent 77 0 R /Count 10 /Kids [ 6 0 R 11 0 R 14 0 R 19 0 R 23 0 R 26 0 R 29 0 R 32 0 R 35 0 R 38 0 R ] >>
-endobj
-43 0 obj
-<< /Type /Pages /Parent 77 0 R /Count 4 /Kids [ 41 0 R 45 0 R 48 0 R 51 0 R ] >>
-endobj
-77 0 obj
-<< /Type /Pages /Count 14 /Kids [ 9 0 R 43 0 R ] >>
-endobj
-78 0 obj
-<< /Type /Catalog /Pages 77 0 R /Metadata 4 0 R/OutputIntents [ <</Type/OutputIntent/S/GTS_PDFX/OutputCondition (SWOP (Publication) printing in USA (Printing process definition: ANSI CGATS.6).)/OutputConditionIdentifier (CGATS TR 001)/Info (U.S. Web Coated (SWOP) v2)/RegistryName (http://www.color.org)>> ]/PageLabels<</Nums[0<</S/r>>6<</S/D>>]>> >>
-endobj
-79 0 obj
-<< /Title(Dark\040and\040Stormy)/Author(Dirk\040Hardcase)/Creator(LuaLaTeX\040with\040novel\040and\040microtype)/CreationDate(D:20231109113537-08'00')/ModDate(D:20231109113537-08'00')/Producer(LuaLaTeX\040with\040novel-pdfx\040and\040hyperref)/Trapped/False/GTS_PDFXVersion(PDF/X-1a:2001)/GTS_PDFXConformance(PDF/X-1a:2001) >>
-endobj
-xref
-0 80
-0000000000 65535 f
-0000062151 00000 n
-0000062171 00000 n
-0000062191 00000 n
-0000000020 00000 n
-0000003407 00000 n
-0000003256 00000 n
-0000002762 00000 n
-0000095373 00000 n
-0000095732 00000 n
-0000003773 00000 n
-0000003619 00000 n
-0000003527 00000 n
-0000005367 00000 n
-0000005213 00000 n
-0000003865 00000 n
-0000091321 00000 n
-0000077144 00000 n
-0000008037 00000 n
-0000007883 00000 n
-0000005512 00000 n
-0000075146 00000 n
-0000009236 00000 n
-0000009082 00000 n
-0000008160 00000 n
-0000009617 00000 n
-0000009463 00000 n
-0000009371 00000 n
-0000017476 00000 n
-0000017322 00000 n
-0000009709 00000 n
-0000028807 00000 n
-0000028653 00000 n
-0000017598 00000 n
-0000035314 00000 n
-0000035160 00000 n
-0000028929 00000 n
-0000043511 00000 n
-0000043357 00000 n
-0000035436 00000 n
-0000054858 00000 n
-0000054703 00000 n
-0000043633 00000 n
-0000095870 00000 n
-0000061351 00000 n
-0000061196 00000 n
-0000054980 00000 n
-0000061720 00000 n
-0000061565 00000 n
-0000061473 00000 n
-0000062059 00000 n
-0000061904 00000 n
-0000061812 00000 n
-0000062244 00000 n
-0000073268 00000 n
-0000062666 00000 n
-0000063010 00000 n
-0000073510 00000 n
-0000075305 00000 n
-0000075510 00000 n
-0000076206 00000 n
-0000075543 00000 n
-0000075650 00000 n
-0000076432 00000 n
-0000077290 00000 n
-0000077482 00000 n
-0000089319 00000 n
-0000077951 00000 n
-0000078314 00000 n
-0000089560 00000 n
-0000091481 00000 n
-0000091687 00000 n
-0000094226 00000 n
-0000091814 00000 n
-0000091886 00000 n
-0000094465 00000 n
-0000095529 00000 n
-0000095967 00000 n
-0000096036 00000 n
-0000096403 00000 n
-trailer
-<< /Size 80 /Root 78 0 R /Info 79 0 R /ID [ <B51DB24B7183CC4838B38F6093640382> <B51DB24B7183CC4838B38F6093640382> ] >>
-startxref
-96747
-%%EOF
diff --git a/macros/luatex/latex/novel/doc/extras/novel-example.tex b/macros/luatex/latex/novel/doc/extras/novel-example.tex
index ce875ab67a..d565c39896 100644
--- a/macros/luatex/latex/novel/doc/extras/novel-example.tex
+++ b/macros/luatex/latex/novel/doc/extras/novel-example.tex
@@ -11,7 +11,7 @@
% have read/write permissions for any user. If they don't, then
% compile will fail at the point where files are written.
-\documentclass{novel} % v. 1.83.
+\documentclass{novel} % v. 1.86.
\SetTitle{Dark and Stormy}
\SetSubtitle{A Tale of Nights}
\SetAuthor{Dirk Hardcase}
diff --git a/macros/luatex/latex/novel/doc/extras/novel-extras-README.html b/macros/luatex/latex/novel/doc/extras/novel-extras-README.html
index 2bedaab3a0..095e2d1136 100644
--- a/macros/luatex/latex/novel/doc/extras/novel-extras-README.html
+++ b/macros/luatex/latex/novel/doc/extras/novel-extras-README.html
@@ -9,21 +9,15 @@
<h2>README for novel extras</h2>
-<p>This folder contains items that may be helpful, but are not essential to operation of the <i>novel</i> document class. Version 1.83.</p>
+<p>This folder contains items that may be helpful, but are not essential to operation of the <i>novel</i> document class. Version 1.86.</p>
<p>File <i>novel-example.tex</i> is a fake short novel. If you wish to compile it, place a copy in your user home folder (or other place where you have read/write privilege) and compile it there.</p>
-<p>File <i>novel-testsuite.tex</i> exercises the various capabilities of the document class. You can look at the code, and see how it compiles. You may also change settings, to see what they do. It requires files <i>novel-testimage.png</i>, <i>novel-testimage.jpg</i>, <i>novel-testscript.png</i>, and <i>novel-testscript.jpg</i>. If you wish to compile it, place a copy (along with images) in your user home folder (or other place where you have read/write privilege) and compile it there.</p>
-
<p>File <i>novel-decoglyphs.pdf</i> shows the decorative characters in the <i>NovelDeco.otf</i> file, along with the codes needed to retrieve them.</p>
-<p>File <i>novel-Gallery-ChapterStart.pdf</i> shows a number of different ways to begin a chapter, making use of the ChapterStart environment and related commands. These are only suggestions.</p>
-
-<p>File <i>CPmodified.otf</i> is not (normally) for use in TeX. I use it when editing my work in a word processor, prior to TeX markup. To use it, install the font in your operating system (not in TeX) where a word processor can find it. This font is nearly-monospaced, with exaggerated punctuation marks. I have found that punctuation errors are most frequently overlooked during editing, since they are so small in many fonts, and the spell-check software doesn't find the errors.</p>
-
-
<div>
<h3>novel-scripts.zip</h3>
+<p>IMPORTANT: The techniques described in these scripts, are rarely needed nowadays (late 2023).</p>
<p>This zip archive contains Windows batch scripts, and Linux/OSX BASH scripts, for automatic image conversion.</p>
<p>The scripts are meant to ensure that your use of images complies with commercial printing standards. In particular, they provide a method for converting color cover artwork to CMYK at 240% ink limit, in a PDF/X-1a:2001 file.</p>
<p>Complete usage instructions are documented within the zip archive.</p>
diff --git a/macros/luatex/latex/novel/doc/extras/novel-testimage.jpg b/macros/luatex/latex/novel/doc/extras/novel-testimage.jpg
deleted file mode 100644
index 6e39d29be5..0000000000
--- a/macros/luatex/latex/novel/doc/extras/novel-testimage.jpg
+++ /dev/null
Binary files differ
diff --git a/macros/luatex/latex/novel/doc/extras/novel-testimage.png b/macros/luatex/latex/novel/doc/extras/novel-testimage.png
deleted file mode 100644
index 1fabb2ccf2..0000000000
--- a/macros/luatex/latex/novel/doc/extras/novel-testimage.png
+++ /dev/null
Binary files differ
diff --git a/macros/luatex/latex/novel/doc/extras/novel-testscript.jpg b/macros/luatex/latex/novel/doc/extras/novel-testscript.jpg
deleted file mode 100644
index e1fac7cd45..0000000000
--- a/macros/luatex/latex/novel/doc/extras/novel-testscript.jpg
+++ /dev/null
Binary files differ
diff --git a/macros/luatex/latex/novel/doc/extras/novel-testscript.png b/macros/luatex/latex/novel/doc/extras/novel-testscript.png
deleted file mode 100644
index 77fb7e1da9..0000000000
--- a/macros/luatex/latex/novel/doc/extras/novel-testscript.png
+++ /dev/null
Binary files differ
diff --git a/macros/luatex/latex/novel/doc/extras/novel-testsuite.pdf b/macros/luatex/latex/novel/doc/extras/novel-testsuite.pdf
deleted file mode 100644
index f4393f610a..0000000000
--- a/macros/luatex/latex/novel/doc/extras/novel-testsuite.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/luatex/latex/novel/doc/extras/novel-testsuite.tex b/macros/luatex/latex/novel/doc/extras/novel-testsuite.tex
deleted file mode 100644
index 09ca6b348f..0000000000
--- a/macros/luatex/latex/novel/doc/extras/novel-testsuite.tex
+++ /dev/null
@@ -1,318 +0,0 @@
-% !TeX TS-program = lualatex
-% !TeX encoding = UTF-8
-
-% Copyright 2023 Robert Allgeyer.
-% This file may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, version 1.3c.
-% License URL: https://www.latex-project.org/lppl/lppl-1-3c/
-
-% TEST SUITE FOR NOVEL DOCUMENT CLASS
-%
-% IF YOU COMPILE THIS DOCUMENT: Be sure that this file, and its generated PDF,
-% have read/write permissions for any user. If they don't, then
-% compile will fail at the point where files are written.
-%
-% This document tests the various capabilities of `novel' document class.
-% The Preamble settings are originally the defaults.
-% Change them to exercise the setting, and see the result.
-% In the document body, various commands are exercised.
-%
-% You need all fonts from the `libertinus' package,
-% all fonts from `lmodern' package,
-% and the included NovelDeco.otf.
-%
-% You also need the file` novel-testimage.png'
-% in the same folder as this document.
-% It is grayscale png, 150x150 pixels, with resolution 300pdi.
-%
-% The `test' class option is required. You may add others.
-
-\documentclass[test,shademargins,draft]{novel} % v. 1.83.
-\SetTitle{Test Suite}
-\SetSubtitle{Novel Document Class}
-\SetAuthor{Author Name}
-% Additional Preamble, if desired.
-
-
-\begin{document}
-
-\frontmatter % begins at page i.
-
-\thispagestyle{footer}
-\vspace*{5\nbs}
-\begin{center}
-\charscale[3.6]{\textbf{Test Suite}}\par
-\vspace{1.5\nbs}
-\charscale[1.6]{Novel Document Class}\par
-\vspace{4\nbs}
-\ChapterDeco[6]{\decoglyph{n9548}}
-\vspace{2\nbs}
-\charscale[1.5]{The following page will be blank!}\par
-\vfill
-If you choose a head/foot style with footer, then page number i (lowercase roman) will appear in the footer below.\par
-But if the head/foot style has no footer, then nothing below.\par
-\end{center}
-\clearpage
-
-
-% Now to begin at page 1:
-\mainmatter
-
-\begin{ChapterStart}[10]
-\vspace*{3\nbs}
-\ChapterTitle{Chapter One}
-\ChapterSubtitle{Dark and Stormy}
-\ChapterDeco[4]{\decoglyph{n9548}}
-\end{ChapterStart}
-
-This tests the ChapterStart environment, plus \string\ChapterTitle, \string\ChapterSubtitle, \string\ChapterDeco, and \string\decoglyph.
-
-In the TeX document, you can change the height of the environment, the alignment of its components, the decoglyph, and so forth.
-
-The first paragraph will not be indented, but all following paragraphs will be indented.
-
-Since this is a recto (odd-numbered) page at right side, the default margins will be a little larger at left, where there is an allowance for binding gutter.
-
-Unless you change the head/foot style, you should see no heading. Arabic page number 1 should be at the bottom.
-
-\clearpage
-
-
-% NEXT PAGE:
-
-This page tests the \string\charscale\space command, and \string\rotatebox. The combined effect is shown below:\par
-\vspace{1.5\nbs} % trial and error
-\charscale[2,3em,-4em]{\rotatebox[origin=c]{45}{Random Test Items}}
-\vspace{7.5\nbs} % trial and error
-
-Above, you should see the phrase Random Test Items in larger than normal text, tilted 45 degrees, nicely fitting between the text above and this text. Offset has been used, so it is not quite centered.
-
-If you change the font size or number of lines per page, then the tilted phrase might not fit nicely. That can be fixed by changing the amount of \string\vspace\space above and below the rotated text.
-
-The amount of \string\vspace\space is not calculated automatically. You have to determine it by trial and error (or do some math). The total amount of \string\vspace, top and bottom, must be an integer.
-
-If you use \string\rotatebox\space without \string\charscale, then it will create its own vertical gap. Unfortunately, the height of this gap is very difficult for you to calculate, so you would not be able to easily restore the line grid by adding some amount of \string\vspace. So, don't use \string\rotatebox\space without \string\charscale.
-
-\clearpage
-
-
-% NEXT PAGE:
-
-This page tests \string\FloatImage\space effects. Remember that \textit{novel} uses its own methods of placing images.
-
-There will be a gap before the image appears. In the tex code, find \string\vspace\space there, and change the space. At some point, the image will float to the top of the following page.
-
-\vspace{7\nbs}
-
-\FloatImage[ht]{novel-testimage.png}
-
-Above, the top of the image sits where the baseline of text would be. If the image fits where placed, then this paragraph comfortably clears the bottom of the image. If the gap is increased so that the image flats to the top of the next page, then this paragraph will be directly beneath the preceding paragraph.
-
-
-
-\clearpage
-
-% NEXT PAGE:
-
-This page tests \string\InlineImage\space effects. Note that the command also has a starred version. The difference: Unstarred, the width of the image is taken into account. Starred, the width of the image is ignored.
-
-\null
-
-\noindent\InlineImage*[0,\normalXheight]{novel-testimage.png}This paragraph is not indented. The starred command places an image, offset so that its top sits at the X-height of the text. The image underlies the following text. If you use this effect, then be sure that the image is much lighter, or the text will be hard to read.
-
-\null\null\null
-
-\noindent\InlineImage[0,b-\normaldescender]{novel-testimage.jpg}This paragraph is not indented. The unstarred command places an image, offset so that its bottom sits at the descender of the text. It was necessary to insert previous blank lines, or the image would overlie (and obscure) the preceding paragraph.
-
-\null\null
-
-\noindent\InlineImage[0,1.5em]{novel-testscript.png}This paragraph is not indented. The unstarred command places an image, offset so that it rises above the paragraph, and also descends beneath the following text.
-
-\null\null
-
-In all of the above, the alignments will change, if you change the text size or lines per page.
-
-\clearpage
-
-
-% NEXT PAGE:
-
-This page tests \string\WrapImage. The command is written following the paragraph you are now reading.
-
-\WrapImage[r]{novel-testscript.jpg}
-
-The image will appear at right, with this text flowing around it. the first few lines will be at the left of the image. Then, as the paragraph continues, it eventually is restored to full text width, once it gets past the bottom of the image. Note that the top of the image is aligned to the X-height of the first line of text.
-
-\null
-\null
-
-\clearpage
-
-% NEXT 2 PAGES:
-
-This page, combined with the following page, test the detection mechanism for \string\scenebreak, \string\sceneline, and \string\scenestars.
-
-In the source document, there is \string\vspace\space following this paragraph. To detect the effects, vary the \string\vspace.
-
-% Change this to see the effects:
-\vspace{20\nbs} % originally 20\nbs
-
-Following this paragraph is the \string\scenestars\space command. It prints a few asterisks centered in a gap. It is one way to indicate that a scenbreak is present, when the break occurs at the very top or bottom of a page (because a blank line might not be noticed there).
-
-\scenestars
-
-If you change the above \string\vspace\space to 25\string\nbs, you will get a Warning about the line being too close to the bottom. Change to 28\string\nbs, and the Warning will say that it is too close to the top (of the following page. Note that \string\scenestars\space is allowed to be at the very bottom or very top, or somewhere in the middle of the page. The same applies to \string\sceneline.
-
-If you wish, you can always use \string\scenestars\space or \string\sceneline\space to indicate a scene break. But more common practice is to use a blank line, \string\scenebreak, except for those cases where you ``must'' use one of the others.
-
-\scenebreak
-
-Above this paragraph is \string\scenebreak, which appears as a blank line. A \string\scenebreak\space cannot be located close to the top or bottom of a page. Unlike \string\sceneline\space or \string\scenestars, you cannot place \string\scenebreak\space at the very top or bottom, either. So, changing the \string\vspace\space to any of 14\string\nbs\space through 17\string\nbs\space will generate a Warning.
-
-\clearpage
-
-
-% NEXT PAGE:
-
-This page tests the footnote and endnote capabilities.\footnote{This is the first sample footnote. Unless you change the marker style, it will be marked with an asterisk.} Two footnotes have been placed.\footnote{This is the second footnote. Unless you change the marker style, it will be marked by a dagger.}
-
-\null
-
-Test of \string\QuickChapter:
-
-
-\QuickChapter[3em]{Just Before Midnight}
-
-Above, \string\QuickChapter\space inserted two blank lines, in which a phrase is followed by a short line. The text is slightly larger than normal, and sits slightly above the normal baseline.
-
-\null
-
-There is a \string\bigemdash\space between here\makebox[2.5em]{\bigemdash}and here. Its length is set at 2.5em, using \string\makebox. Compare to normal—emdash. Thickness and yoffset is adjustable.
-
-\null
-
-This tests the endnote capability.\endnote You will see marker 1 after the last sentence, and marker 2 after this one.\endnote\memo{This text does not print.} But no actual endnotes are created. You may manually place them wherever you wish. For that, you may use the \string\endnotetext\space command (if its style works for you), or any other method.
-
-\null
-
-\endnotetext{1}{This tests the \string\endnotetext\space command, although you would not normally place the text of an endnote here. It is only a test.\par}
-
-\endnotetext{2}{Text for a second endnote.\par}
-
-\clearpage
-
-
-% NEXT PAGE:
-
-The following tests the \textit{parascale} environment:
-
-\begin{parascale}[0.8]
-But this text has a different scale than normal. Both the font size and the baseline skip have been proportionately changed. As a result, the lines are not on the normal line grid.\par
-If the following normal text needs to be back on grid (usually the case), here is what you must do: Compile, and note the number of lines occupied by the scaled text. Calculate the discrepancy, and fix with \string\vspace. Or let \textit{novel} do the thinking for you; there will be a Warning message with advice.\par
-\vspace{0.2\nbs} % based on result of Warning.
-\end{parascale}
-
-Back to normal text. At the dimensions originally used for this test, there are 9 lines of scaled text. Not counting the first scaled line, the remaining 8 scaled lines each introduce a deficit of 0.2\string\nbs. So, the cumulative deficit is 1.6\string\nbs. The integer part doesn't matter. So, \string\vspace{0.6\string\nbs} must be added prior to \string\end\{parascale\}, to restore the normal line grid.
-
-It is also possible to split the \string\vspace, prior to \string\begin\{parascale\} and \string\end\{parascale\}, as long as the total is correct.
-
-If the \string\vspace\space is not added, then there will be a Warning message.
-
-If the parascale spans more than one page, then the correct amount to add will depend on the lines present on the final page, not the total number of lines.
-
-\clearpage
-
-
-% NEXT PAGE
-
-This page tests the \textit{adjustwidth} environment. Changing textwidth is a useful way to create block indents, occasionally used for long quotations, or for other special text that must be visually distinguished from normal.
-
-\begin{adjustwidth}{2\normalparindent}{\normalparindent}
-\forceindent This text uses the \textit{adjustwidth} environment. It is set to block indent 2\string\normalparindent\space at left, and indent 1\string\normalparindent\space at right. The \string\forceindent\space command precedes the text, so that (within the block) it indents like an ordinary paragraph.\par
-\end{adjustwidth}
-
-This text is after the environment, so it occupies the normal amount of text width.
-
-\clearpage
-
-
-% NEXT PAGE:
-
-This tests various text effects:
-
-\null
-
-\FirstLine{\noindent\charscale[2]{T}\hspace{-2pt}his line has its first letter enlarged, and sets the first line in small caps. After the first line, text continues as usual. Note that space must be provided prior to this paragraph, so that the first letter does not intrude on text (or margin) above it.}
-
-The \string\charscale\space command scales the letter, and \string\FirstLine\space performs the small caps. Also, some kerning was applied so that the large T has the following \textsc{h} resting beneath its top. The \string\noindent\space command goes inside \string\FirstLine.
-
-\null\null
-
-\dropcap{H}ere is placed is a drop cap, using \textit{novel's} \string\dropcap\space command. Alternatively, the \textit{lettrine} package could be used. There are differences in how the drop caps are specified, depending on what you do. So, be sure to read the documentation, or you will be surprised.\par
-In general, it is difficult to style drop caps so that they look good for many different letters. An alternative is to use images for the drop caps. If you use images, please read the \textit{novel} documentation, as the method is not the same as the usual methods from the \textsc{lettrine} package.\par
-Note that there is no automated way to combine a drop cap with a first line in small caps. This is discussed in \textsc{novel} documentation.
-
-\null
-This line is in the main font.\par
-\textsf{This line is in the sans font.}\par
-\texttt{This line is in the mono font.}\par
-{\mustbelibertinus This line is in Libertinus Serif.}\par % specific to testsuite
-{\mustbelmodern This line is in Latin Modern Roman.}\par % specific to testsuite
-
-
-\clearpage
-
-
-% NEXT PAGE:
-
-\thispagestyle{dropfoliobeneath} % compare to dropfolioinside
-
-This page tests drop folio. There will be no page header. If your head/foot style normally has a footer, then you will see it as usual.
-
-If you choose a head/foot style without footer, you will still see a page number centered below. Exactly where it appears will depend on which kind of drop folio is used.
-
-If using \string\thispagestyle\{dropfoliobeneath\} then the page number will appear within the lower margin.
-
-If using \string\thispagestyle\{dropfolioinside\} then the page number will appear just above the lower margin, where the final line of text would otherwise be placed.
-
-Use class options [draft,shademargins] to see the position.
-
-The initial choice is \textit{dropfoliobeneath}.
-
-\clearpage
-
-% NEXT PAGE:
-
-This tests the \string\cleartoend\space command. If this page is recto (odd), then exactly one blank page will follow. If this page is verso (even), then exactly two blank pages will follow.
-
-\null\null
-
-
-When you request PDF/X (default), whether or not you are in draft mode, each image placed in your document is inspected. This is one of those things that require Lua code, which is one reason why the \textit{novel} class requires LuaLaTeX only.
-
-When an image is inspected, it is added to one of two lists, either good or unknown. Each time an image is requested, the lists are examined, so the same image file is not inspected twice. This saves time.
-
-The lists are saved in the \textit{aux} file. Then, if you re-compile, images already inspected won't be re-inspected. To re-initialize the lists, discard the \textit{aux} file.
-
-\null
-
-Two of the images were pre-processed via \textit{novel-scripts}. These will be detected as good. They are:
-
-\makeatletter\@AllGoodImages\makeatother
-
-\null
-
-Two of the images were not pre-processed, so their compliance is unknown. They might be good or bad. They are:
-
- \makeatletter\@UnknownImages\makeatother
-
-\null
-
-Note: If you change the document settings to \string\SetPDFX\{off\} then you will not see either of the image lists, and will not get the Warning message.
-
-Also, using \string\SetPDFX\{off\} will re-initialize the lists.
-
-
-
-\end{document}
-
diff --git a/macros/luatex/latex/novel/doc/needed-packages b/macros/luatex/latex/novel/doc/needed-packages
deleted file mode 100644
index 3bfbc7e9bb..0000000000
--- a/macros/luatex/latex/novel/doc/needed-packages
+++ /dev/null
@@ -1,11 +0,0 @@
-
-To use `novel' you need LaTeX with lualatex.
-
-In addition to the minimal setup, you will need these packages:
-
-textpos magaz xcolor adjustbox eso-pic pdfpages unicode-math fp iftex
-libertinus-fonts makecmds xkeyval lm-math xstring xifthen silence
-collectbox pgf lipsum wrapfig pdflscape polyglossia microtype hyperref
-
-You will need language support, for your language(s).
-If using lipsum, you will need hyphen-latin. \ No newline at end of file
diff --git a/macros/luatex/latex/novel/doc/novel-documentation.html b/macros/luatex/latex/novel/doc/novel-documentation.html
index 154f85a358..a644f4c03c 100644
--- a/macros/luatex/latex/novel/doc/novel-documentation.html
+++ b/macros/luatex/latex/novel/doc/novel-documentation.html
@@ -14,7 +14,10 @@ License URL: https://www.latex-project.org/lppl/lppl-1-3c/
<style>
-body {font-family:sans-serif; line-height:150%; font-size:14pt; color:#000000; background:#ffffff none;}
+body {font-family:sans-serif; color:#203310; background:#cccccc none;}
+#master {position:relative;}
+#toc {position:fixed; width:30%; background:#ffffff none; overflow:scroll; height:98%; float:left;}
+#main {width:68%; float:right; background:#ffffff none;}
p {font-family:sans-serif,sans-serif; font-size:1em; margin:0px 16px 0px 16px; text-indent:16px;}
ol, ul {list-style-type:none; margin:0px; padding:0px;}
li {margin:3px 8px 3px 16px; padding:0px;}
@@ -32,13 +35,19 @@ img.nodisplaynav {display:none; height:1em;}
img.openclose {display:none; height:1em;}
*.noimg {padding-left:1.5em;}
div.d1 {margin:0px 16px 16px 16px;}
-div.d2 {margin:0px 0px 16px 16px; padding-bottom:1em; border-top:0; border-right: 0px; border-bottom:1px dotted #666666; border-left:1px dotted #666666;}
-div.d3 {margin:0px 0px 16px 16px; padding-bottom:1em; border-top:0; border-right: 0px; border-bottom:1px dotted #666666; border-left:1px dotted #666666;}
-div.d4 {margin:0px 0px 16px 16px; padding-bottom:1em; border-top:0; border-right: 0px; border-bottom:1px dotted #666666; border-left:1px dotted #666666;}
-div.d5 {margin:0px 0px 16px 16px; padding-bottom:1em; border-top:0; border-right: 0px; border-bottom:1px dotted #666666; border-left:1px dotted #666666;}
-div.d6 {margin:0px 0px 16px 16px; padding-bottom:1em; border-top:0; border-right: 0px; border-bottom:1px dotted #666666; border-left:1px dotted #666666;}
+div.d2 {margin:0px 0px 16px 16px; padding-bottom:1em; border-top:0; border-right: 0px;
+border-bottom:1px dotted #666666; border-left:1px dotted #666666;}
+div.d3 {margin:0px 0px 16px 16px; padding-bottom:1em; border-top:0; border-right: 0px;
+border-bottom:1px dotted #666666; border-left:1px dotted #666666;}
+div.d4 {margin:0px 0px 16px 16px; padding-bottom:1em; border-top:0; border-right: 0px;
+border-bottom:1px dotted #666666; border-left:1px dotted #666666;}
+div.d5 {margin:0px 0px 16px 16px; padding-bottom:1em; border-top:0; border-right: 0px;
+border-bottom:1px dotted #666666; border-left:1px dotted #666666;}
+div.d6 {margin:0px 0px 16px 16px; padding-bottom:1em; border-top:0; border-right: 0px;
+border-bottom:1px dotted #666666; border-left:1px dotted #666666;}
div.page {padding:16px 0px 16px 0px; border-top:4px solid #505050;}
div.codeblock {overflow:auto; margin:16px; padding: 8px; border: 1px solid #000000;}
+div.codeblock p {text-indent:0px; white-space:nowrap;}
code {font-size:1em; font-family:monospace,monospace; color:#200050; background:transparent none; padding:0px 3px 0px 3px;}
*.smaller {font-weight:normal; font-size:88%;}
*.noindent {text-indent:0px;}
@@ -47,7 +56,8 @@ code {font-size:1em; font-family:monospace,monospace; color:#200050; background:
*.noindentcmd {text-indent:0px; margin-top:16px;}
*.isolate {padding-left:10px;margin-top:10px; margin-bottom:10px; text-indent:0px;}
*.dbloc {padding-left:1.8em; visibility:hidden}
-table.preconf {margin-left:auto; margin-right:auto; margin-top:20px; margin-bottom:20px; border:1px solid #000000}
+table.preconf {margin-left:auto; margin-right:auto; margin-top:20px; margin-bottom:20px;
+border:1px solid #000000}
table.preconf caption {font-weight:bold;}
table.preconf th {text-align:left; padding:6px; font-weight:normal; border-bottom:1px solid #000000;}
table.preconf td {text-align:left; padding:6px;}
@@ -58,7 +68,6 @@ table.preconf p {text-indent:0px; margin:6px;}
small {line-height:50%;}
span.ap {color: #996633;} /* percent comment in code */
*.floatright {float:right; margin-left:1em; margin-right:16px;}
-*.n {display:none; border:1px solid #990000; font-family:monospace,monospace; font-size:0.92em; font-weight:bold; padding: 0 0.3em 0 0.3em; color:#990000; background: #ffdddd none; margin-right:0.5em;}
p.centerimg {text-indent:0px; text-align:center; margin-top:0.5em; margin-bottom:0.5em;}
p.code {text-indent:0px; margin: 4px 16px 4px 16px; padding-left:32px;}
p.item {text-indent:0px; padding-top:8px;}
@@ -67,115 +76,22 @@ hr.newpage {margin-top:2em; margin-bottom:2em; height:4px; color:#505050; backgr
p.overhang {margin-left:32px; text-indent:-16px;}
*.sampledoc {margin:1em}
*.sampledoc em {font-size:92%; color:#666666}
-#master {position:relative;}
-#finish {clear:both;}
-#toc {display:block;}
-#toc li ul li {display:none;}
-#main {width:auto; float:none; background:#ffffff none;}
-*.noshowprint {display:none;}
-div.codeblock p {text-indent:0px;}
-*.screennoscript {display:none;}
-</style>
-
-<style id="screenstyle">
-@media screen {
- body {color:#203310; background:#cccccc none;}
- #toc {display:block; font-size:14pt; width:30%; background:#ffffff none; position:fixed; overflow:scroll; height:98%;}
- #toc li ul li {display:block;}
- #main {float:right; background:#ffffff none; width:68%; padding-bottom:40px;}
- div.codeblock p {text-indent:0px; white-space:nowrap;}
- *.screennoscript {display:inline;}
- *.toptitle {display:none;}
-}
</style>
-<script>var doprint=false;</script>
-
-
-<!-- Trouble Printing? Remove the following line, and another one below: -->
-<!-- REMOVE ME
-
-<style>
- body {color:#000000; background:#ffffff none;}
- #toc {display:block; font-size:1em; width:auto; background:#ffffff none; position:static; overflow:auto; height:auto;}
- #toc li ul li {display:none;}
- #main {float:none; background:#ffffff none; width:auto; padding-bottom:0;}
- div.codeblock p {text-indent:0px; white-space:auto;}
- *.screennoscript {display:none;}
- *.toptitle {display:block;}
- *.notprinted {display:none;}
-</style>
-<script>doprint=true;</script>
-
-REMOVE ME TOO -->
-<!-- Also remove the above line, if trouble printing. Then load with JavaScript off. -->
-
-
-<script>
-if(!doprint) {window.onload = loadnav;}
-function loadnav() {
- nspans = document.getElementsByClassName("n");
- placenav();
-}
-function placenav(){
- for(var n=0; nspans.length>n; n++){
- nspans[n].style.display="inline";
- nspans[n].style.cursor="pointer";
- nspans[n].title="open";
- nspans[n].setAttribute("data-state",0);
- nspans[n].innerHTML="+";
- nspans[n].onclick=openclose;
- lstartclose(n);
- }
-}
-function lstartclose(whichn) {
- whichparid = nspans[whichn].parentElement.id;
- whichdiv = document.getElementById("u" + whichparid.substring(1));
- if(whichdiv) whichdiv.style.display="none";
-}
-function openclose(){
- thisparid = this.parentElement.id;
- thisdiv = document.getElementById("u" + thisparid.substring(1));
- if(this.title=="close") {thisdiv.style.display="none";}
- if(this.title=="open") {thisdiv.style.display="block";}
- thisstate = this.getAttribute("data-state");
- thisval = 1 - thisstate;
- this.setAttribute("data-state",thisval);
- if(this.getAttribute("data-state")=="1") {this.title="close"; this.innerHTML="&ndash;";}
- if(this.getAttribute("data-state")=="0") {this.title="open"; this.innerHTML="+";}
-}
-function openall() {
- for(var n=0; nspans.length>n; n++){
- nspans[n].setAttribute("data-state",1);
- nspans[n].title="close";
- nspans[n].innerHTML="&ndash;";
- thisparid = nspans[n].parentElement.id;
- thisdiv = document.getElementById("u" + thisparid.substring(1));
- thisdiv.style.display="block";
- }
-}
-function closeall() {
- placenav();
-}
-</script>
</head>
<body>
<div id="master">
-
<div id="toc" class="toc">
-<h1 class="toptitle">Document class <em>novel</em> - Documentation</h1>
-<h3 class="noshowprint"><a href="#main">Contents</a> &nbsp; <span class="smaller"><a href="javascript:openall();">(open all)</a> &nbsp; <a href="javascript:closeall();">(close all)</a></span></h3>
+<h3><a href="#main">Contents</a></h3>
<ul><!-- master toc ul -->
- <li id="l0"><a href="#h0"><b>&ldquo;Novel&rdquo; Document Class</b></a></li>
-
- <li id="l1"><span class="n"></span><a href="#h1"><b>1. Before You Begin</b></a>
+ <li id="l1"><a href="#h1"><b>1. Before You Begin</b></a>
<ul id="u1">
- <li id="l1.1"><span class="n"></span><a href="#h1.1">1.1 Do These Things</a>
+ <li id="l1.1"><a href="#h1.1">1.1 Do These Things</a>
<ul id="u1.1">
<li><a href="#h1.1.1">1.1.1 LuaLateX Compiler</a></li>
<li><a href="#h1.1.2">1.1.2 UTF-8 Encoding</a></li>
@@ -184,7 +100,7 @@ function closeall() {
<li><a href="#h1.1.5">1.1.5 Book Design</a></li>
</ul>
</li><!-- end 1.1 -->
- <li id="l1.2"><span class="n"></span><a href="#h1.2">1.2 Avoid These Things</a>
+ <li id="l1.2"><a href="#h1.2">1.2 Avoid These Things</a>
<ul id="u1.2">
<li><a href="#h1.2.1">1.2.1 Non-Fontspec Font Loader</a></li>
<li><a href="#h1.2.2">1.2.2 TeX Font Sizes</a></li>
@@ -192,7 +108,7 @@ function closeall() {
<li><a href="#h1.2.4">1.2.4 TeX Editors and IDEs</a></li>
</ul>
</li><!-- end 1.2 -->
- <li id="l1.3"><span class="n"></span><a href="#h1.3">1.3 Beware of These Things</a>
+ <li id="l1.3"><a href="#h1.3">1.3 Beware of These Things</a>
<ul id="u1.3">
<li><a href="#h1.3.1">1.3.1 TeX Special Characters</a></li>
<li><a href="#h1.3.2">1.3.2 Layout Surprises</a></li>
@@ -201,7 +117,7 @@ function closeall() {
</ul>
</li><!-- end 1 -->
- <li id="l2"><span class="n"></span><a href="#h2"><b>2. Document Class Options</b></a>
+ <li id="l2"><a href="#h2"><b>2. Document Class Options</b></a>
<ul id="u2">
<li><a href="#h2.1">2.1 draft</a></li>
<li><a href="#h2.2">2.2 sandbox</a></li>
@@ -210,22 +126,22 @@ function closeall() {
<li><a href="#h2.5">2.5 cropview</a></li>
<li><a href="#h2.6">2.6 closecrop</a></li>
<li><a href="#h2.7">2.7 xml</a></li>
- <li><a href="#h2.8">2.8 coverart</a></li>
+ <li><a href="#h2.8">2.8 coverart (deprecated)</a></li>
<li><a href="#h2.9">2.9 developer options</a></li>
<li><a href="#h2.10">2.10 revert</a></li>
</ul>
</li><!-- end 2 -->
- <li id="l3"><span class="n"></span><a href="#h3"><b>3. Metadata, File Data, PDF/X</b></a>
+ <li id="l3"><a href="#h3"><b>3. Metadata, File Data, PDF/X</b></a>
<ul id="u3">
- <li id="l3.1"><span class="n"></span><a href="#h3.1">3.1 Definitions of Terms</a>
+ <li id="l3.1"><a href="#h3.1">3.1 Definitions of Terms</a>
<ul id="u3.1">
<li><a href="#h3.1.1">3.1.1 ISBN Metadata</a></li>
<li><a href="#h3.1.2">3.1.2 Printed Metadata</a></li>
<li><a href="#h3.1.3">3.1.3 File (PDF) Metadata</a></li>
</ul>
</li><!-- end 3.1 -->
- <li id="l3.2"><span class="n"></span><a href="#h3.2">3.2 Rules for File Data</a>
+ <li id="l3.2"><a href="#h3.2">3.2 Rules for File Data</a>
<ul id="u3.2">
<li><a href="#h3.2.1">3.2.1 Required, Prohibited?</a></li>
<li><a href="#h3.2.2">3.2.2 Limited to Latin-1?</a></li>
@@ -233,7 +149,7 @@ function closeall() {
<li><a href="#h3.2.4">3.2.4 Forbidden Characters</a></li>
</ul>
</li><!-- end 3.2 -->
- <li id="l3.3"><span class="n"></span><a href="#h3.3">3.3 File Data Commands</a>
+ <li id="l3.3"><a href="#h3.3">3.3 File Data Commands</a>
<ul id="u3.3">
<li><a href="#h3.3.1">3.3.1 \SetTitle</a></li>
<li><a href="#h3.3.2">3.3.2 \SetAuthor</a></li>
@@ -241,7 +157,7 @@ function closeall() {
<li><a href="#h3.3.4">3.3.4 \SetApplication, \SetProducer</a></li>
</ul>
</li><!-- end 3.3 -->
- <li id="l3.4"><span class="n"></span><a href="#h3.4">3.4 PDF/X</a>
+ <li id="l3.4"><a href="#h3.4">3.4 PDF/X</a>
<ul id="u3.4">
<li><a href="#h3.4.1">3.4.1 Compliance Standards</a></li>
<li><a href="#h3.4.2">3.4.2 Output Intents</a></li>
@@ -254,15 +170,15 @@ function closeall() {
</ul>
</li><!-- end 3 -->
- <li id="l4"><span class="n"></span><a href="#h4"><b>4. Book Size, Page Layout, Fonts</b></a>
+ <li id="l4"><a href="#h4"><b>4. Book Size, Page Layout, Fonts</b></a>
<ul id="u4">
- <li id="l4.1"><span class="n"></span><a href="#h4.1">4.1 Book Dimensions</a>
+ <li id="l4.1"><a href="#h4.1">4.1 Book Dimensions</a>
<ul id="u4.1">
<li><a href="#h4.1.1">4.1.1 Trim Size, TrimBox</a></li>
<li><a href="#h4.1.2">4.1.2 Media Size, MediaBox</a></li>
</ul>
</li><!-- end 4.1 -->
- <li id="l4.2"><span class="n"></span><a href="#h4.2">4.2 Fonts, Normal Font Size</a>
+ <li id="l4.2"><a href="#h4.2">4.2 Fonts, Normal Font Size</a>
<ul id="u4.2">
<li><a href="#h4.2.1">4.2.1 Parent (Main) Font, Size</a>
<ul id="u4.2.1">
@@ -276,7 +192,7 @@ function closeall() {
<li><a href="#h4.2.5">4.2.5 Advanced: New Fonts</a></li>
</ul>
</li><!-- end 4.2 -->
- <li id="l4.3"><span class="n"></span><a href="#h4.3">4.3 Interior Page Layout</a>
+ <li id="l4.3"><a href="#h4.3">4.3 Interior Page Layout</a>
<ul id="u4.3">
<li><a href="#h4.3.1">4.3.1 Margins</a>
<ul id="u4.3.1">
@@ -312,9 +228,9 @@ function closeall() {
</ul>
</li><!-- end 4 -->
- <li id="l5"><span class="n"></span><a href="#h5"><b>5. Chapter Structure</b></a>
+ <li id="l5"><a href="#h5"><b>5. Chapter Structure</b></a>
<ul id="u5">
- <li id="l5.1"><span class="n"></span><a href="#h5.1">5.1 Starting a Chapter</a>
+ <li id="l5.1"><a href="#h5.1">5.1 Starting a Chapter</a>
<ul id="u5.1">
<li><a href="#h5.1.1">5.1.1 \clearpage, \cleartorecto</a></li>
<li><a href="#h5.1.2">5.1.2 ChapterStart Environment</a>
@@ -340,20 +256,20 @@ function closeall() {
</li>
</ul>
</li><!-- end 5.1 -->
- <li id="l5.2"><span class="n"></span><a href="#h5.2">5.2 Continuous Chapters</a>
+ <li id="l5.2"><a href="#h5.2">5.2 Continuous Chapters</a>
<ul id="u5.2">
<li><a href="#h5.2.1">5.2.1 Short ChapterStart</a></li>
<li><a href="#h5.2.2">5.2.2 \QuickChapter</a></li>
</ul>
</li><!-- end 5.2 -->
- <li id="l5.3"><span class="n"></span><a href="#h5.3">5.3 Scene Breaks</a>
+ <li id="l5.3"><a href="#h5.3">5.3 Scene Breaks</a>
<ul id="u5.3">
<li><a href="#h5.3.1">5.3.1 \SetScenebreakIndent</a></li>
</ul>
</li><!-- end 5.3 -->
- <li id="l5.4"><span class="n" style="visibility:hidden"></span><a href="#h5.4">5.4 Chapter Numbering</a>
+ <li id="l5.4"><a href="#h5.4">5.4 Chapter Numbering</a>
</li><!-- end 5.4 -->
- <li id="l5.5"><span class="n"></span><a href="#h5.5">5.5 First Lines</a>
+ <li id="l5.5"><a href="#h5.5">5.5 First Lines</a>
<ul id="u5.5">
<li><a href="#h5.5.1">5.5.1 First Character Special</a></li>
<li><a href="#h5.5.2">5.5.2 First Line Small Caps</a></li>
@@ -363,9 +279,9 @@ function closeall() {
</ul>
</li><!-- end 5 -->
- <li id="l6"><span class="n"></span><a href="#h6"><b>6. Text Size, Style, Position</b></a>
+ <li id="l6"><a href="#h6"><b>6. Text Size, Style, Position</b></a>
<ul id="u6">
- <li id="l6.1"><span class="n"></span><a href="#h6.1">6.1 Text Sizes</a>
+ <li id="l6.1"><a href="#h6.1">6.1 Text Sizes</a>
<ul id="u6.1">
<li><a href="#h6.1.1">6.1.1 Standard Sizes: Disabled!</a></li>
<li><a href="#h6.1.2">6.1.2 Local sizing: \charscale</a></li>
@@ -373,7 +289,7 @@ function closeall() {
<li><a href="#h6.1.4">6.1.4 Open Type Scale</a></li>
</ul>
</li><!-- end 6.1 -->
- <li id="l6.2"><span class="n"></span><a href="#h6.2">6.2 General Styling</a>
+ <li id="l6.2"><a href="#h6.2">6.2 General Styling</a>
<ul id="u6.2">
<li><a href="#h6.2.1">6.2.1 Italics and Emphasis</a></li>
<li><a href="#h6.2.2">6.2.2 Bold and Semibold</a></li>
@@ -385,13 +301,13 @@ function closeall() {
<li><a href="#h6.2.8">6.2.8 Grayscale Text</a></li>
</ul>
</li><!-- end 6.2 -->
- <li id="l6.3"><span class="n"></span><a href="#h6.3">6.3 Positioning and Alignment</a>
+ <li id="l6.3"><a href="#h6.3">6.3 Positioning and Alignment</a>
<ul id="u6.3">
<li><a href="#h6.3.1">6.3.1 What to Avoid</a></li>
<li><a href="#h6.3.2">6.3.2 Some Useful Commands</a></li>
</ul>
</li><!-- end 6.3 -->
- <li id="l6.4"><span class="n"></span><a href="#h6.4">6.4 Superscripts, Subscripts</a>
+ <li id="l6.4"><a href="#h6.4">6.4 Superscripts, Subscripts</a>
<ul id="u6.4">
<li><a href="#h6.4.1">6.4.1 Global Marker Style</a></li>
<li><a href="#h6.4.2">6.4.2 Local Real or Fake</a></li>
@@ -400,15 +316,15 @@ function closeall() {
</ul>
</li><!-- end 6 -->
- <li id="l7"><span class="n"></span><a href="#h7"><b>7. Images, Pictures, Drawings</b></a>
+ <li id="l7"><a href="#h7"><b>7. Images, Pictures, Drawings</b></a>
<ul id="u7">
- <li id="l7.1"><span class="n"></span><a href="#h7.1">7.1 Technical Requirements</a>
+ <li id="l7.1"><a href="#h7.1">7.1 Technical Requirements</a>
<ul id="u7.1">
<li><a href="#h7.1.1">7.1.1 Interior B/W, Grayscale</a></li>
<li><a href="#h7.1.2">7.1.2 Color Cover</a></li>
</ul>
</li><!-- end 7.1 -->
- <li id="l7.2"><span class="n"></span><a href="#h7.2">7.2 Placing Interior Images</a>
+ <li id="l7.2"><a href="#h7.2">7.2 Placing Interior Images</a>
<ul id="u7.2">
<li><a href="#h7.2.1">7.2.1 Image-Like Text</a></li>
<li><a href="#h7.2.2">7.2.2 \InlineImage</a></li>
@@ -420,9 +336,9 @@ function closeall() {
</ul>
</li><!-- end 7 -->
- <li id="l8"><span class="n"></span><a href="#h8"><b>8. Tables, Lists</b></a>
+ <li id="l8"><a href="#h8"><b>8. Tables, Lists</b></a>
<ul id="u8">
- <li id="l8.1"><span class="n"></span><a href="#h8.1">8.1 The toc Environment</a>
+ <li id="l8.1"><a href="#h8.1">8.1 The toc Environment</a>
<ul id="u8.1">
<li><a href="#h8.1.1">8.1.1 Entries Using \tocitem</a></li>
<li><a href="#h8.1.2">8.1.2 Example Table</a></li>
@@ -431,10 +347,10 @@ function closeall() {
</ul>
</li>
- <li id="l9"><span class="n"></span><a href="#h9"><b>9. Footnotes, Endnotes</b></a>
+ <li id="l9"><a href="#h9"><b>9. Footnotes, Endnotes</b></a>
<ul id="u9">
- <li id="l9.1"><span class="n" style="visibility:hidden"></span><a href="#h9.1">9.1 Footnotes</a></li>
- <li id="l9.2"><span class="n"></span><a href="#h9.2">9.2 Endnotes</a>
+ <li id="l9.1"><a href="#h9.1">9.1 Footnotes</a></li>
+ <li id="l9.2"><a href="#h9.2">9.2 Endnotes</a>
<ul id="u9.2">
<li><a href="#h9.2.1">9.2.1 Placing: \endnote</a></li>
<li><a href="#h9.2.2">9.2.2 Writing: \endnotetext</a></li>
@@ -447,17 +363,17 @@ function closeall() {
<li><i>Appendices:</i></li>
- <li id="lA"><span class="n" style="visibility:hidden"></span><a href="#hA"><b>A. Sample Document</b></a>
+ <li id="lA"><a href="#hA"><b>A. Sample Document</b></a>
</li><!-- end A -->
- <li id="lB"><span class="n"></span><a href="#hB"><b>B. Six-Page Front Matter</b></a>
+ <li id="lB"><a href="#hB"><b>B. Six-Page Front Matter</b></a>
<ul id="uB">
<li><a href="#hB.1">B.1 Half-Title to Copyright</a></li>
<li><a href="#hB.2">B.2 Post-Copyright</a></li>
</ul>
</li><!-- end B -->
- <li id="lC"><span class="n"></span><a href="#hC"><b>C. Shopping for Fonts</b></a>
+ <li id="lC"><a href="#hC"><b>C. Shopping for Fonts</b></a>
<ul id="uC">
<li><a href="#hC.1">C.1 Licensing Issues</a></li>
<li><a href="#hC.2">C.2 Technical Issues</a></li>
@@ -465,16 +381,16 @@ function closeall() {
</ul>
</li><!-- end C -->
- <li id="lD"><span class="n"></span><a href="#hD"><b>D. Book Design</b></a>
+ <li id="lD"><a href="#hD"><b>D. Book Design</b></a>
<ul id="uD">
- <li id="lD.1"><span class="n"></span><a href="#hD.1">D.1 Terminology</a>
+ <li id="lD.1"><a href="#hD.1">D.1 Terminology</a>
<ul id="uD.1">
<li><a href="#hD.1.1">D.1.1 Sheet, Page, Leaf</a></li>
<li><a href="#hD.1.2">D.1.2 Folio, Spine</a></li>
<li><a href="#hD.1.3">D.1.3 Signature, Imposition</a></li>
</ul>
</li><!-- end D.1 -->
- <li id="lD.2"><span class="n"></span><a href="#hD.2">D.2 Book Manufacture</a>
+ <li id="lD.2"><a href="#hD.2">D.2 Book Manufacture</a>
<ul id="uD.2">
<li><a href="#hD.2.1">D.2.1 Perfect Binding</a></li>
<li><a href="#hD.2.2">D.2.2 Library Binding</a></li>
@@ -482,15 +398,15 @@ function closeall() {
<li><a href="#hD.2.4">D.2.4 Paper, Cover Materials</a></li>
</ul>
</li><!-- end D.2 -->
- <li id="lD.3"><span class="n"></span><a href="#hD.3">D.3 Interior Structure</a>
+ <li id="lD.3"><a href="#hD.3">D.3 Interior Structure</a>
<ul id="uD.3">
- <li id="lD.3.1"><span class="n"></span><a href="#hD.3.1">D.3.1 Display, Chapter-Like</a>
+ <li id="lD.3.1"><a href="#hD.3.1">D.3.1 Display, Chapter-Like</a>
<ul id="uD.3.1">
<li><a href="#hD.3.1.1">D.3.1.1 Display Pages</a></li>
<li><a href="#hD.3.1.2">D.3.1.2 Chapter-Like Sections</a></li>
</ul>
</li>
- <li id="lD.3.2"><span class="n"></span><a href="#hD.3.2">D.3.2 Front Matter</a>
+ <li id="lD.3.2"><a href="#hD.3.2">D.3.2 Front Matter</a>
<ul id="uD.3.2">
<li><a href="#hD.3.2.1">D.3.2.1 Half-Title, i</a></li>
<li><a href="#hD.3.2.2">D.3.2.2 Blank, ii</a></li>
@@ -507,7 +423,7 @@ function closeall() {
<li><a href="#hD.3.2.13">D.3.2.13 End of Front Matter</a></li>
</ul>
</li>
- <li id="lD.3.3"><span class="n"></span><a href="#hD.3.3">D.3.3 Main Matter</a>
+ <li id="lD.3.3"><a href="#hD.3.3">D.3.3 Main Matter</a>
<ul id="uD.3.3">
<li><a href="#hD.3.3.1">D.3.3.1 Half-Title in Main</a></li>
<li><a href="#hD.3.3.2">D.3.3.2 Part Separator</a></li>
@@ -518,7 +434,7 @@ function closeall() {
<li><a href="#hD.3.3.7">D.3.3.7 End Notes, Appendix</a></li>
</ul>
</li>
- <li id="lD.3.4"><span class="n"></span><a href="#hD.3.4">D.3.4 At the End</a>
+ <li id="lD.3.4"><a href="#hD.3.4">D.3.4 At the End</a>
<ul id="uD.3.4">
<li><a href="#hD.3.4.1">D.3.4.1 Back Matter? Not!</a></li>
<li><a href="#hD.3.4.2">D.3.4.2 About the Author</a></li>
@@ -529,14 +445,14 @@ function closeall() {
</ul>
</li><!-- end D -->
- <li id="lE"><span class="n"></span><a href="#hE"><b>E. Fontspec Syntax</b></a>
+ <li id="lE"><a href="#hE"><b>E. Fontspec Syntax</b></a>
<ul id="uE">
- <li id="lE.1"><span class="n"></span><a href="#hE.1">E.1 Family vs. File Name</a>
+ <li id="lE.1"><a href="#hE.1">E.1 Family vs. File Name</a>
<ul id="uE.1">
<li><a href="#hE.1.1">E.1.1 Set/New by Name</a></li>
</ul>
</li>
- <li id="lE.2"><span class="n"></span><a href="#hE.2">E.2 Open Type Features</a>
+ <li id="lE.2"><a href="#hE.2">E.2 Open Type Features</a>
<ul id="uE.2">
<li><a href="#hE.2.1">E.2.1 Scale Pseudo-Feature</a></li>
<li><a href="#hE.2.2">E.2.2 Color and Opacity</a></li>
@@ -547,7 +463,7 @@ function closeall() {
</ul>
</li><!-- end E -->
- <li id="lF"><span class="n"></span><a href="#hF"><b>F. Drop Caps</b></a>
+ <li id="lF"><a href="#hF"><b>F. Drop Caps</b></a>
<ul id="uF">
<li><a href="#hF.1">F.1 Built-In vs Lettrine</a></li>
<li><a href="#hF.2">F.2 \dropcap[]{}</a></li>
@@ -557,10 +473,10 @@ function closeall() {
</ul>
</li><!-- end F -->
- <li id="lY"><span class="n" style="visibility:hidden"></span><a href="#hY"><b>Y. Licensing and Credits</b></a>
+ <li id="lY"><a href="#hY"><b>Y. Licensing and Credits</b></a>
</li><!-- end Y -->
- <li id="lZ"><span class="n" style="visibility:hidden"></span><a href="#hZ"><b>Z. Important Changes</b></a>
+ <li id="lZ"><a href="#hZ"><b>Z. Important Changes</b></a>
</li><!-- end Z -->
</ul><!-- end master toc ul -->
@@ -575,23 +491,22 @@ function closeall() {
<div id="main">
<!-- **************************************************************************************** -->
-<h1 id="h0" style="padding-top:16px">Document class <i>novel</i> - documentation. &nbsp; <span style="font-size:75%">V. 1.83, 2023/11/09</span></h1>
-<p class="noindent"><span id="screennoscript" class="screennoscript"><b>For enhanced navigation of this file, turn on JavaScript.</b></span></p>
-<div><script>if(document.getElementById("screennoscript")){document.getElementById("screennoscript").style.display="none";}</script></div>
+<h1 id="h0" style="padding-top:16px">Document class <i>novel</i> - documentation.</h1>
+<p>V. 1.86, 2024/01/31</p>
-<p class="item">ALERT: If you have been using this document class prior to version 1.80 (February 2023), see <a href="#hZ">Appendix Z</a>.</p>
+<p class="item">ALERT: If you have been using this document class prior to version 1.80 (February 2023),
+see <a href="#hZ">Appendix Z</a>.</p>
-<p class="item">ALERT: New user? Little knowledge of LaTeX? Try the simpler "novelette" document class. Expected in March, 2023.</p>
+<p class="item">ALERT: New user? Little knowledge of LaTeX? Try the simpler "novelette" document class.
+Expected in early 2024.</p>
<!-- ********************************************************************** -->
<div id="page01" class="page">
<p class="noindent">The <i>novel</i> document class is for authors of text-intensive original fiction, such as detective novels, murder mysteries, romance, sci-fi, and collections of short stories. Academic works and graphic novels are excluded.</p>
<p>The resulting PDF uses built-in technology to produce PDF/X compliant files for print-on-demand (P.O.D.) services. There is no capability for E-books, and never will be.</p>
-<p>To use <i>novel</i>, you need TeXLive 2016 or later, or recent MikTeX. Open your TeX package manager, and install both <i>novel</i> and <i>libertinus-fonts</i>.</p>
+<p>To use <i>novel</i>, you need TeXLive 2020 or later, or recent MikTeX. Open your TeX package manager, and install both <i>novel</i> and <i>libertinus-fonts</i>.</p>
-<p><b>New in version 1.82:</b> Preamble command <code>\myparindent{length}</code>
-will over-ride the default 1.5em as normal indent. Version 1.83: Minor typo corrected.</p>
<h2 id="h1">1. Before You Begin</h2>
<div class="d2" id="d1">
@@ -621,17 +536,9 @@ will over-ride the default 1.5em as normal indent. Version 1.83: Minor typo corr
<p class="item"><b>C.</b> If you are on Windows, <i>do not</i> use Notepad! The free <a class="external" rel="external" target="new" href="https://notepad-plus-plus.org">Notepad++</a> (also <a class="external" rel="external" target="new" href="https://portableapps.com/apps/development/notepadpp_portable">Portable</a> version) is a suitable plain text editor. Configure it as specified, with utf-8 but without BOM. Does not matter whether UNIX or DOS line endings, as long as you are consistent.</p>
</div><!-- end 1.1.2 -->
-<h4 id="h1.1.3">1.1.3. Language Support</h4>
+<h4 id="h1.1.3">1.1.3. News (changed in version 1.86)</h4>
<div class="d4" id="d1.1.3">
-<p class="item"><b>A.</b> The <i>polyglossia</i> package is loaded automatically. Do not load it yourself.</p>
-<p class="item"><b>B.</b> Language is loaded like this default:</p>
-<p class="code"><code>\setdefaultlanguage[variant=american]{english}</code></p>
-<p class="item"><b>C.</b> For other possibilities, see polyglossia documentation.</p>
-<p class="item"><b>D.</b> Polyglossia does not always load language hyphenation patterns.
-If it does not, be sure that your system has the hyphenation patterns for your language or languages.
-For example, <code>hyphen-latin</code> is used when you insert <code>lipsum</code> text.
-And, you may need to use the polyglossia <code>\setotherlanguage</code> if extended text
-is not your default.</p>
+<p class="item">The package PDF has been updated.</p>
</div><!-- end 1.1.3 -->
<h4 id="h1.1.4">1.1.4. Use Open Type Fonts</h4>
@@ -798,9 +705,12 @@ is not your default.</p>
<p class="item" style="position:relative"><b>D.</b> <img src="html-resources/info18.png" width="18" height="18" style="position:relative; bottom:-3px" title="tech info" alt="tech info"/> Technical Info: XMP packet may be isolated by editing the *.xml file, in a plain text editor (requires utf-8). Necessary edits are obvious.</p>
</div><!-- end 2.7 -->
-<h3 id="h2.8">2.8. coverart</h3>
+<h3 id="h2.8">2.8. coverart (deprecated)</h3>
<div class="d3" id="d2.8">
-<p class="item">This option is only used for cover artwork. See <a href="#h7.1.2">section 7.1.2</a>.</p>
+<p class="item">This option is only used for cover artwork. However, in the intervening time
+since <i>novel</i> was first introduced, the printing technology has evolved.
+Now (late 2023) using <i>novel</i> technology is not the best way to produce
+your book cover file, although it still works. See <a href="#h7.1.2">section 7.1.2</a>.</p>
</div><!-- end 2.8 -->
<h3 id="h2.9">2.9. Developer Options</h3>
@@ -994,7 +904,8 @@ If it does not, the class option <code>revert</code> will undo the tweaks.</p>
<p class="item"><b>C.</b> The second is widely used in Europe, the third in Japan.</p>
</div><!-- end 3.4.3 -->
-<h4 id="h3.4.4">3.4.4. Other Output Intents</h4><div class="d4" id="d3.4.4">
+<h4 id="h3.4.4">3.4.4. Other Output Intents</h4>
+<div class="d4" id="d3.4.4">
<p class="item"><b>A.</b> If you are required to use an Output Intent that is not one of the above three, then you have to code it yourself.</p>
<p class="item"><b>B.</b> In a place where TeX can find it, create a plain text file with its file name in the following format:</p>
<p class="code">File name begins with <code>novel-</code> (note the hyphen).</p>
@@ -1015,7 +926,8 @@ If it does not, the class option <code>revert</code> will undo the tweaks.</p>
<p class="item"><b>G.</b> Another place to look for Output Intent data is in your (texmf)/tex/latex/pdfx folder. This will be in your TeX system if package <i>pdfx</i> is installed (but do not load this package into <i>novel</i> class). Files <i>AdobeColorProfiles.tex</i> and <i>AdobeExternalProfiles.tex</i> contain code prepared by the author of the <i>pdfx</i> package. The macro names are not the same, but they are easy to decode: <code>\@OIidentifer</code> is <i>/OutputConditionIdentifier</i>; <code>\@OIcondition</code> is <i>/ProfileName</i>; <code>\@OIinfo</code> is <i>/OutputCondition</i>; <code>\@OIregistry</code> is <i>/RegistryName</i>; and <code>\@OIprofile</code> follows <i>\setCMYKcolorprofile</i>.</p>
</div><!-- end 3.4.4 -->
-<h4 id="h3.4.5">3.4.5. Whether or Not to Embed *.icc</h4><div class="d4" id="d3.4.5">
+<h4 id="h3.4.5">3.4.5. Whether or Not to Embed *.icc</h4>
+<div class="d4" id="d3.4.5">
<p class="item"><b>A.</b> Each Output Intent has a color profile, in the form of a file with extension <i>*.icc</i>.</p>
<p class="item"><b>B.</b> You usually do not need the color profile, because the printer knows which profile corresponds with which standard Output Intent code.</p>
<p class="item"><b>C.</b> When you use <code>\SetPDFX</code> in its un-starred form, the *.icc color profile will not be embedded in the PDF. This is the normal situation.</p>
@@ -1024,7 +936,8 @@ If it does not, the class option <code>revert</code> will undo the tweaks.</p>
<p class="item" style="position:relative"><b>F.</b> <img src="html-resources/info18.png" width="18" height="18" style="position:relative; bottom:-3px" title="tech info" alt="tech info"/> If your printer requests "US Web Coated SWOP v2" and, as usual, requests that you <em>not</em> embed the corresponding *.icc color profile, then some software will read the Output Intent as "CGATS&nbsp;TR&nbsp;001" instead of "US&nbsp;Web&nbsp;Coated&nbsp;SWOP&nbsp;v2". They are identical.</p>
</div><!-- end 3.4.5 -->
-<h4 id="h3.4.6">3.4.6. Where to Find *.icc Files</h4><div class="d4" id="d3.4.6">
+<h4 id="h3.4.6">3.4.6. Where to Find *.icc Files</h4>
+<div class="d4" id="d3.4.6">
<p class="item"><b>A.</b> You do not need an *.icc color profile unless you choose to embed it.</p>
<p class="item"><b>B.</b> Although many *.icc color profiles are freely available, they usually cannot be distributed within an open-source project. You might already have them in your system, wherever such files are stored. Note that TeX uses forward slash in file paths, not backslash, even if the platform is Windows:</p>
<p class="isolate">
@@ -1244,7 +1157,7 @@ Nonexistent Publications • Portland, Oregon\par<br/>
<p class="item"><b>E.</b> You do not need to set the unsafe zone. Whether or not you do, and regardless of any values you choose, the result does not affect the finished, final PDF. The zones are not enforced. Margins are unaffected.</p>
<p class="item"><b>F.</b> If you set unsafe zone, then the unsafe area will have a dark gray background, when you use <code>[draft,shademargins]</code> as class options. This allows you to visualize whether anything intrudes into the unsafe zone.</p>
<div style="clear:both"></div>
-</div><!-- end 4.3.1.1 -->
+</div><!-- end 4.3.1.2 -->
</div><!-- end 4.3.1 -->
<h4 id="h4.3.2">4.3.2. Lines Per Page</h4>
@@ -1960,7 +1873,7 @@ This text is in lightgray, until the group ends.<br/>
<p>Images have built-in positioning arguments.</p>
<p class="item"><b>F.</b> Do not use floats (except in <a href="#h2.2">sandbox</a>). Use <i>novel's</i> own <code>\FloatImage</code>.</p>
<p class="item"><b>G.</b> Do not use tables (except in <a href="#h2.2">sandbox</a>). But <i>novel</i> has its <a href="#hD.3.2.7">own provision</a> for a Table of Contents, and the code may be used for other purposes as well.</p>
-<p class="item"><b>H.</b> Do not use picture environment (except in <a href="#h2.2">sandbox</a>). Use only the image commands provided by novel: <code><a href="#h7.2.2">\InlineImage</a></code>, <code><a href="#h7.2.4">\FloatImage</a></code>, and <code><a href="#h7.2.5">\WrapImage</a></code>. There is also a special provision for <a href="#h7.1.2">color cover artwork</a>.</p>
+<p class="item"><b>H.</b> Do not use picture environment (except in <a href="#h2.2">sandbox</a>). Use only the image commands provided by novel: <code><a href="#h7.2.2">\InlineImage</a></code>, <code><a href="#h7.2.4">\FloatImage</a></code>, and <code><a href="#h7.2.5">\WrapImage</a></code>. There is also a special provision for <a href="#h7.1.2">color cover artwork</a> (deprecated).</p>
</div><!-- end 6.3.1 -->
<h4 id="h6.3.2">6.3.2. Some Useful Commands</h4>
@@ -2006,7 +1919,7 @@ This text is in lightgray, until the group ends.<br/>
</div><!-- end 6.3 -->
<h3 id="h6.4">6.4 Superscripts, Subscripts</h3>
-<div class="d3" id="d6,4">
+<div class="d3" id="d6.4">
<p class="item"><b>A.</b> In <i>novel</i>, superscripts and subscripts are called "markers." Most book-quality Open Type fonts have markers in style sets (<i>sups</i>, <i>sinf</i>, <i>subs</i>).</p>
<p class="item"><b>B.</b> In professional fonts, marker glyph weights are adjusted for consistent appearance compared to ordinary glyphs. However, many free fonts do not adjust marker glyph weights, so the markers may appear too small, or too light. You may choose whether to use a font's own markers, or allow <i>novel</i> to generate markers, depending on whichever you think looks better.</p>
<p class="item"><b>C.</b> <i>real</i> markers attempt to use the Open Type feature <i>sups</i> for superscripts, and the feature <i>sinf</i> (preferred) or <i>subs</i> (alternate) for subscripts. Real markers are the best choice for professional fonts. If the requested feature is not available for the font, then it will be automatically faked, by scaling/raising/lowering ordinary characters from the basefont (lining numerals will be used).</p>
@@ -2070,8 +1983,11 @@ This text is in lightgray, until the group ends.<br/>
<p class="code"><code>\SetKnownGoodImages{somefile.png anotherfile.jpg}</code></p>
</div><!-- end 7.1.1 -->
-<h4 id="h7.1.2">7.1.2. Color Cover</h4>
+<h4 id="h7.1.2">7.1.2. Color Cover (deprecated)</h4>
<div class="d4" id="d7.1.2">
+<p>As of late 2023, most print services no longer have the same requirements as they once did,
+regarding color cover artwork. Although the method provided by <i>novel</i> still works,
+it is the hard way to do something that (nowadays) does not have to be hard.</p>
<p class="item"><b>A.</b> The book cover may be (usually is) in color. Bleed is required.</p>
<p class="item"><b>B.</b> If your print service allows you to submit cover artwork as an ordinary RGB image file, that's the easiest way to do it. Then, <i>novel</i> is not used.</p>
<p class="item" style="position:relative"><b>C.</b> <img src="html-resources/info18.png" width="18" height="18" style="position:relative; bottom:-3px" title="tech info" alt="tech info"/> Complete support for creating a PDF/X-1a:2001 (or other) color cover, with image in CMYK at 240% ink limit, is provided in <i>novel-scripts.zip</i>. This format is required by some American print-on-demand services.</p>
@@ -2235,7 +2151,7 @@ He would have taken the car, had it not been stolen. But that was why he was her
</p>
<div style="clear:both"></div>
</div><!-- end 8.1.2 -->
-</div><!-- end 8.2 -->
+</div><!-- end 8.1 -->
</div><!-- end 8 -->
</div><!-- end page08 -->
@@ -2665,7 +2581,7 @@ It was a dark and stormy night, etc.<br/>
<p>The source of the quotation should be right-justified within the block, and may be preceded by an emdash. Typically, names of people are not italicized, but titles of books are. It is not necessary to give elaborate details; this is not a bibliography.</p>
<p>It is not necessary to load the <i>epigraph</i> package. Simply construct your own style of epigraph using other methods. But if you do load <i>epigraph</i>: Only use <code>\epigraph</code>, or the <code>epigraphs</code> environment, within the ChapterStart environment, or on a display page. Commands <code>\epigraphhead</code>, <code>\dropchapter</code>, <code>\undocrop</code> do not work in <i>novel</i>. The <code>\cleartoevenpage[<i>option</i>]</code> command does work. Ignore the material regarding epigraphs on part pages or in bibliographies.</p>
-<h6 id="hD.3.2.6.1"><span class="n"></span>D.3.2.6.1. Example Epigraph: Real Quotation</h6>
+<h6 id="hD.3.2.6.1">D.3.2.6.1. Example Epigraph: Real Quotation</h6>
<div class="d6" id="uD.3.2.6.1">
<p class="noindent">This might be used for an action adventure:</p>
<p class="code"><img class="floatright" src="html-resources/shakepi.png" width="131" height="208" alt="sample epigraph: Shakespeare"/>
@@ -2683,7 +2599,7 @@ The valiant never taste of death but once.\par<br/>
<div style="clear:both"></div>
</div><!-- end D.3.2.6.1 -->
-<h6 id="hD.3.2.6.2"><span class="n"></span>D.3.2.6.2. Example Epigraph: Imaginary Quotation</h6>
+<h6 id="hD.3.2.6.2">D.3.2.6.2. Example Epigraph: Imaginary Quotation</h6>
<div class="d6" id="uD.3.2.6.2">
<p class="noindent">This might be used for contemporary fiction with a humorous style. The fictional speaker will appear as a character in the book:</p>
<p class="code"><img class="floatright" src="html-resources/dorfmcnorf.png" width="131" height="208" alt="sample epigraph: imaginary"/>
@@ -2739,7 +2655,7 @@ Let me tell you, there's nothing more exciting than the brouhaha at Mickey's Pub
<p>If an Author's Note is two pages long, then on the second page use the same page style that you would ordinary use to start a chapter. Normally, this is <code>\thispagestyle{footer}</code>.</p>
<p>If an Author's Note is three or more pages long, then a header is permitted (if the book's main style has header). You may allow author and title to appear in header text, but it is better to indicate that this is <em>not</em> the main story, using <code>\SetVersoHeadText{Author's&nbsp;Note}</code> and <code>\SetRectoHeadText{Author's&nbsp;Note}</code>.</p>
-<h6 id="hD.3.2.10.1"><span class="n"></span>D.3.2.10.1. Example Author's Note</h6>
+<h6 id="hD.3.2.10.1">D.3.2.10.1. Example Author's Note</h6>
<div class="d6" id="uD.3.2.10.1">
<p class="noindent">In a book of historical fiction, based on the author's own travels and expertise:</p>
<p class="code"><code><small>
@@ -2774,7 +2690,7 @@ Finally, I would like to thank... \lipsum[1]<br/>
<p>A single map, or maybe two, need not be mentioned in a table of contents or illustrations. If you have a lot of them strewn around the book, then they should be listed in such a table; but this is very rare in fiction.</p>
<p>As with all images, a map must be placed using <i>novel's</i> own <a href="#h7">image placement methods</a>.</p>
-<h6 id="hD.3.2.11.1"><span class="n"></span>D.3.2.11.1. Example Map</h6>
+<h6 id="hD.3.2.11.1">D.3.2.11.1. Example Map</h6>
<div class="d6" id="uD.3.2.11.1">
<p class="noindent">Typically, there will be nothing but the single image on a Map page, with all text self-contained. But in this example, the image only occupies part of the page. It is followed by ordinary text for the numbered locations:
<p class="code"><img class="floatright" src="html-resources/map.png" width="178" height="274" alt="sample map"/>
@@ -2834,7 +2750,7 @@ Finally, I would like to thank... \lipsum[1]<br/>
<p>Some books are partitioned into distinct sub-books. A sub-book is of substantial length, not individual chapters or short stories.</p>
<p>If your book has distinct sub-books, then each of them has its own recto cover page, known as a Part Separator. Its verso is blank or an Epigraph. Then the accompanying story begins recto.</p>
<p>A Part Separator is <i>always</i> main matter. So, the first Part Separator is <i>always</i> page 1 (number not printed). Then its text begins on page 3. Do not re-initialize the page count when you get to the next Part Separator.</p>
-<p>Part separators could be simply <i>Part I</i>, <i>Part II</i>, and so forth. They could be <i>Book I</i>, <i>Book II</i>. Or, they could have distinctive titles, such as <i>The Northern Front</i> and <i>The Southern Front</i>. If your book is two novelettes in one, then the Part Separators would be the title (and subtitle, if any) of the individual novelettes. Sometimes a Part Separator has a brief description of its purpose, as in <i>Book I. On Earth</i> followed by <i>Book II. On Mars</i>.</p>
+<p>Part separators could be simply <i>Part I</i>, <i>Part II</i>, and so forth. They could be <i>Book I</i>, <i>Book II</i>. Or, they could have distinctive titles, such as <i>The Northern Front</i> and <i>The Southern Front</i>. If your book is "two in one" then the Part Separators would be the title (and subtitle, if any) of the individual parts. Sometimes a Part Separator has a brief description of its purpose, as in <i>Book I. On Earth</i> followed by <i>Book II. On Mars</i>.</p>
<p>Unless your book has a very complex structure, do <i>not</i> use both a second Half-Title (whether in front matter or main matter) and a Part Separator. Combine them as the recto main matter page 1: <i>The Withens Chronicles. Part I</i>, or simply <i>Part I</i>. Then the next Part Separator would be <i>Part II</i>.</p>
<p>In one book I recently noticed, there were five parts, each of which corresponded to one calendar day. The Part Separator showed the day, as in <i>Monday, September 25</i>. Then within each part there were several chapters, each of which took us to some different event in a different setting, all on that same day. I also note that this book had no Table of Contents; the progress of the novel was therefore a surprise, by its author's intent.</p>
</div><!-- end D.3.3.2 -->
@@ -3183,7 +3099,7 @@ Some text {\baskf\addfontfeature{Numbers=Monospaced} hello 123} is here.
<h2 id="hY">Appendix Y. &nbsp; Licensing and Credits</h2>
<div class="d2" id="dY">
-<p class="item"><b>A. Licensing:</b> The <i>novel</i> document class, including software, examples, documentation and supporting images, is distributed under the terms of the <a class="external" rel="external" target="new" href="https://www.latex-project.org/lppl/lppl-1-3c/">LaTeX Project Public License, version 1.3c only</a>. Exception: The included fonts <i>NovelDeco.otf</i> and <i>CPmodified.otf</i> are distributed under terms of the <a class="external" rel="external" target="new" href="http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web">SIL Open Font License, v.1.1.</a></p>
+<p class="item"><b>A. Licensing:</b> The <i>novel</i> document class, including software, examples, documentation and supporting images, is distributed under the terms of the <a class="external" rel="external" target="new" href="https://www.latex-project.org/lppl/lppl-1-3c/">LaTeX Project Public License, version 1.3c only</a>. Exception: The included font <i>NovelDeco.otf</i> is distributed under terms of the <a class="external" rel="external" target="new" href="http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web">SIL Open Font License, v.1.1.</a></p>
<p>To ensure that your book may be sold commercially, be careful to use only fonts that allow commercial usage. That may exclude some of the fonts in the LaTeX font catalog. See <a href="#hC">Appendix&nbsp;C</a>.</p>
<p class="item"><b>B. Credits:</b> Within the TeX code files, you will find places where small or large pieces of code are the work of someone else. Names or organizations are credited in-place within the TeX code, according to license.</p>
@@ -3199,11 +3115,13 @@ Some text {\baskf\addfontfeature{Numbers=Monospaced} hello 123} is here.
<div id="pageZ" class="page">
-<h2 id="hZ">Appendix Z. &nbsp; Changes in v.1.80.</h2>
+<h2 id="hZ">Appendix Z. &nbsp; Changes in v.1.86.</h2>
<div class="d2" id="dZ">
<h4>Important Changes</h4>
<div class="d3">
+<p>Version 1.86 (2024) docs edited..</p>
+<p>Version 1.84 (2023) docs edited. Probably final update.</p>
<p>Version 1.83 (2023) corrected minor typo. Will not affect most users.</p>
<p>Version 1.82 (2023) adds a user setting, to change the default indent.</p>
<p>Version 1.80 (2023) tweaks some internal code, for faster compiling.
@@ -3213,6 +3131,8 @@ In any case, if you are re-building an earlier document, pay careful attention
to line breaks and pagination. Due to various adjustments in component
packages and fonts, a document built in the past may look slightly different
if re-built now.</p>
+</div>
+
</div><!-- end Z -->
</div><!-- end Appendix Z -->
@@ -3221,7 +3141,7 @@ if re-built now.</p>
</div><!-- end main -->
-<div id="finish"></div>
+<div style="clear:both"></div>
</div><!-- end master -->
</body>
</html>
diff --git a/macros/luatex/latex/novel/doc/novel.pdf b/macros/luatex/latex/novel/doc/novel.pdf
index afb325ef5f..019feecf43 100644
--- a/macros/luatex/latex/novel/doc/novel.pdf
+++ b/macros/luatex/latex/novel/doc/novel.pdf
@@ -8,10 +8,10 @@ stream
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmp="http://ns.adobe.com/xap/1.0/">
- <xmp:ModifyDate>2023-11-09T11:33:37-08:00</xmp:ModifyDate>
- <xmp:CreateDate>2023-11-09T11:33:37-08:00</xmp:CreateDate>
+ <xmp:ModifyDate>2024-01-31T11:26:16-08:00</xmp:ModifyDate>
+ <xmp:CreateDate>2024-01-31T11:26:16-08:00</xmp:CreateDate>
<xmp:CreatorTool>LuaLaTeX with novel and microtype</xmp:CreatorTool>
- <xmp:MetadataDate>2023-11-09T11:33:37-08:00</xmp:MetadataDate>
+ <xmp:MetadataDate>2024-01-31T11:26:16-08:00</xmp:MetadataDate>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:dc="http://purl.org/dc/elements/1.1/">
@@ -25,7 +25,7 @@ stream
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">
<xmpMM:DocumentID>uuid:A12D98E081B6A0EC2CBA2D468474F922</xmpMM:DocumentID>
- <xmpMM:InstanceID>uuid:50D7821EED17A7D4834572F405C18DB9</xmpMM:InstanceID>
+ <xmpMM:InstanceID>uuid:7B55E0C0C1A732BF844F0BBB234AF9B7</xmpMM:InstanceID>
<xmpMM:RenditionClass>default</xmpMM:RenditionClass>
<xmpMM:VersionID>1</xmpMM:VersionID>
</rdf:Description>
@@ -49,7 +49,7 @@ stream
endstream
endobj
7 0 obj
-<< /Length 8286 >>
+<< /Length 8457 >>
stream
0 g 0 G
0 g 0 G
@@ -59,67 +59,58 @@ BT
1 0 0 1 178.388 541.455 Tm [<002F0030>-37<00370026002D>]TJ
/F95 13.62884 Tf
1 0 0 1 105.124 508.167 Tm [<0022>-250<00250050>-7<00440056004E0046004F0055>-250<0024004D004200540054>-250<004700500053>-250<005500490046>-250<0033004600540055>-250<00500047>-250<00360054>]TJ
-ET
-1 0 0 1 161.57 496.331 cm
-q
-4 0 0 4 0 0 cm
-1 0 0 1 -161.57 -496.331 cm
-BT
+/F95 11.3574 Tf
+1 0 0 1 143.535 493.372 Tm [<0037>80<004600530054004A0050004F>-250<09C9000F09D009CE>-250<0009>-73<002B0042004F005600420053>-15<005A>-250<09CA09C809CA09CC000A>]TJ
/F97 11.3574 Tf
-1 0 0 1 161.57 496.331 Tm [<0176>]TJ
-ET
-1 0 0 1 161.57 496.331 cm
-Q
-1 0 0 1 -161.57 -496.331 cm
-BT
-/F98 11.3574 Tf
-1 0 0 1 53.421 446.286 Tm [<0038004900460053>8<0046>-201<004A0054>-201<005500490046>-202<00450050>-7<00440056004E0046004F005500420055004A0050004F00200020>]TJ
+1 0 0 1 53.421 446.202 Tm [<0038004900460053>8<0046>-250<004A0054>-250<005500490046>-250<00450050>-7<00440056004E0046004F005500420055004A0050004F00200020>]TJ
/F95 11.3574 Tf
-0.98 0 0 1 211.688 446.286 Tm [<002A0055>-205<004A0054>-205<004A004F>-206<0029>-38<0035002E002D>-206<004700500053004E00420055000D>-215<0042004F0045>-206<00440042004F004F00500055>]TJ
-1 0 0 1 54 431.492 Tm [<0043>-10<0046>-249<0053>7<004600550053004A0046>8<0057>8<0046>-7<0045>-249<0057004A0042>]TJ
-/F99 11.3574 Tf
-1 0 0 1 128.744 431.492 Tm [<00550046>7<005900450050>-7<0044>]TJ
+1 0 0 1 213.53 446.202 Tm [<002A0055>-250<004A0054>-250<0029>-37<0035002E002D000F>]TJ
+1 0 0 1 53.659 431.407 Tm [<000900550046>7<00590053>8<0050>-7<00500055000A001000450050>-7<00440010004D00560042004D004200550046>7<00590010004F0050>7<0057>8<0046004D0010004F0050>7<0057>8<0046004D000E00450050>-7<00440056004E0046004F005500420055004A0050004F000F00490055004E004D000F>]TJ
+/F97 11.3574 Tf
+1 0 0 1 54 401.818 Tm [<002F0046>7<00580054001B>]TJ
/F95 11.3574 Tf
-1 0 0 1 157.229 431.492 Tm [<000F>-333<002A0047>-249<005A>8<00500056>-249<004900420057>8<0046>-248<00550049004A0054>-250<005100420044004C004200480046>-249<004A004F005400550042004D004D0046>-7<0045000D>-249<004D0050>-7<0050004C>-249<004700500053>]TJ
-0.996 0 0 1 53.659 416.697 Tm [<000900550046>7<00590053>8<0050>-6<00500055000A001000450050>-8<00440010004D00560042004D004200550046>7<00590010004F0050>7<0057>8<0046004D0010004F0050>7<0057>8<0046004D000E00450050>-6<00440056004E0046004F005500420055004A0050004F000F00490055004E004D000F>-341<002A0047>-253<005A>7<00500056>-252<00420053>7<0046>]TJ
-0.98 0 0 1 54 401.903 Tm [<0050004F004D004A004F0046>10<000D>-246<00480050>-246<00550050>-245<005500490046>-245<00240035>50<0022002F>-244<0051004200480046>-246<00420055>-245<00490055005500510054001B00100010004400550042004F000F00500053004800100051004C00480010004F0050>7<0057>8<0046004D>-244<0042004F0045>-246<0044004D004A0044004C>]TJ
-1 0 0 1 53.148 387.108 Tm [<06E2003100420044004C004200480046>-250<00250050>-7<00440056004E0046004F005500420055004A0050004F>-250<00090029>-37<0035002E002D000A000F>122<06E3>]TJ
+0.992 0 0 1 88.261 401.818 Tm [<00350049004A0054>-252<00450050>-7<00440056004E0046004F0055>-253<0044004D004200540054>-253<005800420054>-252<0939005300540055>-253<00510053004A0057004200550046004D005A>-253<005600540046>-7<0045>-252<004A004F>-253<09CA09C809C909CC000F>-338<003500490046004F000D>]TJ
+1.02 0 0 1 54 387.024 Tm [<004A004F>-280<09CA09C809C909D0000D>-289<004A0055>-280<005800420054>-281<004A004E00510053>8<0050>7<0057>8<0046>-7<0045000D>-289<00450050>-7<00440056004E0046004F00550046>-7<0045000D>-289<0042004F0045>-280<0053>7<0046004D0046004200540046>-6<0045000F>-432<002A0055>-281<004900420054>-280<0043>-10<0046>-7<0046004F>]TJ
+1.02 0 0 1 54 372.229 Tm [<004E0042004A004F00550042004A004F0046>-7<0045>-315<005500490053>7<0050005600480049>-314<0035>62<00460039004D004A0057>8<0046>-315<09CA09C809CA09CB000F>-538<002A0055>-315<004A0054>-315<0046>6<00590051>-6<0046>-7<004400550046>-7<0045>-316<00550050>-315<0058>7<00500053004C>-315<004A004F>-315<005500490046>]TJ
+1 0 0 1 54 357.435 Tm [<00470056005500560053>8<0046>10<000D>-250<004300560055>-250<004A0054>-250<004F0050>-250<004D0050004F004800460053>-250<004E0042004A004F00550042004A004F0046>-7<0045>-250<0043005A>-250<004A00550054>-250<00500053004A0048004A004F0042004D>-250<00440053>8<00460042005500500053>59<000F>]TJ
+0.98 0 0 1 71.036 342.64 Tm [<002400490042004F004800460054>-226<004A004F>-226<00510053004A004F0055000E0050004F000E00450046004E0042004F0045>-227<00550046>-7<00440049004F0050004D00500048005A>-227<004900420057>8<0046>-226<004E004200450046>-226<004E0042004F005A>-227<00510042005300550054>]TJ
+0.98 0 0 1 54 327.845 Tm [<00500047>-254<00550049004A0054>-255<00440050>-7<00450046>-254<004A00530053>7<0046004D0046>7<00570042004F0055000F>-339<0035004900460053>8<0046>-254<00420053>7<0046>-253<0042004D00540050>-255<0042>-254<00470046>6<0058>-254<00440050004E004E0042004F00450054>-254<0055004900420055>-255<0053>8<0046>-7<00520056004A0053>8<0046>]TJ
+1.02 0 0 1 54 313.051 Tm [<00480053004200510049004A0044>-288<004500460054004A0048004F>-288<0046>6<00590051>-6<00460053004A0046004F00440046>-289<004700500053>-288<00510053>7<00500051>-6<00460053>-289<00560054004200480046>9<000F>-456<0022004F0045>-288<0042>-289<00470046>6<0058>-287<0054004600550055004A004F00480054000D>]TJ
+1 0 0 1 53.58 298.256 Tm [<00580049004A00440049>-250<0054004900500056004D0045>-250<0043>-10<0046>-250<0054004A004E0051004D0046>-250<0042004F0045>-250<005000430057004A005000560054000D>-250<00420053>8<0046>-250<00440050004E0051004D0046>7<0059>-250<0042004F0045>-250<00420053>8<00440042004F0046>10<000F>]TJ
+1.02 0 0 1 71.036 283.462 Tm [<002A0047>]TJ
/F98 11.3574 Tf
-1 0 0 1 54 357.519 Tm [<00250046005400440053004A00510055004A0050004F001B>]TJ
+1.02 0 0 1 81.23 283.462 Tm [<004F0050>7<0057>8<0046004D>]TJ
/F95 11.3574 Tf
-1.02 0 0 1 121.178 357.519 Tm [<003500490046>]TJ
-/F99 11.3574 Tf
-1.02 0 0 1 142.58 357.519 Tm [<004F0050>7<0057>8<0046004D>]TJ
+1.02 0 0 1 109.331 283.462 Tm [<0058>8<00500053004C0054>-273<004700500053>-273<005A>8<00500056000D>-279<00480050>-7<0050>-7<0045000F>-411<002300560055>-273<004A0047>-273<005A>7<00500056>-272<00420053>7<0046>-272<0054004A004E0051004D005A>-273<00580053004A0055004A004F0048>-273<0042>]TJ
+1.02 0 0 1 54 268.667 Tm [<093900440055004A0050004F>-283<004F0050>6<0057>8<0046004D000D>-293<004F005000550049004A004F0048>-284<00470042004F0044005A>58<000D>-292<005500490046004F>-284<00540046>-7<0046>-284<004A0047>-284<00240035>48<0022002F>-282<0042004F0045>-284<0035>62<00460039004D004A0057>8<0046>-283<004900420057>7<0046>]TJ
+1.02 0 0 1 54 253.873 Tm [<0042>-273<005100420044004C004200480046>-274<004F0042004E0046>-7<0045>]TJ
+/F98 11.3574 Tf
+1.02 0 0 1 139.105 253.873 Tm [<004F0050>7<0057>7<0046004D0046005500550046>]TJ
/F95 11.3574 Tf
-1.02 0 0 1 170.594 357.519 Tm [<00450050>-7<00440056004E0046004F0055>-265<0044004D004200540054>-266<004A0054>-265<004700500053>-265<00580053004A0055004600530054>-266<00500047>-265<00500053004A0048004A004F0042004D>]TJ
-0.98 0 0 1 54 342.725 Tm [<093900440055004A0050004F000D>-244<00550050>-242<0043>-10<0046>-242<00510053004A004F00550046>-7<0045>-242<00550050>-242<005100420051>-7<00460053>61<000D>-244<0058004A00550049>-242<0042005500550046004F0055004A0050004F>-241<00550050>-242<005500490046>-242<0053>7<0046>-6<00520056004A0053>8<0046004E0046004F00550054>-241<00500047>]TJ
-0.995 0 0 1 54 327.93 Tm [<005500490046>-249<00510053004A004F0055000E0050004F000E00450046004E0042004F0045>-250<004E00420053004C00460055000F>-335<002F0050004F000E00440050004D00500053>-250<004A004F005500460053004A005000530054>-249<0042004F0045>-250<00440050004D00500053>-250<00440050>6<0057>8<004600530054>]TJ
-1.02 0 0 1 54 313.136 Tm [<00420053>8<0046>-294<0054005600510051>-7<0050005300550046>-7<0045000F>-474<002A004E0042004800460054>-295<00420053>8<0046>-294<0054005600510051>-7<0050005300550046>-7<0045000D>-307<004300560055>-294<0050004F004D005A>-294<00420054>-294<005500490046>6<005A>-294<004E004A004800490055>-294<0043>-10<0046>]TJ
-1 0 0 1 54 298.341 Tm [<005600540046>-7<0045>-250<004A004F>-250<093900440055004A0050004F000D>-250<004F00500055>-250<0051004A0044005500560053>8<0046>-250<0043>-10<0050>-7<0050004C0054000F>]TJ
-0.98 0 0 1 71.036 283.547 Tm [<002A0047>-226<005A>8<005000560053>-226<0058>8<00500053004C>-226<004A0054>-226<0042004F>-226<0026000E0043>-10<0050>-8<0050004C000D>-232<00500053>-226<0056005400460054>-226<004A004F005500460053004A00500053>-226<00440050004D00500053>-226<00500055004900460053>-227<005500490042004F>-226<004800530042005A>61<000D>]TJ
-1 0 0 1 54 268.752 Tm [<00500053>-250<004A0054>-250<00420044004200450046004E004A0044000D>-250<005500490046004F>-250<00550049004A0054>-250<00450050>-7<00440056004E0046004F0055>-250<0044004D004200540054>-250<004A0054>-250<004F00500055>-250<004700500053>-250<005A>8<00500056000F>]TJ
-1 0 0 1 71.036 253.958 Tm [<002300560055>-250<004A0047>-250<005A>7<00500056>-250<00420053>8<0046>-250<00580053004A0055004A004F0048>-250<0042>-251<0045004600550046>-7<00440055004A0057>7<0046>-249<004F0050>6<0057>8<0046004D000D>-249<00500053>-251<00540044004A0046004F00440046>-250<093900440055004A0050004F000D>-251<00500053>-250<0042>]TJ
-1 0 0 1 54 239.163 Tm [<00440050004D004D0046>-7<00440055004A0050004F>-250<00500047>-250<00540049005000530055>-250<0054005500500053004A00460054000D>-250<005500490046004F>-250<0053>8<004600420045>-250<0050004F0002>]TJ
-/F95 13.62884 Tf
-1 0 0 1 54 213.663 Tm [<0012000F>-333<002700460042005500560053>7<00460054>]TJ
+1.02 0 0 1 179.711 253.873 Tm [<000F>-411<0022>11<0054>-273<00500047>-273<004D004200550046>-274<002B0042004F005600420053>-15<005A>-273<09CA09C809CA09CC000D>-281<005500490046>-273<005100420044004C004200480046>]TJ
+1.02 0 0 1 54 239.078 Tm [<004A0054>-264<004A004F>-265<0043>-10<004600550042>-265<0055004600540055>-265<0009004F00500055>-265<0053>7<0046004D0046004200540046>-6<0045>-265<005A>7<00460055000A000F>-385<002A0047>-265<005500490046>-265<005100420044004C004200480046>-264<0046>6<0059004A005400550054>-264<0042004F0045>-265<00440042004F>-265<0043>-10<0046>]TJ
+1 0 0 1 54 224.284 Tm [<004A004F005400550042004D004D0046>-7<0045000D>-250<005500490046004F>-250<005A>8<00500056>-250<0054004900500056004D0045>-250<00510053>8<0046004700460053>]TJ
+/F98 11.3574 Tf
+1 0 0 1 207.45 224.284 Tm [<004F0050>7<0057>8<0046004D0046005500550046>]TJ
/F95 11.3574 Tf
-1.02 0 0 1 53.659 194.779 Tm [<003500490053>8<0050005600480049005000560055000D>-329<004A0055>-312<004A0054>-313<0042005400540056004E0046>-7<0045>-312<0055004900420055>-312<005500490046>-313<0051005600530051>-7<005000540046>-312<00500047>-312<005A>7<005000560053>-312<00580053004A0055004A004F0048>-312<004A0054>-312<0042>]TJ
-1 0 0 1 54 179.985 Tm [<00440050004E004E00460053>8<0044004A0042004D004D005A>-250<00510053004A004F00550046>-7<0045>-250<0043>-10<0050>-7<0050004C>-250<00500047>-250<093900440055004A0050004F000F>]TJ
-0.98 0 0 1 71.036 165.19 Tm [<0022>-244<004F0046>7<0058>]TJ
-/F99 11.3574 Tf
-0.98 0 0 1 103.451 165.19 Tm [<004F0050>7<0057>8<0046004D>]TJ
+1 0 0 1 247.258 224.284 Tm [<000F>]TJ
+/F97 11.3574 Tf
+1 0 0 1 54 194.695 Tm [<00250046005400440053004A00510055004A0050004F001B>]TJ
+/F95 11.3574 Tf
+1.02 0 0 1 121.178 194.695 Tm [<003500490046>]TJ
+/F98 11.3574 Tf
+1.02 0 0 1 142.58 194.695 Tm [<004F0050>7<0057>8<0046004D>]TJ
/F95 11.3574 Tf
-0.98 0 0 1 130.153 165.19 Tm [<004A0054>-244<00510053>8<0046000E00440050004F0939004800560053>8<0046>-7<0045>-244<00550050>-244<00510053>7<0050>-6<0045005600440046>-244<0042>-245<005400550042004F004500420053>8<0045>-244<00550053004200450046>-244<0043>-10<0050>-8<0050004C>]TJ
-1.003 0 0 1 54 150.396 Tm [<0054004A005B0046>-249<00500047>-249<09CD000F09CD004A004F>-249<0038>-249<0059>-249<09D0000F09CD004A004F>-249<0029000D>-250<0058004A00550049>-249<004D0042005A>7<005000560055>-248<004E004200530048004A004F0054>-249<0055004900420055>-249<00420053>7<0046>-248<004D004A004C0046004D005A>-249<00550050>-250<0043>-10<0046>]TJ
-0.994 0 0 1 54 135.601 Tm [<00420044004400460051005500420043004D0046>-251<00550050>-252<005500490046>-251<004E005000540055>-252<0058004A00450046004D005A000E005600540046>-7<0045>-252<00510053004A004F0055>-251<005400460053>-15<0057004A004400460054000F>-336<003500490046>-251<0939004D0046>-252<005A>7<00500056>-250<00420053>7<0046>]TJ
-0.98 0 0 1 54 120.807 Tm [<004F0050>7<0058>-202<0053>7<004600420045004A004F0048>-202<004A0054>-203<004A004F>-203<00550049004A0054>-204<004700500053004E00420055000F>-322<002300560055>-204<004A0047>-203<0055004900420055>-203<004A0054>-203<004F00500055>-203<005500490046>-203<0054004A005B0046>-203<00500053>-204<004D0042005A>8<005000560055>-203<005A>8<00500056>]TJ
-0.986 0 0 1 53.58 106.012 Tm [<00580042004F0055000D>-252<005500490046004F>-253<0055004900460053>8<0046>-252<00420053>8<0046>-252<00440050004E004E0042004F00450054>-252<0055004900420055>-253<00440050004F0939004800560053>8<0046>-252<004B005600540055>-252<00420043>-11<005000560055>-252<0042004F005A00550049004A004F0048000D>]TJ
-1.02 0 0 1 54 91.218 Tm [<00560054004A004F0048>-243<005400550042004F004500420053>7<0045>-243<005500460053004E004A004F0050004D00500048005A>-244<0042004F0045>-243<0056004F004500460053005400550042004F004500420043004D0046>-244<0051005600530051>-7<005000540046>9<000F>-325<0023004600540055>-244<00500047>]TJ
-0.984 0 0 1 54 76.423 Tm [<0042004D004D000D>-253<005500490046>-253<0029>-39<0035002E002D>-253<00450050>-7<00440056004E0046004F005500420055004A0050004F>-253<00440050004E00460054>-254<0058004A00550049>-253<004A004E0042004800460054>-253<0042004F0045>-253<0046>6<00590042004E0051004D00460054000D>-252<00540050>]TJ
-1 0 0 1 54 61.629 Tm [<005A>8<00500056>-250<004C004F0050>7<0058>-250<0058004900420055>-250<005A>8<00500056>-250<00420053>8<0046>-250<00450050004A004F0048000F>]TJ
+1.02 0 0 1 170.594 194.695 Tm [<00450050>-7<00440056004E0046004F0055>-265<0044004D004200540054>-266<004A0054>-265<004700500053>-265<00580053004A0055004600530054>-266<00500047>-265<00500053004A0048004A004F0042004D>]TJ
+0.98 0 0 1 54 179.9 Tm [<093900440055004A0050004F000D>-244<00550050>-242<0043>-10<0046>-242<00510053004A004F00550046>-7<0045>-242<00550050>-242<005100420051>-7<00460053>61<000D>-244<0058004A00550049>-242<0042005500550046004F0055004A0050004F>-241<00550050>-242<005500490046>-242<0053>7<0046>-6<00520056004A0053>8<0046004E0046004F00550054>-241<00500047>]TJ
+0.995 0 0 1 54 165.106 Tm [<005500490046>-249<00510053004A004F0055000E0050004F000E00450046004E0042004F0045>-250<004E00420053004C00460055000F>-335<002F0050004F000E00440050004D00500053>-250<004A004F005500460053004A005000530054>-249<0042004F0045>-250<00440050004D00500053>-250<00440050>6<0057>8<004600530054>]TJ
+1.02 0 0 1 54 150.311 Tm [<00420053>8<0046>-294<0054005600510051>-7<0050005300550046>-7<0045000F>-474<002A004E0042004800460054>-295<00420053>8<0046>-294<0054005600510051>-7<0050005300550046>-7<0045000D>-307<004300560055>-294<0050004F004D005A>-294<00420054>-294<005500490046>6<005A>-294<004E004A004800490055>-294<0043>-10<0046>]TJ
+1 0 0 1 54 135.517 Tm [<005600540046>-7<0045>-250<004A004F>-250<093900440055004A0050004F000D>-250<004F00500055>-250<0051004A0044005500560053>8<0046>-250<0043>-10<0050>-7<0050004C0054000F>]TJ
+0.98 0 0 1 71.036 120.722 Tm [<002A0047>-226<005A>8<005000560053>-226<0058>8<00500053004C>-226<004A0054>-226<0042004F>-226<0026000E0043>-10<0050>-8<0050004C000D>-232<00500053>-226<0056005400460054>-226<004A004F005500460053004A00500053>-226<00440050004D00500053>-226<00500055004900460053>-227<005500490042004F>-226<004800530042005A>61<000D>]TJ
+1 0 0 1 54 105.928 Tm [<00500053>-250<004A0054>-250<00420044004200450046004E004A0044000D>-250<005500490046004F>-250<00550049004A0054>-250<00450050>-7<00440056004E0046004F0055>-250<0044004D004200540054>-250<004A0054>-250<004F00500055>-250<004700500053>-250<005A>8<00500056000F>]TJ
+1 0 0 1 71.036 91.133 Tm [<002300560055>-250<004A0047>-250<005A>7<00500056>-250<00420053>8<0046>-250<00580053004A0055004A004F0048>-250<0042>-251<0045004600550046>-7<00440055004A0057>7<0046>-249<004F0050>6<0057>8<0046004D000D>-249<00500053>-251<00540044004A0046004F00440046>-250<093900440055004A0050004F000D>-251<00500053>-250<0042>]TJ
+1 0 0 1 54 76.339 Tm [<00440050004D004D0046>-7<00440055004A0050004F>-250<00500047>-250<00540049005000530055>-250<0054005500500053004A00460054000D>-250<005500490046004F>-250<005A>8<00500056>-250<00420053>8<0046>-250<004A004F>-250<005500490046>-250<0053004A004800490055>-250<0051004D004200440046>10<000F>]TJ
0 g 0 G
-/F95 10.44878 Tf
-1 0 0 1 204.571 39.437 Tm [<0012>]TJ
0 g 0 G
ET
@@ -128,193 +119,10 @@ endobj
6 0 obj
<< /Type /Page /Contents 7 0 R /Resources 5 0 R /MediaBox [ 0 0 396 612 ] /CropBox[0 0 396 612]
-/TrimBox[0 0 396 612] /Parent 12 0 R >>
+/TrimBox[0 0 396 612] /Parent 11 0 R >>
endobj
5 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F95 8 0 R /F97 9 0 R /F98 10 0 R /F99 11 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-15 0 obj
-<< /Length 9218 >>
-stream
-0 g 0 G
-0 g 0 G
-BT
-/F95 11.3574 Tf
-1.02 0 0 1 53.036 564.643 Tm [<0022004D004E005000540055>-286<0046>6<0057>8<00460053>-14<005A00550049004A004F0048>-286<004A0054>-286<00510053>7<0046000E00440050004F0939004800560053>8<0046>-6<0045>-286<00550050>-286<06E2004B005600540055>-286<0058>7<00500053004C000D>122<06E3>-295<0046>6<0057>8<0046004F>-285<005500490046>]TJ
-0.993 0 0 1 36 549.848 Tm [<004400490050004A00440046>-253<00500047>-253<00470050004F00550054000F>-339<003500490046>-253<00440049005000540046004F>-253<00440050004E0051004A004D00460053>-253<004A0054>-253<002D00560042002D00420035>64<00460039000D>-252<0042004F0045>-253<00300051>-7<0046004F>-253<0035>49<005A0051>-6<0046>]TJ
-1.02 0 0 1 36 535.054 Tm [<00470050004F00550054>-254<00420053>7<0046>-253<004D0050004200450046>-7<0045>-254<00560054004A004F0048>]TJ
-/F99 11.3574 Tf
-1.02 0 0 1 143.408 535.054 Tm [<00470050004F005500540051>-7<0046>-7<0044>]TJ
-/F95 11.3574 Tf
-1.02 0 0 1 184.407 535.054 Tm [<00550046>-7<00440049004F0050004D00500048005A>59<000F>-353<002A0047>-255<005A>7<00500056>-253<00510053>7<0046004700460053>-253<00550050>-254<005600540046>-254<0042>]TJ
-1 0 0 1 36 520.259 Tm [<00510053>8<00500047004600540054004A0050004F0042004D>-250<00470050004F0055000D>-250<004A0055>-250<0058004A004D004D>-250<0043>-10<0046>-250<004600420054005A>-250<00550050>-250<004D005000420045>-250<0042004F0045>-250<005600540046>-250<004A004F>-250<005600550047000E09D0000F>]TJ
-1.02 0 0 1 53.036 505.465 Tm [<002E0042004F005A>-330<005400550042004F004500420053>7<0045>-330<002D00420035>62<00460039>-330<00440050004E004E0042004F00450054>-330<00420053>7<0046>-330<0045004A005400420043004D0046>-7<0045000F>-584<00350049004A0054>-331<0058004A004D004D>-330<0043>-10<0046>]TJ
-0.98 0 0 1 36 490.67 Tm [<00540056005300510053004A0054004A004F0048>-228<00420055>-227<0939005300540055000F>-332<002300560055>]TJ
-/F99 11.3574 Tf
-0.98 0 0 1 138.832 490.67 Tm [<004F0050>7<0057>8<0046004D>]TJ
-/F95 11.3574 Tf
-0.98 0 0 1 165.352 490.67 Tm [<004A0054>-228<00470050>-7<0044005600540046>-7<0045>-228<0050004F>-228<0050004F0046>-228<00550049004A004F0048>-228<0050004F004D005A>61<000F>-331<0022004F005A00550049004A004F0048>]TJ
-0.986 0 0 1 36 475.875 Tm [<0055004900420055>-254<004E004A004800490055>-254<004A004F005500460053004700460053>7<0046>-253<0058004A00550049>-255<0055004900420055>-254<0051005600530051>-7<005000540046>-255<004E0042005A>-254<004900420057>7<0046>-253<0043>-11<0046>-7<0046004F>-254<00550050005400540046>-7<0045>-255<00420054004A00450046>10<000F>]TJ
-0.98 0 0 1 36 461.081 Tm [<00340050>10<000D>-231<0043>-10<0046>-226<005400560053>7<0046>-224<0055004900420055>-226<005A>7<00500056>-225<0053>8<004600420045>-225<005500490046>-226<00450050>-7<00440056004E0046004F005500420055004A0050004F0002>-331<002A0047>-225<005A>7<00500056>-225<00550042004C0046>-226<0042004F>-225<0046>6<0059004A00540055004A004F0048>]TJ
-0.98 0 0 1 36 446.286 Tm [<002D00420035>65<00460039>-173<00450050>-8<00440056004E0046004F0055>-174<0042004F0045>-174<004B005600540055>-175<004400490042004F00480046>-174<005500490046>-175<0044004D004200540054>-174<00550050>]TJ
-/F99 11.3574 Tf
-0.98 0 0 1 237.077 446.286 Tm [<004F0050>7<0057>8<0046004D000D>]TJ
-/F95 11.3574 Tf
-0.98 0 0 1 264.879 446.286 Tm [<004A0055>-174<004A0054>-174<0057>7<00460053>-15<005A>-174<0056004F004D004A004C0046004D005A>]TJ
-1 0 0 1 36 431.492 Tm [<00550050>-250<0058>8<00500053004C>-250<00420054>-250<0046>7<00590051>-7<0046>-7<004400550046>-7<0045000F>]TJ
-1.02 0 0 1 53.036 416.697 Tm [<002E0042004F005A>-266<004F0046>7<0058>-266<00440050004E004E0042004F00450054>-266<00420053>7<0046>-265<00510053>7<0050>7<0057004A00450046>-6<0045000F>-389<003500490046>6<005A>-265<00420053>7<0046>-266<00470050>-6<0044005600540046>-7<0045>-266<0050004F>-266<005500490046>]TJ
-0.98 0 0 1 36 401.903 Tm [<004F0046>-7<0046>-7<00450054>-240<00500047>-239<00510053004A004F0055>-240<093900440055004A0050004F>-239<00580053004A0055004600530054000D>-243<0051>-7<00460053004A0050>-8<0045000F>-335<0022004F0045000D>]TJ
-/F99 11.3574 Tf
-0.98 0 0 1 231.134 401.903 Tm [<004F0050>7<0057>8<0046004D>]TJ
-/F95 11.3574 Tf
-0.98 0 0 1 257.783 401.903 Tm [<004900420054>-239<00430056004A004D0055000E004A004F>-240<00310025002700100039>]TJ
-0.98 0 0 1 36 387.108 Tm [<00550046>-7<00440049004F0050004D00500048005A>-185<0055004900420055>-186<0046>6<005900440046>-6<0046>-7<00450054>-186<005500490046>-186<00440042005100420043004A004D004A0055004A00460054>-185<0044005600530053>7<0046004F0055004D005A>-184<004200570042004A004D00420043004D0046>-186<0057004A0042>-186<00500055004900460053>]TJ
-1 0 0 1 36 372.314 Tm [<002D00420035>63<00460039>-250<005100420044004C0042004800460054000F>]TJ
-/F95 13.62884 Tf
-1 0 0 1 36 346.813 Tm [<0013000F>-333<00240050004E0051004D004600550046>-250<00250050>-7<00440056004E0046004F005500420055004A0050004F>]TJ
-/F95 11.3574 Tf
-1.008 0 0 1 35.455 327.93 Tm [<0038004900420055>-248<005A>7<00500056>-247<00420053>7<0046>-248<0053>8<004600420045004A004F0048>-248<004F0050>6<0058>60<000D>-248<004A0054>-248<0050004F004D005A>-249<0042004F>-248<004A004F00550053>7<0050>-6<0045005600440055004A0050004F000F>-332<003500490046>-248<00440050004E0051004D004600550046>]TJ
-0.98 0 0 1 36 313.136 Tm [<00450050>-7<00440056004E0046004F005500420055004A0050004F>-221<004A0054>-222<004A004F>-221<0029>-38<0035002E002D>-222<004700500053004E00420055000D>-228<0045004A0053>8<0046>-7<00440055004D005A>-221<00580053004A005500550046004F>-221<004A004F>-222<0029>-38<0035002E002D>-222<005300420055004900460053>]TJ
-0.98 0 0 1 36 298.341 Tm [<005500490042004F>-173<0046>6<0059005500530042004400550046>-6<0045>-173<00470053>7<0050004E>-172<00440050>-8<00450046>10<000F>-312<0035004900460053>7<0046>-172<00420053>7<0046>-172<004F0056004E00460053>7<005000560054>-173<0046>7<00590042004E0051004D00460054>-173<0042004F0045>-173<004A004E0042004800460054000D>]TJ
-1 0 0 1 36 283.547 Tm [<00550050>-7<0050>-250<0045004600550042004A004D0046>-7<0045>-250<00550050>-250<0043>-10<0046>-250<00510053>8<004600540046004F00550046>-7<0045>-250<00420054>-250<003100250027>24<000F>]TJ
-/F95 13.62884 Tf
-1 0 0 1 36 258.046 Tm [<0014000F>-333<002D004A00440046004F00540046>]TJ
-/F95 11.3574 Tf
-1.02 0 0 1 35.659 239.163 Tm [<003500490046>-323<002D00420035>62<00460039>-323<00440050>-7<00450046>9<000D>-342<0042004F0045>-324<0042004400440050004E00510042004F005A004A004F0048>-323<00450050>-7<00440056004E0046004F005500420055004A0050004F000D>-344<004A0054>-323<0053>7<0046004D0046004200540046>-6<0045>]TJ
-1 0 0 1 36 224.369 Tm [<0056004F004500460053>-250<005500490046>-250<002D0042005500460039>-250<00310053>8<0050004B0046>-7<00440055>-250<003100560043004D004A0044>-250<002D004A00440046004F00540046>10<000D>-250<0057>8<004600530054004A0050004F>-250<09C9000F09CB0044000F>]TJ
-0.98 0 0 1 53.036 209.574 Tm [<003500490046>-254<00440050004E00510042004F004A0050004F>-254<00470050004F00550009>11<0054000A>-253<004A00540009>11<00420053>9<0046000A>-254<004D004A00440046004F00540046>-7<0045>-255<0056004F004500460053>-254<005500490046>-254<0034002A002D>-255<00300051>-7<0046004F>-255<00270050004F0055>]TJ
-1 0 0 1 36 194.779 Tm [<002D004A00440046004F00540046>10<000D>-250<0057>8<004600530054004A0050004F>-250<09C9000F09C9000F>]TJ
-/F95 13.62884 Tf
-1 0 0 1 36 169.279 Tm [<0015000F>-333<0037>79<004600530054004A0050004F>]TJ
-/F95 11.3574 Tf
-1 0 0 1 36 150.396 Tm [<09C9000F09D009CB000D>-250<09CA09C809CA09CB000E09C909C9000E09C809D1001B>-333<002E004A004F00500053>-250<0055005A0051>-7<0050>-250<0044005000530053>7<0046>-6<004400550046>-7<0045000F>]TJ
-1 0 0 1 36 135.601 Tm [<09C9000F09D009CA000D>-250<09CA09C809CA09CB000E09C809D0000E09CA09CE001B>-333<0022>11<004500450046>-6<0045>-250<0056005400460053>-250<0054004600550055004A004F0048>-250<004700500053>-250<00450046004700420056004D0055>-250<004A004F00450046004F0055000F>]TJ
-1 0 0 1 36 120.807 Tm [<09C9000F09D009C9000D>-250<09CA09C809CA09CB000E09C809CB000E09CA09CD001B>-333<002300560048>-250<0939005900460054000F>-333<0022004D00540050>-250<09C9000F09D009C90042000D>-250<09C9000F09D009C90043>19<000F>]TJ
-1 0 0 1 36 106.012 Tm [<09C9000F09D009C8000D>-250<09CA09C809CA09CB000E09C809CA000E09C809D0001B>-333<0024004D004200540054>-250<005000510055004A0050004F>-250<06E20053>7<0046>7<005706E3>-249<004700500053>-250<004F0046>6<0058>-249<00450050>-7<00440056004E0046004F00550054000F>]TJ
-0.994 0 0 1 36 91.218 Tm [<09C9000F09CD09CA000D>-250<09CA09C809C909D0000E09C809CC000E09CA09CE001B>-335<0026004F00490042004F00440046>-7<0045>-250<0045004600550046>-7<00440055004A0050004F>-250<0042004F0045>-251<005800420053004F004A004F0048>-250<00560054004A004F0048>-250<002D00560042>-250<00440050>-7<00450046>9<000F>]TJ
-1 0 0 1 36 76.423 Tm [<09C9000F09CD09C8000F09CD000D>-250<09CA09C809C909D0000E09C809CC000E09C909C9001B>-333<002E004A004F00500053>-250<004300560048>-250<0939005900460054>-250<0009>16<00450050>-6<00440054>-250<0042004F0045>-250<00440050>-7<00450046>-250<0045004A0054004200480053>7<0046>-6<0046>-7<0045000A000F>]TJ
-1 0 0 1 36 61.629 Tm [<09C9000F09CD09C8000D>-250<09CA09C809C909D0000E09C809CB000E09CA09D0001B>-333<002A004E00510053>7<0050>7<0057>8<0046>-6<0045>-250<004A004E004200480046>-250<00490042004F0045004D004A004F0048>-250<00440050004E004E0042004F00450054000D>-250<00540042004F00450043>-10<0050>6<0059000F>]TJ
-0 g 0 G
-/F95 10.44878 Tf
-1 0 0 1 186.571 39.437 Tm [<0013>]TJ
-0 g 0 G
-ET
-
-endstream
-endobj
-14 0 obj
-<< /Type /Page /Contents 15 0 R /Resources 13 0 R /MediaBox [ 0 0 396 612 ] /CropBox[0 0 396 612]
-
-/TrimBox[0 0 396 612] /Parent 12 0 R >>
-endobj
-13 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F95 8 0 R /F99 11 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-18 0 obj
-<< /Length 8644 >>
-stream
-0 g 0 G
-0 g 0 G
-BT
-/F95 13.62884 Tf
-1 0 0 1 54 553.937 Tm [<0016000F>-333<0027>58<0022>34<00320054>]TJ
-0 g 0 G
-0 g 0 G
-/F95 11.3574 Tf
-1 0 0 1 54 535.054 Tm [<0032>29<000F>-607<00240042004F>-250<00550049004A0054>-250<00450050>-7<00440056004E0046004F0055>-250<0044004D004200540054>-250<0043>-10<0046>-250<005600540046>-7<0045>-250<004700500053>-250<0026000E0043>-10<0050>-7<0050004C00540020>]TJ
-0 g 0 G
-0 g 0 G
-1 0 0 1 54 520.259 Tm [<0022000F>]TJ
-0.997 0 0 1 71.036 520.259 Tm [<002F0050>10<000F>-333<0022004F0045000D>-251<0055004900420055>-250<004700460042005500560053>7<0046>-249<0058004A004D004D>-250<004F0046>6<0057>9<00460053>-250<0043>-10<0046>-250<0042004500450046>-7<0045000D>-250<00420054>-251<005500490046>-250<00550046>-7<00440049004F0050004D00500048005A>-250<004A0054>]TJ
-1 0 0 1 71.036 505.465 Tm [<004A004F004900460053>8<0046004F0055004D005A>-250<004A004F00440050004E005100420055004A0043004D0046>10<000F>-333<0022>-250<0058>7<00500053>8<0045>-249<00510053>7<0050>-6<004400460054005400500053>-250<004A0054>-250<005A>7<005000560053>-249<00470053004A0046004F0045000F>]TJ
-0 g 0 G
-0 g 0 G
-1 0 0 1 54 490.67 Tm [<0032>29<000F>-607<0038004900420055>-250<0049004200510051>-7<0046004F0046>-7<0045>-250<00550050>-250<093A0050004200550054>-250<0042004F0045>-250<004D004A0054005500540020>]TJ
-0 g 0 G
-0 g 0 G
-1 0 0 1 54 475.875 Tm [<0022000F>-585<003600540046>-250<005500490046>-250<004F0046>7<0058>-250<004A004E004200480046>-250<00440050004E004E0042004F00450054000D>-250<00500053>-250<00540042004F00450043>-10<0050>7<0059>-250<004E0050>-7<00450046>10<000F>]TJ
-0 g 0 G
-0 g 0 G
-1 0 0 1 54 461.081 Tm [<0032>29<000F>-607<002E005A>-250<0055004900460054004A0054>-250<004200450057004A005400500053>-250<00550050004D0045>-250<004E004606DA>]TJ
-0 g 0 G
-0 g 0 G
-1 0 0 1 54 446.286 Tm [<0022000F>]TJ
-1.02 0 0 1 71.036 446.286 Tm [<0034005500500051>-315<0053004A004800490055>-316<0055004900460053>7<0046>10<000F>-537<00350049004A0054>-315<00450050>-7<00440056004E0046004F0055>-316<0044004D004200540054>-316<004A0054>-315<0057>7<00460053>-14<005A>-316<0045004A093800460053>7<0046004F0055>-314<00470053>7<0050004E>]TJ
-1 0 0 1 71.036 431.492 Tm [<0042004F005A00550049004A004F0048>-250<005600540046>-7<0045>-250<004700500053>-250<005500490046005400460054>-250<0042004F0045>-250<00500055004900460053>-250<00420044004200450046004E004A0044>-250<005100560043004D004A004400420055004A0050004F0054000F>]TJ
-0 g 0 G
-0 g 0 G
-1 0 0 1 54 416.697 Tm [<0032>29<000F>-607<002A0047>-250<002A>-250<005600540046>-250<0035004A004C003B>-250<004700500053>-250<00270046>7<005A004F004E0042004F>-250<0045004A0042004800530042004E0054000D>-250<005500490046004F06DA>]TJ
-0 g 0 G
-0 g 0 G
-1 0 0 1 54 401.903 Tm [<0022000F>-585<00280050>-250<004200580042005A>59<000F>]TJ
-0 g 0 G
-0 g 0 G
-1 0 0 1 54 387.108 Tm [<0032>29<000F>-607<002900420054>-250<00550049004A0054>-250<00450050>-7<00440056004E0046004F0055>-250<0044004D004200540054>-250<0046>7<0057>8<00460053>-250<0043>-10<0046>-7<0046004F>-250<005600540046>-7<0045>-250<004700500053>-250<0042004F>-250<00420044005500560042004D>-250<004F0050>7<0057>8<0046004D0020>]TJ
-0 g 0 G
-0 g 0 G
-1 0 0 1 54 372.314 Tm [<0022000F>]TJ
-1.02 0 0 1 71.036 372.314 Tm [<003A>71<00460054>-291<004A004F00450046>-7<0046>-7<00450002>-466<002A004F>-291<0022>33<00560048005600540055>-290<09CA09C809C909CF>-292<005500490046>-291<004200560055004900500053>-292<005100560043004D004A005400490046>-7<0045>-291<0042>-291<00440050004E0051004D004600550046>]TJ
-0.98 0 0 1 71.036 357.519 Tm [<004F0050>7<0057>8<0046004D000D>-253<004A004F0044004D00560045004A004F0048>-253<004A00550054>-253<00440050>6<0057>8<00460053>62<000D>-253<00560054004A004F0048>-254<00550049004A0054>-253<00450050>-7<00440056004E0046004F0055>-254<0044004D004200540054000F>-339<0022004D004E005000540055>-254<0042004D004D>]TJ
-0.995 0 0 1 71.036 342.725 Tm [<00500047>-252<005500490046>-251<00540046005500560051>-252<005600540046>-8<0045>-252<00450046004700420056004D00550054000F>-337<003500490046>-252<0939004D00460054>-252<000900550046>7<005900550043004D0050>-7<0044004C>-252<0042004F0045>-251<00440050>6<0057>8<00460053>17<000A>-251<0058>8<00460053>8<0046>]TJ
-0.98 0 0 1 71.036 327.93 Tm [<005400560043004E004A005500550046>-7<0045>-252<00550050>-251<0042>-252<004E0042004B00500053>-252<0022004E00460053004A00440042004F>-252<0031>24<000F>11<0030>30<000F0025>30<000F>-251<005400460053>-15<0057004A00440046>-252<004A004F>]TJ
-/F95 11.3574 Tf
-0.98 0 0 1 293.018 327.93 Tm [<00310025002700100039>24<000E00120042001B0013001100110012>]TJ
-/F95 11.3574 Tf
-1.02 0 0 1 71.036 313.136 Tm [<004700500053004E00420055000D>-261<005500490046004F>-258<0046004D0046>-7<004400550053>7<0050004F004A00440042004D004D005A>-258<0053>7<0046>7<0057004A0046>7<0058>8<0046>-6<0045>-258<0042004F0045>-259<0042004400440046005100550046>-7<0045>]TJ
-/F99 11.3574 Tf
-1.02 0 0 1 310.307 313.136 Tm [<0050004F>-258<005500490046>-258<084A005300540055>]TJ
-1.02 0 0 1 71.036 298.341 Tm [<0042005500550046004E00510055000F>]TJ
-/F95 11.3574 Tf
-1.02 0 0 1 115.412 298.341 Tm [<0022>-313<00510053004A004F00550046>-7<0045>-313<004400500051>6<005A>-313<005800420054>-313<004A004F>-313<005500490046>-314<00420056005500490050005306DF0054>-313<00490042004F00450054>-313<0058004A00550049004A004F>-314<0042>]TJ
-1 0 0 1 70.616 283.547 Tm [<0058>8<0046>-7<0046004C000F>-333<002B005600540055>-250<004D004A004C0046>-250<0055004900420055000F>-333<0035>62<0050>-6<0050004C>-250<004E0050004F005500490054>-250<00550050>-250<00580053004A00550046>9<000D>-249<00500047>-250<004400500056005300540046>9<000F>]TJ
-1 0 0 1 88.072 268.752 Tm [<00360051>-7<0045004200550046001B>-333<00340046>6<0057>8<004600530042004D>-249<00500055004900460053>-250<0042005600550049005000530054>-250<0053>7<00460051>-6<005000530055>-250<0054005600440044004600540054000F>]TJ
-0 g 0 G
-0 g 0 G
-1 0 0 1 54 253.958 Tm [<0032>29<000F>]TJ
-1.009 0 0 1 71.036 253.958 Tm [<003800490046004F>-247<002A>-247<0058>7<0050004C0046>-247<00560051>-247<00550049004A0054>-247<004E00500053004F004A004F0048000D>-248<004E005A>-247<0049004600420045>-248<00470046004D0055>-247<004D004A004C0046>-248<0042>-247<00550050>-7<00450045004D00460053>-247<004900420045>]TJ
-1.011 0 0 1 71.036 239.163 Tm [<0043>-10<0046>-7<0046004F>-247<0051>-7<00500056004F0045004A004F0048>-247<004A0055>-247<004A004F>-247<0042>-247<00540042004F00450043>-10<0050>6<0059000F>-329<002A>-247<0053>7<0050004D004D0046>-6<0045>-247<0050>6<0057>8<00460053>-246<0042004F0045>-247<004D0050>-7<0050004C0046>-7<0045>-247<00420055>-248<005500490046>]TJ
-0.98 0 0 1 71.036 224.369 Tm [<004E00560048>-234<0054004900500055>-234<0050004F>-235<005500490046>-234<00580042004D004D000F>-333<002A0055>-235<005800420054>-234<0042>-235<0058>8<0050004E0042004F>-234<004A004F>-234<004900460053>-234<0047005000530055004A00460054>-235<0058004A00550049>-234<0042>-235<0045005300560048>]TJ
-1.02 0 0 1 71.036 209.574 Tm [<004900420043004A0055>-264<0055004900420055>-265<005800420054>-265<004300420045000D>-269<0042004F0045>-265<0042004F>-264<004200550055004A0055005600450046>-265<0055004900420055>-265<005800420054>-264<0046>6<0057>8<0046004F>-264<0058>7<0050005300540046>10<000F>-384<003400490046>]TJ
-0.98 0 0 1 71.036 194.779 Tm [<004900420045>-231<00540046>-7<0046004F>-231<0043>-10<00460055005500460053>-232<00450042005A0054000D>-235<004D004A004C0046>-232<005500490046>-231<0055004A004E0046>-231<002A>-231<00550050>-7<0050004C>-231<004900460053>-231<00550050>-231<005500490046>-231<0046004A0048004900550049>-232<00480053004200450046>]TJ
-1.017 0 0 1 71.036 179.985 Tm [<00540050>-7<0044004C>-246<004900500051>9<000F>-329<003500490046004F>-246<002A>-247<004800500055>-247<00560051>10<000D>-246<00580042005400490046>-7<0045000D>-247<0042004F0045>-246<004500530042004800480046>-7<0045>-247<004E005A>-247<004D0050004F0046004D005A>-246<0043005600550055>]TJ
-0.98 0 0 1 71.036 165.19 Tm [<00450050>7<0058004F>-240<00550050>-241<005500490046>-241<0050004F0046000E004E0042004F>-242<0045004600550046>-7<00440055004A0057>8<0046>-241<004200480046004F0044005A>-241<0055004900420055>-241<002A>-241<004B0050004C004A004F0048004D005A>-241<00440042004D004D0046>-7<0045>-241<004E005A>]TJ
-1 0 0 1 71.036 150.396 Tm [<004E00460042004F0054>-250<00500047>-250<004D004A0057004A004F0048000F>-333<003A>70<00500056>-249<004C004F0050>6<0058>-249<0058004900420055>-250<002A>-250<004E00460042004F0020>]TJ
-0 g 0 G
-0 g 0 G
-1 0 0 1 54 135.601 Tm [<0022000F>-585<003A>71<004600420049000F>-333<00340055004A0044004C>-250<0058004A00550049>-250<004E0046>9<000D>-249<004C004A0045000F>-333<00350049004A0054>-250<00450050>-7<00440056004E0046004F0055>-250<0044004D004200540054>-250<004A0054>-250<004700500053>-250<005A>7<00500056000F>]TJ
-0 g 0 G
-/F95 10.44878 Tf
-1 0 0 1 204.571 39.437 Tm [<0014>]TJ
-0 g 0 G
-ET
-
-endstream
-endobj
-17 0 obj
-<< /Type /Page /Contents 18 0 R /Resources 16 0 R /MediaBox [ 0 0 396 612 ] /CropBox[0 0 396 612]
-
-/TrimBox[0 0 396 612] /Parent 12 0 R >>
-endobj
-16 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F95 8 0 R /F99 11 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-21 0 obj
-<< /Length 32 >>
-stream
-0 g 0 G
-0 g 0 G
-0 g 0 G
-0 g 0 G
-
-endstream
-endobj
-20 0 obj
-<< /Type /Page /Contents 21 0 R /Resources 19 0 R /MediaBox [ 0 0 396 612 ] /CropBox[0 0 396 612]
-
-/TrimBox[0 0 396 612] /Parent 12 0 R >>
-endobj
-19 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ProcSet [ /PDF ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F95 8 0 R /F97 9 0 R /F98 10 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
1 0 obj
<<>>
@@ -325,35 +133,34 @@ endobj
3 0 obj
<< /pgfprgb [/Pattern /DeviceRGB] >>
endobj
-22 0 obj
-[ 13 [ 219 ] 15 [ 219 ] 66 [ 486 ] 68 [ 389 489 401 314 ] 73 [ 519 ] 77 [ 266 783 518 447 489 ] 83 [ 357 353 307 ] 87 [ 472 ] 89 [ 475 ] 2122 [ 564 ] ]
+12 0 obj
+[ 70 [ 401 ] 77 [ 266 ] 79 [ 518 447 ] 85 [ 307 ] 87 [ 472 ] ]
endobj
-24 0 obj
-<< /Length 266 >>
+14 0 obj
+<< /Length 11 >>
stream
-
+
endstream
endobj
-25 0 obj
-<< /Subtype /CIDFontType0C /Length 3317 >>
+15 0 obj
+<< /Subtype /CIDFontType0C /Length 1211 >>
stream
-
-= =N‹½ø콋½ø$½‹øˆùPüˆÛý÷>÷“÷>û“üø¿÷>û“û>û“÷z÷“÷>÷“ü’û\÷Àû>÷“÷èûêû÷w÷»ɸsšž†›‡š‡yoX\Vˆ‚Žƒ“…÷ §å¿³t£lmnxlûê€õÊ÷
-Óyåûû;<û1û Þ“å²÷&õ©›{oš—rŽfmc…5fS`ocyen`±ôCû}ÿ
+
+Óyåûû;<û1û Þ“å²÷&õ©›{oš—rŽfmc…5fS`ocyen`±ôû’Çdvø$²ñÚp÷NøAVˆxŠ„ƒ‰ƒŠˆˆ‰‰Ž‹ŽÑNû¤„k„lxgª¸Í´É­°˜ˆ„‘W]y{ˆ—”ŽŸ“­Æ÷›í—”¥€“(•¸ž”¨—œƒ•kg^f2”vøÝ‹wÝøI)íCÓ°÷Å×i÷}è}°fjQPVhГ„–Š¦§¢ ž•z_“µûˆ_“•w™–˜› žª­±»š ¨ ©¹È§Íš®—¯¯§~ždnz~s…Ž‡¤št‘v{_f=eX°~zg\}€
× øÅ
endstream
endobj
-23 0 obj
-<< /Type /FontDescriptor /FontName /LMQEIT+LibertinusSerif-Italic /Flags 4 /FontBBox [ -1325 -312 1389 928 ] /Ascent 894 /CapHeight 647 /Descent -246 /ItalicAngle -12 /StemV 73 /XHeight 429 /FontFile3 25 0 R /CIDSet 24 0 R >>
+13 0 obj
+<< /Type /FontDescriptor /FontName /MYLNXL+LibertinusSerif-Italic /Flags 4 /FontBBox [ -1325 -312 1389 928 ] /Ascent 894 /CapHeight 647 /Descent -246 /ItalicAngle -12 /StemV 73 /XHeight 429 /FontFile3 15 0 R /CIDSet 14 0 R >>
endobj
-26 0 obj
-<< /Length 974 >>
+16 0 obj
+<< /Length 787 >>
stream
%!PS-Adobe-3.0 Resource-CMap
%%DocumentNeededResources: ProcSet (CIDInit)
%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-LMQEIT-LibertinusSerif-Italic-0)
-%%Title: (TeX-LMQEIT-LibertinusSerif-Italic-0 TeX LMQEIT-LibertinusSerif-Italic 0)
+%%BeginResource: CMap (TeX-MYLNXL-LibertinusSerif-Italic-0)
+%%Title: (TeX-MYLNXL-LibertinusSerif-Italic-0 TeX MYLNXL-LibertinusSerif-Italic 0)
%%Version: 1.000
%%EndComments
/CIDInit /ProcSet findresource begin
@@ -361,36 +168,23 @@ stream
begincmap
/CIDSystemInfo
<< /Registry (TeX)
-/Ordering (LMQEIT-LibertinusSerif-Italic)
+/Ordering (MYLNXL-LibertinusSerif-Italic)
/Supplement 0
>> def
-/CMapName /TeX-Identity-LMQEIT-LibertinusSerif-Italic def
+/CMapName /TeX-Identity-MYLNXL-LibertinusSerif-Italic def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
0 beginbfrange
endbfrange
-19 beginbfchar
-<000D> <002C>
-<000F> <002E>
-<0042> <0061>
-<0044> <0063>
-<0045> <0064>
+6 beginbfchar
<0046> <0065>
-<0047> <0066>
-<0049> <0068>
<004D> <006C>
-<004E> <006D>
<004F> <006E>
<0050> <006F>
-<0051> <0070>
-<0053> <0072>
-<0054> <0073>
<0055> <0074>
<0057> <0076>
-<0059> <0078>
-<084A> <00660069>
endbfchar
endcmap
CMapName currentdict /CMap defineresource pop
@@ -401,43 +195,44 @@ end
endstream
endobj
-11 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /LMQEIT+LibertinusSerif-Italic /DescendantFonts [ 27 0 R ] /ToUnicode 26 0 R >>
+10 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /MYLNXL+LibertinusSerif-Italic /DescendantFonts [ 17 0 R ] /ToUnicode 16 0 R >>
endobj
-27 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /LMQEIT+LibertinusSerif-Italic /FontDescriptor 23 0 R /W 22 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+17 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /MYLNXL+LibertinusSerif-Italic /FontDescriptor 13 0 R /W 12 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-28 0 obj
-[ 27 [ 256 ] 32 [ 430 ] 37 [ 734 ] 56 [ 1028 ] 66 [ 506 ] 68 [ 456 561 489 ] 73 [ 619 322 ] 78 [ 905 616 551 581 ] 83 [ 428 427 358 598 ] ]
+18 0 obj
+[ 27 [ 256 ] 32 [ 430 ] 37 [ 734 ] 47 [ 740 ] 56 [ 1028 ] 66 [ 506 ] 68 [ 456 561 489 ] 73 [ 619 322 ] 78 [ 905 616 551 581 ] 83 [ 428 427 358 598 ] 88 [ 777 ] ]
endobj
-30 0 obj
-<< /Length 11 >>
+20 0 obj
+<< /Length 12 >>
stream
-
+
endstream
endobj
-31 0 obj
-<< /Subtype /CIDFontType0C /Length 3010 >>
+21 0 obj
+<< /Subtype /CIDFontType0C /Length 3373 >>
stream
-
-„3ÈÅ<çZUõFêlñ ‚
-#V‹½ø콋½ø$½‹øˆùPüˆÛý÷>÷“÷>û“üø¿÷>û“û>û“÷z÷“÷>÷“ü’û\÷Àû>÷“÷èû½ƒ÷÷3÷Ç÷&ÇÇe«m³³­«±²k©ccikd÷¾e«m³³­«±²k©ccikdû÷ø¯¥÷|÷& ÌÈ÷ä÷øΧ®£·Ã£WQYwfhlÌDJ‹Rb|u‘¥¨”¤˜Ó®¦§Ÿ½°Ê¹ÕçDÈûàN]}rmioxthe¬w£©¢›¤䦂‘ Ð…ü”e«m³³­«±²k©ccikd÷I‰µøȵ÷÷ ÷­÷+÷M³Ý‰³ãî¡ÉÒ»µ¬Þñ÷Mû ÷,ûŠVaŠccû‹…‹u•…ˆ§‡8ü%8o‡Tˆ…‹u•…‹÷³Ð÷ ø.Â¥Ÿ¯÷Y¡û=û+ûJûM?Eq—Îøo”vùw¢­‘úû9÷9ÐøÓøùx‡o‹~û#ü'„q«°û÷ù¬¯»Ž‘‘‹¡…‘fŠ'ŠdbSŒf $……‹u‘…²‡¯„š`÷Pü¸v’š‰–•› “÷*ø#÷-ü#x’–‡š˜™’÷Pø”¨ Æ³§·Ž‘‘‹¡…‘jŠiŠhb\Œf $……‹u‘…Ä‚žvfûûäg|µ\ÇOÑ÷êµ·÷ %÷÷
+
+„5äyËví˜ ¦÷›  ¢
+3
+Ô †V‹½ø콋½ø$½‹øˆùPüˆÛý÷>÷“÷>û“üø¿÷>û“û>û“÷z÷“÷>÷“ü’û\÷Àû>÷“÷èû½ƒ÷÷3÷Ç÷&ÇÇe«m³³­«±²k©ccikd÷¾e«m³³­«±²k©ccikdû÷ø¯¥÷|÷& ÌÈ÷ä÷øΧ®£·Ã£WQYwfhlÌDJ‹Rb|u‘¥¨”¤˜Ó®¦§Ÿ½°Ê¹ÕçDÈûàN]}rmioxthe¬w£©¢›¤䦂‘ Ð…ü”e«m³³­«±²k©ccikd÷I‰µøȵ÷÷ ÷­÷+÷M³Ý‰³ãî¡ÉÒ»µ¬Þñ÷Mû ÷,ûŠVaŠccû‹…‹u•…ˆ§‡8ü%8o‡Tˆ…‹u•…‹÷³Ð÷ ø.Â¥Ÿ¯÷Y¡û=û+ûJûM?Eq—Î÷O”vªv¢vøù­÷½ø3½œù <‹†Òªø.äœÑ’‘‘‹¡…‘ZŠzŠa^vŒY $……‹u‘…Ñ„œˆ0û­r~}œû÷Ì2ôû7……‹u‘…¶ˆ©i‘qü5\2z†E„……‹u‘…¼ŒžŒ··Š½ $‘‘‹¡…‘E’zŽæ÷½••‘“„~–œ÷ãü"ŸrŸx‹®•Ž”øo”vùw¢­‘úû9÷9ÐøÓøùx‡o‹~û#ü'„q«°û÷ù¬¯»Ž‘‘‹¡…‘fŠ'ŠdbSŒf $……‹u‘…²‡¯„š`÷Pü¸v’š‰–•› “÷*ø#÷-ü#x’–‡š˜™’÷Pø”¨ Æ³§·Ž‘‘‹¡…‘jŠiŠhb\Œf $……‹u‘…Ä‚žvfûûäg|µ\ÇOÑ÷êµ·÷ %÷÷
÷´÷»¼b’¦y·² ®°l‰—‡““~‡xu…¼÷$÷$2¨9BûaIo—u²¯¥¡£Š‘Š‘‰•‰••–Œ“—¬µ®yûHv´"jAn<F±gâ¨Å«¥¬Œ÷>ûwrr{y`|¨ª°ŽªÒ¢*Ó÷èµ°÷ø:â—‰ž€fcixn@PÁ÷ ÷¤ÂÀ°šdkŽpŽ¦w««¢¤ª¸UÆûû
-#,û(J¢R²ff²¹|ÒÇ屓Í÷îµ€w÷¤˜‹w°÷ ÷B÷Î÷÷»sz‹Œ“†™°•Ç™Ð”‘‰Ÿ‰‘U€›ÄøV¶ÌŽ°‹”„‚f;€DˆˆŒ~‚ʆŠFûΑxsnûûûûP F¼eo¯¤}æշ™ ‘ºzvVuYdÃ÷ À‘¹žª¦œ¦›©¥¤ˆj£ûŠƒ‹‚ŒƒKá÷3³÷µ°÷û÷ ÷÷ìøC÷abU€eô=[¸í’Œ÷„£œ™àjèû'ì"û .û-Q N¶di±¼{ÒÐϮԽ˜†û’÷&Œ®±™Ÿ£›¦•–¦°q;…‹~‰‰ÍžvøÕ÷…˜‹wï÷÷<÷Üø¤÷÷0÷\½5fDfhR÷gìÌŽ°‹”„‚f;€DˆˆŒ€‚ʆŠFüJ8{‚Nˆ……‹u‘…µŒ¸ŒÂ»ªŠ¶ $‘‘‹¡…‘aŽ|”Þ÷a¥µ¬—³®yRû;7{‚bˆ……‹u‘…µŒ«Œ»Â·Š¶ $‘‘‹¡…‘ÜNŽ{”ßû{žvøRwõ÷ñ÷÷|÷÷[½Ã‹–‚‘}o€:ƒF‚‰…w…†•ƒRûT8€‰N†……‹u‘…µŒµŒÀÀ´Š¶ $‘‘‹¡…‘N€ŽÞûønj£j³¸¥¯¥©t¯a\tkm÷ôžvøÕzœí÷÷5÷÷5÷Ü÷x÷÷[‹£²®•œ³©yRû;7{‚bˆ……‹u‘…µŒ«Œ»»ªŠ¶ $‘‘‹¡…‘cŽz”ß÷0¤ŠŸˆ•ž±¶—›³§yRû;7{‚bˆ……‹u‘…µŒ«Œ»Â·Š¶ $‘‘‹¡…‘NŽ{”ß÷0÷c½5f7ckQ¶|c¨PgCekR¼ˆ©ˆ¢‹Ü—Šƒ}fO}F‚‰…w…†•ƒRûO8€‰N†……‹u‘…µŒµŒÀ¹§Š¶ $‘‘‹¡…‘aŽÞÊžvøÕí÷÷<÷÷x÷÷]¦³³Ÿ³©yRû;7{‚bˆ……‹u‘…µŒ«Œ»Â·Š¶ $‘‘‹¡…‘NŽ{”ß÷0÷\½5cD_eTˆ®‡©‹—Šƒ}fO}F‚‰…w…†•ƒRûO8€‰N†……‹u‘…µŒµŒÀ¹§Š¶ $‘‘‹¡…‘aŽÞ‰µøµ°÷ ÷Y÷ °÷cûó5÷ÒÆŸ°´¾¸œÏÃ÷2ìû)8Mn^de_zOP÷s÷WϹ:ûû \kg9k÷Õç›ÜΧûiv÷tµ÷íÎê÷÷F÷ ê÷Éü78€‰N†……‹u‘…µŒµŒÀÀ´Š¶ $‘‘‹¡…‘N€ŽÞ÷ €¡ …£÷,îï÷'ÃvÉd²®hYšWnUhkh…‰§ˆ¡‹—Šƒ}fO}F‚‰…w…†•ƒR÷ûˆ÷”‘‹‘¥¨°˜¢´»Yû 7m-4€r‘¦rûžv÷Ò÷í÷÷x÷ ¯–š˜š•“”’š”–‚“ƒ’œƒ¢¨§©µ¥m©ghemI]‡‰©†¼‹”Šƒ“}\V}I„‰…x…†•‚RûO8€‰N†……‹u‘…µŒµŒÀÀ´Š¶ $‘‘‹¡…‘N€ŽÞû²ø µÊ÷à÷»÷&Z\“e…žË{ÃØëµâ­ƒ¦t¤o«a¤]Ÿcœ}«¨¢žž¨®­kN¤ˆ–Œ•’¯‡±‚«™kr•TVYwkktt€opm—sžvªiÂh©}³y–gskkzp^[¹Ôv{ŽƒŠ{‡ûWÑ÷ؽ÷'”ã÷û÷û÷ðÊøF}|‡€~n†ŒŠÌ‰&ŠûYh”i yx¢¯‚£Âȧ§Ÿ—…‘•~r‡xuuœ½½Šöïð•™”ªˆ†äû Œ­ÎŽ¹‹‘ˆŽ†è„f€„{z„n…„‚„‚‡p;¸Õøwä÷÷5÷ø’÷÷Aߣœ‡–…‘yŠwŠxoJŒd $……‹u‘…¾†›„7ûM‹Œrbj‰ycmÑ÷;ߣœ‡–…‘yŠvŠyXeŒ` $……‹u‘…¹‰ 7û0!µUá¯Ô¨«Årx‹Œ“†™°•Ç™Ð”‘‰Ÿ‰‘U€›Ä
+#,û(J¢R²ff²¹|ÒÇ屓Í÷îµ€w÷¤˜‹w°÷ ÷B÷Î÷÷»sz‹Œ“†™°•Ç™Ð”‘‰Ÿ‰‘U€›ÄøV¶ÌŽ°‹”„‚f;€DˆˆŒ~‚ʆŠFûΑxsnûûûûP F¼eo¯¤}æշ™ ‘ºzvVuYdÃ÷ À‘¹žª¦œ¦›©¥¤ˆj£ûŠƒ‹‚ŒƒKá÷3³÷µ°÷û÷ ÷÷ìøC÷abU€eô=[¸í’Œ÷„£œ™àjèû'ì"û .û-Q N¶di±¼{ÒÐϮԽ˜†û’÷&Œ®±™Ÿ£›¦•–¦°q;…‹~‰‰ÍžvøÕ÷…˜‹wï÷÷<÷Üø¤÷÷0÷\½5fDfhR÷gìÌŽ°‹”„‚f;€DˆˆŒ€‚ʆŠFüJ8{‚Nˆ……‹u‘…µŒ¸ŒÂ»ªŠ¶ $‘‘‹¡…‘aŽ|”Þ÷a¥µ¬—³®yRû;7{‚bˆ……‹u‘…µŒ«Œ»Â·Š¶ $‘‘‹¡…‘ÜNŽ{”ßû{žvøRwõ÷ñ÷÷|÷÷[½Ã‹–‚‘}o€:ƒF‚‰…w…†•ƒRûT8€‰N†……‹u‘…µŒµŒÀÀ´Š¶ $‘‘‹¡…‘N€ŽÞûønj£j³¸¥¯¥©t¯a\tkm÷ôžvøÕzœí÷÷5÷÷5÷Ü÷x÷÷[‹£²®•œ³©yRû;7{‚bˆ……‹u‘…µŒ«Œ»»ªŠ¶ $‘‘‹¡…‘cŽz”ß÷0¤ŠŸˆ•ž±¶—›³§yRû;7{‚bˆ……‹u‘…µŒ«Œ»Â·Š¶ $‘‘‹¡…‘NŽ{”ß÷0÷c½5f7ckQ¶|c¨PgCekR¼ˆ©ˆ¢‹Ü—Šƒ}fO}F‚‰…w…†•ƒRûO8€‰N†……‹u‘…µŒµŒÀ¹§Š¶ $‘‘‹¡…‘aŽÞÊžvøÕí÷÷<÷÷x÷÷]¦³³Ÿ³©yRû;7{‚bˆ……‹u‘…µŒ«Œ»Â·Š¶ $‘‘‹¡…‘NŽ{”ß÷0÷\½5cD_eTˆ®‡©‹—Šƒ}fO}F‚‰…w…†•ƒRûO8€‰N†……‹u‘…µŒµŒÀ¹§Š¶ $‘‘‹¡…‘aŽÞ‰µøµ°÷ ÷Y÷ °÷cûó5÷ÒÆŸ°´¾¸œÏÃ÷2ìû)8Mn^de_zOP÷s÷WϹ:ûû \kg9k÷Õç›ÜΧûiv÷tµ÷íÎê÷÷F÷ ê÷Éü78€‰N†……‹u‘…µŒµŒÀÀ´Š¶ $‘‘‹¡…‘N€ŽÞ÷ €¡ …£÷,îï÷'ÃvÉd²®hYšWnUhkh…‰§ˆ¡‹—Šƒ}fO}F‚‰…w…†•ƒR÷ûˆ÷”‘‹‘¥¨°˜¢´»Yû 7m-4€r‘¦rûžv÷Ò÷í÷÷x÷ ¯–š˜š•“”’š”–‚“ƒ’œƒ¢¨§©µ¥m©ghemI]‡‰©†¼‹”Šƒ“}\V}I„‰…x…†•‚RûO8€‰N†……‹u‘…µŒµŒÀÀ´Š¶ $‘‘‹¡…‘N€ŽÞû²ø µÊ÷à÷»÷&Z\“e…žË{ÃØëµâ­ƒ¦t¤o«a¤]Ÿcœ}«¨¢žž¨®­kN¤ˆ–Œ•’¯‡±‚«™kr•TVYwkktt€opm—sžvªiÂh©}³y–gskkzp^[¹Ôv{ŽƒŠ{‡ûWÑ÷ؽ÷'”ã÷û÷û÷ðÊøF}|‡€~n†ŒŠÌ‰&ŠûYh”i yx¢¯‚£Âȧ§Ÿ—…‘•~r‡xuuœ½½Šöïð•™”ªˆ†äû Œ­ÎŽ¹‹‘ˆŽ†è„f€„{z„n…„‚„‚‡p;¸Õøwä÷÷5÷ø’÷÷Aߣœ‡–…‘yŠwŠxoJŒd $……‹u‘…¾†›„7ûM‹Œrbj‰ycmÑ÷;ߣœ‡–…‘yŠvŠyXeŒ` $……‹u‘…¹‰ 7û0!µUá¯Ô¨«Årx‹Œ“†™°•Ç™Ð”‘‰Ÿ‰‘U€›Ä÷t”vø2­•÷fø.÷øv÷ßx»·‹yŠx‹x,ûœˆ„‡‰‡•R÷>ŠŽŠŠŽ}µ…›Æ‘‘‹¡…‘fŠ`ŠXhXŒf $……‹u‘…Å„ŽxžX÷ûÐx’˜‰˜•ž “é÷‹ëûy’žˆ˜•œŽŸ“÷÷Åœ¶œ±Ã‘‘‹¡…‘uŠyŠqf`Œf $……‹u‘…Á‡qxZQû2‡…Œ‡•
÷ ÷• ø½
endstream
endobj
-29 0 obj
-<< /Type /FontDescriptor /FontName /VDIGQQ+LibertinusSerif-Bold /Flags 4 /FontBBox [ -1625 -328 1562 1014 ] /Ascent 894 /CapHeight 647 /Descent -246 /ItalicAngle 0 /StemV 81 /XHeight 433 /FontFile3 31 0 R /CIDSet 30 0 R >>
+19 0 obj
+<< /Type /FontDescriptor /FontName /TBQIGK+LibertinusSerif-Bold /Flags 4 /FontBBox [ -1625 -328 1562 1014 ] /Ascent 894 /CapHeight 647 /Descent -246 /ItalicAngle 0 /StemV 81 /XHeight 433 /FontFile3 21 0 R /CIDSet 20 0 R >>
endobj
-32 0 obj
-<< /Length 946 >>
+22 0 obj
+<< /Length 974 >>
stream
%!PS-Adobe-3.0 Resource-CMap
%%DocumentNeededResources: ProcSet (CIDInit)
%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-VDIGQQ-LibertinusSerif-Bold-0)
-%%Title: (TeX-VDIGQQ-LibertinusSerif-Bold-0 TeX VDIGQQ-LibertinusSerif-Bold 0)
+%%BeginResource: CMap (TeX-TBQIGK-LibertinusSerif-Bold-0)
+%%Title: (TeX-TBQIGK-LibertinusSerif-Bold-0 TeX TBQIGK-LibertinusSerif-Bold 0)
%%Version: 1.000
%%EndComments
/CIDInit /ProcSet findresource begin
@@ -445,20 +240,21 @@ stream
begincmap
/CIDSystemInfo
<< /Registry (TeX)
-/Ordering (VDIGQQ-LibertinusSerif-Bold)
+/Ordering (TBQIGK-LibertinusSerif-Bold)
/Supplement 0
>> def
-/CMapName /TeX-Identity-VDIGQQ-LibertinusSerif-Bold def
+/CMapName /TeX-Identity-TBQIGK-LibertinusSerif-Bold def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
0 beginbfrange
endbfrange
-18 beginbfchar
+20 beginbfchar
<001B> <003A>
<0020> <003F>
<0025> <0044>
+<002F> <004E>
<0038> <0057>
<0042> <0061>
<0044> <0063>
@@ -474,69 +270,7 @@ endbfrange
<0054> <0073>
<0055> <0074>
<0056> <0075>
-endbfchar
-endcmap
-CMapName currentdict /CMap defineresource pop
-end
-end
-%%EndResource
-%%EOF
-
-endstream
-endobj
-10 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /VDIGQQ+LibertinusSerif-Bold /DescendantFonts [ 33 0 R ] /ToUnicode 32 0 R >>
-endobj
-33 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /VDIGQQ+LibertinusSerif-Bold /FontDescriptor 29 0 R /W 28 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
-endobj
-34 0 obj
-[ 374 [ 2000 ] ]
-endobj
-36 0 obj
-<< /Length 47 >>
-stream
-
-endstream
-endobj
-37 0 obj
-<< /Subtype /CIDFontType0C /Length 472 >>
-stream
-
-¯ Ú Ú’
-endstream
-endobj
-35 0 obj
-<< /Type /FontDescriptor /FontName /ETXLAD+NovelDeco /Flags 4 /FontBBox [ -392 -234 1985 838 ] /Ascent 894 /CapHeight 537 /Descent -246 /ItalicAngle 0 /StemV 61 /XHeight 429 /FontFile3 37 0 R /CIDSet 36 0 R >>
-endobj
-38 0 obj
-<< /Length 652 >>
-stream
-%!PS-Adobe-3.0 Resource-CMap
-%%DocumentNeededResources: ProcSet (CIDInit)
-%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-ETXLAD-NovelDeco-0)
-%%Title: (TeX-ETXLAD-NovelDeco-0 TeX ETXLAD-NovelDeco 0)
-%%Version: 1.000
-%%EndComments
-/CIDInit /ProcSet findresource begin
-12 dict begin
-begincmap
-/CIDSystemInfo
-<< /Registry (TeX)
-/Ordering (ETXLAD-NovelDeco)
-/Supplement 0
->> def
-/CMapName /TeX-Identity-ETXLAD-NovelDeco def
-/CMapType 2 def
-1 begincodespacerange
-<0000> <FFFF>
-endcodespacerange
-0 beginbfrange
-endbfrange
-1 beginbfchar
-<0176> <254C>
+<0058> <0077>
endbfchar
endcmap
CMapName currentdict /CMap defineresource pop
@@ -548,54 +282,48 @@ end
endstream
endobj
9 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /ETXLAD+NovelDeco /DescendantFonts [ 39 0 R ] /ToUnicode 38 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TBQIGK+LibertinusSerif-Bold /DescendantFonts [ 23 0 R ] /ToUnicode 22 0 R >>
endobj
-39 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /ETXLAD+NovelDeco /FontDescriptor 35 0 R /W 34 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+23 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TBQIGK+LibertinusSerif-Bold /FontDescriptor 19 0 R /W 18 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-40 0 obj
-[ 2 [ 288 ] 9 [ 298 298 ] 13 [ 220 338 220 323 465 465 465 465 465 465 ] 27 [ 236 ] 32 [ 435 ] 34 [ 695 588 646 701 557 485 685 730 297 322 ] 45 [ 528 839 699 702 541 702 587 485 597 661 652 951 660 575 604 ] 66 [ 457 493 428 506 447 310 500 538 271 272 512 264 790 542 504 519 503 372 390 316 531 497 747 490 515 424 ] 1754 [ 742 ] 1759 [ 268 ] 1762 [ 375 375 ] 2360 [ 582 560 540 ] 2504 [ 465 465 465 465 465 465 465 465 465 465 ] ]
+24 0 obj
+[ 9 [ 298 298 ] 13 [ 220 338 220 323 ] 34 [ 695 588 646 701 557 ] 41 [ 730 297 322 ] 45 [ 528 839 699 702 ] 51 [ 587 ] 53 [ 597 661 652 ] 57 [ 660 ] 66 [ 457 493 428 506 447 310 500 538 271 ] 76 [ 512 264 790 542 504 519 503 372 390 316 531 497 747 490 515 ] 2361 [ 560 ] 2504 [ 465 465 465 465 465 ] 2510 [ 465 ] 2512 [ 465 ] ]
endobj
-42 0 obj
+26 0 obj
<< /Length 315 >>
stream
- gþ¿÷ÿð?ÿÿð
+
endstream
endobj
-43 0 obj
-<< /Subtype /CIDFontType0C /Length 12156 >>
+27 0 obj
+<< /Subtype /CIDFontType0C /Length 8395 >>
stream
-
-
-T
-µ # ò œ õ },ß[ðw÷äõ°Eà‚ÎŽö}xFÇK0Š‘W¦f ¦ ; ¯![!Ý"ª#©$W$â% %@%¬&' 'Ï( (ã)>)¨*(*¨+!+ƒ+ß,q,ÒU‹½ø龋½ø$½‹øˆùNüˆÛý÷>÷’÷>û’üø½÷>û’û>û’÷z÷’÷>÷’üû\÷¿û>÷‘÷èûžõøÆwæõ÷$ù&snxUE™h”3“=‘1v…ŒŽ„••Ž”–Œ™‹Ç˜÷
+
+
+4 E à ‚ Î Ž ö}xFǬ Ó"âˆ"·+×Y&%Ó•Ø3ÿ‘U‹½ø龋½ø$½‹øˆùNüˆÛý÷>÷’÷>û’üø½÷>û’û>û’÷z÷’÷>÷’üû\÷¿û>÷‘÷èû”û`ú#·Þ·÷^û{÷dûH•“’Ž“j±û ÷÷›÷›÷
÷«¯ˆ•„’€Œû %.û;ûNû”ùGw÷?Þ÷’÷¸‡÷{ûd÷H‰ƒ„ˆƒ¬e÷ ûû›û›û
-ûkgŽ’„–Š÷ ñè÷;÷Nûâû÷x÷²óêluvol¥ˆž‰œ…tvg]W~„’„Ç–Å»ÑÇq²cûl÷sdz÷–÷£÷s˜™§—•‡•ûo~ty‘‚”ûâõÄõĶn£s¨¨££¨¨s£nnssnû{ùwš÷ª÷¹ùbûýU´2®øº®²â÷eâ÷xØ÷ Ù÷îsà_Å®qa©U(-û
-ûZ ¬'ÂTo§­}²øÝœ›…€—ªq¦?û/ˆL}X9uZ‚y.÷?â÷ŠÈ¹¸2‰¬øÕw÷gØ÷´÷÷ïnjȘ‰‹‡TiVr3b€”…ž¹¡‘žœŽsiûÚ8p†Eˆ……‹v‘…¼Œ¯ŒÁ»£Š½ $‘‘‹ …‘EŽzÞ2‹Ìø’®¿ÞAÖ@â÷BãÌÈøhvžy œ©¡“‰‘‰’Ô‰’…”“¤¥¯Ô¯¾r+KtWPOABä)'{[P‹¾«÷C«¹‰‹˜À•ÖŒ©…~‰DzzrgûF»ÐÏðìĶ·×÷
-è¤ÅÏ€”†“–÷®œ•¨Ž‘‘‹£…‘sŠrŠcj\Œ_ $……‹s‘…‡¦‡cû-kiH…Uû27÷=÷÷C÷÷ ÷÷%´85¥–Š––‰µ†³{Ó•Of®û÷Džv÷×µ÷°wõà÷êàøþ÷ø%ޜю‘‘‹ …‘bŠXŠef[Œ_ $……‹v‘…шœ†8û4ûê÷4ޜю‘‘‹ …‘eŠbŠXYbŒe $……‹v‘…шœ†8ü%8z†Eˆ……‹v‘…·Œ»Œ±¯¼Š· $‘‘‹ …‘EŽzÞ÷[÷êû[8z†Eˆ……‹v‘…¸Œ»Œ°°»Š· $‘‘‹ …‘EŽzÞû•žvùwõà÷S÷ø%ޜю‘‘‹ …‘_Š\ŠdjZŒ\ $……‹v‘…шœ†8ü%8z†Eˆ……‹v‘…¸Œ¼Œ¯¯»Š¸ $‘‘‹ …‘EŽzÞû|û@¸ùy¬÷!à÷vøŸޜǎ‘‘‹ …‘eŠ`ŠdgVŒY $……‹v‘…Ûˆœ†8üNûHWojx}—š„—…‚˜r}mvugÀy¡¸ª“®´·°Å¿÷#q‹²øôwõà÷)÷i¦ç‰‹•½•Ì‘¿€‰CwfP!Ldyž¾ø2ޜю‘‘‹ …‘^Š\Šeg\Œ] $……‹v‘…шœ†8ü%8z†Eˆ……‹v‘…Œ²ÄŒ­÷±–v¨vø¢÷û÷‹w›÷
-Œ°ø÷1Mù+÷:‡ŠJˆ……‹v‘…°Œ³Œ©©¹Š¬ $‘‘‹ …‘GŽˆ…Þmø9‡Á™Ï‘‘‹ …‘û‰ûhü‡ˆ‡‰‰ˆ“ˆKûaøû%……‹v‘…Ї‘‰„@Mcü0…OrR†……‹v‘…©Œ«Œ££³Š© $‘‘‹ …‘I†ªÃ£±ø%÷cü›„Ž‘ƒ‘‘’“U÷uø¥÷%–v¨vøü¬ñ¼ø)¼xøÀø”ûÛx‹€„‡|°nûëøGû……‹v‘…¶ˆ©h‘qü52z…E„……‹v‘…¶Œ¸Œ£¢¹Šµ $‘‘‹ …‘E’zæ÷Æ­‹š“‘–€uœ¸÷ñüM|–˜‚›™”—žø䜑ђ‘‘‹ …‘bŠ\Šsv]Œ_ $……‹v‘…xÑ„œ‡0÷(¯ø诰ëøIëù.÷Ý÷cû#÷ûGûVûû.ûVûY÷#û÷>÷ã»Ù³ġÓßûã÷¹÷öûû^ûG5"ûûû÷÷T÷fîàî~‰¬÷­÷­†wóà÷uèìóøŸü%8z†Eˆ……‹v‘…¸Œ¼Œ¯®ÆŠ½ $‘‘‹ …‘=sÞ÷>„¡£ˆ®÷JÂ÷ àÆdöûMeP„cÜfWŒŒc……‹v‘…ìшœ†8નš®ÓÐÐtûû
-÷+xNlT[g`„„…ƒ†ƒ²w—œ˜š˜™•™˜Ž“¶¯xu²pº½pÒʵ¥Ã²z—pugnacŸa¡\Y¡Q…„‹Š„½¯¼ «”ߙζ·Ë³Ä¡Óßûã÷¹÷öûû^ûG5"ûûû÷÷T÷fîà‰v÷¹­÷¹­†wóà÷lç¶÷Q÷÷=ßž|t™öûB\¨¶aÇšœ•’Š”‡“^r­¶qû÷f¶™å¿ô½z´g­¸[MŽL\a„gnh\ŒŒ\……‹v‘…шœ†8ü%8z†Eˆ……‹v‘…¸ŒºŒ±±ºŠ· $‘‘‹ …‘¶EŽzÞÞø„ÈÓuû
-ûDo*[÷y¨—®ÒF¯~÷/ø\­¾Ò÷‚߸øù “Qž)&2H!"â[ãiÇtÕo):^a;.O¶îux~‰†>q—Z¸Ê§t丶–¡®ů¯ÈËõ;º9ªO¡'±ßþÃÆìªMIŸ–‰˜Œ”’‡»‡§À¶‰¬øÓ²“w÷àÐ÷ò÷øË•±¯¡Öºq>œ–™Œ”°„¹†¾Š¸Œ‰ŠЈiû†<5°>û
-Že‰‰‰Š‡^W€[‡•—Š—ÐÛŸ¹¥Í¼°•eNü8z†;ˆ……‹v‘…¼Œ¾Œ³±¾Š½ $‘‘‹ …‘;ŽzÞö´øÛ¬âà÷ö¼÷@øŸޚ؎‘‘‹ …‘\ŠZŠddbŒd $……‹v‘…Ljœ†8û¶û`÷dñ÷a¼÷÷F÷xۜǒ‘‘‹ …‘eŠbŠtvZŒ] $……‹v‘…Ö„œˆ:ûŠû|ûû=[b¨mZº‰×Ìí”vù¬Œ÷:÷î÷øTøúÕ†‹pvUû2ü%‡û4ø+tÇ‘˜Ï’‘‘‹ …‘cŠ^ŠgghŒj $……Œv‘…†“z¦F÷Yü”{‘’„•–’”™‘÷cø’žº›²Ê’‘‘‹ …‘mŠhŠtt^Œb $……‹v‘…ø!”vù¬÷4÷B÷ATÂ÷Ä÷ôù¾øÉû0üFˆŒûø:zÁ®Ž­Ž‘‘‹ …‘bŠ_ŠcjhŒk $……‹v‘…ìÀˆ¡l”q¢IŽ‚Šƒƒzûû¹†Œû&øN®¦®‘‘‹ …‘jŠ_ŠdhnŒn $……‹v‘…¸ˆ’ŠžU÷Pü±{‘€–˜‘•œ’÷)÷㟔Ž€z‘÷ûàz‘—–’–š÷]ø¯˜®¢ÂŽ‘‘‹ …‘nŠkŠqq_Œc $……‹v‘…ô´ˆ³ˆ|`õ‰¬øÛ¬Ž÷*û*ùý ÷E÷ª÷Dû7÷+Ðø®ñû-÷f˜…••”Œ””—÷÷EÊ®¸ª˜¸‘‘‹ …‘mŠfŠttaŒc $……‹v‘…·ˆž…sjûûCƒ……‡‡ˆ‡’†û÷8n³‡–ÃŽ‘‘‹ …‘fŠfŠcdjŒm $……Œv‘…µˆž†´P÷"û_“‘ƒ…‡‚…ƒû(ûZäi]k^‡……‹v‘…©Œ°Œ¢¢µŠ³ $‘‘‹ …‘_Žx£­÷÷M“‘‘‘Žˆƒ‘÷ûD§c€Sˆ……‹v‘…°Œ°Œ³²¬Š© $‘‘Š …‘ÐaŽz•aÅ ‰¬øÛ¬Œ÷>ÜàÁ÷Kû÷Ô÷å÷÷©Œ›œ©÷ ÷l§¾¡”¸‘‘‹ …‘ØoŠkŠttgŒk $……‹v‘…ô·ˆ›vcûûeƒ|†Œ‚›û÷asµ•ÃŽ‘‘‹ …‘gŠeŠcdjŒm $……Œv‘…µˆœ…®Q÷ûqnŽ€fû8z†;ˆ……‹v‘…¼Œ¿Œ²²½Š½ $‘‘‹ …‘Ô;ŽzÞ½‹±ø̲´ø­ø»‰ÕƗ¿„€Ž~lDrTû‰ûU‡zƒ”Ž‘”Ôõ÷L÷™÷
-÷, ¦Ž’–’†ƒl‰mûq\*Žf‡URƒbˆ•”‰– Ð±¯ÖŒ÷g‘ˆ…†ˆ…†„*ûûRûž%û,…ƒ‰ƒ„†™ø
+ûkgŽ’„–Š÷ ñè÷;÷Nûâû÷x÷²óêluvol¥ˆž‰œ…tvg]W~„’„Ç–Å»ÑÇq²cûl÷sdz÷–÷£÷s˜™§—•‡•ûo~ty‘‚”ûâõÄõĶn£s¨¨££¨¨s£nnssnû{ùwš÷ª÷¹ùbûýU´÷!‰¬÷fµø wŽ÷)÷/ÚÂ÷%˜‘£÷gÅû=—ie‡[ˆ……‹v‘…°ŒÂŒ²´±Š® $‘‘‹ …‘diŽz»ûbøЂ|p€~ûwü¬qMm…_ˆ……‹v‘…¥Œ¬Œ©´½Š° $‘‘‹ …‘eŽ\›´÷
+Œ°ø÷1Mù+÷:‡ŠJˆ……‹v‘…°Œ³Œ©©¹Š¬ $‘‘‹ …‘GŽˆ…Þmø9‡Á™Ï‘‘‹ …‘û‰ûhü‡ˆ‡‰‰ˆ“ˆKûaøû%……‹v‘…Ї‘‰„@Mcü0…OrR†……‹v‘…©Œ«Œ££³Š© $‘‘‹ …‘I†ªÃ£±ø%÷cü›„Ž‘ƒ‘‘’“U÷uø¥÷%–v¨vøü¬ñ¼ø)¼xøÀø”ûÛx‹€„‡|°nûëøGû……‹v‘…¶ˆ©h‘qü52z…E„……‹v‘…¶Œ¸Œ£¢¹Šµ $‘‘‹ …‘E’zæ÷Æ­‹š“‘–€uœ¸÷ñüM|–˜‚›™”—žø䜑ђ‘‘‹ …‘bŠ\Šsv]Œ_ $……‹v‘…xÑ„œ‡0÷(¯ø诰ëøIëù.÷Ý÷cû#÷ûGûVûû.ûVûY÷#û÷>÷ã»Ù³ġÓßûã÷¹÷öûû^ûG5"ûûû÷÷T÷fîà‰v÷¹­÷¹­†wóà÷lç¶÷Q÷÷=ßž|t™öûB\¨¶aÇšœ•’Š”‡“^r­¶qû÷f¶™å¿ô½z´g­¸[MŽL\a„gnh\ŒŒ\……‹v‘…шœ†8ü%8z†Eˆ……‹v‘…¸ŒºŒ±±ºŠ· $‘‘‹ …‘¶EŽzÞÞø„ÈÓuû
+ûDo*[÷y¨—®Ò¶‰¬øÓ²“w÷àÐ÷ò÷øË•±¯¡Öºq>œ–™Œ”°„¹†¾Š¸Œ‰ŠЈiû†<5°>û
+Že‰‰‰Š‡^W€[‡•—Š—ÐÛŸ¹¥Í¼°•eNü8z†;ˆ……‹v‘…¼Œ¾Œ³±¾Š½ $‘‘‹ …‘;ŽzÞö´øÛ¬âà÷ö¼÷@øŸޚ؎‘‘‹ …‘\ŠZŠddbŒd $……‹v‘…Ljœ†8û¶û`÷dñ÷a¼÷÷F÷xۜǒ‘‘‹ …‘eŠbŠtvZŒ] $……‹v‘…Ö„œˆ:ûŠû|ûû=[b¨mZº‰×Ìí”vù¬Œ÷:÷î÷øTøúÕ†‹pvUû2ü%‡û4ø+tÇ‘˜Ï’‘‘‹ …‘cŠ^ŠgghŒj $……Œv‘…†“z¦F÷Yü”{‘’„•–’”™‘÷cø’žº›²Ê’‘‘‹ …‘mŠhŠtt^Œb $……‹v‘…õ‰¬øÛ¬Ž÷*û*ùý ÷E÷ª÷Dû7÷+Ðø®ñû-÷f˜…••”Œ””—÷÷EÊ®¸ª˜¸‘‘‹ …‘mŠfŠttaŒc $……‹v‘…·ˆž…sjûûCƒ……‡‡ˆ‡’†û÷8n³‡–ÃŽ‘‘‹ …‘fŠfŠcdjŒm $……Œv‘…µˆž†´P÷"û_“‘ƒ…‡‚…ƒû(ûZäi]k^‡……‹v‘…©Œ°Œ¢¢µŠ³ $‘‘‹ …‘_Žx£­÷÷M“‘‘‘Žˆƒ‘÷ûD§c€Sˆ……‹v‘…°Œ°Œ³²¬Š© $‘‘Š …‘ÐaŽz•aÅ*´b»ø¬¯ÞKØ÷5Ù´÷¹»l‘–p½±¯œŸ l‰—‡”€‘…„z~nŠ²¹÷'÷"=¦B98URs—¢¨ ˜’Š’‰ŠŽŠ‘–ªµ–±­ºzû„ˆ‡ˆŠ5v´+sFVG9ÃqÑ®©“­·Ÿ›÷Mû~…„ƒ…vqitoYu³ª¸ ¹ÕžN­ˆvø·÷^©œ•‹wÙÚ÷iá§÷;ø……‡”÷L«Ì³‹’‡Ž‚sr@}cˆ‰ƒ{‘…ŽŽ‹Ž·ˆ–‹<ü|dŠyˆ}§ƒ‡—‘‘•”“”•—‘‹–‚x¢©…®ñ÷ è÷3÷1Ö4`ezol’l¢¥©”¨ȽA*û]5,lv¡¤w÷Ž •˜–û¼ø¬°áø"懔ƒ‚Œ_i`u`BNÕ÷ ÷»ÍÍÆ“hhpŽ™‚  §˜ªÂR³+(!2û"ûÓ2÷ÇÀžÝ½[º„¦÷ï®÷^©œ•‹w²á÷pÚ§÷â½”Œ„Žs“h‹“ˆŒ‘k¡®šÈ’‘‘‹š…‘K‚ž¼øY̳‹’‡Ž‚³r@}cˆ‰ƒ{‘…ŽŽ‹Ž·ˆ–‹<û„‰‰„‡bœjI_uec``qPAûÉ1÷
wãÚ÷XÚ¸÷m²ºŸ³¼”Œ„Žr“i‹“ˆŒ‘x¡®šÈ’‘‘‹š…‘K‚ž¼÷T©Ô‹ŽˆŽ††Š|Š|kgŒi $……‹v‘…¼ˆ˜I¸ûUx‰ƒ}kfe{rmY™ä÷J©Ô‹ŽˆŽ††Š|Š|kgŒi $……‹v‘…»‡™€JûTF©HîR”vø.¬’÷/÷i÷ ÷Ùø"Á‡‘vX:ûX{d†‹{µC÷Uy»‡—À’‘‘‹ …‘jŠhŠjjmŒm $……‹v‘…À…’{ŸX÷ûÐ|‘‘…˜•’‘œ’÷÷Íž·–¤Ã‘‘‹ …‘wŠsŠqjiŒr $……‹v‘…÷U”vø.¬’÷.ò÷%÷i÷
-÷_ø"‘‘‹ …‘mŠhŠgepŒq $……‹v‘…º†– W÷û×}‘“…•”“‘›’ð÷ŠòûŒ}‘“…•”“‘š‘÷÷Ñ›´œ§¾Ž‘‘‹ …‘wŠuŠmmaŒm $……‹v‘…Ö‡n}h7ûdr‡‹ƒ 5÷oxº•À‘‘‹ …‘mŠcŠmrjŒm $……‹v‘…º‡—n^‘{EûE~j‰Š~«;÷bx»Œ›»ŽK‰¬÷ ã÷¬œ÷û÷9û6÷)¯Ò¢÷:û+÷4û÷¦@÷J÷út­’Œ¸‘‘‹ …‘pŠ_ŠmmmŒq $……‹v‘…­ˆ§z§bâû„‹ˆ‡†¨@7û
-²ôùNluvol¥ˆž‰œ…tvg]W~„’„Ç–Å»ÑÇq²c÷1luvol¥ˆž‰œ…tvg]W~„’„Ç–Å»ÑÇq²c§žvø²÷r©y®åÚ÷[ÚÜøS÷÷ ç•™”Ÿˆ†û
-±ÎÓ2‰¬ø%•÷jØ÷j÷8p†Eˆ……‹v‘…¼Œ¯ŒÁ»£Š½ $‘‘‹ …‘EŽzÞ÷[ÇŽ¾‹“†‚Z{aƒ7yŒ’‚Ž¨¥Ž¡›€W2‹Â÷è·÷³ä÷ºÂû÷÷ÅĤ³¹Èbº&,NXWz’ƒ—‡šˆÀ ¼ ¼¹¦oVQxpû
+÷_ø"‘‘‹ …‘mŠhŠgepŒq $……‹v‘…º†– W÷û×}‘“…•”“‘›’ð÷ŠòûŒ}‘“…•”“‘š‘÷÷Ñ›´œ§¾Ž‘‘‹ …‘wŠuŠmmaŒm $……‹v‘…Ö‡n}h7ûdr‡‹ƒ 5÷oxº•À‘‘‹ …‘mŠcŠmrjŒm $……‹v‘…º‡—n^‘{EûE~j‰Š~«;÷bx»Œ›»ŽK‰¬÷ ã÷¬œ÷û÷9û6÷)¯Ò¢÷:û+÷4û÷¦@÷J÷út­’Œ¸‘‘‹ …‘pŠ_ŠmmmŒq $……‹v‘…­ˆ§z§bâû„‹ˆ‡†¨@7û
+±ÎÓ2‰¬ø%•÷jØ÷j÷8p†Eˆ……‹v‘…¼Œ¯ŒÁ»£Š½ $‘‘‹ …‘EŽzÞ÷[ÇŽ¾‹“†‚Z{aƒ7yŒ’‚Ž¨¥Ž¡›€W2‹Â÷è·÷³ä÷ºÂû÷÷ÅĤ³¹Èbº&,NXWz’ƒ—‡šˆÀ ¼ ¼¹¦oVQxpû
Ú Ú’ ø¾
endstream
endobj
-41 0 obj
-<< /Type /FontDescriptor /FontName /VTIPMO+LibertinusSerif-Regular /Flags 4 /FontBBox [ -1325 -256 1269 928 ] /Ascent 894 /CapHeight 647 /Descent -246 /ItalicAngle 0 /StemV 73 /XHeight 429 /FontFile3 43 0 R /CIDSet 42 0 R >>
+25 0 obj
+<< /Type /FontDescriptor /FontName /YTEUQI+LibertinusSerif-Regular /Flags 4 /FontBBox [ -1325 -256 1269 928 ] /Ascent 894 /CapHeight 647 /Descent -246 /ItalicAngle 0 /StemV 73 /XHeight 429 /FontFile3 27 0 R /CIDSet 26 0 R >>
endobj
-44 0 obj
-<< /Length 1883 >>
+28 0 obj
+<< /Length 1483 >>
stream
%!PS-Adobe-3.0 Resource-CMap
%%DocumentNeededResources: ProcSet (CIDInit)
%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-VTIPMO-LibertinusSerif-Regular-0)
-%%Title: (TeX-VTIPMO-LibertinusSerif-Regular-0 TeX VTIPMO-LibertinusSerif-Regular 0)
+%%BeginResource: CMap (TeX-YTEUQI-LibertinusSerif-Regular-0)
+%%Title: (TeX-YTEUQI-LibertinusSerif-Regular-0 TeX YTEUQI-LibertinusSerif-Regular 0)
%%Version: 1.000
%%EndComments
/CIDInit /ProcSet findresource begin
@@ -603,39 +331,28 @@ stream
begincmap
/CIDSystemInfo
<< /Registry (TeX)
-/Ordering (VTIPMO-LibertinusSerif-Regular)
+/Ordering (YTEUQI-LibertinusSerif-Regular)
/Supplement 0
>> def
-/CMapName /TeX-Identity-VTIPMO-LibertinusSerif-Regular def
+/CMapName /TeX-Identity-YTEUQI-LibertinusSerif-Regular def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
0 beginbfrange
endbfrange
-83 beginbfchar
-<0002> <0021>
+55 beginbfchar
<0009> <0028>
<000A> <0029>
<000D> <002C>
<000E> <002D>
<000F> <002E>
<0010> <002F>
-<0011> <0030>
-<0012> <0031>
-<0013> <0032>
-<0014> <0033>
-<0015> <0034>
-<0016> <0035>
-<001B> <003A>
-<0020> <003F>
<0022> <0041>
<0023> <0042>
<0024> <0043>
<0025> <0044>
<0026> <0045>
-<0027> <0046>
-<0028> <0047>
<0029> <0048>
<002A> <0049>
<002B> <004A>
@@ -643,17 +360,11 @@ endbfrange
<002E> <004D>
<002F> <004E>
<0030> <004F>
-<0031> <0050>
-<0032> <0051>
<0033> <0052>
-<0034> <0053>
<0035> <0054>
<0036> <0055>
<0037> <0056>
-<0038> <0057>
<0039> <0058>
-<003A> <0059>
-<003B> <005A>
<0042> <0061>
<0043> <0062>
<0044> <0063>
@@ -663,7 +374,6 @@ endbfrange
<0048> <0067>
<0049> <0068>
<004A> <0069>
-<004B> <006A>
<004C> <006B>
<004D> <006C>
<004E> <006D>
@@ -679,24 +389,14 @@ endbfrange
<0058> <0077>
<0059> <0078>
<005A> <0079>
-<005B> <007A>
-<06DA> <2014>
-<06DF> <2019>
-<06E2> <201C>
-<06E3> <201D>
-<0938> <00660066>
<0939> <00660069>
-<093A> <0066006C>
<09C8> <0030>
<09C9> <0031>
<09CA> <0032>
<09CB> <0033>
<09CC> <0034>
-<09CD> <0035>
<09CE> <0036>
-<09CF> <0037>
<09D0> <0038>
-<09D1> <0039>
endbfchar
endcmap
CMapName currentdict /CMap defineresource pop
@@ -708,72 +408,56 @@ end
endstream
endobj
8 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /VTIPMO+LibertinusSerif-Regular /DescendantFonts [ 45 0 R ] /ToUnicode 44 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /YTEUQI+LibertinusSerif-Regular /DescendantFonts [ 29 0 R ] /ToUnicode 28 0 R >>
endobj
-45 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /VTIPMO+LibertinusSerif-Regular /FontDescriptor 41 0 R /W 40 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+29 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /YTEUQI+LibertinusSerif-Regular /FontDescriptor 25 0 R /W 24 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-12 0 obj
-<< /Type /Pages /Count 4 /Kids [ 6 0 R 14 0 R 17 0 R 20 0 R ] >>
+11 0 obj
+<< /Type /Pages /Count 1 /Kids [ 6 0 R ] >>
endobj
-46 0 obj
-<< /Type /Catalog /Pages 12 0 R /Metadata 4 0 R/OutputIntents [ <</Type/OutputIntent/S/GTS_PDFX/OutputCondition (SWOP (Publication) printing in USA (Printing process definition: ANSI CGATS.6).)/OutputConditionIdentifier (CGATS TR 001)/Info (U.S. Web Coated (SWOP) v2)/RegistryName (http://www.color.org)>> ] >>
+30 0 obj
+<< /Type /Catalog /Pages 11 0 R /Metadata 4 0 R/OutputIntents [ <</Type/OutputIntent/S/GTS_PDFX/OutputCondition (SWOP (Publication) printing in USA (Printing process definition: ANSI CGATS.6).)/OutputConditionIdentifier (CGATS TR 001)/Info (U.S. Web Coated (SWOP) v2)/RegistryName (http://www.color.org)>> ] >>
endobj
-47 0 obj
-<< /Title(Novel\040Document\040Class)/Creator(LuaLaTeX\040with\040novel\040and\040microtype)/CreationDate(D:20231109113337-08'00')/ModDate(D:20231109113337-08'00')/Producer(LuaLaTeX\040with\040novel-pdfx\040and\040hyperref)/Trapped/False/GTS_PDFXVersion(PDF/X-1a:2001)/GTS_PDFXConformance(PDF/X-1a:2001) >>
+31 0 obj
+<< /Title(Novel\040Document\040Class)/Creator(LuaLaTeX\040with\040novel\040and\040microtype)/CreationDate(D:20240131112616-08'00')/ModDate(D:20240131112616-08'00')/Producer(LuaLaTeX\040with\040novel-pdfx\040and\040hyperref)/Trapped/False/GTS_PDFXVersion(PDF/X-1a:2001)/GTS_PDFXConformance(PDF/X-1a:2001) >>
endobj
xref
-0 48
+0 32
0000000000 65535 f
-0000030193 00000 n
-0000030213 00000 n
-0000030233 00000 n
+0000011455 00000 n
+0000011475 00000 n
+0000011495 00000 n
0000000020 00000 n
-0000011141 00000 n
-0000010989 00000 n
+0000011312 00000 n
+0000011160 00000 n
0000002644 00000 n
-0000057968 00000 n
-0000042381 00000 n
-0000040387 00000 n
-0000035457 00000 n
-0000058333 00000 n
-0000020729 00000 n
-0000020574 00000 n
-0000011296 00000 n
-0000029721 00000 n
-0000029566 00000 n
-0000020862 00000 n
-0000030101 00000 n
-0000029946 00000 n
-0000029854 00000 n
-0000030286 00000 n
-0000034181 00000 n
-0000030454 00000 n
-0000030780 00000 n
-0000034423 00000 n
-0000035616 00000 n
-0000035821 00000 n
-0000039142 00000 n
-0000035977 00000 n
-0000036048 00000 n
-0000039381 00000 n
-0000040544 00000 n
-0000040747 00000 n
-0000041443 00000 n
-0000040780 00000 n
-0000040887 00000 n
-0000041669 00000 n
-0000042526 00000 n
-0000042718 00000 n
-0000055784 00000 n
-0000043169 00000 n
-0000043544 00000 n
-0000056025 00000 n
-0000058127 00000 n
-0000058415 00000 n
-0000058742 00000 n
+0000030768 00000 n
+0000019426 00000 n
+0000014082 00000 n
+0000031133 00000 n
+0000011548 00000 n
+0000012993 00000 n
+0000011627 00000 n
+0000011698 00000 n
+0000013235 00000 n
+0000014241 00000 n
+0000014446 00000 n
+0000018153 00000 n
+0000014624 00000 n
+0000014696 00000 n
+0000018392 00000 n
+0000019582 00000 n
+0000019785 00000 n
+0000028984 00000 n
+0000020130 00000 n
+0000020505 00000 n
+0000029225 00000 n
+0000030927 00000 n
+0000031194 00000 n
+0000031521 00000 n
trailer
-<< /Size 48 /Root 46 0 R /Info 47 0 R /ID [ <6D282F68DAD0E257966ED9A7FE1025D7> <6D282F68DAD0E257966ED9A7FE1025D7> ] >>
+<< /Size 32 /Root 30 0 R /Info 31 0 R /ID [ <98EE0E1A7196CAA99E8C791E24184A8B> <98EE0E1A7196CAA99E8C791E24184A8B> ] >>
startxref
-59066
+31845
%%EOF
diff --git a/macros/luatex/latex/novel/doc/novel.tex b/macros/luatex/latex/novel/doc/novel.tex
index 42ce289628..e61e9c0226 100644
--- a/macros/luatex/latex/novel/doc/novel.tex
+++ b/macros/luatex/latex/novel/doc/novel.tex
@@ -12,7 +12,7 @@
% novel.pdf (if present) have read/write permissions for any user.
% Otherwise, compile may fail at the point where files are written.
-\documentclass{novel} % v. 1.83.
+\documentclass{novel} % v. 1.86.
% Almost all settings are defaults.
\SetHeadFootStyle{3}
\SetTitle{Novel Document Class} % only footer, with page number
@@ -20,111 +20,49 @@
% However, not every P.O.D. service needs PDF/X these days.
\SetPDFX[CGATSTR001]{X-1a:2001}
\begin{document}
+\thispagestyle{empty}
\begin{ChapterStart}[8]
\vspace{\nbs} % \nbs is normal baselineskip
\ChapterTitle{NOVEL}
\vspace{\nbs}
\ChapterSubtitle{A Document Class for the Rest of Us}
-\ChapterDeco[4]{\decoglyph{n9548}}
+{\centering Version 1.86 (January 2024)\par}
\end{ChapterStart}
-\textbf{Where is the documentation??} It is in HTML format, and cannot be retrieved via \textit{texdoc}. If you have this package installed, look for (texroot)/doc/lualatex/novel/novel-documentation.html. If you are online, go to the CTAN page at https://ctan.org/pkg/novel and click ``Package Documentation (HTML).''
+\textbf{Where is the documentation??} It is HTML.\\
+(texroot)/doc/lualatex/novel/novel-documentation.html.
\scenebreak
-\textbf{Description:} The \emph{novel} document class is for writers of original fiction, to be printed to paper, with attention to the requirements of the print-on-demand market. Non-color interiors and color covers are supported. Images are supported, but only as they might be used in fiction, not picture books.
+\textbf{News:} This document class was first privately used in 2014.
+Then, in 2018, it was improved, documented, and released. It has been
+maintained through TeXlive 2023. It is expected to work in the future, but is
+no longer maintained by its original creator.\par
+Changes in print-on-demand technology have made many parts of this code
+irrelevant. There are also a few commands that require graphic design
+experience for proper usage. And a few settings, which should be simple and
+obvious, are complex and arcane.\par
+If \emph{novel} works for you, good. But if you are simply writing a fiction
+novel, nothing fancy, then see if CTAN and TeXlive have a package named
+\emph{novelette}. As of late January 2024, the package is in beta test
+(not released yet). If the package exists and can be installed, then you
+should prefer \emph{novelette}.
-If your work is an E-book, or uses interior color other than gray, or is academic, then this document class is not for you.
-
-But if you are writing a detective novel, or science fiction, or a collection of short stories, then read on!
-
-\QuickChapter{1. Features}
-
-Throughout, it is assumed that the purpose of your writing is a commercially printed book of fiction.
-
-A new \emph{novel} is pre-configured to produce a standard trade book size of 5.5in W x 8.5in H, with layout margins that are likely to be acceptable to the most widely-used print services. The file you are now reading is in this format. But if that is not the size or layout you want, then there are commands that configure just about anything, using standard terminology and understandable purpose. Best of all, the HTML documentation comes with images and examples, so you know what you are doing.
-
-Almost everything is pre-configured to “just work,†even the choice of fonts. The chosen compiler is LuaLaTeX, and Open Type fonts are loaded using \textit{fontspec} technology. If you prefer to use a professional font, it will be easy to load and use in utf-8.
-
-Many standard LaTeX commands are disabled. This will be surprising at first. But \emph{novel} is focused on one thing only. Anything that might interfere with that purpose may have been tossed aside. So, be sure that you read the documentation! If you take an existing LaTeX document and just change the class to \emph{novel,} it is very unlikely to work as expected.
-
-Many new commands are provided. They are focused on the needs of print fiction writers, period. And, \emph{novel} has built-in PDF/X technology that exceeds the capabilities currently available via other LaTeX packages.
-
-\QuickChapter{2. Complete Documentation}
-
-What you are reading now, is only an introduction. The complete documentation is in HTML format, directly written in HTML rather than extracted from code. There are numerous examples and images, too detailed to be presented as PDF.
-
-\QuickChapter{3. License}
-
-The LaTeX code, and accompanying documentation, is released under the LateX Project Public License, version 1.3c.
-
-The companion font(s) is(are) licensed under the SIL Open Font License, version 1.1.
-
-
-
-\QuickChapter{4. Version}
-
-\noindent 1.83, 2023-11-09: Minor typo corrected.
-
-\noindent 1.82, 2023-08-26: Added user setting for default indent.
-
-\noindent 1.81, 2023-03-25: Bug fixes. Also 1.81a, 1.81b.
-
-\noindent 1.80, 2023-02-08: Class option ``rev'' for new documents.
-
-\noindent 1.52, 2018-04-26: Enhanced detection and warning using Lua code.
-
-\noindent 1.50.5, 2018-04-11: Minor bug fixes (docs and code disagreed).
-
-\noindent 1.50, 2018-03-28: Improved image handling commands, sandbox.
-
-\clearpage
-
-\QuickChapter{5. FAQs}
-
-\begin{adjustwidth}{\parindent}{0pt}
-\backindent\makebox[\parindent][l]{Q. }Can this document class be used for E-books?
-\end{adjustwidth}
-\begin{adjustwidth}{\parindent}{0pt}
-\backindent\makebox[\parindent][l]{A. }No. And, that feature will never be added, as the technology is inherently incompatible. A word processor is your friend.
-\end{adjustwidth}
-
-\begin{adjustwidth}{\parindent}{0pt}
-\backindent\makebox[\parindent][l]{Q. }What happened to floats and lists?
-\end{adjustwidth}
-\begin{adjustwidth}{\parindent}{0pt}
-\backindent\makebox[\parindent][l]{A. }Use the new image commands, or sandbox mode.
-\end{adjustwidth}
-
-\begin{adjustwidth}{\parindent}{0pt}
-\backindent\makebox[\parindent][l]{Q. }My thesis advisor told me---
-\end{adjustwidth}
-\begin{adjustwidth}{\parindent}{0pt}
-\backindent\makebox[\parindent][l]{A. }Stop right there. This document class is very different from anything used for theses and other academic publications.
-\end{adjustwidth}
+\scenebreak
-\begin{adjustwidth}{\parindent}{0pt}
-\backindent\makebox[\parindent][l]{Q. }If I use TikZ for Feynman diagrams, then---
-\end{adjustwidth}
-\begin{adjustwidth}{\parindent}{0pt}
-\backindent\makebox[\parindent][l]{A. }Go away.
-\end{adjustwidth}
+\textbf{Description:} The \emph{novel} document class is for writers of
+original fiction, to be printed to paper, with attention to the requirements
+of the print-on-demand market. Non-color interiors and color covers are
+supported. Images are supported, but only as they might be used in fiction,
+not picture books.
-\begin{adjustwidth}{\parindent}{0pt}
-\backindent\makebox[\parindent][l]{Q. }Has this document class ever been used for an actual novel?
-\end{adjustwidth}
-\begin{adjustwidth}{\parindent}{0pt}
-\backindent\makebox[\parindent][l]{A. }Yes indeed! In August 2017 the author published a complete novel, including its cover, using this document class. Almost all of the setup used defaults. The files (textblock and cover) were submitted to a major American P.O.D. service in \lnum{PDF/X-1a:2001} format, then electronically reviewed and accepted \textit{on the first attempt.} A printed copy was in the author's hands within a week. Just like that. Took months to write, of course.\par
-Update: Several other authors report success.
-\end{adjustwidth}
+If your work is an E-book, or uses interior color other than gray, or is
+academic, then this document class is not for you.
-\begin{adjustwidth}{\parindent}{0pt}
-\backindent\makebox[\parindent][l]{Q. }When I woke up this morning, my head felt like a toddler had been pounding it in a sandbox. I rolled over and looked at the mug shot on the wall. It was a woman in her forties with a drug habit that was bad, and an attitude that was even worse. She had seen better days, like the time I took her to the eighth grade sock hop. Then I got up, washed, and dragged my lonely butt down to the one-man detective agency that I jokingly called my means of living. You know what I mean?
-\end{adjustwidth}
-\begin{adjustwidth}{\parindent}{0pt}
-\backindent\makebox[\parindent][l]{A. }Yeah. Stick with me, kid. This document class is for you.
-\end{adjustwidth}
+But if you are writing a detective novel, or science fiction, or a collection
+of short stories, then you are in the right place.
+\makeatletter\nocle@rtoendtrue\makeatother % For developer only.
\end{document}
diff --git a/macros/luatex/latex/novel/lualatex/novel-CGATSTR001.clo b/macros/luatex/latex/novel/lualatex/novel-CGATSTR001.clo
index f1e054428e..11bdaa8169 100644
--- a/macros/luatex/latex/novel/lualatex/novel-CGATSTR001.clo
+++ b/macros/luatex/latex/novel/lualatex/novel-CGATSTR001.clo
@@ -2,7 +2,7 @@
%% The values of the arguments are public industry standards.
%%
\ProvidesFile{novel-CGATSTR001.clo}%
-[2023/11/09 any version. (novel Output Intent CGATS TR 001)]
+[2024/01/31 any version. (novel Output Intent CGATS TR 001)]
%%
% Typically used in the USA.
diff --git a/macros/luatex/latex/novel/lualatex/novel-CalculateLayout.sty b/macros/luatex/latex/novel/lualatex/novel-CalculateLayout.sty
index 86b499397c..f65aadd3e2 100644
--- a/macros/luatex/latex/novel/lualatex/novel-CalculateLayout.sty
+++ b/macros/luatex/latex/novel/lualatex/novel-CalculateLayout.sty
@@ -6,7 +6,7 @@
%% License URL: https://www.latex-project.org/lppl/lppl-1-3c/
%%
\ProvidesFile{novel-CalculateLayout.sty}%
-[2023/11/09 v1.83 LaTeX file (layout calculations)]
+[2024/01/31 v1.86 LaTeX file (layout calculations)]
%%
%%
diff --git a/macros/luatex/latex/novel/lualatex/novel-ChapterScene.sty b/macros/luatex/latex/novel/lualatex/novel-ChapterScene.sty
index b4b581d57d..4797893f96 100644
--- a/macros/luatex/latex/novel/lualatex/novel-ChapterScene.sty
+++ b/macros/luatex/latex/novel/lualatex/novel-ChapterScene.sty
@@ -6,7 +6,7 @@
%% License URL: https://www.latex-project.org/lppl/lppl-1-3c/
%%
\ProvidesFile{novel-ChapterScene.sty}%
-[2023/11/09 v1.83 LaTeX file (chapter and scene macros)]
+[2024/01/31 v1.86 LaTeX file (chapter and scene macros)]
%%
diff --git a/macros/luatex/latex/novel/lualatex/novel-DropCap.sty b/macros/luatex/latex/novel/lualatex/novel-DropCap.sty
index d09c9bd5bc..eabd28f127 100644
--- a/macros/luatex/latex/novel/lualatex/novel-DropCap.sty
+++ b/macros/luatex/latex/novel/lualatex/novel-DropCap.sty
@@ -9,7 +9,7 @@
%% License URL: https://www.latex-project.org/lppl/lppl-1-3c/
%%
\ProvidesFile{novel-DropCap.sty}%
-[2023/11/09 v1.83 (Drop Caps)]
+[2024/01/31 v1.86 (Drop Caps)]
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%
%
diff --git a/macros/luatex/latex/novel/lualatex/novel-FOGRA39.clo b/macros/luatex/latex/novel/lualatex/novel-FOGRA39.clo
index 714f075865..ae70e33988 100644
--- a/macros/luatex/latex/novel/lualatex/novel-FOGRA39.clo
+++ b/macros/luatex/latex/novel/lualatex/novel-FOGRA39.clo
@@ -1,7 +1,7 @@
%% This is file `novel-FOGRA39.clo', part of `novel' document class.
%% The values of the arguments are public industry standards.
\ProvidesFile{novel-FOGRA39.clo}%
-[2023/11/09 any version. (novel Output Intent FOGRA39)]
+[2024/01/31 any version. (novel Output Intent FOGRA39)]
%%
diff --git a/macros/luatex/latex/novel/lualatex/novel-FileData.sty b/macros/luatex/latex/novel/lualatex/novel-FileData.sty
index 9e5d60cce4..3225480cff 100644
--- a/macros/luatex/latex/novel/lualatex/novel-FileData.sty
+++ b/macros/luatex/latex/novel/lualatex/novel-FileData.sty
@@ -6,7 +6,7 @@
%% License URL: https://www.latex-project.org/lppl/lppl-1-3c/
%%
\ProvidesFile{novel-FileData.sty}%
-[2023/11/09 v1.83 LaTeX file (File Data settings)]
+[2024/01/31 v1.86 LaTeX file (File Data settings)]
%%
diff --git a/macros/luatex/latex/novel/lualatex/novel-Fonts.sty b/macros/luatex/latex/novel/lualatex/novel-Fonts.sty
index c686586254..1d4f787dee 100644
--- a/macros/luatex/latex/novel/lualatex/novel-Fonts.sty
+++ b/macros/luatex/latex/novel/lualatex/novel-Fonts.sty
@@ -6,7 +6,7 @@
%% License URL: https://www.latex-project.org/lppl/lppl-1-3c/
%%
\ProvidesFile{novel-Fonts.sty}%
-[2023/11/09 v1.83 LaTeX file (font settings and defaults)]
+[2024/01/31 v1.86 LaTeX file (font settings and defaults)]
%%
diff --git a/macros/luatex/latex/novel/lualatex/novel-Footnotes.sty b/macros/luatex/latex/novel/lualatex/novel-Footnotes.sty
index 2e46f31729..528a59ac26 100644
--- a/macros/luatex/latex/novel/lualatex/novel-Footnotes.sty
+++ b/macros/luatex/latex/novel/lualatex/novel-Footnotes.sty
@@ -7,7 +7,7 @@
%% License URL: https://www.latex-project.org/lppl/lppl-1-3c/
%%
\ProvidesFile{novel-Footnotes.sty}%
-[2023/11/09 v1.83 LaTeX file (commands for footnotes and endnotes)]
+[2024/01/31 v1.86 LaTeX file (commands for footnotes and endnotes)]
%%
diff --git a/macros/luatex/latex/novel/lualatex/novel-HeadFootStyles.sty b/macros/luatex/latex/novel/lualatex/novel-HeadFootStyles.sty
index 7a3825ac54..24f3b82c25 100644
--- a/macros/luatex/latex/novel/lualatex/novel-HeadFootStyles.sty
+++ b/macros/luatex/latex/novel/lualatex/novel-HeadFootStyles.sty
@@ -6,7 +6,7 @@
%% License URL: https://www.latex-project.org/lppl/lppl-1-3c/
%%
\ProvidesFile{novel-HeadFootStyles.sty}%
-[2023/11/09 v1.83 LaTeX file (header and footer layouts and styles)]
+[2024/01/31 v1.86 LaTeX file (header and footer layouts and styles)]
%%
diff --git a/macros/luatex/latex/novel/lualatex/novel-Images.sty b/macros/luatex/latex/novel/lualatex/novel-Images.sty
index 3e5dd85f2c..67b19ff865 100644
--- a/macros/luatex/latex/novel/lualatex/novel-Images.sty
+++ b/macros/luatex/latex/novel/lualatex/novel-Images.sty
@@ -6,7 +6,7 @@
%% License URL: https://www.latex-project.org/lppl/lppl-1-3c/
%%
\ProvidesFile{novel-Images.sty}%
-[2023/11/09 v1.83 LaTeX file (image placement)]
+[2024/01/31 v1.86 LaTeX file (image placement)]
%%
diff --git a/macros/luatex/latex/novel/lualatex/novel-JC200103.clo b/macros/luatex/latex/novel/lualatex/novel-JC200103.clo
index ba365d2b83..4493bbc322 100644
--- a/macros/luatex/latex/novel/lualatex/novel-JC200103.clo
+++ b/macros/luatex/latex/novel/lualatex/novel-JC200103.clo
@@ -2,7 +2,7 @@
%% The values of the arguments are public industry standards.
%%
\ProvidesFile{novel-JC200103.clo}%
-[2023/11/09 any version. (novel Output Intent JC200103)]
+[2024/01/31 any version. (novel Output Intent JC200103)]
%%
diff --git a/macros/luatex/latex/novel/lualatex/novel-LayoutSettings.sty b/macros/luatex/latex/novel/lualatex/novel-LayoutSettings.sty
index c111fa9664..202d59d520 100644
--- a/macros/luatex/latex/novel/lualatex/novel-LayoutSettings.sty
+++ b/macros/luatex/latex/novel/lualatex/novel-LayoutSettings.sty
@@ -6,7 +6,7 @@
%% License URL: https://www.latex-project.org/lppl/lppl-1-3c/
%%
\ProvidesFile{novel-LayoutSettings.sty}%
-[2023/11/09 v1.83 LaTeX file (layout settings)]
+[2024/01/31 v1.86 LaTeX file (layout settings)]
%%
diff --git a/macros/luatex/latex/novel/lualatex/novel-PostLayout.sty b/macros/luatex/latex/novel/lualatex/novel-PostLayout.sty
index db61189794..ac46313892 100644
--- a/macros/luatex/latex/novel/lualatex/novel-PostLayout.sty
+++ b/macros/luatex/latex/novel/lualatex/novel-PostLayout.sty
@@ -6,7 +6,7 @@
%% License URL: https://www.latex-project.org/lppl/lppl-1-3c/
%%
\ProvidesFile{novel-PostLayout.sty}%
-[2023/11/09 v1.83 LaTeX file (post-layout modifications)]
+[2024/01/31 v1.86 LaTeX file (post-layout modifications)]
%%
%%
diff --git a/macros/luatex/latex/novel/lualatex/novel-Sandbox.sty b/macros/luatex/latex/novel/lualatex/novel-Sandbox.sty
index 5cf4894ac5..1a80d93e5b 100644
--- a/macros/luatex/latex/novel/lualatex/novel-Sandbox.sty
+++ b/macros/luatex/latex/novel/lualatex/novel-Sandbox.sty
@@ -11,7 +11,7 @@
%% License URL: https://www.latex-project.org/lppl/lppl-1-3c/
%%
\ProvidesFile{novel-Sandbox.sty}%
-[2023/11/09 v1.83 LaTeX file (used only with sandbox class option)]
+[2024/01/31 v1.86 LaTeX file (used only with sandbox class option)]
%%
%%
diff --git a/macros/luatex/latex/novel/lualatex/novel-TextMacros.sty b/macros/luatex/latex/novel/lualatex/novel-TextMacros.sty
index 7f204192db..ff0bcf6fdc 100644
--- a/macros/luatex/latex/novel/lualatex/novel-TextMacros.sty
+++ b/macros/luatex/latex/novel/lualatex/novel-TextMacros.sty
@@ -6,7 +6,7 @@
%% License URL: https://www.latex-project.org/lppl/lppl-1-3c/
%%
\ProvidesFile{novel-TextMacros.sty}%
-[2023/11/09 v1.83 LaTeX file (text macros usable within document body)]
+[2024/01/31 v1.86 LaTeX file (text macros usable within document body)]
%%
diff --git a/macros/luatex/latex/novel/lualatex/novel-microtype.cfg b/macros/luatex/latex/novel/lualatex/novel-microtype.cfg
index d8bde1da88..b44dd08441 100644
--- a/macros/luatex/latex/novel/lualatex/novel-microtype.cfg
+++ b/macros/luatex/latex/novel/lualatex/novel-microtype.cfg
@@ -10,7 +10,7 @@
%% ------------------------------------------------------------------------
%%
\ProvidesFile{novel-microtype.cfg}%
-[2023/11/09 any version. (default microtype configuration for novel class)]
+[2024/01/31 any version. (default microtype configuration for novel class)]
%%% ---------------------------------------------------------------------------
%%% FONT SETS
diff --git a/macros/luatex/latex/novel/lualatex/novel-pdfx.sty b/macros/luatex/latex/novel/lualatex/novel-pdfx.sty
index 1fb6e7e876..0295f1cc70 100644
--- a/macros/luatex/latex/novel/lualatex/novel-pdfx.sty
+++ b/macros/luatex/latex/novel/lualatex/novel-pdfx.sty
@@ -16,7 +16,7 @@
%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{novel-pdfx.sty}%
-[2023/11/09 v1.83 LaTeX file (PDF/X support for novel class)]
+[2024/01/31 v1.86 LaTeX file (PDF/X support for novel class)]
% This package supports, and is part of, class `novel'.
% No support for anything but LuaLaTeX.
diff --git a/macros/luatex/latex/novel/lualatex/novel-xmppacket.sty b/macros/luatex/latex/novel/lualatex/novel-xmppacket.sty
index 5ae2bb10f3..9fb3e13686 100644
--- a/macros/luatex/latex/novel/lualatex/novel-xmppacket.sty
+++ b/macros/luatex/latex/novel/lualatex/novel-xmppacket.sty
@@ -14,7 +14,7 @@
%% ----------------------------------------------------------------------------
%%
\ProvidesFile{novel-xmppacket.sty}%
-[2023/11/09 any version. (novel XMP packet template)]
+[2024/01/31 any version. (novel XMP packet template)]
%%
diff --git a/macros/luatex/latex/novel/lualatex/novel.cls b/macros/luatex/latex/novel/lualatex/novel.cls
index 5faf86342a..4f860e0f75 100644
--- a/macros/luatex/latex/novel/lualatex/novel.cls
+++ b/macros/luatex/latex/novel/lualatex/novel.cls
@@ -8,14 +8,21 @@
%%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
% Actually needs LuaLaTeX, at least version 0.95 from TeXLive 2016.
-\ProvidesClass{novel}[2023/11/09 v1.83 LaTeX document class]
+\ProvidesClass{novel}[2024/01/31 v1.86 LaTeX document class]
%%
-%% Version 1.83: Minor typo corrected.
+
+%% During the years since `novel' was introduced, there have been
+%% many changes in print-on-demand. Also, `novel` offers some
+%% features that are rarely used, bloating the code and documentation.
+%% Although `novel` still works (as of late 2023), it is more complicated
+%% than necessary for ordinary popular fiction. Unless you really need `novel',
+%% try `novelette' instead. Available early 2024. Easier to use.
+
%% In addition to a minimal LaTeX setup, with luatex, you will need these:
%% textpos magaz xcolor adjustbox eso-pic pdfpages unicode-math fp iftex
%% libertinus-fonts makecmds xkeyval lm-math xstring xifthen silence
-%% collectbox pgf lipsum wrapfig pdflscape polyglossia microtype hyperref
+%% collectbox pgf lipsum wrapfig pdflscape microtype hyperref polyglossia
%% You will need language support, for your language(s).
%% If using lipsum, you will need hyphen-latin.
@@ -26,6 +33,8 @@
%% It cannot be used for e-books or for journal publication.
%% It is not suitable for most non-fiction, because routine academic features
%% such as bibiography and automatic sectioning are defeated.
+%% Only use it for ORIGINAL works, where you can edit your text. If your
+%% purpose is a reprint of someone else's work, then `novel' is not for you.
%%
%% There are pre-configured layouts for the most commonly used choices of
%% trim size (finished book width and height), and internal layout consistent
@@ -100,7 +109,7 @@
\newlength\@tempLength % scratch length for local calculations
\newif \if@tempTF % scratch boolean for local tests
-
+\newif \ifnocle@rtoend % Only developer uses true.
%% Global lengths are often passed around in `novel'.
%% But \setlength is not always global in effect.
@@ -327,11 +336,11 @@
%% Physical Layout Commands and Settings.
%% ----------------------------------------------------------------------------
%% Define user commands that over-ride class option pre-configured settings.
-%% Also sets a variety of miscellaneous lengths:s \parsep, \parindent, etc.
+%% Also sets a variety of miscellaneous lengths: \parsep, \parindent, etc.
\RequirePackage{novel-LayoutSettings}
-%% Language support.
+%% Use polyglossia:
%% ----------------------------------------------------------------------------
\RequirePackage{polyglossia}
\setdefaultlanguage[variant=american]{english} % may be changed by user
@@ -621,7 +630,7 @@
\string\xdef\string\@AllGoodImages{\@AllGoodImages}^^J%
\string\xdef\string\@UnknownImages{\@UnknownImages}^^J%
}%
- \cleartoend% adds 1 or 2 blanks, for final verso blank
+ \ifnocle@rtoend\else\cleartoend\fi%
\fi%
\fi%
}
diff --git a/macros/tex-in-practice b/macros/tex-in-practice
deleted file mode 120000
index 71c9f5d5ab..0000000000
--- a/macros/tex-in-practice
+++ /dev/null
@@ -1 +0,0 @@
-tip \ No newline at end of file
diff --git a/macros/tip b/macros/tip
deleted file mode 120000
index cec823dcc8..0000000000
--- a/macros/tip
+++ /dev/null
@@ -1 +0,0 @@
-../info/examples/tip \ No newline at end of file
diff --git a/info/whatstex/lit.dat b/obsolete/info/whatstex/lit.dat
index 1f6378b9c6..1f6378b9c6 120000
--- a/info/whatstex/lit.dat
+++ b/obsolete/info/whatstex/lit.dat
diff --git a/info/whatstex/lit.sel b/obsolete/info/whatstex/lit.sel
index c86c021f8e..c86c021f8e 100644
--- a/info/whatstex/lit.sel
+++ b/obsolete/info/whatstex/lit.sel
diff --git a/info/whatstex/wots.tex b/obsolete/info/whatstex/wots.tex
index d342f0f638..d342f0f638 100644
--- a/info/whatstex/wots.tex
+++ b/obsolete/info/whatstex/wots.tex
diff --git a/macros/ec-plain/00readme.doc b/obsolete/macros/ec-plain/00readme.doc
index 66db615f61..66db615f61 100644
--- a/macros/ec-plain/00readme.doc
+++ b/obsolete/macros/ec-plain/00readme.doc
diff --git a/macros/ec-plain/README b/obsolete/macros/ec-plain/README
index 2ba1706e78..2ba1706e78 120000
--- a/macros/ec-plain/README
+++ b/obsolete/macros/ec-plain/README
diff --git a/macros/ec-plain/acmacros.sty b/obsolete/macros/ec-plain/acmacros.sty
index e161d7efd6..e161d7efd6 100644
--- a/macros/ec-plain/acmacros.sty
+++ b/obsolete/macros/ec-plain/acmacros.sty
diff --git a/macros/ec-plain/dybx10.mf b/obsolete/macros/ec-plain/dybx10.mf
index 722592dfa9..722592dfa9 100644
--- a/macros/ec-plain/dybx10.mf
+++ b/obsolete/macros/ec-plain/dybx10.mf
diff --git a/macros/ec-plain/dybx12.mf b/obsolete/macros/ec-plain/dybx12.mf
index 2b460fbfd5..2b460fbfd5 100644
--- a/macros/ec-plain/dybx12.mf
+++ b/obsolete/macros/ec-plain/dybx12.mf
diff --git a/macros/ec-plain/dybx5.mf b/obsolete/macros/ec-plain/dybx5.mf
index cbe1c0bab1..cbe1c0bab1 100644
--- a/macros/ec-plain/dybx5.mf
+++ b/obsolete/macros/ec-plain/dybx5.mf
diff --git a/macros/ec-plain/dybx6.mf b/obsolete/macros/ec-plain/dybx6.mf
index a3d298a3cf..a3d298a3cf 100644
--- a/macros/ec-plain/dybx6.mf
+++ b/obsolete/macros/ec-plain/dybx6.mf
diff --git a/macros/ec-plain/dybx7.mf b/obsolete/macros/ec-plain/dybx7.mf
index 99c6ae3b19..99c6ae3b19 100644
--- a/macros/ec-plain/dybx7.mf
+++ b/obsolete/macros/ec-plain/dybx7.mf
diff --git a/macros/ec-plain/dybx8.mf b/obsolete/macros/ec-plain/dybx8.mf
index 8ecd0b2a89..8ecd0b2a89 100644
--- a/macros/ec-plain/dybx8.mf
+++ b/obsolete/macros/ec-plain/dybx8.mf
diff --git a/macros/ec-plain/dybx9.mf b/obsolete/macros/ec-plain/dybx9.mf
index 0a7832316a..0a7832316a 100644
--- a/macros/ec-plain/dybx9.mf
+++ b/obsolete/macros/ec-plain/dybx9.mf
diff --git a/macros/ec-plain/dymi10.mf b/obsolete/macros/ec-plain/dymi10.mf
index 7bfa592cfe..7bfa592cfe 100644
--- a/macros/ec-plain/dymi10.mf
+++ b/obsolete/macros/ec-plain/dymi10.mf
diff --git a/macros/ec-plain/dymi12.mf b/obsolete/macros/ec-plain/dymi12.mf
index e1b9f398ec..e1b9f398ec 100644
--- a/macros/ec-plain/dymi12.mf
+++ b/obsolete/macros/ec-plain/dymi12.mf
diff --git a/macros/ec-plain/dymi5.mf b/obsolete/macros/ec-plain/dymi5.mf
index b0921607cc..b0921607cc 100644
--- a/macros/ec-plain/dymi5.mf
+++ b/obsolete/macros/ec-plain/dymi5.mf
diff --git a/macros/ec-plain/dymi6.mf b/obsolete/macros/ec-plain/dymi6.mf
index ba4f8b30ff..ba4f8b30ff 100644
--- a/macros/ec-plain/dymi6.mf
+++ b/obsolete/macros/ec-plain/dymi6.mf
diff --git a/macros/ec-plain/dymi7.mf b/obsolete/macros/ec-plain/dymi7.mf
index 8a22845789..8a22845789 100644
--- a/macros/ec-plain/dymi7.mf
+++ b/obsolete/macros/ec-plain/dymi7.mf
diff --git a/macros/ec-plain/dymi8.mf b/obsolete/macros/ec-plain/dymi8.mf
index 997808f3c5..997808f3c5 100644
--- a/macros/ec-plain/dymi8.mf
+++ b/obsolete/macros/ec-plain/dymi8.mf
diff --git a/macros/ec-plain/dymi9.mf b/obsolete/macros/ec-plain/dymi9.mf
index a06ca59966..a06ca59966 100644
--- a/macros/ec-plain/dymi9.mf
+++ b/obsolete/macros/ec-plain/dymi9.mf
diff --git a/macros/ec-plain/ec-pdfplain.fmt b/obsolete/macros/ec-plain/ec-pdfplain.fmt
index f782620f7a..f782620f7a 100644
--- a/macros/ec-plain/ec-pdfplain.fmt
+++ b/obsolete/macros/ec-plain/ec-pdfplain.fmt
Binary files differ
diff --git a/macros/ec-plain/ec-pdfplain.tex b/obsolete/macros/ec-plain/ec-pdfplain.tex
index 398667a0d9..398667a0d9 100644
--- a/macros/ec-plain/ec-pdfplain.tex
+++ b/obsolete/macros/ec-plain/ec-pdfplain.tex
diff --git a/macros/ec-plain/ec-plain.fmt b/obsolete/macros/ec-plain/ec-plain.fmt
index 09ccec42f2..09ccec42f2 100644
--- a/macros/ec-plain/ec-plain.fmt
+++ b/obsolete/macros/ec-plain/ec-plain.fmt
Binary files differ
diff --git a/macros/ec-plain/ec-plain.tex b/obsolete/macros/ec-plain/ec-plain.tex
index 38ee66fff5..38ee66fff5 100644
--- a/macros/ec-plain/ec-plain.tex
+++ b/obsolete/macros/ec-plain/ec-plain.tex
diff --git a/macros/ec-plain/ec-plfmt.bat b/obsolete/macros/ec-plain/ec-plfmt.bat
index dc7b25e39d..dc7b25e39d 100644
--- a/macros/ec-plain/ec-plfmt.bat
+++ b/obsolete/macros/ec-plain/ec-plfmt.bat
diff --git a/macros/ec-plain/ecbxmath.mf b/obsolete/macros/ec-plain/ecbxmath.mf
index 686db6ea04..686db6ea04 100644
--- a/macros/ec-plain/ecbxmath.mf
+++ b/obsolete/macros/ec-plain/ecbxmath.mf
diff --git a/macros/ec-plain/ecmathit.mf b/obsolete/macros/ec-plain/ecmathit.mf
index 0f279acdc8..0f279acdc8 100644
--- a/macros/ec-plain/ecmathit.mf
+++ b/obsolete/macros/ec-plain/ecmathit.mf
diff --git a/macros/ec-plain/enhyph.tex b/obsolete/macros/ec-plain/enhyph.tex
index 74ee805b02..74ee805b02 100644
--- a/macros/ec-plain/enhyph.tex
+++ b/obsolete/macros/ec-plain/enhyph.tex
diff --git a/macros/ec-plain/enhyphex.tex b/obsolete/macros/ec-plain/enhyphex.tex
index efc05018d4..efc05018d4 100644
--- a/macros/ec-plain/enhyphex.tex
+++ b/obsolete/macros/ec-plain/enhyphex.tex
diff --git a/macros/ec-plain/eshyph.tex b/obsolete/macros/ec-plain/eshyph.tex
index f84bacfcf6..f84bacfcf6 100644
--- a/macros/ec-plain/eshyph.tex
+++ b/obsolete/macros/ec-plain/eshyph.tex
diff --git a/macros/ec-plain/exmi.mf b/obsolete/macros/ec-plain/exmi.mf
index c7fdc1bfd8..c7fdc1bfd8 100644
--- a/macros/ec-plain/exmi.mf
+++ b/obsolete/macros/ec-plain/exmi.mf
diff --git a/macros/ec-plain/exmi10.mf b/obsolete/macros/ec-plain/exmi10.mf
index 4d4506a6d0..4d4506a6d0 100644
--- a/macros/ec-plain/exmi10.mf
+++ b/obsolete/macros/ec-plain/exmi10.mf
diff --git a/macros/ec-plain/exmi10.tfm b/obsolete/macros/ec-plain/exmi10.tfm
index 83e8cf5803..83e8cf5803 100644
--- a/macros/ec-plain/exmi10.tfm
+++ b/obsolete/macros/ec-plain/exmi10.tfm
Binary files differ
diff --git a/macros/ec-plain/exmi12.mf b/obsolete/macros/ec-plain/exmi12.mf
index 5b097b0685..5b097b0685 100644
--- a/macros/ec-plain/exmi12.mf
+++ b/obsolete/macros/ec-plain/exmi12.mf
diff --git a/macros/ec-plain/exmi12.tfm b/obsolete/macros/ec-plain/exmi12.tfm
index 22d6adab78..22d6adab78 100644
--- a/macros/ec-plain/exmi12.tfm
+++ b/obsolete/macros/ec-plain/exmi12.tfm
Binary files differ
diff --git a/macros/ec-plain/exmi5.mf b/obsolete/macros/ec-plain/exmi5.mf
index 179d35e15c..179d35e15c 100644
--- a/macros/ec-plain/exmi5.mf
+++ b/obsolete/macros/ec-plain/exmi5.mf
diff --git a/macros/ec-plain/exmi5.tfm b/obsolete/macros/ec-plain/exmi5.tfm
index 86d355b82a..86d355b82a 100644
--- a/macros/ec-plain/exmi5.tfm
+++ b/obsolete/macros/ec-plain/exmi5.tfm
Binary files differ
diff --git a/macros/ec-plain/exmi6.mf b/obsolete/macros/ec-plain/exmi6.mf
index bb91119739..bb91119739 100644
--- a/macros/ec-plain/exmi6.mf
+++ b/obsolete/macros/ec-plain/exmi6.mf
diff --git a/macros/ec-plain/exmi6.tfm b/obsolete/macros/ec-plain/exmi6.tfm
index a3c3eb1271..a3c3eb1271 100644
--- a/macros/ec-plain/exmi6.tfm
+++ b/obsolete/macros/ec-plain/exmi6.tfm
Binary files differ
diff --git a/macros/ec-plain/exmi7.mf b/obsolete/macros/ec-plain/exmi7.mf
index 238b4dbe8b..238b4dbe8b 100644
--- a/macros/ec-plain/exmi7.mf
+++ b/obsolete/macros/ec-plain/exmi7.mf
diff --git a/macros/ec-plain/exmi7.tfm b/obsolete/macros/ec-plain/exmi7.tfm
index 1bf9c053bc..1bf9c053bc 100644
--- a/macros/ec-plain/exmi7.tfm
+++ b/obsolete/macros/ec-plain/exmi7.tfm
Binary files differ
diff --git a/macros/ec-plain/exmi8.mf b/obsolete/macros/ec-plain/exmi8.mf
index 8ffd90c684..8ffd90c684 100644
--- a/macros/ec-plain/exmi8.mf
+++ b/obsolete/macros/ec-plain/exmi8.mf
diff --git a/macros/ec-plain/exmi8.tfm b/obsolete/macros/ec-plain/exmi8.tfm
index 5fe39fb05b..5fe39fb05b 100644
--- a/macros/ec-plain/exmi8.tfm
+++ b/obsolete/macros/ec-plain/exmi8.tfm
Binary files differ
diff --git a/macros/ec-plain/exmi9.mf b/obsolete/macros/ec-plain/exmi9.mf
index 04a3675896..04a3675896 100644
--- a/macros/ec-plain/exmi9.mf
+++ b/obsolete/macros/ec-plain/exmi9.mf
diff --git a/macros/ec-plain/exmi9.tfm b/obsolete/macros/ec-plain/exmi9.tfm
index 066657adc3..066657adc3 100644
--- a/macros/ec-plain/exmi9.tfm
+++ b/obsolete/macros/ec-plain/exmi9.tfm
Binary files differ
diff --git a/macros/ec-plain/f8hyph1.tex b/obsolete/macros/ec-plain/f8hyph1.tex
index cb19b8714f..cb19b8714f 100644
--- a/macros/ec-plain/f8hyph1.tex
+++ b/obsolete/macros/ec-plain/f8hyph1.tex
diff --git a/macros/ec-plain/frhyphx1.tex b/obsolete/macros/ec-plain/frhyphx1.tex
index e3216c5c30..e3216c5c30 100644
--- a/macros/ec-plain/frhyphx1.tex
+++ b/obsolete/macros/ec-plain/frhyphx1.tex
diff --git a/macros/ec-plain/ghyph31.tex b/obsolete/macros/ec-plain/ghyph31.tex
index de252327ef..de252327ef 100644
--- a/macros/ec-plain/ghyph31.tex
+++ b/obsolete/macros/ec-plain/ghyph31.tex
diff --git a/macros/ec-plain/hyacceur.tex b/obsolete/macros/ec-plain/hyacceur.tex
index bf82e6fa18..bf82e6fa18 100644
--- a/macros/ec-plain/hyacceur.tex
+++ b/obsolete/macros/ec-plain/hyacceur.tex
diff --git a/macros/ec-plain/hyconfig.ptx b/obsolete/macros/ec-plain/hyconfig.ptx
index fab2b200e9..fab2b200e9 100644
--- a/macros/ec-plain/hyconfig.ptx
+++ b/obsolete/macros/ec-plain/hyconfig.ptx
diff --git a/macros/ec-plain/ithyph.tex b/obsolete/macros/ec-plain/ithyph.tex
index 36c20829d0..36c20829d0 100644
--- a/macros/ec-plain/ithyph.tex
+++ b/obsolete/macros/ec-plain/ithyph.tex
diff --git a/macros/ec-plain/language.dat b/obsolete/macros/ec-plain/language.dat
index 5a1c24d0ee..5a1c24d0ee 100644
--- a/macros/ec-plain/language.dat
+++ b/obsolete/macros/ec-plain/language.dat
diff --git a/macros/ec-plain/make-musixtex-format.bat b/obsolete/macros/ec-plain/make-musixtex-format.bat
index fbcfae5aa0..fbcfae5aa0 100644
--- a/macros/ec-plain/make-musixtex-format.bat
+++ b/obsolete/macros/ec-plain/make-musixtex-format.bat
diff --git a/macros/ec-plain/ofgreekl.mf b/obsolete/macros/ec-plain/ofgreekl.mf
index 640e25a1ee..640e25a1ee 100644
--- a/macros/ec-plain/ofgreekl.mf
+++ b/obsolete/macros/ec-plain/ofgreekl.mf
diff --git a/macros/ec-plain/ofgreeku.mf b/obsolete/macros/ec-plain/ofgreeku.mf
index f6e8021196..f6e8021196 100644
--- a/macros/ec-plain/ofgreeku.mf
+++ b/obsolete/macros/ec-plain/ofgreeku.mf
diff --git a/support/TeX4ht/source/ChangeLog b/support/TeX4ht/source/ChangeLog
index a268359b24..427adcd3d4 100644
--- a/support/TeX4ht/source/ChangeLog
+++ b/support/TeX4ht/source/ChangeLog
@@ -1,3 +1,12 @@
+2024-01-30 Michal Hoftich <michal.h21@gmail.com>
+
+ * tex4ht-html4.tex (html4.4ht): fixed nested links in footnotes.
+ https://tex.stackexchange.com/a/708335/2891
+
+ * tex4ht-mathml.tex (mathml.4ht): prevent spurious opening <p> tags
+ in \boxed commands.
+ https://tex.stackexchange.com/a/708306/2891
+
2024-01-29 Michal Hoftich <michal.h21@gmail.com>
* tex4ht-ooffice.tex (ooffice-mml.4ht),
diff --git a/support/TeX4ht/source/tex4ht-html4.tex b/support/TeX4ht/source/tex4ht-html4.tex
index 82cd70f74a..38ac28f4d8 100644
--- a/support/TeX4ht/source/tex4ht-html4.tex
+++ b/support/TeX4ht/source/tex4ht-html4.tex
@@ -1,4 +1,4 @@
-% $Id: tex4ht-html4.tex 1453 2024-01-24 22:08:34Z karl $
+% $Id: tex4ht-html4.tex 1457 2024-01-30 20:48:28Z michal_h21 $
% Compile 4 times: latex tex4ht-html4
% Copy html4.4ht into the work directory before all but the last compilation.
%
@@ -5119,8 +5119,8 @@ The `index=i' provides the initial setting.
\<default offline footnote text\><<<
\Configure{footnotetext}
{|<open footnote page|>%
- |<fn mark sup|>\Link{}{|<footnote id|>}%
- \NoFonts\AnchorLabel
+ |<fn mark sup|>\AnchorLabel\Link{}{|<footnote id|>}%
+ \NoFonts%
}
{\EndNoFonts \EndLink|<fn mark end sup|>}
{|<close footnote page|>}
diff --git a/support/TeX4ht/source/tex4ht-mathml.tex b/support/TeX4ht/source/tex4ht-mathml.tex
index b5cc838ebd..acdc463ecb 100644
--- a/support/TeX4ht/source/tex4ht-mathml.tex
+++ b/support/TeX4ht/source/tex4ht-mathml.tex
@@ -1,4 +1,4 @@
-% $Id: tex4ht-mathml.tex 1455 2024-01-29 13:45:00Z michal_h21 $$
+% $Id: tex4ht-mathml.tex 1456 2024-01-30 16:31:58Z michal_h21 $$
% compile 3 times: latex tex4ht-mathltx
% or xhlatex tex4ht-mathltx "html,3,sections+"
%
@@ -5012,7 +5012,7 @@ tail>>>
\<configure mathml amsmath\><<<
\Configure{boxed}
{\ifmathml \Tg<\a:mathml menclose \a:mathml notation="box">\Tg<\a:mathml mrow>%
- \else \HCode{<span class="boxed">}\IgnorePar\fi}
+ \else \HCode{<span class="boxed">}\fi\IgnorePar}
{\ifmathml \Tg</\a:mathml mrow>\Tg</\a:mathml menclose>%
\else \HCode{</span>}\fi}
\Css{.boxed{border: 1px solid black; padding-left:2px;
diff --git a/support/latexmk/CHANGES b/support/latexmk/CHANGES
index 84a8944de9..1a2cc620fd 100644
--- a/support/latexmk/CHANGES
+++ b/support/latexmk/CHANGES
@@ -895,3 +895,14 @@ From v. 4.82 to 4.82a
about "Use of uninitialized value $_" were given, and some corresponding
dependencies were incorrectly treated.
+From v. 4.82a to 4.83
+ Fix bug that sometimes biber is incorrectly run after a *latex run
+ results in an error, with biber then giving an error.
+ Fix problem that if -gg is used with multiple files specified on command
+ line, then generated files are deleted for all by the last file
+ compiled. (So that -gg wasn't working as intended in this case.)
+ Fixed some bugs with incorrect variable scope. (These bugs gave
+ incomprehensible error messages about undefined variables!)
+ Restrict warning diagnostics about ^^ constructs in aux file to those
+ involving non-trivial Unicode characters, as against things like ^^M.
+
diff --git a/support/latexmk/INSTALL b/support/latexmk/INSTALL
index 8e7a73304a..1eca0ad101 100644
--- a/support/latexmk/INSTALL
+++ b/support/latexmk/INSTALL
@@ -1,6 +1,6 @@
INSTALLING latexmk
==================
- (Version 4.82a, 10 Jan. 2024)
+ (Version 4.83, 31 Jan. 2024)
John Collins
Physics Department
diff --git a/support/latexmk/README b/support/latexmk/README
index 4d34afe9ff..466ea9e3d1 100644
--- a/support/latexmk/README
+++ b/support/latexmk/README
@@ -1,5 +1,5 @@
-Latexmk, version 4.82a, 10 Jan 2024
------------------------------------
+Latexmk, version 4.83, 31 Jan 2024
+----------------------------------
Latexmk completely automates the process of generating a LaTeX
document. Essentially, it is a highly specialized cousin of the
diff --git a/support/latexmk/latexmk.1 b/support/latexmk/latexmk.1
index cac97f47f1..85fc6ed20e 100644
--- a/support/latexmk/latexmk.1
+++ b/support/latexmk/latexmk.1
@@ -1,10 +1,10 @@
-.TH LATEXMK 1 "10 January 2024" ""
+.TH LATEXMK 1 "31 January 2024" ""
.SH NAME
latexmk \- generate LaTeX document
.SH SYNOPSIS
.B latexmk [options] [file ...]
.SH DESCRIPTION
-.I Latexmk
+.I Latexmk
completely automates the process of compiling a LaTeX document.
Essentially, it is like a specialized relative of the general
\fImake\fR utility, but one which determines dependencies
@@ -12,7 +12,7 @@ automatically and has some other very useful features. In its basic
mode of operation \fIlatexmk\fR is given the name of the primary
source file for a document, and it issues the appropriate sequence of
commands to generate a .dvi, .ps, .pdf and/or hardcopy version of the
-document.
+document.
.PP
By default \fIlatexmk\fR will run the commands necessary to generate
a .dvi file, which copies the behavior of earlier versions when only
@@ -167,7 +167,7 @@ the behavior of \fIlatex\fR etc, and deals with problems that occasionally
result from filenames that have been incorrectly quoted on the command
line. \fIIn addition\fR, under Microsoft Windows, the forward slash
character "\\" is a directory separator, so \fIlatexmk\fR replaces it
-by a backward slash "/", which is also a legal directory separator in
+by a forward slash "/", which is also a legal directory separator in
Windows, and is accepted by \fIlatex\fR etc.
.TP
@@ -2226,7 +2226,7 @@ Array of regular expressions specifying messages in log file that are
officially treated as warnings rather than errors by *latex, but which a
user may treat as errors: See \fI$bad_warning_is_error\fR.
-Currently the default set of these warnings is those about \\end occuring
+Currently the default set of these warnings is those about \\end occurring
inside constructs.
.TP
@@ -2776,7 +2776,7 @@ look at the definition of \fI@file_not_found\fR in the latexmk.pl file.
In the regular expression, the string for the name of the missing file
should be enclosed in parentheses. That carries the implication that after
-latexmk gets a succesful match to the pattern, the variable $1 is set to
+latexmk gets a successful match to the pattern, the variable $1 is set to
the filename, which is then picked up by latexmk.
If you happen to encounter a package that gives a missing file message of a
@@ -4469,7 +4469,7 @@ e-mail addresses are not written in their standard form to avoid being
harvested too easily.)
.SH AUTHOR
Current version, by John Collins
-(Version 4.82a).
+(Version 4.83).
Report bugs etc to his e-mail (jcc8 at psu.edu).
Released version can be obtained from CTAN:
diff --git a/support/latexmk/latexmk.pdf b/support/latexmk/latexmk.pdf
index f18c22657c..19f863e8c7 100644
--- a/support/latexmk/latexmk.pdf
+++ b/support/latexmk/latexmk.pdf
Binary files differ
diff --git a/support/latexmk/latexmk.pl b/support/latexmk/latexmk.pl
index 0b7e0ecb32..44ee6a05a7 100755
--- a/support/latexmk/latexmk.pl
+++ b/support/latexmk/latexmk.pl
@@ -1,12 +1,8 @@
#!/usr/bin/env perl
use warnings;
+use strict;
-
-# 9, 10 Jan 2024 Fix localization of $_ in while loops that read file.
-# That fixes problems with use of %hash_calc_ignore_pattern,
-# which gave uninitialized $_ warnings.
-
-## Copyright John Collins 1998-2023
+## Copyright John Collins 1998-2024
## (username jcc8 at node psu.edu)
## (and thanks to David Coppit (username david at node coppit.org)
## for suggestions)
@@ -45,13 +41,14 @@ use warnings;
## 20 = probable bug
## or retcode from called program.
+our ($my_name, $My_name, $version_num, $version_details);
BEGIN {
# Make sure the following are available when printing diagnostics in BEGIN
# blocks.
$my_name = 'latexmk';
$My_name = 'Latexmk';
- $version_num = '4.82a';
- $version_details = "$My_name, John Collins, 10 Jan. 2024. Version $version_num";
+ $version_num = '4.83';
+ $version_details = "$My_name, John Collins, 31 Jan. 2024. Version $version_num";
}
use Config;
@@ -63,7 +60,7 @@ use File::Spec::Functions qw( catfile file_name_is_absolute rel2abs );
# It's either File::Glob::bsd_glob or File::Glob::glob
# The first does not exist in old versions of Perl, while the second
# is deprecated in more recent versions and will be removed
-$have_bsd_glob = 0;
+our $have_bsd_glob = 0;
use File::Glob;
if ( eval{ File::Glob->import('bsd_glob'); 1; } ) {
# Success in importing bsd_glob
@@ -116,7 +113,8 @@ BEGIN {
#
use Encode qw( decode encode );
use Unicode::Normalize;
-use utf8; # For UTF-8 strings in **this** script
+use utf8; # Strings are coded in UTF-8 in this file, stored internally
+ # decoded into Perl's internal character representation.
use feature 'unicode_strings';
use feature 'say';
@@ -149,8 +147,7 @@ use feature 'say';
# My default CSs: UTF-8
-our $CS_system;
-$CS_system = 'UTF-8';
+our $CS_system = 'UTF-8';
# Quick short cut for tests of whether conversions needed:
our $no_CP_conversions = 1;
@@ -205,138 +202,13 @@ END {
########################################################
-#************************************************************
-#************************************************************
-# Unicode manipuation and normalization
-# Notes about Perl strings:
-# 1. Strings have a flag utf8.
-# a. If the utf8 flag is on, the string is to be interpreted as a sequence
-# of code points.
-# When "use utf8;" is used, a string containing non-ASCII characters
-# has the utf8 flag set.
-# If 'no bytes;' is in effect, the ordinal value for each item in the
-# string is the Unicode code point value.
-# b. If the utf8 flag is off for a string, the string is a sequence of
-# bytes, to be interpreted according to whatever CS the user happens
-# to choose to use.
-# c. The utf8 flag is NOT to be interpreted as saying that the string is
-# encoded as UTF-8, even though under the hood that may be the case.
-# d. Indeed, setting 'use bytes;' appears to expose the internal
-# byte-level representation of a string with the utf8 flag set, and
-# that appears to be UTF-8.
-# 2. The utf8 flag is quite confusing in its meaning.
-# 3. When encode is applied to a string whose utf8 flag is on, the result
-# is a string with the utf8 flag off, and the result consists of a sequence
-# of bytes in the chosen encoding scheme, which may be chosen as UTF-8.
-# 4. Strings received from the command line have the utf8 flag off and are
-# encoded in whatever CS the OS/terminal is using.
-# 5. When a string is supplied to print (or c), by default:
-# a. If the utf8 flag is off or if 'use bytes;' is in effect, then the
-# string is sent as a sequence of bytes. They are UTF-8 coded if
-# the utf8 flag is on and 'use bytes;' is in effect.
-# b. If the utf8 flag is on and if 'no bytes;' is in effect, then mostly
-# garbage results for non-ASCII characters; the string must first be
-# encoded as a byte string, in the CS suitable for the OS.
-# c. Correct results are obtained when the utf8 flag is on and 'no bytes'
-# is used when the binmode for the file handle is set suitably.
-# 6. Generally OS calls and interactions with the OS need encoded byte strings.
-# 7. Even more generally, interaction with the external world, including file
-# contents is in terms of byte strings, with some CS chosen by default, by
-# the user, or the OS. Unix-like OSs: Default is UTF-8, but as much by
-# convention as by a requirement of the OS.
-
-#-------------------------------------
-
-sub utf8_to_mine {
- # Given string encoded in UTF-8, return encoded string in my current CS.
- # Don't use Encode::from_to, which does in-place conversion.
- if ($no_CP_conversions) { return $_[0]; }
- else { return encode( $CS_system, decode('UTF-8', $_[0])); }
-}
-
-#-------------------------------------
-
-sub utf8_to_mine_errors {
- # Given string encoded in UTF-8, return encoded string in my current CS.
- # Don't use Encode::from_to, which does in-place conversion.
- # Assume coding of input string is correctly UTF-8, but
- # check for correct encoding in CS_system.
- # Error message is returned in $@. No error => $@ is null string.
- # (Same style as eval!)
- $@ = '';
- if ($no_CP_conversions) { return $_[0]; }
- else {
- my $result = '';
- eval {
- $result = encode( $CS_system,
- decode('UTF-8', $_[0]),
- Encode::FB_CROAK | Encode::LEAVE_SRC
- );
- };
- return $result;
- }
-}
-
-#-------------------------------------
-
-sub config_to_mine {
- # Ensure that configuration strings about files and directories are
- # encoded in system CS.
- # Configuration strings set in an rc file SHOULD either be:
- # a. ASCII only, with Perl's utf8 flag off.
- # b. Containing non-ASCII characters, with utf8 flag on.
- # These need to be converted to encoded strings in system CS (and
- # hence with utf8 flag off).
- # Configuration variables set from the command line, e.g., from an
- # -outdir=... option, are already in the system CS, because that is
- # how strings are passed on the command line.
- # So we just need to do a conversion for strings with utf8 flag on:
- foreach ( $out_dir, $aux_dir, @default_files, @default_excluded_files ) {
- if (utf8::is_utf8($_)) { $_ = encode( $CS_system, $_ ); }
- }
-} #END config_to_mine
-
-#************************************************************
-
-sub mine_to_utf8 {
- # Given string encoded in my current CS, return utf-8 encoded string.
- # Don't use Encode::from_to, which does in-place conversion.
- if ($no_CP_conversions) { return $_[0]; }
- else { return encode( 'UTF-8', decode($CS_system, $_[0])); }
-}
-
-#-------------------------------------
-
-sub is_valid_utf8 {
- eval { decode( 'UTF-8', $_[0], (Encode::FB_CROAK | Encode::LEAVE_SRC ) ); };
- if ($@) { return 0; }
- else { return 1; }
-}
-
-#-------------------------------------
-
-sub fprint8 {
- # Usage: fprint8( handle, data array)
- # Write to file converting from my CS to UTF-8
- my $fh = shift;
- print $fh mine_to_utf8( join( '', @_ ) );
-}
-
-#-------------------------------------
-
-################################################################
-
-
-
-
################################################################
################################################################
#============ Deal with how I'm invoked: name and CL args:
# Name that I'm invoked with indicates default behavior (latexmk
# v. pdflatexmk, etc):
-(our $invoked_name) = fileparseA($0);
-
+our ($invoked_name) = fileparseA($0);
# Save name, since I override it if I don't recognize it
our $invoked_kind = $invoked_name;
print "$My_name: Invoked as '$invoked_name'\n"
@@ -347,7 +219,7 @@ print "$My_name: Invoked as '$invoked_name'\n"
# rc files and CL args, no values are set for any of these variables.
# Thus default compilation for latexmk is by latex,
# for pdflatexmk is by pdflatex, etc.
-%compilation_defaults =
+our %compilation_defaults =
( 'latexmk' => [1,0,0,0],
'lualatexmk' => [0,0,4,0],
'pdflatexmk' => [0,0,1,0],
@@ -360,17 +232,13 @@ unless (exists $compilation_defaults{$invoked_name}) { $invoked_name = 'latexmk'
################################################################
################################################################
-# The following variables are assigned once and then used in symbolic
-# references, so we need to avoid warnings 'name used only once':
-use vars qw( $dvi_update_command $ps_update_command $pdf_update_command
- $aux_dir_requested $out_dir_requested );
# Translation of signal names to numbers and vv:
-%signo = ();
-@signame = ();
+our %signo = ();
+our @signame = ();
if ( defined $Config{sig_name} ) {
my $i = 0;
- foreach $name (split('\s+', $Config{sig_name})) {
+ foreach my $name (split('\s+', $Config{sig_name})) {
$signo{$name} = $i;
$signame[$i] = $name;
$i++;
@@ -384,11 +252,11 @@ else {
# Line length in log file that indicates wrapping.
# This number EXCLUDES line-end characters, and is one-based.
# It is the parameter max_print_line in the TeX program. (tex.web)
-$log_wrap = 79;
+our $log_wrap = 79;
# Expected biggest construct in log file in bytes.
# Use to limit number of (potentially) wrapped lines to combine into single line.
-$max_log_construct = 600;
+our $max_log_construct = 600;
# Whether to search for ^^ notation in log file for non-7-bit characters,
# and convert to bytes. (Note: ^^ notation is produced by hilatex in
@@ -397,7 +265,7 @@ $max_log_construct = 600;
# gives it if -translate-file=empty is used.)
# Should also do same with aux files, but I've not done that yet. ????
# fls file is always UTF-8.
-$conv_hathat = 1;
+our $conv_hathat = 1;
#########################################################################
## Default parsing and file-handling settings
@@ -410,7 +278,7 @@ $conv_hathat = 1;
## Add items by push, e.g.,
## push @file_not_found, '^No data file found `([^\\\']*)\\\'';
## will give match to line starting "No data file found `filename'"
-@file_not_found = (
+our @file_not_found = (
'^No file\\s+(.*)\\.$',
'^No file\\s+(.+)\s*$',
'^\\! LaTeX Error: File `([^\\\']*)\\\' not found\\.',
@@ -428,13 +296,13 @@ $conv_hathat = 1;
# that we will call bad warnings. They are not treated as errors by
# *latex, but depending on the $bad_warning_is_error setting
# we will treat as if they were actual errors.
-@bad_warnings = (
+our @bad_warnings = (
# Remember: \\ in perl inside single quotes gives a '\', so we need
# '\\\\' to get '\\' in the regexp.
'^\(\\\\end occurred when .* was incomplete\)',
'^\(\\\\end occurred inside .*\)',
);
-$bad_warning_is_error = 0;
+our $bad_warning_is_error = 0;
# Characters that we won't allow in the name of a TeX file.
# Notes: Some are disallowed by TeX itself.
@@ -442,12 +310,12 @@ $bad_warning_is_error = 0;
# '$' results in possible variable substitution by kpsewhich called from tex.
# '"' gets special treatment.
# See subroutine test_fix_texnames and its call for their use.
-$illegal_in_texname = "\x00\t\f\n\r\$%\\~\x7F";
+our $illegal_in_texname = "\x00\t\f\n\r\$%\\~\x7F";
# Whether to normalize aux_dir and out_dir where possible.
# This is important when these directories aren't subdirectories of the cwd,
# and TeXLive's makeindex and/or bibtex are used.
-$normalize_names = 2; # Strongest kind.
+our $normalize_names = 2; # Strongest kind.
## Hash mapping file extension (w/o period, e.g., 'eps') to a single regexp,
# whose matching by a line in a file with that extension indicates that the
@@ -463,13 +331,13 @@ $normalize_names = 2; # Strongest kind.
# or (b) its hash changes
# So it is useful to ignore lines in the hash calculation only if they
# are of a fixed size (as with a date/time stamp).
-%hash_calc_ignore_pattern =();
+our %hash_calc_ignore_pattern =();
# Specification of templates for extra rules.
# See subroutine rdb_initialize_rules for examples of rule templates, and
# how they get used to construct rules.
# (Documentation obviously needs to be improved!)
-%extra_rule_spec = ();
+our %extra_rule_spec = ();
#??????? !!!!!!!!! If @aux_hooks and @latex_file_hooks are still needed,
@@ -513,42 +381,44 @@ $hooks{latex_file_hooks} = \@latex_file_hooks;
## Which TeX distribution is being used
## E.g., "MiKTeX 2.9", "TeX Live 2018"
## "" means not determined. Obtain from first line of .log file.
-$tex_distribution = '';
+our $tex_distribution = '';
# List of known *latex rules:
-%possible_primaries = ( 'dvilualatex' => 'primary', 'hilatex' => 'primary',
+our %possible_primaries = ( 'dvilualatex' => 'primary', 'hilatex' => 'primary',
'latex' => 'primary',
'lualatex' => 'primary', 'pdflatex' => 'primary',
- 'xelatex' => 'primary' );
+ 'xelatex' => 'primary' );
+# Command strings for them:
+our ($dvilualatex, $hilatex, $latex, $lualatex, $pdflatex, $xelatex );
std_tex_cmds();
# Possible code to execute by *latex before inputting source file.
# Not used by default.
-$pre_tex_code = '';
+our $pre_tex_code = '';
## Default switches:
-$hilatex_default_switches = '';
-$latex_default_switches = '';
-$pdflatex_default_switches = '';
-$dvilualatex_default_switches = '';
-$lualatex_default_switches = '';
+our $hilatex_default_switches = '';
+our $latex_default_switches = '';
+our $pdflatex_default_switches = '';
+our $dvilualatex_default_switches = '';
+our $lualatex_default_switches = '';
# Note that xelatex is used to give xdv file, not pdf file, hence
# we need the -no-pdf option.
-$xelatex_default_switches = '-no-pdf';
+our $xelatex_default_switches = '-no-pdf';
## Switch(es) to make them silent:
-$hilatex_silent_switch = '-interaction=batchmode';
-$latex_silent_switch = '-interaction=batchmode';
-$pdflatex_silent_switch = '-interaction=batchmode';
-$dvilualatex_silent_switch = '-interaction=batchmode';
-$lualatex_silent_switch = '-interaction=batchmode';
-$xelatex_silent_switch = '-interaction=batchmode';
+our $hilatex_silent_switch = '-interaction=batchmode';
+our $latex_silent_switch = '-interaction=batchmode';
+our $pdflatex_silent_switch = '-interaction=batchmode';
+our $dvilualatex_silent_switch = '-interaction=batchmode';
+our $lualatex_silent_switch = '-interaction=batchmode';
+our $xelatex_silent_switch = '-interaction=batchmode';
# Whether to emulate -aux-directory, so we can use it on system(s) (TeXLive)
# that don't support it:
-$emulate_aux = 1;
+our $emulate_aux = 1;
# Whether emulate_aux had to be switched on during a run:
-$emulate_aux_switched = 0;
+our $emulate_aux_switched = 0;
#--------------------
# Specification of extensions/files that need special treatment,
@@ -557,25 +427,25 @@ $emulate_aux_switched = 0;
# %input_extensions maps primary_rule_name to pointer to hash of file extensions
# used for extensionless files specified in the source file by constructs
# like \input{file} \includegraphics{file}
-%input_extensions = ();
+our %input_extensions = ();
set_input_ext( 'latex', 'tex', 'eps' );
set_input_ext( 'pdflatex', 'tex', 'jpg', 'pdf', 'png' );
$input_extensions{lualatex} = $input_extensions{pdflatex};
$input_extensions{xelatex} = $input_extensions{pdflatex};
# Save these values as standards to be used when switching output,
# i.e., when actual primary rule differs from standard.
-%standard_input_extensions = %input_extensions;
+our %standard_input_extensions = %input_extensions;
# Possible extensions for main output file of *latex:
-%allowed_output_ext = ( ".dvi" => 1, ".xdv" => 1, ".pdf" => 1 );
+our %allowed_output_ext = ( ".dvi" => 1, ".xdv" => 1, ".pdf" => 1 );
# Extensions etc, of special use by latexmk
-$save_error_suffix = '-SAVE-ERROR'; # Suffix to be added to filename, when an
+our $save_error_suffix = '-SAVE-ERROR'; # Suffix to be added to filename, when an
# erroneous file is saved insted of being deleted.
-$fdb_ext = 'fdb_latexmk'; # Extension for the file for latexmk's
+our $fdb_ext = 'fdb_latexmk'; # Extension for the file for latexmk's
# file-database
# Make it long to avoid possible collisions.
-$fdb_ver = 4; # Version number for kind of fdb_file.
+our $fdb_ver = 4; # Version number for kind of fdb_file.
# Variables relevant to specifying cleanup.
@@ -609,28 +479,28 @@ $fdb_ver = 4; # Version number for kind of fdb_file.
# bbl files get special treatment because their deletion is conditional
# and because of the possibility of extra bibtex/biber rules with
# non-standard basename.
-@generated_exts = ( 'aux', 'bcf', 'bcf'.$save_error_suffix, 'fls',
+our @generated_exts = ( 'aux', 'bcf', 'bcf'.$save_error_suffix, 'fls',
'idx', 'ind', 'lof', 'lot',
'out', 'run.xml', 'toc',
'blg', 'ilg', 'log',
'xdv'
);
# N.B. 'out' is generated by hyperref package
-$clean_ext = ""; # For backward compatibility: Space separated
+our $clean_ext = ""; # For backward compatibility: Space separated
# extensions to be added to @generated_exts after
# startup (and rc file reading).
# Extensions of files to be deleted by -C, but aren't normally included
# in the small clean up by -c. Analogous to @generated_exts and $clean_ext,
# except that pattern rules (with %R) aren't applied.
-@final_output_exts = ( 'dvi', 'dviF', 'hnt', 'ps', 'psF', 'pdf',
+our @final_output_exts = ( 'dvi', 'dviF', 'hnt', 'ps', 'psF', 'pdf',
'synctex', 'synctex.gz' );
-$clean_full_ext = "";
+our $clean_full_ext = "";
# Set of extra specific files to be deleted in small cleanup. These are
# ones that get generated under some kinds of error conditions. All cases:
# Relative to current directory, and relative to aux and out directories.
-@std_small_cleanup_files = ( 'texput.log', "texput.aux", "missfont.log" );
+our @std_small_cleanup_files = ( 'texput.log', "texput.aux", "missfont.log" );
#-------------------------
@@ -639,8 +509,8 @@ $clean_full_ext = "";
# Option without arg. maps to itself.
# Option with arg. maps the option part to the full specification
# e.g., -kpathsea-debug => -kpathsea-debug=NUMBER
-%allowed_latex_options = ();
-%allowed_latex_options_with_arg = ();
+our %allowed_latex_options = ();
+our %allowed_latex_options_with_arg = ();
foreach (
#####
# TeXLive options
@@ -770,21 +640,21 @@ foreach (
# These need to be stored until after the command line parsing is finished,
# in case the values of $latex and/or $pdflatex change after an option
# is added.
-@extra_dvilualatex_options = ();
-@extra_hilatex_options = ();
-@extra_latex_options = ();
-@extra_pdflatex_options = ();
-@extra_lualatex_options = ();
-@extra_xelatex_options = ();
+our @extra_dvilualatex_options = ();
+our @extra_hilatex_options = ();
+our @extra_latex_options = ();
+our @extra_pdflatex_options = ();
+our @extra_lualatex_options = ();
+our @extra_xelatex_options = ();
## Command to invoke biber & bibtex
-$biber = 'biber %O %S';
-$bibtex = 'bibtex %O %S';
+our $biber = 'biber %O %S';
+our $bibtex = 'bibtex %O %S';
# Switch(es) to make biber & bibtex silent:
-$biber_silent_switch = '--onlylog';
-$bibtex_silent_switch = '-terse';
-$bibtex_use = 1; # Whether to actually run bibtex to update bbl files.
+our $biber_silent_switch = '--onlylog';
+our $bibtex_silent_switch = '-terse';
+our $bibtex_use = 1; # Whether to actually run bibtex to update bbl files.
# This variable is also used in deciding whether to
# delete bbl files in clean up operations.
# 0: Never run bibtex.
@@ -802,7 +672,7 @@ $bibtex_use = 1; # Whether to actually run bibtex to update bbl files.
#
# In any event bibtex is only run if the log file
# indicates that the document uses bbl files.
-$bibtex_fudge = 1; # Whether or not to cd to aux dir when running bibtex.
+our $bibtex_fudge = 1; # Whether or not to cd to aux dir when running bibtex.
# If the cd is not done, and bibtex is passed a
# filename with a path component, then it can easily
# happen that (a) bibtex refuses to write bbl and blg
@@ -812,10 +682,10 @@ $bibtex_fudge = 1; # Whether or not to cd to aux dir when running bibtex.
# method fails.
## Command to invoke makeindex
-$makeindex = 'makeindex %O -o %D %S';
+our $makeindex = 'makeindex %O -o %D %S';
# Switch(es) to make makeinex silent:
-$makeindex_silent_switch = '-q';
-$makeindex_fudge = 1; # Whether or not to cd to aux dir when running makeindex.
+our $makeindex_silent_switch = '-q';
+our $makeindex_fudge = 1; # Whether or not to cd to aux dir when running makeindex.
# Set to 1 to avoid security-related prohibition on
# makeindex writing to aux_dir when it is not specified
# as a subdirectory of cwd.
@@ -823,73 +693,95 @@ $makeindex_fudge = 1; # Whether or not to cd to aux dir when running makeindex.
## Command to convert dvi file to pdf file directly.
# Use option -dALLOWPSTRANSPARENCY so that it works with documents
# using pstricks etc:
-$dvipdf = 'dvipdf -dALLOWPSTRANSPARENCY %O %S %D';
+our $dvipdf = 'dvipdf -dALLOWPSTRANSPARENCY %O %S %D';
# N.B. Standard dvipdf runs dvips and gs with their silent switch, so for
# standard dvipdf $dvipdf_silent_switch is unneeded, but innocuous.
# But dvipdfmx can be used instead, and it has a silent switch (-q).
# So implementing $dvipdf_silent_switch is useful.
-$dvipdf_silent_switch = '-q';
+our $dvipdf_silent_switch = '-q';
## Command to convert dvi file to ps file:
-$dvips = 'dvips %O -o %D %S';
+our $dvips = 'dvips %O -o %D %S';
## Command to convert dvi file to ps file in landscape format:
-$dvips_landscape = 'dvips -tlandscape %O -o %D %S';
+our $dvips_landscape = 'dvips -tlandscape %O -o %D %S';
# Switch(es) to get dvips to make ps file suitable for conversion to good pdf:
# (If this is not used, ps file and hence pdf file contains bitmap fonts
# (type 3), which look horrible under acroread. An appropriate switch
# ensures type 1 fonts are generated. You can put this switch in the
# dvips command if you prefer.)
-$dvips_pdf_switch = '-P pdf';
+our $dvips_pdf_switch = '-P pdf';
# Switch(es) to make dvips silent:
-$dvips_silent_switch = '-q';
+our $dvips_silent_switch = '-q';
## Command to convert ps file to pdf file.
# Use option -dALLOWPSTRANSPARENCY so that it works with documents
# using pstricks etc:
-$ps2pdf = 'ps2pdf -dALLOWPSTRANSPARENCY %O %S %D';
+our $ps2pdf = 'ps2pdf -dALLOWPSTRANSPARENCY %O %S %D';
## Command to convert xdv file to pdf file
-$xdvipdfmx = 'xdvipdfmx -E -o %D %O %S';
-$xdvipdfmx_silent_switch = '-q';
+our $xdvipdfmx = 'xdvipdfmx -E -o %D %O %S';
+our $xdvipdfmx_silent_switch = '-q';
## Command to search for tex-related files
-$kpsewhich = 'kpsewhich %S';
+our $kpsewhich = 'kpsewhich %S';
## Command to run make:
-$make = 'make';
+our $make = 'make';
##Printing:
-$print_type = 'auto'; # When printing, print the postscript file.
+our $print_type = 'auto'; # When printing, print the postscript file.
# Possible values: 'dvi', 'ps', 'pdf', 'auto', 'none'
# 'auto' ==> set print type according to the printable
# file(s) being made: priority 'ps', 'pdf', 'dvi'
# Viewers. These are system dependent, so default to none:
+our ( $pdf_previewer, $ps_previewer, $ps_previewer_landscape, $dvi_previewer,
+ $dvi_previewer_landscape, $hnt_previewer );
$pdf_previewer = $ps_previewer = $ps_previewer_landscape = $dvi_previewer = $dvi_previewer_landscape = $hnt_previewer = "NONE";
-$dvi_update_signal = undef;
-$ps_update_signal = undef;
-$pdf_update_signal = undef;
+# The following variables are assigned once and then used in symbolic
+# references, so we need to avoid warnings 'name used only once':
+our ( $aux_dir_requested, $out_dir_requested );
+
+our $dvi_update_signal = undef;
+our $ps_update_signal = undef;
+our $pdf_update_signal = undef;
-$dvi_update_command = undef;
-$ps_update_command = undef;
-$pdf_update_command = undef;
+our $dvi_update_command = undef;
+our $ps_update_command = undef;
+our $pdf_update_command = undef;
+ # Viewer update methods:
+ # 0 => auto update: viewer watches file (e.g., gv)
+ # 1 => manual update: user must do something: e.g., click on window.
+ # (e.g., ghostview, MSWIN previewers, acroread under UNIX)
+ # 2 => send signal. Number of signal in $dvi_update_signal,
+ # $ps_update_signal, $pdf_update_signal
+ # 3 => viewer can't update, because it locks the file and the file
+ # cannot be updated. (acroread under MSWIN)
+ # 4 => run a command to force the update. The commands are
+ # specified by the variables $dvi_update_command,
+ # $ps_update_command, $pdf_update_command
+our $dvi_update_method = 1;
+our $hnt_update_method = 1;
+our $ps_update_method = 1;
+our $pdf_update_method = 1;
-$allow_subdir_creation = 1;
+our $allow_subdir_creation = 1;
-$new_viewer_always = 0; # If 1, always open a new viewer in pvc mode.
+our $new_viewer_always = 0; # If 1, always open a new viewer in pvc mode.
# If 0, only open a new viewer if no previous
# viewer for the same file is detected.
# Commands for use in pvc mode for compiling, success, warnings, and failure;
# they default to empty, i.e., not to use:
-$compiling_cmd = $success_cmd = $warning_cmd = $failure_cmd = "";
+our ($compiling_cmd, $success_cmd, $warning_cmd, $failure_cmd) =
+ ( '', '', '', '' );
# Commands for printing are highly system dependent, so default to NONE:
-$lpr = 'NONE $lpr variable is not configured to allow printing of ps files';
-$lpr_dvi = 'NONE $lpr_dvi variable is not configured to allow printing of dvi files';
-$lpr_pdf = 'NONE $lpr_pdf variable is not configured to allow printing of pdf files';
+our $lpr = 'NONE $lpr variable is not configured to allow printing of ps files';
+our $lpr_dvi = 'NONE $lpr_dvi variable is not configured to allow printing of dvi files';
+our $lpr_pdf = 'NONE $lpr_pdf variable is not configured to allow printing of pdf files';
# The $pscmd below holds a **system-dependent** command to list running
@@ -898,24 +790,24 @@ $lpr_pdf = 'NONE $lpr_pdf variable is not configured to allow printing of pdf fi
# process number and the command line of the processes, since the
# relevant process is identified by the name of file to be viewed.
# Its use is not essential.
-$pscmd = 'NONE $pscmd variable is not configured to detect running processes';
-$pid_position = -1; # offset of PID in output of pscmd.
+our $pscmd = 'NONE $pscmd variable is not configured to detect running processes';
+our $pid_position = -1; # offset of PID in output of pscmd.
# Negative means I cannot use ps
-$quote_filenames = 1; # Quote filenames in external commands
+our $quote_filenames = 1; # Quote filenames in external commands
-$del_dir = ''; # Directory into which cleaned up files are to be put.
+our $del_dir = ''; # Directory into which cleaned up files are to be put.
# If $del_dir is '', just delete the files in a clean up.
-@rc_system_files = ();
+our @rc_system_files = ();
#########################################################################
################################################################
## Special variables for system-dependent fudges, etc.
# ???????? !!!!!!!!!!
-$log_file_binary = 0; # Whether to treat log file as binary
+our $log_file_binary = 0; # Whether to treat log file as binary
# Normally not, since the log file SHOULD be pure text.
# But Miktex 2.7 sometimes puts binary characters
# in it. (Typically in construct \OML ... after
@@ -923,7 +815,7 @@ $log_file_binary = 0; # Whether to treat log file as binary
# Sometimes there is ctrl/Z, which is not only non-text,
# but is end-of-file marker for MS-Win in text mode.
-$MSWin_fudge_break = 1; # Give special treatment to ctrl/C and ctrl/break
+our $MSWin_fudge_break = 1; # Give special treatment to ctrl/C and ctrl/break
# in -pvc mode under MSWin
# Under MSWin32 (at least with perl 5.8 and WinXP)
# when latexmk is running another program, and the
@@ -953,14 +845,14 @@ $MSWin_fudge_break = 1; # Give special treatment to ctrl/C and ctrl/break
## Substitute backslashes in file and directory names for
## MSWin command line
-$MSWin_back_slash = 0;
+our $MSWin_back_slash = 0;
## Separator of elements in search_path. Default is unix value
-$search_path_separator = ':';
+our $search_path_separator = ':';
# Directory for temporary files. Default to current directory.
-$tmpdir = ".";
+our $tmpdir = ".";
# Latexmk does tests on whether a particular generated file, e.g., log or
@@ -1051,6 +943,7 @@ our $filetime_offset_report_threshold = 10; # Threshold beyond which filetime of
# are those of Windows. (The test for USERNAME as well as USER was
# to make latexmk work under MSYS's perl.)
#
+our $start_NT = 'NONE';
if ( $^O eq "MSWin32" ) {
# Pure MSWindows configuration
@@ -1075,20 +968,6 @@ if ( $^O eq "MSWin32" ) {
$dvi_previewer = 'start %O %S';
$dvi_previewer_landscape = "$dvi_previewer";
$hnt_previewer = 'start %O %S';
- # Viewer update methods:
- # 0 => auto update: viewer watches file (e.g., gv)
- # 1 => manual update: user must do something: e.g., click on window.
- # (e.g., ghostview, MSWIN previewers, acroread under UNIX)
- # 2 => send signal. Number of signal in $dvi_update_signal,
- # $ps_update_signal, $pdf_update_signal
- # 3 => viewer can't update, because it locks the file and the file
- # cannot be updated. (acroread under MSWIN)
- # 4 => run a command to force the update. The commands are
- # specified by the variables $dvi_update_command,
- # $ps_update_command, $pdf_update_command
- $dvi_update_method = 1;
- $hnt_update_method = 1;
- $ps_update_method = 1;
$pdf_update_method = 3; # acroread locks the pdf file
}
elsif ( $^O eq "cygwin" ) {
@@ -1187,9 +1066,6 @@ elsif ( $^O eq "cygwin" ) {
# $ps_update_signal, $pdf_update_signal
# 3 => viewer can't update, because it locks the file and the file
# cannot be updated. (acroread under MSWIN)
- $dvi_update_method = 1;
- $hnt_update_method = 1;
- $ps_update_method = 1;
$pdf_update_method = 3; # acroread locks the pdf file
}
elsif ( $^O eq "msys" ) {
@@ -1335,8 +1211,8 @@ else {
}
## default parameters
-$auto_rc_use = 1; # Whether to read rc files automatically
-$user_deleted_file_treated_as_changed = 0; # Whether when testing for changed
+our $auto_rc_use = 1; # Whether to read rc files automatically
+our $user_deleted_file_treated_as_changed = 0; # Whether when testing for changed
# files, a user file that changes status from existing
# to non-existing should be regarded as changed.
# Value 1: only in non-preview-continuous mode.
@@ -1345,7 +1221,7 @@ $user_deleted_file_treated_as_changed = 0; # Whether when testing for changed
# compilation of .tex file tests for file existence and
# adjusts behavior accordingly, instead of simply giving an
# error.
-$max_repeat = 5; # Maximum times I repeat latex. Normally
+our $max_repeat = 5; # Maximum times I repeat latex. Normally
# 3 would be sufficient: 1st run generates aux file,
# 2nd run picks up aux file, and maybe toc, lof which
# contain out-of-date information, e.g., wrong page
@@ -1363,18 +1239,18 @@ $max_repeat = 5; # Maximum times I repeat latex. Normally
# usually an indication of a problem; further
# runs may not resolve the problem, and
# instead could cause an infinite loop.
-@cus_dep_list = (); # Custom dependency list
-@default_files = ( '*.tex' ); # Array of LaTeX files to process when
+our @cus_dep_list = (); # Custom dependency list
+our @default_files = ( '*.tex' ); # Array of LaTeX files to process when
# no files are specified on the command line.
# Wildcards allowed
# Best used for project specific files.
-@default_excluded_files = ( );
+our @default_excluded_files = ( );
# Array of LaTeX files to exclude when using
# @default_files, i.e., when no files are specified
# on the command line.
# Wildcards allowed
# Best used for project specific files.
-$texfile_search = ""; # Specification for extra files to search for
+our $texfile_search = ""; # Specification for extra files to search for
# when no files are specified on the command line
# and the @default_files variable is empty.
# Space separated, and wildcards allowed.
@@ -1383,7 +1259,7 @@ $texfile_search = ""; # Specification for extra files to search for
# This variable is obsolete, and only in here for
# backward compatibility.
-$jobname = ''; # Jobname: as with current tex, etc indicates
+our $jobname = ''; # Jobname: as with current tex, etc indicates
# basename of generated files. Defined so
# that --jobname=STRING on latexmk's command
# line has same effect as with current tex,
@@ -1396,33 +1272,35 @@ $jobname = ''; # Jobname: as with current tex, etc indicates
# dependent on name of main TeX file; this is
# useful when a jobname is used and latexmk is
# invoked on multiple files.
-$out_dir = ''; # Directory for output files.
+our $out_dir = ''; # Directory for output files.
# Cf. --output-directory of current *latex
# Blank means default, i.e., cwd.
-$aux_dir = ''; # Directory for aux files (log, aux, etc).
+our $aux_dir = ''; # Directory for aux files (log, aux, etc).
# Cf. --aux-directory of current *latex in MiKTeX.
# Blank means default, i.e., same as $out_dir.
# Note that these values get modified when
# processing a .tex file.
+# Corresponding forms that can be concatenated (e.g., when $aux_dir is '.', $aux_dir1 is './').
+our $aux_dir1 = '';
+our $out_dir1 = '';
## default flag settings.
-$recorder = 1; # Whether to use recorder option on latex/pdflatex
-$silent = 0; # Whether fo silence latex's messages (and others)
-$warnings_as_errors = 0;# Treat warnings as errors and exit with non-zero exit code
-$silence_logfile_warnings = 0; # Do list warnings in log file
+our $recorder = 1; # Whether to use recorder option on latex/pdflatex
+our $silent = 0; # Whether fo silence latex's messages (and others)
+our $warnings_as_errors = 0;# Treat warnings as errors and exit with non-zero exit code
+our $silence_logfile_warnings = 0; # Do list warnings in log file
# The warnings reported are those about undefined refs
# and citations, and the like.
-$max_logfile_warnings = 7; # Max. # number of log file warnings to report
-$rc_report = 1; # Whether to report on rc files read
-$aux_out_dir_report = 0; # Whether to report on aux_dir & out_dir after
+our $max_logfile_warnings = 7; # Max. # number of log file warnings to report
+our $rc_report = 1; # Whether to report on rc files read
+our $aux_out_dir_report = 0; # Whether to report on aux_dir & out_dir after
# initialization and normalization.
# When $aux_out_dir_report is set to 2, latexmk
# does no further processing after the report of
# the aux and out directories.
-$kpsewhich_show = 0; # Show calls to and results from kpsewhich
-$landscape_mode = 0; # default to portrait mode
-$analyze_input_log_always = 1; # Always analyze .log for input files in the
+our $kpsewhich_show = 0; # Show calls to and results from kpsewhich
+our $analyze_input_log_always = 1; # Always analyze .log for input files in the
# <...> and (...) constructions. Otherwise, only
# do the analysis when fls file doesn't exist or is
# out of date.
@@ -1442,7 +1320,7 @@ $analyze_input_log_always = 1; # Always analyze .log for input files in the
# To keep backward compatibility with older versions
# of latexmk, the default is to set
# $analyze_input_log_always to 1.
-$fls_uses_out_dir = 0; # Whether fls file is to be in out directory (as with
+our $fls_uses_out_dir = 0; # Whether fls file is to be in out directory (as with
# pre-Oct-2020 MiKTeX), or in aux directory (as with
# newer versions of MiKTeX).
# If the implementation of *latex puts the fls file in
@@ -1452,7 +1330,7 @@ $fls_uses_out_dir = 0; # Whether fls file is to be in out directory (as with
# Which kinds of file do I have requests to make?
our ($dvi_mode, $hnt_mode, $pdf_mode, $postscript_mode, $xdv_mode,
- $cleanup_mode, $force_mode, $go_mode, $landscape_mode, $preview_mode, $preview_continuous_mode, $printout_mode );
+ $landscape_mode );
# If no requests at all are made, then I will make dvi file
# If particular requests are made then other files may also have to be
# made. E.g., ps file requires a dvi file
@@ -1472,59 +1350,60 @@ $pdf_mode = 0; # No pdf file requested to be made by pdflatex
# 4 to create pdf file by lualatex
# 5 to create pdf file by xelatex + xdvipdfmx
$xdv_mode = 0; # No xdv file requested
+$landscape_mode = 0; # default to portrait mode
-$view = 'default'; # Default preview is of highest of dvi, ps, pdf
-$min_sleep_time = 0.01; # Minimum non-zero sleep time
-$sleep_time = 2; # time to sleep b/w checks for file changes in -pvc mode
-$banner = 0; # Non-zero if we have a banner to insert
-$banner_scale = 220; # Original default scale
-$banner_intensity = 0.95; # Darkness of the banner message
-$banner_message = 'DRAFT'; # Original default message
-$do_cd = 0; # Do not do cd to directory of source file.
+our $view = 'default'; # Default preview is of highest of dvi, ps, pdf
+our $min_sleep_time = 0.01; # Minimum non-zero sleep time
+our $sleep_time = 2; # time to sleep b/w checks for file changes in -pvc mode
+our $banner = 0; # Non-zero if we have a banner to insert
+our $banner_scale = 220; # Original default scale
+our $banner_intensity = 0.95; # Darkness of the banner message
+our $banner_message = 'DRAFT'; # Original default message
+our $do_cd = 0; # Do not do cd to directory of source file.
# Thus behave like latex.
-$dependents_list = 0; # Whether to display list(s) of dependencies
-$dependents_phony = 0; # Whether list(s) of dependencies includes phony targets
+our $dependents_list = 0; # Whether to display list(s) of dependencies
+our $dependents_phony = 0; # Whether list(s) of dependencies includes phony targets
# (as with 'gcc -MP').
-$deps_file = '-'; # File for dependency list output. Default stdout.
-$rules_list = 0; # Whether to display list(s) of dependencies
+our $deps_file = '-'; # File for dependency list output. Default stdout.
+our $rules_list = 0; # Whether to display list(s) of dependencies
# Kind of escaping in names of files written to deps file.
-$deps_escape = 'none';
+our $deps_escape = 'none';
# Allowed kinds of escape:
-%deps_escape_kinds = ( 'none' => ' ', 'unix' => '\ ', 'nmake' => '^ ');
+our %deps_escape_kinds = ( 'none' => ' ', 'unix' => '\ ', 'nmake' => '^ ');
-@dir_stack = (); # Stack of pushed directories, each of form of
+our @dir_stack = (); # Stack of pushed directories, each of form of
# pointer to array [ cwd, good_cwd ], where
# good_cwd differs from cwd by being converted
# to native MSWin path when cygwin is used.
-$cleanup_mode = 0; # No cleanup of nonessential LaTex-related files.
+our $cleanup_mode = 0; # No cleanup of nonessential LaTex-related files.
# $cleanup_mode = 0: no cleanup
# $cleanup_mode = 1: full cleanup
# $cleanup_mode = 2: cleanup except for dvi,
# dviF, pdf, ps, psF & xdv
-$cleanup_fdb = 0; # On normal run, no removal of file for latexmk's file-database
-$cleanup_only = 0; # When doing cleanup, do not go on to making files
-$cleanup_includes_generated = 0;
+our $cleanup_fdb = 0; # On normal run, no removal of file for latexmk's file-database
+our $cleanup_only = 0; # When doing cleanup, do not go on to making files
+our $cleanup_includes_generated = 0;
# Determines whether cleanup deletes files generated by
# *latex (found from \openout lines in log file).
# It's more than that. BUG
-$cleanup_includes_cusdep_generated = 0;
+our $cleanup_includes_cusdep_generated = 0;
# Determines whether cleanup deletes files generated by
# custom dependencies
-$diagnostics = 0;
-$dvi_filter = ''; # DVI filter command
-$ps_filter = ''; # Postscript filter command
+our $diagnostics = 0;
+our $dvi_filter = ''; # DVI filter command
+our $ps_filter = ''; # Postscript filter command
-$force_mode = 0; # =1: to force processing past errors
-$go_mode = 0; # =1: to force processing regardless of time-stamps
+our $force_mode = 0; # =1: to force processing past errors
+our $go_mode = 0; # =1: to force processing regardless of time-stamps
# =2: full clean-up first
# =3: Just force primary rule(s) to run
-$preview_mode = 0;
-$preview_continuous_mode = 0;
-$printout_mode = 0; # Don't print the file
+our $preview_mode = 0;
+our $preview_continuous_mode = 0;
+our $printout_mode = 0; # Don't print the file
## Control pvc inactivity timeout:
-$pvc_timeout = 0;
-$pvc_timeout_mins = 30;
+our $pvc_timeout = 0;
+our $pvc_timeout_mins = 30;
# Timing information
# Whether to report processing time:
@@ -1542,39 +1421,42 @@ our ( $clock1, $processing_time1, $processing_time0, @timings1, @timings0);
&init_timing_all;
-$use_make_for_missing_files = 0; # Whether to use make to try to make missing files.
+our $use_make_for_missing_files = 0; # Whether to use make to try to make missing files.
# Do we make view file in temporary then move to final destination?
# (To avoid premature updating by viewer).
-$always_view_file_via_temporary = 0; # Set to 1 if viewed file is always
+our $always_view_file_via_temporary = 0; # Set to 1 if viewed file is always
# made through a temporary.
-$pvc_view_file_via_temporary = 1; # Set to 1 if only in -pvc mode is viewed
+our $pvc_view_file_via_temporary = 1; # Set to 1 if only in -pvc mode is viewed
# file made through a temporary.
# State variables initialized here:
-$updated = 0; # Flags whether something has been remade in this round
+our $updated = 0; # Flags whether something has been remade in this round
# of compilation.
-$waiting = 0; # Flags whether we are in loop waiting for an event
+our $failure = 0; # Set nonzero to indicate failure at some point of
+ # a make. Use value as exit code if I exit.
+our $failure_msg = ''; # Indicate reason for failure
+our $waiting = 0; # Flags whether we are in loop waiting for an event
# Used to avoid unnecessary repeated o/p in wait loop
# The following are used for some results of parsing log file
# Global variables, so results can be reported in main program.
-$reference_changed = 0;
-$mult_defined = 0;
-$bad_reference = 0;
-$bad_character = 0;
-$bad_citation = 0;
-@primary_warning_summary = ();
+our $reference_changed = 0;
+our $mult_defined = 0;
+our $bad_reference = 0;
+our $bad_character = 0;
+our $bad_citation = 0;
+our @primary_warning_summary = ();
# Cache of expensive-to-compute state variables, e.g., cwd in form
# fixed to deal with cygwin issues.
-%cache = ();
+our %cache = ();
&cache_good_cwd;
# Set search paths for includes.
# Set them early so that they can be overridden
-$BIBINPUTS = $ENV{'BIBINPUTS'};
+our $BIBINPUTS = $ENV{'BIBINPUTS'};
if (!$BIBINPUTS) { $BIBINPUTS = '.'; }
# ???!!!
@@ -1594,7 +1476,7 @@ if (!$BIBINPUTS) { $BIBINPUTS = '.'; }
# directory. After these operations, @BIBINPUTS should
# have all the directories that need to be searched
#
-@BIBINPUTS = find_dirs1( $BIBINPUTS );
+our @BIBINPUTS = find_dirs1( $BIBINPUTS );
our @BIBINPUTS_SAVE = @BIBINPUTS;
our $BIBINPUTS_ENV_SAVE = $ENV{BIBINPUTS};
@@ -1713,34 +1595,34 @@ our $BIBINPUTS_ENV_SAVE = $ENV{BIBINPUTS};
# Hashes, whose keys give names of particular kinds of rule, and targets.
# We use hashes for ease of lookup.
-%possible_one_time = ( 'view' => 1, 'print' => 1, 'update_view' => 1, );
-%target_files = (); # Hash for target files.
+our %possible_one_time = ( 'view' => 1, 'print' => 1, 'update_view' => 1, );
+our %target_files = (); # Hash for target files.
# The keys are the filenames and the value is
# currently irrelevant.
-%target_rules = (); # Hash for target rules beyond those corresponding to files.
+our %target_rules = (); # Hash for target rules beyond those corresponding to files.
# The keys are the rule names and the value is
# currently irrelevant.
# The target **files** can only be set inside the FILE loop.
-$current_primary = 'latex'; # Rule to compile .tex file.
+our $current_primary = 'latex';# Rule to compile .tex file.
# It will be overridden at rule-initialization time, and
# is subject to document-dependent override if .tex document
# uses metcommands and obeying them is implemented/enabled.
-$pdf_method = ''; # How to make pdf file. '' if not requested,
+our $pdf_method = ''; # How to make pdf file. '' if not requested,
# else 'ps2pdf', 'dvipdf', 'pdflatex', 'lualatex' or 'xelatex'
# Subject to document-dependent override if .tex document
#uses \pdfoutput or c.
-%requested_filetypes = (); # Hash of requested file types (dvi, dviF, etc)
-%one_time = (); # Hash for requested one-time-only rules, currently
+our %requested_filetypes = (); # Hash of requested file types (dvi, dviF, etc)
+our %one_time = (); # Hash for requested one-time-only rules, currently
# possible values 'print' and 'view'.
-%actives = (); # Hash of active rules
+our %actives = (); # Hash of active rules
-$allow_switch = 1; # Allow switch of rule structure to accommodate
+our $allow_switch = 1; # Allow switch of rule structure to accommodate
# changed output file name of primary. Even if
# this flag is set on, the switch may be
# prohibited by other issues.
-%rule_db = (); # Database of all rules:
+our %rule_db = (); # Database of all rules:
# Hash: rulename -> [array of rule data]
# Rule data:
# 0: [ cmd_type, ext_cmd, int_cmd, no_history,
@@ -1948,10 +1830,10 @@ $allow_switch = 1; # Allow switch of rule structure to accommodate
# The aim of this item is for flexible
# rule-dependent add-ons.
-%fdb_current = (); # Hash of information for all files used.
+our %fdb_current = (); # Hash of information for all files used.
# It maps filename to a reference to an array
# (time, size, md5_checksum).
-@nofile = (0,-1,0); # What we use for initializing a new entry in fdb
+our @nofile = (0,-1,0); # What we use for initializing a new entry in fdb
# or flagging non-existent file.
# The following are variables which are set by the routine rdb_set_rule_net.
@@ -1960,25 +1842,33 @@ $allow_switch = 1; # Allow switch of rule structure to accommodate
# information is in a form useful for using the network of rules.
# For recursing backwards through the network of rules:
-%from_rules = (); # This maps file names to rule names.
+our %from_rules = (); # This maps file names to rule names.
# $from_rules{'File'} is the name of the rule that
# generates file 'File'. If there is no rule to
# generate the file, then $from_rules{'File'} is
# not defined (or possibly the null string '').
# Classification of rules, for determining order of application
-@pre_primary = (); # Array of rules that are thought of as pre-primary,
+our @pre_primary = (); # Array of rules that are thought of as pre-primary,
# Should be in an appropriate order for invoking
# them, to optimize making.
-@post_primary = (); # Array of rules that are thought of as post-primary.
+our @post_primary = (); # Array of rules that are thought of as post-primary.
# In suitable order for invocation
-@unusual_one_time = (); # Array of rules that are special cases of
+our @unusual_one_time = ();# Array of rules that are special cases of
# one-time rules.
# Currently not used.
-
+# Variables set in applying rules:
+our ($rule, $PA_extra_gen, $PAint_cmd, $PArule_data, $Pbase, $Pchanged,
+ $Pcheck_time, $Pcmd_type, $Pdest, $Pext_cmd,
+ $PHdest, $PHextra, $PHrewritten_before_read, $PHsource, $PHsource_rules,
+ $Plast_message, $Plast_result, $Plast_result_info,
+ $Pno_history, $Pout_of_date, $Pout_of_date_user, $Prun_time, $Psource,
+ $file, $PAfile_data, $Ptime, $Psize, $Pmd5, $DUMMY, $Pcorrect_after_primary
+);
+
# User's home directory
-$HOME = '';
+our $HOME = '';
if (exists $ENV{'HOME'} ) {
$HOME = $ENV{'HOME'};
}
@@ -1986,7 +1876,7 @@ elsif (exists $ENV{'USERPROFILE'} ) {
$HOME = $ENV{'USERPROFILE'};
}
# XDG configuration home
-$XDG_CONFIG_HOME = '';
+our $XDG_CONFIG_HOME = '';
if (exists $ENV{'XDG_CONFIG_HOME'} ) {
$XDG_CONFIG_HOME = $ENV{'XDG_CONFIG_HOME'};
}
@@ -2000,8 +1890,8 @@ elsif ($HOME ne '') {
#==================================================
# Which rc files did I read?
-@rc_files_read = (); # In order of reading
-%rc_files_read2 = (); # Map **abs** filename to 1; used to check duplicate reads.
+our @rc_files_read = (); # In order of reading
+our %rc_files_read2 = (); # Map **abs** filename to 1; used to check duplicate reads.
# Options that are to be obeyed before rc files are read:
# Also under MSWin32 and msys, CL arguments sometimes get quotes in them.
@@ -2064,7 +1954,7 @@ if ( $auto_rc_use ) {
}
if ( $auto_rc_use && ($HOME ne "" ) ) {
# User rc file:
- @user_rc = ();
+ my @user_rc = ();
if ( $XDG_CONFIG_HOME ) {
push @user_rc, "$XDG_CONFIG_HOME/latexmk/latexmkrc";
}
@@ -2083,12 +1973,13 @@ if ( $auto_rc_use ) {
## Process command line args.
-@command_line_file_list = ();
-$bad_options = 0;
+our @command_line_file_list = ();
+our $bad_options = 0;
+
while (defined(local $_ = $ARGV[0])) {
# Make -- and - equivalent at beginning of option,
# but save original for possible use in *latex command line
- $original = $_;
+ my $original = $_;
s/^--/-/;
shift;
if ( /^-aux-directory=(.*)$/ || /^-auxdir=(.*)$/ ) {
@@ -2265,7 +2156,7 @@ while (defined(local $_ = $ARGV[0])) {
$pre_tex_code = $1;
}
elsif (/^-print=(.*)$/) {
- $value = $1;
+ my $value = $1;
if ( $value =~ /^dvi$|^ps$|^pdf$|^auto$/ ) {
$print_type = $value;
$printout_mode = 1;
@@ -2314,7 +2205,7 @@ while (defined(local $_ = $ARGV[0])) {
"appear in the following list\n",
"NOTE ALSO: Not all of these options are supported by all versions of *latex.\n",
"\n";
- foreach $option ( sort( keys %allowed_latex_options, keys %allowed_latex_options_with_arg ) ) {
+ foreach my $option ( sort( keys %allowed_latex_options, keys %allowed_latex_options_with_arg ) ) {
if (exists $allowed_latex_options{$option} ) { print " $allowed_latex_options{$option}\n"; }
if (exists $allowed_latex_options_with_arg{$option} ) { print " $allowed_latex_options_with_arg{$option}\n"; }
}
@@ -2475,6 +2366,7 @@ if ( $texfile_search ne "" ) {
# (OS detected as cygwin)
# (3) UNIX Don't glob (cmd interpreter does it)
# (Currently, I assume this is everything else)
+our @file_list;
if ( ($^O eq "MSWin32") || ($^O eq "cygwin") ) {
# Preserve ordering of files
@file_list = glob_list1(@command_line_file_list);
@@ -2529,8 +2421,8 @@ else {
}
}
-$num_files = $#file_list + 1;
-$num_specified = $#command_line_file_list + 1;
+our $num_files = $#file_list + 1;
+our $num_specified = $#command_line_file_list + 1;
#print "Command line file list:\n";
#for ($i = 0; $i <= $#command_line_file_list; $i++ ) { print "$i: '$command_line_file_list[$i]'\n"; }
@@ -2746,7 +2638,7 @@ if ( $printout_mode ) {
}
if ( $preview_continuous_mode || $preview_mode ) { $one_time{'view'} = 1; }
-$can_switch = $allow_switch;
+our $can_switch = $allow_switch;
if ( $dvi_mode || $hnt_mode || $postscript_mode || $xdv_mode
|| ( $printout_mode && ($print_type eq 'ps') || ($print_type eq 'dvi') )
|| ( ($preview_mode || $preview_continuous_mode) && ( ($view eq 'ps') || ($view eq 'dvi') ) )
@@ -2792,15 +2684,15 @@ push @final_output_exts, split('\s+',$clean_full_ext);
# Convert the arrays to hashes, for ease of deletion:
# Keep extension without period!
-%generated_exts = ();
+our %generated_exts = ();
foreach (@generated_exts ) { $generated_exts{$_} = 1; }
-$quell_uptodate_msgs = $silent;
+our $quell_uptodate_msgs = $silent;
# Whether to quell informational messages when files are uptodate
# Will turn off in -pvc mode
-$failure_count = 0;
-@failed_primaries = ();
+our $failure_count = 0;
+our @failed_primaries = ();
if ($deps_file eq '' ) {
# Standardize name used for stdout
@@ -2826,7 +2718,7 @@ if ( ($cleanup_mode > 0) && $dependents_list && ( $deps_file ne '-' ) ) {
# been opened and therefore being available to be written to after
# compiling a file.
-$deps_handle = undef;
+our $deps_handle = undef;
if ( $dependents_list
&& ! $preview_continuous_mode
&& ( ($cleanup_mode == 0) || ($go_mode == 2) )
@@ -2840,17 +2732,30 @@ if ( $dependents_list
# Deal with illegal and problematic characters in filename:
test_fix_texnames( @file_list );
-$quote = $quote_filenames ? '"' : '';
-
+our $quote = $quote_filenames ? '"' : '';
+# Primary filename and path are variables of overall context, and hence global.
+our $filename;
+our $path;
+# Other globals
+our ( @default_includes, $texfile_name, $root_filename, $log_name,
+ $tex_basename, $fls_name, $fls_name_alt, $fdb_name, $aux_main,
+ $dvi_name, $dviF_name, $hnt_name, $ps_name, $psF_name, $pdf_name,
+ $xdv_name,
+ $dvi_final, $hnt_final, $ps_final, $pdf_final, $xdv_final,
+ $view_file,
+ %rule_list,
+ $missing_dvi_pdf, $switched_primary_output
+);
FILE:
foreach $filename ( @file_list )
{
# Global variables for making of current file:
$updated = 0;
- $failure = 0; # Set nonzero to indicate failure at some point of
- # a make. Use value as exit code if I exit.
+ $failure = 0; # Set nonzero to indicate failure at some point of
+ # a make. Use value as exit code if I exit.
$failure_msg = ''; # Indicate reason for failure
+ my $path = '';
if ( $do_cd ) {
# Use my fileparse routine rather than the built-in one, otherwise
# under msys, a directory separator \ won't be recognized by fileparse.
@@ -2864,9 +2769,6 @@ foreach $filename ( @file_list )
if !$silent;
pushd( dirname_no_tail( $path ) );
}
- else {
- $path = '';
- }
# Localize the following, because they may get changed because of
# conditions specific to the current tex file, notably:
@@ -2958,12 +2860,12 @@ foreach $filename ( @file_list )
if ($go_mode == 3) {
# Force primaries to be remade.
if (!$silent) { print "Force *latex to be remade.\n"; }
- rdb_for_some( [keys %possible_primaries], sub{$$Pout_of_date=1;} );
+ rdb_for_some( [keys %possible_primaries], sub{$$Pout_of_date = 'go_mode=3';} );
}
elsif ($go_mode) {
# Force everything to be remade.
if (!$silent) { print "Force everything to be remade.\n"; }
- rdb_recurse( [ &rdb_target_array], sub{$$Pout_of_date=1;} );
+ rdb_recurse( [ &rdb_target_array], sub{$$Pout_of_date = 'go_mode';} );
}
@@ -2997,7 +2899,6 @@ foreach $filename ( @file_list )
$failure_msg = '';
&init_timing1;
- if ($compiling_cmd) { Run_subst( $compiling_cmd ); }
$failure = rdb_make();
if ( ( $failure <= 0 ) || $force_mode ) {
rdb_for_some( [keys %one_time], \&rdb_run1 );
@@ -3023,7 +2924,7 @@ continue {
# mode, since the rules list has already been printed.
if ($rules_list && ! $preview_continuous_mode) { rdb_list(); }
# Handle any errors
- $error_message_count = rdb_show_rule_errors();
+ my $error_message_count = rdb_show_rule_errors();
if ( ($error_message_count == 0) || ($failure > 0) ) {
if ( $failure_msg ) {
#Remove trailing space
@@ -3179,6 +3080,7 @@ sub set_tex_cmds {
# Usage, e.g., set_tex_cmds( '%O %S' )
# or set_tex_cmds( '%C-dev %O %S' )
my $args = $_[0];
+ no strict "refs";
foreach my $cmd ( keys %possible_primaries ) {
my $spec = $args;
if ( $spec =~ /%C/ ) { $spec =~ s/%C/$cmd/g; }
@@ -3504,6 +3406,7 @@ sub fix_cmds {
sub add_option {
# Call add_option( $opt, \$cmd ... )
# Add option to one or more commands
+ no strict "refs";
my $option = shift;
while (@_) {
if ( ${$_[0]} !~ /%/ ) { &fix_cmds; }
@@ -3585,7 +3488,7 @@ sub rdb_initialize_rules {
if ($hnt_mode) { $current_primary = 'hilatex'; }
rdb_activate( $current_primary );
-
+
if ($dvi_mode) { $target_files{$dvi_final} = 1; }
if ($hnt_mode) { $target_files{$hnt_final} = 1; }
if ($postscript_mode) { $target_files{$ps_final} = 1; }
@@ -3628,7 +3531,8 @@ sub rdb_set_rule_templates {
my $viewer_update_signal = undef;
my $viewer_update_command = undef;
- if ( ($view eq 'dvi') || ($view eq 'hnt') || ($view eq 'pdf') || ($view eq 'ps') ) {
+ if ( ($view eq 'dvi') || ($view eq 'hnt') || ($view eq 'pdf') || ($view eq 'ps') ) {
+ no strict "refs";
$view_file = ${$view.'_final'};
$viewer = ${$view.'_previewer'};
$viewer_update_method = ${$view.'_update_method'};
@@ -3642,7 +3546,7 @@ sub rdb_set_rule_templates {
%rule_list = (
'dvilualatex' => [ 'primary', "$dvilualatex", '', "%T", $dvi_name, "%R", 1, [$aux_main, $log_name], [$aux_main] ],
- 'hilatex' => [ 'primary', "$hilatex", '', "%T", $hnt_name, "%R", 1, [$aux_main, $log_name], [$aux_main] ],
+ 'hilatex' => [ 'primary', "$hilatex", '', "%T", $hnt_name, "%R", 1, [$aux_main, $log_name], [$aux_main] ],
'latex' => [ 'primary', "$latex", '', "%T", $dvi_name, "%R", 1, [$aux_main, $log_name], [$aux_main] ],
'lualatex' => [ 'primary', "$lualatex", '', "%T", $pdf_name, "%R", 1, [$aux_main, $log_name], [$aux_main] ],
'pdflatex' => [ 'primary', "$pdflatex", '', "%T", $pdf_name, "%R", 1, [$aux_main, $log_name], [$aux_main] ],
@@ -3679,6 +3583,7 @@ sub rdb_set_rule_net {
# it doesn't exist. Later a rule is created by latexmk to make that
# file. Then the rule's main destination file should have priority
# over non-main generated files from other rules.
+ our %from_rules_old;
local %from_rules_old = %from_rules;
%from_rules = (); # File to rule.
rdb_for_actives( \&set_file_links_for_rule );
@@ -3738,6 +3643,7 @@ sub rdb_set_source_rules {
# in rdb_make etc.
#
my ($base, $path, $ext) = fileparseA( $$Psource );
+ our %from_rules_old;
if ( ($ext eq '.dvi') || ($ext eq '.dviF') || ($ext eq '.xdv') ) {
# Rules that use .dvi, .dviF, .xdv don't get all dependencies,
# notably about included graphics files.
@@ -3774,7 +3680,8 @@ sub rdb_classify_rules {
# @unusual_one_time # Array of rules
# @pre_primary and @post_primary are in natural order of application.
- local @requested_targets = &rdb_target_array;
+ my @requested_targets = &rdb_target_array;
+ our (@classify_stack, $state);
local $state = 0; # Post-primary
local @classify_stack = ();
@@ -3806,6 +3713,7 @@ sub rdb_classify1 {
# Helper routine for rdb_classify_rules
# Applied as rule_act1 in recursion over rules
# Assumes rule context, and local variables from rdb_classify_rules
+ our (@classify_stack, $state, $depth);
push @classify_stack, [$state];
if ( exists $possible_one_time{$rule} ) {
# Normally, we will have already extracted the one_time rules,
@@ -3836,6 +3744,7 @@ sub rdb_classify2 {
# Helper routine for rdb_classify_rules
# Applied as rule_act2 in recursion over rules
# Assumes rule context
+ our (@classify_stack, $state);
($state) = @{ pop @classify_stack };
} #END rdb_classify2
@@ -3856,15 +3765,15 @@ sub set_trivial_aux_fdb {
open( my $aux_file, '>', $aux_main )
or die "Cannot write file '$aux_main'\n";
- fprint8 $aux_file, "\\relax \n";
+ fprint8( $aux_file, "\\relax \n" );
# The following is added by recent versions of latex for a
# one page document
- fprint8 $aux_file, "\\gdef \\\@abspage\@last{1}\n";
+ fprint8( $aux_file, "\\gdef \\\@abspage\@last{1}\n" );
close($aux_file);
foreach my $rule (keys %possible_primaries ) {
rdb_one_rule( $rule,
- sub{ $$Pout_of_date = 1; }
+ sub{ $$Pout_of_date = 'Initial setup'; }
);
}
&rdb_write( $fdb_name );
@@ -3879,7 +3788,7 @@ sub do_cleanup {
my $kind = $_[0];
if (! $kind ) { return; }
my @files_to_delete = ();
- @dirs = ($aux_dir1);
+ my @dirs = ($aux_dir1);
if ($out_dir1 ne $aux_dir1) { push @dirs, $out_dir1; }
push @files_to_delete, &get_small_cleanup;
@@ -3888,7 +3797,7 @@ sub do_cleanup {
push @files_to_delete, cleanup_get1( $dir1, @final_output_exts );
}
}
- # show_array( "Files to delete", sort @files_to_delete );
+ # show_array( "Files to delete", sort @files_to_delete );
# Names of contents of directory are longer than the name of the directory,
# but contain the directory name as an initial segment.
@@ -3896,8 +3805,6 @@ sub do_cleanup {
# sort deletes contents of directory before attempting to delete the
# directory:
unlink_or_move( reverse sort @files_to_delete );
-
-
# If the fdb file (or log, fls and/or aux files) exist, it/they will have
# been used to make a changed rule database. But a cleanup implies
@@ -3936,6 +3843,8 @@ sub cleanup_get1 {
sub get_small_cleanup {
# Get list of files to be deleted in a small cleanup.
# Assume dependency information from previous run has been obtained.
+
+ my @files = ();
my %other_generated = ();
my %cusdep_generated = ();
my @index_bibtex_generated = ();
@@ -4066,6 +3975,7 @@ sub do_cusdep {
# argument is the name of the subroutine to apply
my $func_name = $_[0];
my $return = 0;
+ no strict "refs";
if ( !-e $$Psource ) {
# Source does not exist. Users of this rule will need to turn
# it off when custom dependencies are reset
@@ -4217,12 +4127,12 @@ sub find_basename {
# Returns non-zero if tex file does not exist
my $fail = 0;
- local ( $given_name, $base_name, $ext, $path, $tex_name, $source_name );
+ my ( $given_name, $base_name, $ext, $path, $tex_name, $source_name );
$given_name = $_[0];
+
$source_name = '';
$tex_name = $given_name; # Default name if I don't find the tex file
($base_name, $path, $ext) = fileparseB( $given_name );
-
# Treatment of extensions (in TeXLive 2019), with omission of path search:
# Exists: always means exists as a file, i.e., not as a directory.
# A. Finding of tex file:
@@ -4245,7 +4155,6 @@ sub find_basename {
# file
# 4. If that also fails, report non-existent tex file.
-
if ( ($ext eq '.tex') && (-f $given_name) ) {
$tex_name = "$given_name";
}
@@ -4315,10 +4224,10 @@ sub make_preview_continuous {
my $viewer_running = 0; # No viewer known to be running yet
# Get information from update_view rule
- local $viewer_update_method = 0;
+ my $viewer_update_method = 0;
# Pointers so we can update the following:
- local $Pviewer_process = undef;
- local $Pneed_to_get_viewer_process = undef;
+ my $Pviewer_process = undef;
+ my $Pneed_to_get_viewer_process = undef;
rdb_one_rule( 'update_view',
sub{ $viewer_update_method = $$PAint_cmd[1];
$Pviewer_process = \$$PAint_cmd[3];
@@ -4361,9 +4270,6 @@ CHANGE:
# $MSWin_fudge_break.
$SIG{BREAK} = $SIG{INT} = 'IGNORE';
}
- if ($compiling_cmd) {
- Run_subst( $compiling_cmd );
- }
$failure = rdb_make();
if ( $MSWin_fudge_break && ($^O eq "MSWin32") ) {
@@ -4391,7 +4297,7 @@ CHANGE:
"------------\n";
}
}
- local $retcode = 0;
+ my $retcode = 0;
rdb_one_rule( 'view', sub { $retcode = &rdb_run1;} );
if ( $retcode != 0 ) {
if ($force_mode) {
@@ -4477,7 +4383,8 @@ CHANGE:
# command line to work:
# latexmk -pvc foo; cleanup;
&catch_break;
- $have_break = 0;
+ our $have_break;
+ local $have_break = 0;
$last_action_time = time();
$waiting = 1;
rdb_for_some(
@@ -4504,8 +4411,8 @@ CHANGE:
# Don't count waiting time in processing:
$processing_time1 = processing_time();
# Does this do this job????!!!
- local $new_files = 0;
- rdb_for_some( [keys %current_primaries], sub{ $new_files += &rdb_find_new_files } );
+ my $new_files = 0;
+ rdb_for_some( [$current_primary], sub{ $new_files += &rdb_find_new_files } );
if ($new_files > 0) {
print "$My_name: New file(s) found.\n";
last WAIT;
@@ -4597,6 +4504,8 @@ sub process_rc_file {
}
my $BOM = Encode::encode( 'UTF-8', "\N{U+FEFF}" );
$code =~ s/^$BOM//;
+ no strict;
+ # !!!??? For backward compatibility, turn off strictness for evaluating rc files.
eval $code;
}
else {
@@ -4628,7 +4537,10 @@ sub execute_code_string {
print "$My_name: Executing initialization code specified by -e:\n",
" '$code'...\n"
if $diagnostics;
+ {
+ no strict;
eval $code;
+ }
# The return value from the eval is not useful, since it is the value of
# the last expression evaluated, which could be anything.
# The correct test of errors is on the value of $@.
@@ -5003,8 +4915,7 @@ sub after_biber {
our ( $rule, $Pbase, $Pdest, $PHextra, $Plast_message, $Plast_result,
$Pout_of_date, $Psource, $PHsource );
# Global variables used
- our ( %current_primaries, $diagnostics, $My_name, $save_error_suffix,
- $silent );
+ our ( $diagnostics, $My_name, $save_error_suffix, $silent );
my $Preturn = $_[0];
my @biber_datasource = ( );
my @biber_remote = ();
@@ -5024,7 +4935,7 @@ sub after_biber {
print "Source '$$Psource' for '$rule' doesn't exist,\n",
"so I'll force *latex to run to try and make it.\n";
}
- rdb_for_some( [keys %current_primaries], sub{ $$Pout_of_date = 1; } );
+ rdb_for_some( [$current_primary], sub{ $$Pout_of_date = "to make '$$Psource' for '$rule'"; } );
}
rdb_set_source_here( @biber_datasource, $$Psource );
@@ -5034,7 +4945,7 @@ sub after_biber {
print "$My_name: bibtex control file missing. Since that can\n",
" be recreated, I'll try to do so.\n";
$$Preturn = -2;
- rdb_for_some( [keys %current_primaries], sub{ $$Pout_of_date = 1; } );
+ rdb_for_some( [$current_primary], sub{ $$Pout_of_date = "to make missing control file"; } );
}
elsif ($retcode == 4) {
$$Plast_result = 2;
@@ -5125,8 +5036,8 @@ sub check_biber_log {
my $control_file_malformed = 0;
my @not_found = (); # Files, normally .bib files, not found.
my @missing_citations = ();
-
- while (local $_= <$blg_file>) {
+
+ while (local $_ = <$blg_file>) {
$_ = utf8_to_mine($_);
if (/> WARN /) {
print "Biber warning: $_";
@@ -5303,7 +5214,7 @@ sub after_bibtex {
our ( $rule, $Pbase, $Pdest, $Plast_message, $Plast_result,
$Pout_of_date, $Psource );
# Global variables used
- our ( %current_primaries, $diagnostics, $failure, $My_name, $silent );
+ our ( $diagnostics, $failure, $My_name, $silent );
my $Preturn = $_[0];
my $retcode = check_bibtex_log($$Pbase);
@@ -5315,7 +5226,7 @@ sub after_bibtex {
print "Source '$$Psource' for '$rule' doesn't exist,\n",
"so I'll force *latex to run to try and make it.\n";
}
- rdb_for_some( [keys %current_primaries], sub{ $$Pout_of_date = 1; } );
+ rdb_for_some( [$current_primary], sub{ $$Pout_of_date = "to make '$$Psource' for '$rule'"; } );
}
if ($retcode == 3) {
$$Plast_result = 2;
@@ -5359,7 +5270,7 @@ sub check_bibtex_log {
# Variable used in context of a rule action
our ( $Pout_of_date );
# Global variables used
- our ( %current_primaries, $My_name );
+ our ( $My_name );
my $base = $_[0];
my $blg_name = "$base.blg";
@@ -5371,6 +5282,7 @@ sub check_bibtex_log {
my @missing_aux = ();
my @missing_bib = ();
my $error_count = 0;
+
while (local $_ = <$blg_file>) {
$_ = utf8_to_mine($_);
if (/^Warning--/) {
@@ -5398,7 +5310,7 @@ sub check_bibtex_log {
# Need to make the missing files.
print "$My_name: One or more aux files is missing for bibtex. I'll try\n",
" to get *latex to remake them.\n";
- rdb_for_some( [keys %current_primaries], sub{ $$Pout_of_date = 1; } );
+ rdb_for_some( [$current_primary], sub{ $$Pout_of_date = "to get missing aux file(s) made"; } );
}
#print "Bibtex errors = $error_count, missing aux files and citations = $missing\n";
if ($have_error && ($error_count <= $weak_errors )
@@ -5536,7 +5448,7 @@ sub set_names {
if ( length($ps_filter) > 0) {
$ps_final = $psF_name;
}
-}
+} #END set_names
#**************************************************
@@ -5551,6 +5463,9 @@ sub correct_locations {
# of -aux-directory option. This is to be done first, since a run of
# *latex always produces a log file unless there is a bad error, so
# this gives the best chance of diagnosing errors.
+
+ # Assumes rule context.
+
my $where_log = &find_set_log;
if ( $emulate_aux && ($aux_dir ne $out_dir) ) {
# Move output files from aux_dir to out_dir
@@ -5558,8 +5473,8 @@ sub correct_locations {
# Omit 'xdv', that goes to aux_dir (as with MiKTeX). It's not final output.
foreach my $ext ( 'fls', 'dvi', 'hnt', 'pdf', 'ps', 'synctex', 'synctex.gz' ) {
if ( ($ext eq 'fls') && ! $fls_uses_out_dir ) {next;}
- my $from = "$aux_dir1$root_filename.$ext";
- my $to = "$out_dir1$root_filename.$ext" ;
+ my $from = "$aux_dir1$$Pbase.$ext";
+ my $to = "$out_dir1$$Pbase.$ext" ;
if ( test_gen_file_time( $from ) ) {
if (! $silent) { print "$My_name: Moving '$from' to '$to'\n"; }
my $ret = move( $from, $to );
@@ -5572,7 +5487,7 @@ sub correct_locations {
if ($recorder) {
# Deal with following special cases:
# 1. Some implemenations of *latex give fls files of name latex.fls
- # or pdflatex.fls instead of $root_filename.fls.
+ # or pdflatex.fls instead of $$Pbase.fls.
# 2. In some implementations, the writing of the fls file (memory
# of old implementations) may not respect the -output-directory
# and -aux-directory options.
@@ -5606,7 +5521,7 @@ sub correct_locations {
push @other_fls_names, "latex.fls";
}
if ( $aux_dir1 ne '' ) {
- push @other_fls_names, "$root_filename.fls";
+ push @other_fls_names, "$$Pbase.fls";
# The fls file may be in the opposite directory to the
# one configured by $fls_uses_out_dir:
push @other_fls_names, $fls_name_alt;
@@ -5636,6 +5551,7 @@ sub correct_locations {
sub find_log {
# Locate log file generated on this run.
+ # Usage find_log( $log_aux, $log_out, $log_cwd)
# Side effect: measure filetime offset if necessary.
# Don't take other actions.
# Returns
@@ -5649,11 +5565,9 @@ sub find_log {
# (only applies if $emulate_aux off)
# 6 log file is in ., but out-of-date
-
+ # Assumes rule context.
+ my ( $log_aux, $log_out, $log_cwd ) = @_;
my $where_log = -1; # Nothing analyzed yet
- my $log_aux = "$aux_dir1$root_filename.log";
- my $log_out = "$out_dir1$root_filename.log";
- my $log_cwd = "./$root_filename.log";
# Basic tests first that assume accuracy of time of file system:
if ( test_gen_file_time( $log_aux ) ) {
@@ -5699,7 +5613,9 @@ sub find_log {
return 6;
}
return 0;
-}
+} #END find_log
+
+#---------------------
sub find_set_log {
# Locate the log file, generated on this run.
@@ -5734,13 +5650,11 @@ sub find_set_log {
# Cases: 0, 4, 5, 6 are error conditions to be handled by caller
# 2 is to be handled by caller by a rerun
# 1 is success.
+ my $log_aux = "$aux_dir1$$Pbase.log";
+ my $log_out = "$out_dir1$$Pbase.log";
+ my $log_cwd = "./$$Pbase.log";
-
- my $log_aux = "$aux_dir1$root_filename.log";
- my $log_out = "$out_dir1$root_filename.log";
- my $log_cwd = "./$root_filename.log";
-
- my $where_log = &find_log;
+ my $where_log = find_log( $log_aux, $log_out, $log_cwd );
my $good_log_found = 0;
if ($where_log == 1 ) {
@@ -5752,7 +5666,7 @@ sub find_set_log {
" But emulate_aux is off. So I'll turn it on.\n",
" I'll copy the log file to the correct place.\n",
" The next run of *latex **SHOULD** not have this problem.\n";
- copy( "$out_dir1$root_filename.log", "$aux_dir1$root_filename.log" );
+ copy( $log_out, $log_aux );
$where_log = 2;
$emulate_aux = 1;
$emulate_aux_switched = 1;
@@ -5768,8 +5682,8 @@ sub find_set_log {
# .log file is not in out_dir nor in aux_dir, but is in cwd.
# Presumably there is a configuration error
# that prevents the directories from being used by latex.
- die "$My_name: The log file found was '$root_filename.log' instead of\n",
- " '$aux_dir1$root_filename.log'. Probably a configuration error\n",
+ die "$My_name: The log file found was '$log_cwd' instead of\n",
+ " '$log_aux'. Probably a configuration error\n",
" prevented the use of the -aux-directory and/or the -output-directory\n",
" options with the *latex command.\n",
" I'll stop.\n";
@@ -5800,7 +5714,7 @@ sub find_set_log {
$failure = 1;
$$Plast_result = 2;
$failure_msg
- = "*LaTeX didn't generate the expected log file '$log_name'\n";
+ = "*LaTeX didn't generate the expected log file '$log_aux'\n";
}
return $where_log;
@@ -5865,8 +5779,9 @@ sub parse_log {
#
# Input globals: $primary_out, $fls_file_analyzed
#
-
my ($log_name, $PAlines, $PHinfo) = @_;
+ our ( $primary_out, $fls_file_analyzed, %generated_log, %idx_files,
+ %dependents, @bbl_files, %log_info, @missing_subdirs, %conversions );
# Give a quick way of looking up custom-dependency extensions
my %cusdep_from = ();
@@ -5899,7 +5814,8 @@ sub parse_log {
my $tex_distribution = $$PHinfo{distribution};
# Now analyze the result:
- $line_num = 0;
+ my $line_num = 0;
+ my @pwd_log = (); # Working directory as reported. !!?? CHECK CORRECTNESS
my $state = 0; # 0 => before ** line,
# 1 => after **filename line, before next line (first file-reading line)
# 2 => pwd_log determined.
@@ -5915,6 +5831,8 @@ sub parse_log {
# data structure until block is ended.)
my %new_conversions = ();
my $log_silent = ($silent || $silence_logfile_warnings);
+ my $source_log; #Name of tex file that .log file reports as being on cmd line
+ our @warning_list;
@warning_list = (); # Warnings about undefined citations and the like
LINE:
@@ -6398,7 +6316,7 @@ LINE:
# Default includes are always definitive:
foreach (@default_includes) { $dependents{$_} = 4; }
- my @misparsed = ();
+ my @misparse = ();
my @missing = ();
my @not_found = ();
@@ -7069,10 +6987,11 @@ sub parse_aux {
# Return 3 if I couldn't locate all the bib_files
# Set @new_aux_files to aux files parsed
+ our $Paux_files;
my $aux_file = $_[0];
- local $Pbib_files = $_[1];
+ my $Pbib_files = $_[1];
local $Paux_files = $_[2];
- local $Pbst_files = $_[3];
+ my $Pbst_files = $_[3];
# Default return values
@$Pbib_files = ();
@$Pbst_files = ();
@@ -7080,6 +6999,7 @@ sub parse_aux {
# Map file specs (in \bibdata and \bibstyle lines) to actual filenames:
+ our ( %bib_files, %bst_files, @bad_bib_data );
local %bib_files = ();
local %bst_files = ();
@@ -7152,6 +7072,7 @@ sub parse_aux1
# Return 1 if success in opening $aux_file_name and parsing it
# Return 0 if fail to open it
{
+ our ( %bib_files, %bst_files, @bad_bib_data, $Paux_files );
my $aux_file = $_[0];
my $aux_fh;
if (! open($aux_fh, $aux_file) ) {
@@ -7159,9 +7080,10 @@ sub parse_aux1
return 0;
}
push @$Paux_files, $aux_file;
+
AUX_LINE:
while (local $_ = <$aux_fh>) {
- if ( /\^\^/ ) {
+ if ( /\^\^[[:xdigit:]]{2}/ ) {
warn "$My_name: Line in '$aux_file' uses ^^ notation, which may\n".
" cause trouble to bibtex:\n $_";
# At least I need to be able to handle the line:
@@ -7234,7 +7156,6 @@ sub parse_bcf {
# Win32 platform. To avoid requiring the installation, just search the
# .bcf file for the relevant lines.
#
- # !!!!!!!!!!!!!!!!!??????????? Allow for remote bib files.
use strict;
# Global variables used
@@ -7490,7 +7411,9 @@ sub rdb_read {
# may/should be in the future.)
# (e) Something else, e.g., copying/editing of fdb_latexmk file.
#
- local ($in_name, $inhibit_output_switch) = @_;
+
+ our ( $dest, $run_time, $check_time, $inhibit_output_switch, $last_result );
+ ( my $in_name, local $inhibit_output_switch ) = @_;
my $in_handle;
if ( ! -e $in_name ) {
@@ -7499,7 +7422,7 @@ sub rdb_read {
return -2;
}
if ( ! open( $in_handle, '<', $in_name ) ) {
- warn "$My_name: Couldn't read '$fdb_name' even though it exists\n";
+ warn "$My_name: Couldn't read '$in_name' even though it exists\n";
return -1;
}
print "$My_name: Examining fdb file '$fdb_name' for cached rules ...\n"
@@ -7515,11 +7438,11 @@ sub rdb_read {
my $rule = '';
local $run_time = 0;
local $last_result = -1;
- local $source = '';
+ my $source = '';
local $dest = '';
my $base = '';
my %old_actives = (); # Hash: keys are rules in fdb_latexmk file
- local %new_sources = (); # Hash: rule => { file=>[ time, size, md5, fromrule ] }
+ my %new_sources = (); # Hash: rule => { file=>[ time, size, md5, fromrule ] }
my $new_source = undef; # Reference to hash of sources for current rule
LINE:
while (local $_ = <$in_handle>) {
@@ -7633,6 +7556,7 @@ LINE:
print "$My_name: File-database '$in_name': setting rule '$rule'\n"
if $diagnostics;
my $cmd_type = 'external';
+ no strict "refs";
my $ext_cmd = ${$rule_generic};
print " Rule kind = '$rule_generic'; ext_cmd = '$ext_cmd';\n",
" int_cmd = '$int_cmd';\n",
@@ -7718,8 +7642,10 @@ LINE:
sub rdb_read_set_rule {
# Makes some settings for rule from data as read from .fdb_latexmk.
# Rule context assumed. Implicit passing of $dest, $run_time, $check_time,
- # $in_name used as local variables in calling routine rdb_read.
+ # $inhibit_output_switch, $last_result used as local variables in calling
+ # routine rdb_read.
#
+ our ( $dest, $run_time, $check_time, $inhibit_output_switch, $last_result );
$$Pno_history = 0;
$$Prun_time = $run_time;
$$Pcheck_time = $check_time;
@@ -7784,9 +7710,9 @@ sub rdb_write {
# Writes to the given file name the database of file and rule data
# for all rules needed to make final output
# Returns 1 on success, 0 if file couldn't be opened.
- local $out_name = $_[0];
+ my $out_name = $_[0];
- local $out_handle;
+ my $out_handle;
if ( ($out_name eq "") || ($out_name eq "-") ) {
# Open STDOUT
open( $out_handle, '>-' );
@@ -7807,7 +7733,7 @@ sub rdb_write {
# Omit data on a unused and never-run primary rule:
if ( ($$Prun_time == 0)
&& exists( $possible_primaries{$rule} )
- && ! exists( $current_primaries{$rule} )
+ && ($rule ne $current_primary )
)
{
return;
@@ -7945,12 +7871,11 @@ sub rdb_set_latex_deps {
# see pythontex-latexmk) for subroutine called to process a .tex to add items to
# %PHdest. So initializing here is too late.
- local ($inhibit_output_switch) = @_;
- # Rules should only be primary
+ my ($inhibit_output_switch) = @_;
if ( $$Pcmd_type ne 'primary' ) {
warn "\n$My_name: ==========$My_name: Probable BUG======= \n ",
" rdb_set_latex_deps called to set files ",
- "for non-primary rule '$rule'\n\n";
+ "for non-latex-like rule '$rule'\n\n";
return;
}
@@ -7959,6 +7884,9 @@ sub rdb_set_latex_deps {
# Parse fls and log files to find relevant filenames
# Result in the following variables:
+ our ( %dependents, @bbl_files, %idx_files, %generated_log, %generated_fls,
+ %source_fls, %first_read_after_write, %log_info, $pwd_latex, $primary_out,
+ @missing_subdirs, %conversions );
local %dependents = (); # Maps files to status
local @bbl_files = ();
local %idx_files = (); # Maps idx_file to (ind_file, base)
@@ -7966,8 +7894,8 @@ sub rdb_set_latex_deps {
local %generated_fls = (); # Lists generated files found in fls file
local %source_fls = (); # Lists source files found in fls file
local %first_read_after_write = (); # Lists source files that are only read
- # after being written (so are not true
- # source files).
+ # after being written (so are not true
+ # source files).
local $primary_out = $$Pdest; # output file (dvi or pdf)
local %conversions = (); # *latex-performed conversions.
# Maps output file created and read by *latex
@@ -7976,7 +7904,7 @@ sub rdb_set_latex_deps {
local $pwd_latex = undef; # Cwd as reported in fls file by *latex
- local %created_rules = (); # Maps files to rules existing or created to
+ my %created_rules = (); # Maps files to rules existing or created to
# make them. Use to avoid misunderstood
# dependencies when a package creates a
# missing file during *latex compliation
@@ -7999,7 +7927,7 @@ sub rdb_set_latex_deps {
# can be set to use another program.)
our $tex_distribution = '';
local %log_info = (); # Info. returned by get_log_file
- local @log_lines = (); # Lines in log file after unwrapping and converting
+ my @log_lines = (); # Lines in log file after unwrapping and converting
# to use my internal CS.
# Get lines from log file now, with side effect of setting $engine and
# $tex_distribution, so parse_fls can adjust its behavior if necessary).
@@ -8012,11 +7940,11 @@ sub rdb_set_latex_deps {
$tex_distribution = $log_info{distribution};
}
-
-
+
# Analyze fls file first. It tells us the working directory as seen by *latex
# But we'll use the results later, so that they take priority over the findings
# from the log file.
+ our $fls_file_analyzed;
local $fls_file_analyzed = 0;
if ($recorder && test_gen_file_time($fls_name) ) {
$fls_file_analyzed =
@@ -8187,7 +8115,7 @@ sub rdb_set_latex_deps {
$created_rules{$ind_file} = $from_rule;
} # end IDX_FILE
- local %processed_aux_files = ();
+ my %processed_aux_files = ();
BBL_FILE:
foreach my $bbl_file ( uniqs( @bbl_files ) ) {
my ($bbl_base, $bbl_path, $bbl_ext) = fileparseA( $bbl_file );
@@ -8351,7 +8279,6 @@ NEW_SOURCE:
rdb_one_file( $new_source, sub{ $$Pcorrect_after_primary = 1; } );
}
elsif ( $dependents{$new_source} == 8 ) {
- print "================= REWRITE '$new_source'\n";
# File was read only after being written
# and the file existed at the beginning of the run
rdb_ensure_file( $rule, $new_source );
@@ -8494,6 +8421,7 @@ sub test_gen_file {
# file being listed in %generated_log or %generated_fls
# Assumes context for primary rule.
my $file = shift;
+ our ( %generated_fls, %generated_log );
return exists $generated_log{$file} || $generated_fls{$file}
|| test_gen_file_time($file);
}
@@ -8601,7 +8529,7 @@ MISSING_FILE:
# if ( $file =~ /\"/ ) {next; }
my $stripped = $file;
$stripped =~ s{^\./}{};
- if ( exists $PHsource{$file} ) {
+ if ( exists $$PHsource{$file} ) {
delete $new_includes{$file};
}
else {
@@ -8621,6 +8549,7 @@ MISSING_FILE:
sub rdb_set_dependents {
# Call rdb_set_dependents( rules ...)
# Returns array (sorted), of new source files for the given rules.
+ our ( @new_sources, @deletions );
local @new_sources = ();
local @deletions = ();
@@ -8664,7 +8593,8 @@ sub rdb_one_dep {
if ( (! exists $possible_primaries{$rule}) && ($rule !~ /^cusdep/) ) {
return;
}
- local $new_dest = $file;
+ our ( @new_sources, @deletions );
+ my $new_dest = $file;
if ($$PHdest{$new_dest} ) {
# We already have a way of making the file.
# No need to find another one.
@@ -8697,13 +8627,13 @@ DEP:
rdb_ensure_file( $rule, $new_new_dest );
$new_dest = $new_new_dest;
}
- local @PAnew_cmd = ( 'do_cusdep', $func_name );
+ my @Anew_cmd = ( 'do_cusdep', $func_name );
if ( !-e $new_dest ) {
push @new_sources, $new_dest;
}
if (! rdb_rule_exists( $from_rule ) ) {
print "$My_name: === Creating rule '$from_rule'\n" if $diagnostics;
- rdb_create_rule( $from_rule, 'cusdep', '', \@PAnew_cmd, 3,
+ rdb_create_rule( $from_rule, 'cusdep', '', \@Anew_cmd, 3,
$source, $new_dest, $base_name, 0 );
}
return;
@@ -8748,10 +8678,10 @@ DEP:
push @new_sources, $new_dest;
print "$My_name: Ensuring rule for '$from_rule', to make '$new_dest'\n"
if $diagnostics > -1;
- local @PAnew_cmd = ( 'do_cusdep', $func_name );
+ my @Anew_cmd = ( 'do_cusdep', $func_name );
if (! rdb_rule_exists( $from_rule ) ) {
print "$My_name: === Creating rule '$from_rule'\n" if $diagnostics;
- rdb_create_rule( $from_rule, 'cusdep', '', \@PAnew_cmd, 3,
+ rdb_create_rule( $from_rule, 'cusdep', '', \@Anew_cmd, 3,
$source, $new_dest, $base_name, 0 );
}
rdb_ensure_file( $rule, $new_dest, $from_rule );
@@ -8794,7 +8724,7 @@ DEP:
push @deletions, [$rule, $file];
# Flag need for a new run of *latex despite
# the error due to a missing file.
- $$Pout_of_date_user = 1;
+ $$Pout_of_date_user = "Missing file '$new_dest' now exists";
return;
}
}
@@ -8808,7 +8738,7 @@ sub rdb_list {
# Call: rdb_list()
# List rules and their source files
print "===Rules:\n";
- local $count_rules = 0;
+ my $count_rules = 0;
my @accessible_all = &rdb_accessible;
rdb_for_some(
\@accessible_all,
@@ -8833,7 +8763,7 @@ sub deps_list {
# Call: deps_list(fh)
# List dependent files to file open on fh
my $fh = $_[0];
- fprint8 $fh, "#===Dependents, and related info, for $filename:\n";
+ fprint8( $fh, "#===Dependents, and related info, for $filename:\n" );
my @dest_exts = ();
if ($pdf_mode) {push @dest_exts, '.pdf';}
if ($dvi_mode) {push @dest_exts, '.dvi';}
@@ -8843,7 +8773,7 @@ sub deps_list {
my $deps_space = ' ';
if ($deps_escape eq 'unix' ) { $deps_space = '\ '; }
elsif ($deps_escape eq 'nmake' ) { $deps_space = '^ '; }
- $Pescape = sub {
+ my $Pescape = sub {
my $name = shift;
$name =~ s/ /$deps_space/g;
return $name;
@@ -8876,19 +8806,19 @@ sub deps_list {
# deps file out-of-date are the same as those that make the real
# target file (e.g., .pdf) out-of-date. So the GNU method seems
# completely unnecessary.
- fprint8 $fh, &$Pescape(${out_dir1}.${root_filename}.${ext}), " :";
+ fprint8( $fh, &$Pescape(${out_dir1}.${root_filename}.${ext}), " :" );
foreach (sort keys %source) {
- fprint8 $fh, "\\\n ", &$Pescape($_);
+ fprint8( $fh, "\\\n ", &$Pescape($_) );
}
- fprint8 $fh, "\n";
+ fprint8( $fh, "\n" );
}
- fprint8 $fh, "#===End dependents for $filename:\n";
+ fprint8( $fh, "#===End dependents for $filename:\n" );
if ($dependents_phony) {
- fprint8 $fh, "\n#===Phony rules for $filename:\n\n";
+ fprint8( $fh, "\n#===Phony rules for $filename:\n\n" );
foreach (sort keys %source) {
- fprint8 $fh, "$_ :\n\n";
+ fprint8( $fh, "$_ :\n\n" );
}
- fprint8 $fh, "#===End phony rules for $filename:\n";
+ fprint8( $fh, "#===End phony rules for $filename:\n" );
}
} #END deps_list
@@ -8899,7 +8829,7 @@ sub rdb_show {
# Displays contents of rule data base.
# Side effect: Exercises access routines!
print "===Rules:\n";
- local $count_rules = 0;
+ my $count_rules = 0;
rdb_for_actives(
sub{ $count_rules++;
my @int_cmd = @$PAint_cmd;
@@ -8943,7 +8873,7 @@ sub rdb_accessible {
# Call: &rdb_accessible
# Returns array of rules accessible from target rules and rules to make target files
- local %accessible_rules = &rdb_target_hash;
+ my %accessible_rules = &rdb_target_hash;
rdb_recurse( [keys %accessible_rules], sub{ $accessible_rules{$rule} = 1; } );
return keys %accessible_rules;
} #END rdb_accessible
@@ -9167,9 +9097,11 @@ sub rdb_make {
# they are run by the calling routines, since the needs may be
# quite special.
- # ???!!! Overkill?
+ if ($compiling_cmd) { Run_subst( $compiling_cmd ); }
+ # ???!!! Overkill? No. $compiling_cmd might have injected something.
&rdb_set_rule_net;
+ our %pass;
local %pass = (); # Counts runs on each rule: Used for testing for
# exceeding maximum runs and for determining
# whether to run rules that have a list of source
@@ -9187,12 +9119,14 @@ sub rdb_make {
}
);
+ our ($runs, $runs_total, $too_many_passes, $newrule_nofile);
local $failure = 0; # General accumulated error flag
local $missing_dvi_pdf = ''; # Did primary run fail to make its output file?
local $runs = 0;
local $runs_total = 0;
local $too_many_passes = 0;
local $switched_primary_output = 0;
+ our @warning_list;
local @warning_list = (); # Undef refs etc reported in last primary run
my $retry_msg = 0; # Did I earlier say I was going to attempt
# another pass after a failure?
@@ -9275,7 +9209,7 @@ sub rdb_make {
continue {
# Re-evaluate rule classification and accessibility,
# but do not change primaries.
- # Problem is that %current_primaries gets altered
+ # Problem is that $current_primary gets altered
&rdb_set_rule_net;
} #End PASS
@@ -9412,21 +9346,14 @@ sub rdb_make {
print "$My_name: Errors, so I did not complete making targets\n";
}
else {
-# local @dests = ( keys %current_primaries, @pre_primary, @post_primary, @unusual_one_time );
- local @rules = ( keys %current_primaries, @post_primary, @unusual_one_time );
- local @dests = ();
+# local @dests = ( $current_primary, @pre_primary, @post_primary, @unusual_one_time );
+ my @rules = ( $current_primary, @post_primary, @unusual_one_time );
+ my @dests = ();
rdb_for_some( [@rules], sub{ push @dests, $$Pdest if ($$Pdest); } );
print "$My_name: All targets (@dests) are up-to-date\n";
}
}
- # ???!!! Rethink use of %pass, and it's scoping.
- # Currently %pass is local in rdb_make and is used only to determine
- # whether a rule needs to be run because a source rule has been run,
- # and this would be within the same call to rdb_make.
- # OLD COMMENT: Update source_rules. Is this too late? I don't think so, it's
- # internal to make and to multiple calls to it (pvc). Is this
- # necessary?
rdb_for_some( [keys %rule_db],
sub{
foreach my $s_rule (keys %$PHsource_rules) {
@@ -9440,8 +9367,8 @@ sub rdb_make {
#-------------------
sub rdb_show_rule_errors {
- local @errors = ();
- local @warnings = ();
+ my @errors = ();
+ my @warnings = ();
rdb_for_actives(
sub {
my $message_tail = "";
@@ -9489,7 +9416,8 @@ sub rdb_make1 {
# Assumes contexts for recursion, make, and rule, and
# assumes that source files for the rule are to be considered
# up-to-date.
- our $rule;
+ our ($rule, %pass, $runs, $runs_total, $too_many_passes, $newrule_nofile);
+
if ($diagnostics) { print " Make for rule '$rule'\n"; }
# Is this needed? Yes; rdb_make1 is called on a sequence of rules and
# if one gives an error, then it provides source files directly or
@@ -9620,7 +9548,7 @@ sub rdb_run1 {
$$Plast_result_info = 'CURR';
$$Plast_message = '';
my $latex_like = ($$Pcmd_type eq 'primary');
-
+
# Return value for external command:
my $return = 0;
@@ -9663,6 +9591,7 @@ sub rdb_run1 {
if ($int_cmd) {
print "For rule '$rule', use internal command '\&$int_cmd( @int_args_for_printing )' ...\n"
if $diagnostics;
+ no strict "refs";
$return = &$int_cmd( @int_args );
}
elsif ($$Pext_cmd) {
@@ -9689,7 +9618,7 @@ sub rdb_run1 {
#
$$Pout_of_date = $$Pout_of_date_user = 0;
if ($latex_like) {
- &correct_locations;
+ correct_locations();
run_hooks( 'after_xlatex' );
$return = analyze_latex_run( $return );
run_hooks( 'after_xlatex_analysis' );
@@ -9838,7 +9767,7 @@ sub analyze_latex_run {
if (-e $$Pdest) { $missing_dvi_pdf = '';}
# Find current set of source files:
- my ($missing_dirs, $PA_missing_subdirs, $bad_warnings) = &rdb_set_latex_deps;
+ my ($missing_dirs, $PA_missing_subdirs, $bad_warnings) = rdb_set_latex_deps();
if ($bad_warning_is_error && $bad_warnings) {
warn "$My_name: Serious warnings in .log configured to be errors\n";
$return ||= $bad_warnings;
@@ -9965,7 +9894,8 @@ sub rdb_user_changes {
@{$changes_rule{changed_user}};
push @{$$PHchanges{rules_to_apply}}, $rule;
$user_changes = 1;
- $$Pout_of_date = $$Pout_of_date_user = $user_changes;
+ if ($user_changes) { $$Pout_of_date = $$Pout_of_date_user = 'Changed user file'; }
+ else { $$Pout_of_date = $$Pout_of_date_user = 0; }
}
}
);
@@ -9989,15 +9919,12 @@ sub rdb_rerun_needed {
# make_preview_continuous. Otherwise use rerun criterion suitable for
# with rdb_make's looping through rules.
#
- # ???!!!!
- # Check all uses!!!!!!!!!!!!!
our ($rule, %pass);
local our $PHchanges = shift;
local our $outside_make_loop = shift;
my $bibx_rule = ( $rule =~ /^(biber|bibtex)/ );
-
# File level routine reports its results in %$PHchanges: maps kind of
# change to ref to array of files with that kind of change.
@@ -10010,7 +9937,7 @@ sub rdb_rerun_needed {
my $rerun_needed = $$Pout_of_date;
if ($rerun_needed) {
push @{$$PHchanges{other}},
- "Rerun of '$rule' forced or previously required";
+ "Rerun of '$rule' forced or previously required:\n Reason or flag: '$rerun_needed'";
goto rdb_rerun_needed_CLEAN_UP;
}
@@ -10022,6 +9949,7 @@ sub rdb_rerun_needed {
$$Pcheck_time = time();
+ our $dest_mtime;
local $dest_mtime = 0;
$dest_mtime = get_mtime($$Pdest) if ($$Pdest);
@@ -10106,15 +10034,7 @@ sub rdb_rerun_needed {
# rerun rule until there's a change in source file(s), which
# presumably contain the cause of the error.
# But there are other reasons for not rerunning:
- if ( $$Psource && (! -e $$Psource)
- && ( $$Pcmd_type ne 'primary' )
- ) {
- # Main source file doesn't exist, and rule is NOT primary.
- # No action, since a run is pointless. Primary is different:
- # file might be found elsewhere (by kpsearch from *latex),
- # while non-existence of main source file is a clear error.
- }
- elsif ( $$Pcmd_type eq 'delegated' ) {
+ if ( $$Pcmd_type eq 'delegated' ) {
# Delegate to destination rule
}
elsif ( $$PHextra{bibx_vetoed} ) {
@@ -10129,16 +10049,19 @@ sub rdb_rerun_needed {
}
rdb_rerun_needed_CLEAN_UP:
+ if ( $$Psource && (! -e $$Psource) && ( $$Pcmd_type ne 'primary' ) ) {
+ # Main source file doesn't exist, and rule is NOT primary.
+ # No action, since a run is pointless. Primary is different:
+ # file might be found elsewhere (by kpsearch from *latex),
+ # while non-existence of main source file is a clear error.
+ $rerun_needed = 0;
+ }
foreach my $file ( @{$$PHchanges{changed}} ) {
if ( ! $from_rules{$file} ) {
push @{$$PHchanges{changed_user}}, $file;
}
}
$$Pno_history = 0; # See comments in definition of %rule_db.
- if ( $$Psource && (! -e $$Psource) ) {
-# print "================In '$rule', no source '$$Psource'\n";
- }
-
if ( $bibx_rule ) {
# Check whether run of biber/bibtex rule is to be vetoed.
# Default to no veto:
@@ -10184,7 +10107,7 @@ sub rdb_file_change1 {
# Call: &rdb_file_change1
# Assumes rule and file context. Assumes $dest_mtime set.
# Flag whether $file in $rule has changed or disappeared.
- our ($rule, $file, $PHchanges);
+ our ($rule, $file, $PHchanges, $outside_make_loop, $dest_mtime);
my $check_time_argument =
($outside_make_loop ? 0 : max($$Pcheck_time, $$Prun_time) );
@@ -10367,6 +10290,7 @@ sub rdb_recurse {
# This routine sets a context for anything recursive, with @heads,
# %visited and $depth being set as local variables.
+ our ($depth, @heads, %visited);
local @heads = ();
my $rules = shift;
@@ -10417,6 +10341,7 @@ sub rdb_for_some {
# Rule data and file data are made available in local variables
# for access by the subroutines.
+ our (@heads);
local @heads = ();
my $rules = shift;
# Distinguish between single rule (a string) and a reference to an
@@ -10432,18 +10357,6 @@ sub rdb_for_some {
#************************************************************
-sub rdb_for_one_file {
- # Use : rdb_for_one_file( rule, file, ref to action subroutine )
- my $rule = shift;
- # Avoid name collisions with general recursion and iteraction routines:
- local $file1 = shift;
- local $action1 = shift;
- rdb_for_some( $rule, sub{rdb_one_file($file1,$action1)} );
-} #END rdb_for_one_file
-
-
-#************************************************************
-
# Routines for inner part of recursion and iterations
#************************************************************
@@ -10455,10 +10368,13 @@ sub rdb_recurse_rule {
# the sources of the rules.
# Assumes recursion context, i.e. that %visited, @heads, $depth.
# We are overriding actions:
- my ($rule, $rule_act1, $new_file_act1, $new_file_act2, $rule_act2)
+ our (%visited, @heads, $depth);
+ our ($rule, $rule_act1, $new_file_act1, $new_file_act2, $rule_act2);
+ local ($rule, $rule_act1, $new_file_act1, $new_file_act2, $rule_act2)
= @_;
if (! rdb_is_active($rule)) { return; }
# and must propagate the file actions:
+ our ( $file_act1, $file_act2 );
local $file_act1 = $new_file_act1;
local $file_act2 = $new_file_act2;
# Prevent loops:
@@ -10481,6 +10397,7 @@ sub rdb_recurse_file {
# This has no arguments, since it is used as an action subroutine,
# passed as a reference in calls in higher-level subroutine.
# Assumes contexts set for: Recursion, rule, and file
+ our ( $file_act1, $file_act2, $rule_act1, $rule_act2 );
&$file_act1 if $file_act1;
my $from_rule = $from_rules{$file} || '';
rdb_recurse_rule( $from_rule, $rule_act1, $file_act1, $file_act2,
@@ -10494,9 +10411,9 @@ sub rdb_recurse_file {
sub rdb_do_files {
# Assumes rule context, including $PHsource.
# Applies an action to all the source files of the rule.
- local $file_act = shift;
+ my $file_act = shift;
my @file_list = sort keys %$PHsource;
- foreach my $file ( @file_list ){
+ foreach my $file ( @file_list ) {
rdb_one_file( $file, $file_act );
}
} #END rdb_do_files
@@ -10514,7 +10431,8 @@ sub rdb_one_rule {
# Sets context for rule and carries out the actions.
#===== Accesses rule part of database structure =======
- local ( $rule, $rule_act1, $file_act, $rule_act2 ) = @_;
+ local $rule = shift;
+ my ( $rule_act1, $file_act, $rule_act2 ) = @_;
if ( (! $rule) || ! rdb_rule_exists($rule) ) {
die_trace( "$My_name: BUG in call to rdb_one_rule: non-existent rule '$rule'" );
}
@@ -10592,7 +10510,8 @@ sub rdb_one_file {
# Call: rdb_one_file($file, $file_act)
# Sets context for file and carries out the action.
# Assumes $rule context set.
-#===== Accesses file part of database structure =======
+ #===== Accesses file part of database structure =======
+ our $file_act;
local ($file, $file_act) = @_;
if ( (!$file) ||(!exists ${$PHsource}{$file}) ) { return; }
local $PAfile_data = ${$PHsource}{$file};
@@ -10645,6 +10564,7 @@ sub rdb_create_rule {
foreach ( $needs_making, $run_time, $check_time, $DUMMY ) {
if (! defined $_) { $_ = 0; }
}
+ if ($needs_making) {$needs_making = 'Initial set up of rule'; }
foreach ( $cmd_type, $ext_cmd, $PAint_cmd, $source, $dest, $base,
$set_file_not_exists ) {
if (! defined $_) { $_ = ''; }
@@ -10758,8 +10678,7 @@ sub rdb_ensure_file {
# (2) When initializing rules, when there is no previous
# known run under the control of latexmk.
#============ NOTE: rule and file data set here ===============================
- my $rule = shift;
- local ( $new_file, $new_from_rule, $set_not_exists ) = @_;
+ my ( $rule, $new_file, $new_from_rule, $set_not_exists ) = @_;
if ( ! rdb_rule_exists( $rule ) ) {
die_trace( "$My_name: BUG in call to rdb_ensure_file: non-existent rule '$rule'" );
}
@@ -10799,18 +10718,19 @@ sub rdb_ensure_files_here {
# as is appropriate if the file was read in latest run of rule
use strict;
our ($rule, $My_name, $PHsource, $Prun_time);
- foreach (@_) {
- if ( /\"/ ) {
+ foreach my $file (@_) {
+ # Use $file, not $_, since called subroutine may change it!
+ if ( $file =~ /\"/ ) {
warn "$My_name: in rdb_ensure_files_here for rule '$rule', there\n",
- " is a double quote in the filename: '$_'.\n",
+ " is a double quote in the filename: '$file'.\n",
" I cannot handle this, will ignore this file.\n";
next;
}
- if (! exists ${$PHsource}{$_} ) {
- ${$PHsource}{$_} = [fdb_get($_, $$Prun_time), '', 0];
+ if (! exists ${$PHsource}{$file} ) {
+ ${$PHsource}{$file} = [fdb_get($file, $$Prun_time), '', 0];
}
}
-} #DN rdb_ensure_files_here
+} #END rdb_ensure_files_here
#************************************************************
@@ -10822,18 +10742,18 @@ sub rdb_ensure_new_files_here {
# as is appropriate if the file is new to the rule
use strict;
our ($rule, $My_name, $PHsource, @nofile);
- foreach (@_) {
- if ( /\"/ ) {
+ foreach my $file (@_) {
+ if ( $file =~ /\"/ ) {
warn "$My_name: in rdb_ensure_new_files_here for rule '$rule', there\n",
- " is a double quote in the filename: '$_'.\n",
+ " is a double quote in the filename: '$file'.\n",
" I cannot handle this, will ignore this file.\n";
next;
}
- if (! exists ${$PHsource}{$_} ) {
- ${$PHsource}{$_} = [@nofile, '', 0];
+ if (! exists ${$PHsource}{$file} ) {
+ ${$PHsource}{$file} = [@nofile, '', 0];
}
}
-}
+} #END rdb_ensure_new_files_here
#************************************************************
@@ -10842,7 +10762,7 @@ sub rdb_remove_files {
# Removes file(s) for the rule.
my $rule = shift;
if (!$rule) { return; }
- local @files = @_;
+ my @files = @_;
rdb_one_rule( $rule,
sub{ foreach (@files) { delete ${$PHsource}{$_}; } }
);
@@ -10943,7 +10863,7 @@ sub rdb_file_exists {
# Call rdb_file_exists($rule, $file):
# Returns whether source file item in rule exists.
local ( $rule, $file ) = @_;
- local $exists = 0;
+ my $exists = 0;
rdb_one_rule( $rule,
sub{ $exists = exists( ${$PHsource}{$file} ) ? 1:0; }
);
@@ -10985,12 +10905,12 @@ sub rdb_update1 {
#************************************************************
sub rdb_set_file1 {
- # Call: fdb_file1(rule, file, new_time, new_size, new_md5)
- # Sets file time, size and md5.
- my $rule = shift;
- my $file = shift;
- local @new_file_data = @_;
- rdb_for_one_file( $rule, $file, sub{ ($$Ptime,$$Psize,$$Pmd5)=@new_file_data; } );
+ # Call: rdb_set_file1(rule, file, new_time, new_size, new_md5)
+ # Sets file time, size and md5, in rule data.
+ my ( $rule, $file, @new_file_data ) = @_;
+ rdb_for_some( $rule,
+ sub{ rdb_one_file($file, sub{ ($$Ptime,$$Psize,$$Pmd5)=@new_file_data; } ); }
+ );
}
#************************************************************
@@ -11045,11 +10965,11 @@ sub cus_dep_require_primary_run {
# It is assumed that the resulting file will be read by the
# primary run.
- local $cus_dep_target = $$Pdest;
+ my $cus_dep_target = $$Pdest;
# Loop over all active rules and source files:
rdb_for_actives( 0,
sub { if ($file eq $cus_dep_target) {
- $$Pout_of_date = 1;
+ $$Pout_of_date = "A new file has been made";
$$Pcorrect_after_primary = 1;
}
}
@@ -11499,7 +11419,7 @@ sub kpsewhich {
$cmd =~ s/%[RBTDO]//g;
$cmd =~ s/%S/@args/g;
my @found = ();
- local $fh;
+ my $fh;
if ( $kpsewhich_show || $diagnostics ) {
print "$My_name.kpsewhich: Running '$cmd'...\n";
}
@@ -11576,8 +11496,9 @@ sub find_cus_dep {
####################################################
sub add_hook {
- # Usage: add_book( name of stack, name of orpointer to subroutine )
+ # Usage: add_book( name of stack, name of or pointer to subroutine )
# Return 1 for success, 0 for failure.
+ no strict "refs";
our %hooks;
my ($stack, $routine ) = @_;
unless ( exists $hooks{$stack} ) {
@@ -11694,7 +11615,7 @@ sub find_dirs {
# is added to the list.
# Non-existent directories and non-directories are removed from the list
# Trailing "/"s and "\"s are removed
- local @result = ();
+ my @result = ();
my $find_action
= sub
{ ## Subroutine for use in File::find
@@ -11855,7 +11776,7 @@ sub split_search_path
push @list, "";
}
# Replace each blank argument (default) by current directory:
- for ($i = 0; $i <= $#list ; $i++ ) {
+ for (my $i = 0; $i <= $#list ; $i++ ) {
if ($list[$i] eq "") {$list[$i] = $default;}
}
return @list;
@@ -12006,12 +11927,14 @@ sub Run {
my @args = parse_quotes( $2 );
print "$My_name: calling $routine( $2 )\n"
if (! $silent);
+ no strict "refs";
return ( 0, &$routine( @args ) );
}
elsif ( $cmd_line =~ /^internal\s+([a-zA-Z_]\w*)\s*$/ ) {
my $routine = $1;
print "$My_name: calling $routine()\n"
if (! $silent);
+ no strict "refs";
return ( 0, &$routine() );
}
elsif ( $cmd_line =~ /^NONE/ ) {
@@ -12207,7 +12130,7 @@ sub good_cwd {
sub pushd {
push @dir_stack, [cwd(), $cache{cwd}];
if ( $#_ > -1) {
- local $ret = 0;
+ my $ret = 0;
eval {
if ( -d $_[0] ) {
$ret = chdir dirname_no_tail( $_[0] );
@@ -12261,6 +12184,7 @@ sub end_wait {
# Handler for break: Set global variable $have_break to 1.
# Some systems (e.g., MSWin reset) appear to reset the handler.
# So I'll re-enable it
+ our $have_break;
&catch_break;
$have_break = 1;
}
@@ -12289,3 +12213,128 @@ sub default_break {
#************************************************************
#************************************************************
+
+#************************************************************
+#************************************************************
+# Unicode manipuation and normalization
+# Notes about Perl strings:
+# 1. Strings have a flag utf8.
+# a. If the utf8 flag is on, the string is to be interpreted as a sequence
+# of code points.
+# When "use utf8;" is used, a string containing non-ASCII characters
+# has the utf8 flag set.
+# If 'no bytes;' is in effect, the ordinal value for each item in the
+# string is the Unicode code point value.
+# b. If the utf8 flag is off for a string, the string is a sequence of
+# bytes, to be interpreted according to whatever CS the user happens
+# to choose to use.
+# c. The utf8 flag is NOT to be interpreted as saying that the string is
+# encoded as UTF-8, even though under the hood that may be the case.
+# d. Indeed, setting 'use bytes;' appears to expose the internal
+# byte-level representation of a string with the utf8 flag set, and
+# that appears to be UTF-8.
+# 2. The utf8 flag is quite confusing in its meaning.
+# 3. When encode is applied to a string whose utf8 flag is on, the result
+# is a string with the utf8 flag off, and the result consists of a sequence
+# of bytes in the chosen encoding scheme, which may be chosen as UTF-8.
+# 4. Strings received from the command line have the utf8 flag off and are
+# encoded in whatever CS the OS/terminal is using.
+# 5. When a string is supplied to print (or c), by default:
+# a. If the utf8 flag is off or if 'use bytes;' is in effect, then the
+# string is sent as a sequence of bytes. They are UTF-8 coded if
+# the utf8 flag is on and 'use bytes;' is in effect.
+# b. If the utf8 flag is on and if 'no bytes;' is in effect, then mostly
+# garbage results for non-ASCII characters; the string must first be
+# encoded as a byte string, in the CS suitable for the OS.
+# c. Correct results are obtained when the utf8 flag is on and 'no bytes'
+# is used when the binmode for the file handle is set suitably.
+# 6. Generally OS calls and interactions with the OS need encoded byte strings.
+# 7. Even more generally, interaction with the external world, including file
+# contents is in terms of byte strings, with some CS chosen by default, by
+# the user, or the OS. Unix-like OSs: Default is UTF-8, but as much by
+# convention as by a requirement of the OS.
+
+#-------------------------------------
+
+sub utf8_to_mine {
+ # Given string encoded in UTF-8, return encoded string in my current CS.
+ # Don't use Encode::from_to, which does in-place conversion.
+ if ($no_CP_conversions) { return $_[0]; }
+ else { return encode( $CS_system, decode('UTF-8', $_[0])); }
+}
+
+#-------------------------------------
+
+sub utf8_to_mine_errors {
+ # Given string encoded in UTF-8, return encoded string in my current CS.
+ # Don't use Encode::from_to, which does in-place conversion.
+ # Assume coding of input string is correctly UTF-8, but
+ # check for correct encoding in CS_system.
+ # Error message is returned in $@. No error => $@ is null string.
+ # (Same style as eval!)
+ $@ = '';
+ if ($no_CP_conversions) { return $_[0]; }
+ else {
+ my $result = '';
+ eval {
+ $result = encode( $CS_system,
+ decode('UTF-8', $_[0]),
+ Encode::FB_CROAK | Encode::LEAVE_SRC
+ );
+ };
+ return $result;
+ }
+}
+
+#-------------------------------------
+
+sub config_to_mine {
+ # Ensure that configuration strings about files and directories are
+ # encoded in system CS.
+ # Configuration strings set in an rc file SHOULD either be:
+ # a. ASCII only, with Perl's utf8 flag off.
+ # b. Containing non-ASCII characters, with utf8 flag on.
+ # These need to be converted to encoded strings in system CS (and
+ # hence with utf8 flag off).
+ # Configuration variables set from the command line, e.g., from an
+ # -outdir=... option, are already in the system CS, because that is
+ # how strings are passed on the command line.
+ # So we just need to do a conversion for strings with utf8 flag on:
+ foreach ( $out_dir, $aux_dir, @default_files, @default_excluded_files ) {
+ if (utf8::is_utf8($_)) { $_ = encode( $CS_system, $_ ); }
+ }
+} #END config_to_mine
+
+#************************************************************
+
+sub mine_to_utf8 {
+ # Given string encoded in my current CS, return utf-8 encoded string.
+ # Don't use Encode::from_to, which does in-place conversion.
+ if ($no_CP_conversions) { return $_[0]; }
+ else { return encode( 'UTF-8', decode($CS_system, $_[0])); }
+}
+
+#-------------------------------------
+
+sub is_valid_utf8 {
+ eval { decode( 'UTF-8', $_[0], (Encode::FB_CROAK | Encode::LEAVE_SRC ) ); };
+ if ($@) { return 0; }
+ else { return 1; }
+}
+
+#-------------------------------------
+
+sub fprint8 {
+ # Usage: fprint8( handle, data array)
+ # Write to file converting from my CS to UTF-8
+ my $fh = shift;
+ print $fh mine_to_utf8( join( '', @_ ) );
+}
+
+#-------------------------------------
+
+################################################################
+
+
+
+
diff --git a/support/latexmk/latexmk.txt b/support/latexmk/latexmk.txt
index cf97de03fe..462e9a80da 100644
--- a/support/latexmk/latexmk.txt
+++ b/support/latexmk/latexmk.txt
@@ -61,7 +61,7 @@ DESCRIPTION
- 10 January 2024 1
+ 31 January 2024 1
@@ -127,7 +127,7 @@ LATEXMK OPTIONS AND ARGUMENTS ON COMMAND LINE
- 10 January 2024 2
+ 31 January 2024 2
@@ -188,12 +188,12 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
sionally result from filenames that have been incorrectly quoted
on the command line. In addition, under Microsoft Windows, the
forward slash character "\" is a directory separator, so latexmk
- replaces it by a backward slash "/", which is also a legal di-
- rectory separator in Windows, and is accepted by latex etc.
+ replaces it by a forward slash "/", which is also a legal direc-
+ tory separator in Windows, and is accepted by latex etc.
- 10 January 2024 3
+ 31 January 2024 3
@@ -203,21 +203,21 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-auxdir=FOO or -aux-directory=FOO
- Sets the directory for auxiliary output files of *latex (.aux,
- .log etc). These are all the generated files, with the excep-
+ Sets the directory for auxiliary output files of *latex (.aux,
+ .log etc). These are all the generated files, with the excep-
tion of final output files (.dvi, .ps, .pdf, .synctex.gz, .sync-
- tex). See the -outdir/-output-directory option for directories
+ tex). See the -outdir/-output-directory option for directories
for the final output files.
If the directory specified for the -aux/-aux-directory option is
- blank, then the default is used, which is to be the same as the
+ blank, then the default is used, which is to be the same as the
output directory.
If you also use the -cd option, and the specified auxiliary out-
- put directory is a relative path, then the path is interpreted
+ put directory is a relative path, then the path is interpreted
relative to the document directory.
- See the section AUXILIARY AND OUTPUT DIRECTORIES for more de-
+ See the section AUXILIARY AND OUTPUT DIRECTORIES for more de-
tails.
@@ -225,41 +225,41 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
When the source file uses bbl files for bibliography, run bibtex
or biber as needed to regenerate the bbl files.
- This property can also be configured by setting the $bibtex_use
+ This property can also be configured by setting the $bibtex_use
variable to 2 in a configuration file.
-bibtex-
- Never run bibtex or biber. Also, always treat .bbl files as
+ Never run bibtex or biber. Also, always treat .bbl files as
precious, i.e., do not delete them in a cleanup operation.
- A common use for this option is when a document comes from an
- external source, complete with its bbl file(s), and the user
- does not have the corresponding bib files available. In this
- situation use of the -bibtex- option will prevent latexmk from
+ A common use for this option is when a document comes from an
+ external source, complete with its bbl file(s), and the user
+ does not have the corresponding bib files available. In this
+ situation use of the -bibtex- option will prevent latexmk from
trying to run bibtex or biber, which would result in overwriting
of the bbl files.
- This property can also be configured by setting the $bibtex_use
+ This property can also be configured by setting the $bibtex_use
variable to 0 in a configuration file.
-bibtex-cond
- When the source file uses a bbl file for the bibliography and
- bibtex is used to generate the bibliography, run bibtex as
- needed to regenerate the bbl files only if the relevant bib
- file(s) exist. Thus when the bib file(s) are not available,
+ When the source file uses a bbl file for the bibliography and
+ bibtex is used to generate the bibliography, run bibtex as
+ needed to regenerate the bbl files only if the relevant bib
+ file(s) exist. Thus when the bib file(s) are not available,
bibtex is not run, thereby avoiding overwriting of the bbl file.
- Also, always treat .bbl files as precious, i.e., do not delete
+ Also, always treat .bbl files as precious, i.e., do not delete
them in a cleanup operation.
- This is the default setting. It can also be configured by set-
+ This is the default setting. It can also be configured by set-
ting the $bibtex_use variable to 1 in a configuration file.
- 10 January 2024 4
+ 31 January 2024 4
@@ -268,21 +268,21 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- The reason for using this setting is first to allow automatic
+ The reason for using this setting is first to allow automatic
switching between the use and non-use of bibtex depending on the
- existence or not of a bib file. In addition, when submitting
- articles to a scientific journal, it is common to submit only
- .tex and .bbl files (plus graphics files), but not a .bib file.
- Hence it is often useful to treat .bbl files as true source
+ existence or not of a bib file. In addition, when submitting
+ articles to a scientific journal, it is common to submit only
+ .tex and .bbl files (plus graphics files), but not a .bib file.
+ Hence it is often useful to treat .bbl files as true source
files, that should be preserved under a clean up operation.
- This property can also be configured by setting the $bibtex_use
+ This property can also be configured by setting the $bibtex_use
variable to 1 in a configuration file.
Note that when biber is used, and a bib file doesn't exist, this
- option does not prevent biber from being run, with the bbl file
- then being incorrect. See the documentation on $bibtex_use for
- more details. However, a bbl file is treated as precious in a
+ option does not prevent biber from being run, with the bbl file
+ then being incorrect. See the documentation on $bibtex_use for
+ more details. However, a bbl file is treated as precious in a
clean up operation.
@@ -290,42 +290,42 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
The same as -bibtex-cond except that .bbl files are only treated
as precious if one or more bibfiles fails to exist.
- Thus if all the bib files exist, bibtex is run to generate .bbl
- files as needed, and then it is appropriate to delete the bbl
+ Thus if all the bib files exist, bibtex is run to generate .bbl
+ files as needed, and then it is appropriate to delete the bbl
files in a cleanup operation since they can be re-generated.
- This property can also be configured by setting the $bibtex_use
+ This property can also be configured by setting the $bibtex_use
variable to 1.5 in a configuration file.
Note that when biber is used, and a bib file doesn't exist, this
- option does not prevent biber from being run, with the bbl file
- then being incorrect. See the documentation on $bibtex_use for
- more details. However, a bbl file is treated as precious in a
+ option does not prevent biber from being run, with the bbl file
+ then being incorrect. See the documentation on $bibtex_use for
+ more details. However, a bbl file is treated as precious in a
clean up operation.
-bibtexfudge or -bibfudge
- Turn on the change-directory fudge for bibtex. See documenta-
+ Turn on the change-directory fudge for bibtex. See documenta-
tion of $bibtex_fudge for details.
-bibtexfudge- or -bibfudge-
- Turn off the change-directory fudge for bibtex. See documenta-
+ Turn off the change-directory fudge for bibtex. See documenta-
tion of $bibtex_fudge for details.
-bm <message>
- A banner message to print diagonally across each page when con-
- verting the dvi file to postscript. The message must be a sin-
- gle argument on the command line so be careful with quoting
+ A banner message to print diagonally across each page when con-
+ verting the dvi file to postscript. The message must be a sin-
+ gle argument on the command line so be careful with quoting
spaces and such.
- Note that if the -bm option is specified, the -ps option is as-
+ Note that if the -bm option is specified, the -ps option is as-
sumed.
- 10 January 2024 5
+ 31 January 2024 5
@@ -335,16 +335,16 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-bi <intensity>
- How dark to print the banner message. A decimal number between
+ How dark to print the banner message. A decimal number between
0 and 1. 0 is black and 1 is white. The default is 0.95, which
is OK unless your toner cartridge is getting low.
-bs <scale>
- A decimal number that specifies how large the banner message
- will be printed. Experimentation is necessary to get the right
- scale for your message, as a rule of thumb the scale should be
- about equal to 1100 divided by the number of characters in the
+ A decimal number that specifies how large the banner message
+ will be printed. Experimentation is necessary to get the right
+ scale for your message, as a rule of thumb the scale should be
+ about equal to 1100 divided by the number of characters in the
message. The default is 220.0 which is just right for 5 charac-
ter messages.
@@ -356,42 +356,42 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-c Clean up (remove) all regeneratable files generated by latex and
bibtex or biber except dvi, postscript and pdf. These files are
- a combination of log files, aux files, latexmk's database file
- of source file information, and those with extensions specified
- in the @generated_exts configuration variable. In addition,
+ a combination of log files, aux files, latexmk's database file
+ of source file information, and those with extensions specified
+ in the @generated_exts configuration variable. In addition,
files specified by the $clean_ext and @generated_exts configura-
tion variables are removed.
- This cleanup is instead of a regular make. See the -gg option
+ This cleanup is instead of a regular make. See the -gg option
if you want to do a cleanup followed by a make.
- Treatment of .bbl files: If $bibtex_use is set to 0 or 1, bbl
- files are always treated as non-regeneratable. If $bibtex_use
+ Treatment of .bbl files: If $bibtex_use is set to 0 or 1, bbl
+ files are always treated as non-regeneratable. If $bibtex_use
is set to 1.5, bbl files are counted as non-regeneratable condi-
- tionally: If the bib file exists, then bbl files are regenerat-
- able, and are deleted in a clean up. But if $bibtex_use is 1.5
- and a bib file doesn't exist, then the bbl files are treated as
+ tionally: If the bib file exists, then bbl files are regenerat-
+ able, and are deleted in a clean up. But if $bibtex_use is 1.5
+ and a bib file doesn't exist, then the bbl files are treated as
non-regeneratable and hence are not deleted.
- In contrast, if $bibtex_use is set to 2, bbl files are always
+ In contrast, if $bibtex_use is set to 2, bbl files are always
treated as regeneratable, and are deleted in a cleanup.
- Treatment of files generated by custom dependencies: If
- $cleanup_includes_cusdep_generated is nonzero, regeneratable
- files are considered as including those generated by custom de-
- pendencies and are also deleted. Otherwise these files are not
+ Treatment of files generated by custom dependencies: If
+ $cleanup_includes_cusdep_generated is nonzero, regeneratable
+ files are considered as including those generated by custom de-
+ pendencies and are also deleted. Otherwise these files are not
deleted.
-C Clean up (remove) all regeneratable files generated by latex and
bibtex or biber. This is the same as the -c option with the ad-
- dition of dvi, postscript and pdf files, and those specified in
+ dition of dvi, postscript and pdf files, and those specified in
the $clean_full_ext configuration variable.
- 10 January 2024 6
+ 31 January 2024 6
@@ -400,64 +400,64 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- This cleanup is instead of a regular make. See the -gg option
+ This cleanup is instead of a regular make. See the -gg option
if you want to do a cleanup followed by a make.
- See the -c option for the specification of whether or not .bbl
+ See the -c option for the specification of whether or not .bbl
files are treated as non-regeneratable or regeneratable.
- If $cleanup_includes_cusdep_generated is nonzero, regeneratable
- files are considered as including those generated by custom de-
- pendencies and are also deleted. Otherwise these files are not
+ If $cleanup_includes_cusdep_generated is nonzero, regeneratable
+ files are considered as including those generated by custom de-
+ pendencies and are also deleted. Otherwise these files are not
deleted.
- -CA (Obsolete). Now equivalent to the -C option. See that option
+ -CA (Obsolete). Now equivalent to the -C option. See that option
for details.
- -cd Change to the directory containing the main source file before
- processing it. Then all the generated files (.aux, .log, .dvi,
+ -cd Change to the directory containing the main source file before
+ processing it. Then all the generated files (.aux, .log, .dvi,
.pdf, etc) will be relative to the source file.
- This option is particularly useful when latexmk is invoked from
- a GUI configured to invoke latexmk with a full pathname for the
+ This option is particularly useful when latexmk is invoked from
+ a GUI configured to invoke latexmk with a full pathname for the
source file.
- This option works by setting the $do_cd configuration variable
- to one; you can set that variable if you want to configure la-
+ This option works by setting the $do_cd configuration variable
+ to one; you can set that variable if you want to configure la-
texmk to have the effect of the -cd option without specifying it
on the command line. See the documentation for that variable.
- -cd- Do NOT change to the directory containing the main source file
+ -cd- Do NOT change to the directory containing the main source file
before processing it. Then all the generated files (.aux, .log,
- .dvi, .pdf, etc) will be relative to the current directory
+ .dvi, .pdf, etc) will be relative to the current directory
rather than the source file.
- This is the default behavior and corresponds to the behavior of
+ This is the default behavior and corresponds to the behavior of
the *latex programs. However, it is not desirable behavior when
- latexmk is invoked by a GUI configured to invoke latexmk with a
+ latexmk is invoked by a GUI configured to invoke latexmk with a
full pathname for the source file. See the -cd option.
- This option works by setting the $do_cd configuration variable
- to zero. See the documentation for that variable for more in-
+ This option works by setting the $do_cd configuration variable
+ to zero. See the documentation for that variable for more in-
formation.
- -CF Remove the file containing the database of source file informa-
+ -CF Remove the file containing the database of source file informa-
tion, before doing the other actions requested.
- -d Set draft mode. This prints the banner message "DRAFT" across
- your page when converting the dvi file to postscript. Size and
+ -d Set draft mode. This prints the banner message "DRAFT" across
+ your page when converting the dvi file to postscript. Size and
intensity can be modified with the -bs and -bi options. The -bm
- option will override this option as this is really just a short
+ option will override this option as this is really just a short
way of specifying:
- 10 January 2024 7
+ 31 January 2024 7
@@ -468,27 +468,27 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
latexmk -bm DRAFT
- Note that if the -d option is specified, the -ps option is as-
+ Note that if the -d option is specified, the -ps option is as-
sumed.
-deps Show a list of dependent files after processing. This is in the
- form of a dependency list of the form used by the make program,
+ form of a dependency list of the form used by the make program,
and it is therefore suitable for use in a Makefile. It gives an
overall view of the files without listing intermediate files, as
well as latexmk can determine them.
- By default the list of dependent files is sent to stdout (i.e.,
- normally to the screen unless you've redirected latexmk's out-
+ By default the list of dependent files is sent to stdout (i.e.,
+ normally to the screen unless you've redirected latexmk's out-
put). But you can set the filename where the list is sent by the
-deps-out= option.
- See the section "USING latexmk WITH make" for an example of how
+ See the section "USING latexmk WITH make" for an example of how
to use a dependency list with make.
- Users familiar with GNU automake and gcc will find that the
- -deps option is very similar in its purpose and results to the
- -M option to gcc. (In fact, latexmk also has options -M, -MF,
+ Users familiar with GNU automake and gcc will find that the
+ -deps option is very similar in its purpose and results to the
+ -M option to gcc. (In fact, latexmk also has options -M, -MF,
and -MP options that behave like those of gcc.)
@@ -496,7 +496,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
Equivalent to -deps.
- -deps- Do not show a list of dependent files after processing. (This
+ -deps- Do not show a list of dependent files after processing. (This
is the default.)
@@ -506,24 +506,24 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-deps-escape=<string>
Set the kind of escaping used for spaces in the dependency list.
- The possible values are "none", "unix", "nmake", corresponding
- respectively to no escaping, escaping with a "\" suitable for
- standard Unix make, and escaping with "^", suitable for Mi-
+ The possible values are "none", "unix", "nmake", corresponding
+ respectively to no escaping, escaping with a "\" suitable for
+ standard Unix make, and escaping with "^", suitable for Mi-
crosoft's nmake.
-deps-out=FILENAME
- Set the filename to which the list of dependent files is writ-
- ten. If the FILENAME argument is omitted or set to "-", then
+ Set the filename to which the list of dependent files is writ-
+ ten. If the FILENAME argument is omitted or set to "-", then
the output is sent to stdout.
- Use of this option also turns on the output of the list of de-
+ Use of this option also turns on the output of the list of de-
pendent files after processing.
- 10 January 2024 8
+ 31 January 2024 8
@@ -532,10 +532,10 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- -dF Dvi file filtering. The argument to this option is a filter
- which will generate a filtered dvi file with the extension
- ".dviF". All extra processing (e.g. conversion to postscript,
- preview, printing) will then be performed on this filtered dvi
+ -dF Dvi file filtering. The argument to this option is a filter
+ which will generate a filtered dvi file with the extension
+ ".dviF". All extra processing (e.g. conversion to postscript,
+ preview, printing) will then be performed on this filtered dvi
file.
Example usage: To use dviselect to select only the even pages of
@@ -545,26 +545,26 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-diagnostics
- Print detailed diagnostics during a run. This may help for de-
- bugging problems or to understand latexmk's behavior in diffi-
+ Print detailed diagnostics during a run. This may help for de-
+ bugging problems or to understand latexmk's behavior in diffi-
cult situations.
-dir-report
- For each .tex file processed, list the settings for aux and out
- directories, after they have been normalized from the settings
- specified during initialization. See the description of the
+ For each .tex file processed, list the settings for aux and out
+ directories, after they have been normalized from the settings
+ specified during initialization. See the description of the
variable $aux_out_dir_report for more details.
-dir-report-
- Do not report the settings for aux and out directories. (De-
+ Do not report the settings for aux and out directories. (De-
fault)
-dir-report-only
- After all initialization is complete, give the settings for the
- aux and out directories, and then halt. This option is primar-
+ After all initialization is complete, give the settings for the
+ aux and out directories, and then halt. This option is primar-
ily used for debugging configuration issues.
@@ -572,24 +572,24 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-dvilua
- Generate dvi version of document using lualatex instead of la-
+ Generate dvi version of document using lualatex instead of la-
tex.
- -dvi- Turn off generation of dvi version of document. (This may get
- overridden, if some other file is made (e.g., a .ps file) that
- is generated from the dvi file, or if no generated file at all
+ -dvi- Turn off generation of dvi version of document. (This may get
+ overridden, if some other file is made (e.g., a .ps file) that
+ is generated from the dvi file, or if no generated file at all
is requested.)
-dvilualatex="COMMAND"
This sets the string specifying the command to run dvi lualatex.
- It behaves like the -pdflatex option, but sets the variable
+ It behaves like the -pdflatex option, but sets the variable
$dvilualatex.
- 10 January 2024 9
+ 31 January 2024 9
@@ -598,44 +598,44 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- Note: This option when provided with the COMMAND argument only
- sets the command for invoking dvilualatex; it does not turn on
- the use of dvilualatex. That is done by other options or in an
+ Note: This option when provided with the COMMAND argument only
+ sets the command for invoking dvilualatex; it does not turn on
+ the use of dvilualatex. That is done by other options or in an
initialization file.
-e <code>
- Execute the specified initialization code before processing.
- The code is Perl code of the same form as is used in latexmk's
- initialization files. For more details, see the information on
- the -r option, and the section about "Configuration/initializa-
- tion (RC) files". The code is typically a sequence of assign-
+ Execute the specified initialization code before processing.
+ The code is Perl code of the same form as is used in latexmk's
+ initialization files. For more details, see the information on
+ the -r option, and the section about "Configuration/initializa-
+ tion (RC) files". The code is typically a sequence of assign-
ment statements separated by semicolons.
- The code is executed when the -e option is encountered during
- latexmk's parsing of its command line. See the -r option for a
- way of executing initialization code from a file. An error re-
- sults in latexmk stopping. Multiple instances of the -r and -e
+ The code is executed when the -e option is encountered during
+ latexmk's parsing of its command line. See the -r option for a
+ way of executing initialization code from a file. An error re-
+ sults in latexmk stopping. Multiple instances of the -r and -e
options can be used, and they are executed in the order they ap-
pear on the command line.
Some care is needed to deal with proper quoting of special char-
- acters in the code on the command line. For example, suppose
- you want to set the latex command to use its -shell-escape op-
+ acters in the code on the command line. For example, suppose
+ you want to set the latex command to use its -shell-escape op-
tion, then under UNIX/Linux you could use the line
latexmk -e '$latex=q/latex %O -shell-escape %S/' file.tex
- Note that the single quotes block normal UNIX/Linux command
- shells from treating the characters inside the quotes as spe-
- cial. (In this example, the q/.../ construct is a Perl idiom
- equivalent to using single quotes. This avoids the complica-
- tions of getting a quote character inside an already quoted
- string in a way that is independent of both the shell and the
+ Note that the single quotes block normal UNIX/Linux command
+ shells from treating the characters inside the quotes as spe-
+ cial. (In this example, the q/.../ construct is a Perl idiom
+ equivalent to using single quotes. This avoids the complica-
+ tions of getting a quote character inside an already quoted
+ string in a way that is independent of both the shell and the
operating-system.)
- The above command line will NOT work under MS-Windows with
- cmd.exe or command.com or 4nt.exe. For MS-Windows with these
+ The above command line will NOT work under MS-Windows with
+ cmd.exe or command.com or 4nt.exe. For MS-Windows with these
command shells you could use
latexmk -e "$latex=q/latex %O -shell-escape %S/" file.tex
@@ -644,18 +644,18 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
latexmk -e "$latex='latex %O -shell-escape %S'" file.tex
- The last two examples will NOT work with UNIX/Linux command
+ The last two examples will NOT work with UNIX/Linux command
shells.
- (Note: the above examples show are to show how to use the -e to
- specify initialization code to be executed. But the particular
+ (Note: the above examples show are to show how to use the -e to
+ specify initialization code to be executed. But the particular
effect can be achieved also by the use of the -latex option with
less problems in dealing with quoting.)
- 10 January 2024 10
+ 31 January 2024 10
@@ -666,45 +666,45 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-emulate-aux-dir
Emulate the use of an aux directory instead of leaving it to the
- *latex programs to do it. (MiKTeX supports -aux-directory, but
+ *latex programs to do it. (MiKTeX supports -aux-directory, but
TeXLive doesn't.)
- See the section AUXILIARY AND OUTPUT DIRECTORIES for more de-
+ See the section AUXILIARY AND OUTPUT DIRECTORIES for more de-
tails.
-emulate-aux-dir-
Turn off emulation to implement an aux directory and leave it to
- the *latex program to handle the case that the aux directory is
- different from the output directory. Note that if you use
- TeXLive, which doesn't support -aux-directory, latexmk will au-
- tomatically switch aux_dir emulation on after the first run of
+ the *latex program to handle the case that the aux directory is
+ different from the output directory. Note that if you use
+ TeXLive, which doesn't support -aux-directory, latexmk will au-
+ tomatically switch aux_dir emulation on after the first run of
*latex, because it will find the .log file in the wrong place.
- -f Force latexmk to continue document processing despite errors.
+ -f Force latexmk to continue document processing despite errors.
Normally, when latexmk detects that LaTeX or another program has
found an error which will not be resolved by further processing,
no further processing is carried out.
- Note: "Further processing" means the running of other programs
- or the rerunning of latex (etc) that would be done if no errors
- had occurred. If instead, or additionally, you want the latex
- (etc) program not to pause for user input after an error, you
- should arrange this by an option that is passed to the program,
- e.g., by latexmk's option -interaction=nonstopmode (which la-
+ Note: "Further processing" means the running of other programs
+ or the rerunning of latex (etc) that would be done if no errors
+ had occurred. If instead, or additionally, you want the latex
+ (etc) program not to pause for user input after an error, you
+ should arrange this by an option that is passed to the program,
+ e.g., by latexmk's option -interaction=nonstopmode (which la-
texmk passes to *latex).
-f- Turn off the forced processing-past-errors such as is set by the
- -f option. This could be used to override a setting in a con-
+ -f option. This could be used to override a setting in a con-
figuration file.
- -g Force latexmk to process document fully, even under situations
- where latexmk would normally decide that no changes in the
- source files have occurred since the previous run. This option
- is useful, for example, if you change some options and wish to
+ -g Force latexmk to process document fully, even under situations
+ where latexmk would normally decide that no changes in the
+ source files have occurred since the previous run. This option
+ is useful, for example, if you change some options and wish to
reprocess the files.
@@ -721,7 +721,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 10 January 2024 11
+ 31 January 2024 11
@@ -730,24 +730,24 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- -hnt Generate hnt (HINT) version of document using hilatex. (And
+ -hnt Generate hnt (HINT) version of document using hilatex. (And
turn off dvi, postscript, and pdf modes.)
-jobname=STRING
- Set the basename of output files(s) to STRING, instead of the
- default, which is the basename of the specified TeX file. (At
+ Set the basename of output files(s) to STRING, instead of the
+ default, which is the basename of the specified TeX file. (At
present, STRING should not contain spaces.)
- This is like the same option for current implementations of the
+ This is like the same option for current implementations of the
*latex, and the passing of this option to these programs is part
of latexmk's implementation of -jobname.
There is one enhancement, that the STRING may contain the place-
holder '%A'. This will be substituted by the basename of the TeX
- file. The primary purpose is when multiple files are specified
- on the command line to latexmk, and you wish to use a jobname
- with a different file-dependent value for each file. For exam-
+ file. The primary purpose is when multiple files are specified
+ on the command line to latexmk, and you wish to use a jobname
+ with a different file-dependent value for each file. For exam-
ple, suppose you had .tex files test1.tex and test2.tex, and you
wished to compare the results of compilation by *latex and those
with xelatex. Then under a unix-type operating system you could
@@ -756,13 +756,13 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
latexmk -pdf -jobname=%A-pdflatex *.tex
latexmk -pdfxe -jobname=%A-xelatex *.tex
- Then the .aux, .log, and .pdf files from the use of pdflatex
- would have basenames test1-pdflatex and test2-pdflatex, while
+ Then the .aux, .log, and .pdf files from the use of pdflatex
+ would have basenames test1-pdflatex and test2-pdflatex, while
from xelatex, the basenames would be test1-xelatex and test2-xe-
latex.
Under MS-Windows with cmd.exe, you would need to double the per-
- cent sign, so that the percent character is passed to latexmk
+ cent sign, so that the percent character is passed to latexmk
rather than being used to substitute an environment variable:
latexmk -pdf -jobname=%%A-pdflatex *.tex
@@ -770,24 +770,24 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-l Run in landscape mode, using the landscape mode for the preview-
- ers and the dvi to postscript converters. This option is not
- normally needed nowadays, since current previewers normally de-
+ ers and the dvi to postscript converters. This option is not
+ normally needed nowadays, since current previewers normally de-
termine this information automatically.
-l- Turn off -l.
- -latex This sets the generation of dvi files by latex, and turns off
+ -latex This sets the generation of dvi files by latex, and turns off
the generation of pdf and ps files.
- Note: to set the command used when latex is specified, see the
+ Note: to set the command used when latex is specified, see the
-latex="COMMAND" option.
- 10 January 2024 12
+ 31 January 2024 12
@@ -798,20 +798,20 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-latex="COMMAND"
This sets the string specifying the command to run latex, and is
- typically used to add desired options. Since the string nor-
+ typically used to add desired options. Since the string nor-
mally contains spaces, it should be quoted, e.g.,
latexmk -latex="latex --shell-escape %O %S" foo.tex
- The specification of the contents of the string are the same as
- for the $latex configuration variable. Depending on your oper-
- ating system and the command-line shell you are using, you may
- need to change the single quotes to double quotes (or something
+ The specification of the contents of the string are the same as
+ for the $latex configuration variable. Depending on your oper-
+ ating system and the command-line shell you are using, you may
+ need to change the single quotes to double quotes (or something
else).
- Note: This option when provided with the COMMAND argument only
+ Note: This option when provided with the COMMAND argument only
sets the command for invoking latex; it does not turn on the use
- of latex. That is done by other options or in an initialization
+ of latex. That is done by other options or in an initialization
file.
To set the command for running pdflatex (rather than the command
@@ -819,31 +819,31 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-logfilewarninglist
- -logfilewarnings After a run of *latex, give a list of warnings
- about undefined citations and references (unless silent mode is
+ -logfilewarnings After a run of *latex, give a list of warnings
+ about undefined citations and references (unless silent mode is
on).
See also the $silence_logfile_warnings configuration variable.
-logfilewarninglist-
- -logfilewarnings- After a run of *latex, do not give a list of
+ -logfilewarnings- After a run of *latex, do not give a list of
warnings about undefined citations and references. (Default)
See also the $silence_logfile_warnings configuration variable.
-lualatex
- Use lualatex. That is, use lualatex to process the source
- file(s) to pdf. The generation of dvi and postscript files is
+ Use lualatex. That is, use lualatex to process the source
+ file(s) to pdf. The generation of dvi and postscript files is
turned off.
This option is equivalent to using the following set of options
-pdflua -dvi- -ps-
- (Note: Note that the method of implementation of this option,
- but not its intended effect, differ from some earlier versions
+ (Note: Note that the method of implementation of this option,
+ but not its intended effect, differ from some earlier versions
of latexmk.)
@@ -853,7 +853,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 10 January 2024 13
+ 31 January 2024 13
@@ -864,29 +864,29 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$lualatex.
- Note: This option when provided with the COMMAND argument only
- sets the command for invoking lualatex; it does not turn on the
+ Note: This option when provided with the COMMAND argument only
+ sets the command for invoking lualatex; it does not turn on the
use of lualatex. That is done by other options or in an initial-
ization file.
- -M Show list of dependent files after processing. This is equiva-
+ -M Show list of dependent files after processing. This is equiva-
lent to the -deps option.
-MF file
- If a list of dependents is made, the -MF specifies the file to
+ If a list of dependents is made, the -MF specifies the file to
write it to.
-MP If a list of dependents is made, include a phony target for each
- source file. If you use the dependents list in a Makefile, the
+ source file. If you use the dependents list in a Makefile, the
dummy rules work around errors the program make gives if you re-
move header files without updating the Makefile to match.
-makeindexfudge
- Turn on the change-directory fudge for makeindex. See documen-
+ Turn on the change-directory fudge for makeindex. See documen-
tation of $makeindex_fudge for details.
@@ -902,24 +902,24 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-MSWinBackSlash
This option only has an effect when latexmk is running under MS-
Windows. This is that when latexmk runs a command under MS-Win-
- dows, the Windows standard directory separator "\" is used to
- separate directory components in a file name. Internally, la-
- texmk uses "/" for the directory separator character, which is
+ dows, the Windows standard directory separator "\" is used to
+ separate directory components in a file name. Internally, la-
+ texmk uses "/" for the directory separator character, which is
the character used by Unix-like systems.
This is the default behavior. However the default may have been
- overridden by a configuration file (latexmkrc file) which sets
+ overridden by a configuration file (latexmkrc file) which sets
$MSWin_back_slash=0.
-MSWinBackSlash-
This option only has an effect when latexmk is running under MS-
Windows. This is that when latexmk runs a command under MS-Win-
- dows, the substitution of "\" for the separator character
+ dows, the substitution of "\" for the separator character
- 10 January 2024 14
+ 31 January 2024 14
@@ -938,18 +938,18 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-new-viewer
- When in continuous-preview mode, always start a new viewer to
- view the generated file. By default, latexmk will, in continu-
- ous-preview mode, test for a previously running previewer for
+ When in continuous-preview mode, always start a new viewer to
+ view the generated file. By default, latexmk will, in continu-
+ ous-preview mode, test for a previously running previewer for
the same file and not start a new one if a previous previewer is
running. However, its test sometimes fails (notably if there is
- an already-running previewer that is viewing a file of the same
- name as the current file, but in a different directory). This
+ an already-running previewer that is viewing a file of the same
+ name as the current file, but in a different directory). This
option turns off the default behavior.
-new-viewer-
- The inverse of the -new-viewer option. It puts latexmk in its
+ The inverse of the -new-viewer option. It puts latexmk in its
normal behavior that in preview-continuous mode it checks for an
already-running previewer.
@@ -959,7 +959,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-nobibtexfudge or -nobibfudge
- Turn off the change-directory fudge for bibtex. See documenta-
+ Turn off the change-directory fudge for bibtex. See documenta-
tion of $bibtex_fudge for details.
@@ -974,9 +974,9 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-norc Turn off the automatic reading of initialization (rc) files.
- N.B. Normally the initialization files are read and obeyed, and
- then command line options are obeyed in the order they are en-
- countered. But -norc is an exception to this rule: it is acted
+ N.B. Normally the initialization files are read and obeyed, and
+ then command line options are obeyed in the order they are en-
+ countered. But -norc is an exception to this rule: it is acted
on first, no matter where it occurs on the command line.
@@ -985,7 +985,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 10 January 2024 15
+ 31 January 2024 15
@@ -997,48 +997,48 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
Sets the directory for the output files of *latex.
If the aux directory is not set or is the same as the output di-
- rectory, then all output files of *latex are sent to the output
+ rectory, then all output files of *latex are sent to the output
directory.
If the aux directory is set, e.g., by the option -auxdir, and is
- not equal to the output directory, then only final output files
- (.dvi, .ps, .pdf, .synctex, .synctex.gz) are sent to the output
+ not equal to the output directory, then only final output files
+ (.dvi, .ps, .pdf, .synctex, .synctex.gz) are sent to the output
directory. Other generated files are sent to the aux directory.
- See the section AUXILIARY AND OUTPUT DIRECTORIES for more de-
+ See the section AUXILIARY AND OUTPUT DIRECTORIES for more de-
tails.
-output-format=FORMAT
- This option is one that is allowed for latex, lualatex, and
- pdflatex. But it is not passed to these programs. Instead la-
- texmk emulates it in a way suitable for the context of latexmk
+ This option is one that is allowed for latex, lualatex, and
+ pdflatex. But it is not passed to these programs. Instead la-
+ texmk emulates it in a way suitable for the context of latexmk
and its workflows.
- If FORMAT is dvi, then dvi output is turned on, and postscript
- and pdf output are turned off. This is equivalent to using the
+ If FORMAT is dvi, then dvi output is turned on, and postscript
+ and pdf output are turned off. This is equivalent to using the
options -dvi -ps- -pdf-.
- If FORMAT is pdf, then pdf output is turned on, and dvi and
- postscript output are turned off. This is equivalent to using
+ If FORMAT is pdf, then pdf output is turned on, and dvi and
+ postscript output are turned off. This is equivalent to using
the options -pdf -ps- -dvi-.
If FORMAT is anything else, latexmk gives an error.
- -p Print out the document. By default the file to be printed is
- the first in the list postscript, pdf, dvi that is being made.
+ -p Print out the document. By default the file to be printed is
+ the first in the list postscript, pdf, dvi that is being made.
But you can use the -print=... option to change the type of file
to be printed, and you can configure this in a start up file (by
setting the $print_type variable).
- However, printing is enabled by default only under UNIX/Linux
+ However, printing is enabled by default only under UNIX/Linux
systems, where the default is to use the lpr command and only on
postscript files. In general, the correct behavior for printing
very much depends on your system's software. In particular, un-
- der MS-Windows you must have suitable program(s) available, and
- you must have configured the print commands used by latexmk.
- This can be non-trivial. See the documentation on the $lpr,
+ der MS-Windows you must have suitable program(s) available, and
+ you must have configured the print commands used by latexmk.
+ This can be non-trivial. See the documentation on the $lpr,
$lpr_dvi, and $lpr_pdf configuration variables to see how to set
the commands for printing.
@@ -1046,12 +1046,12 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
turns them off.
- -pdf Generate pdf version of document using pdflatex. (If you wish
+ -pdf Generate pdf version of document using pdflatex. (If you wish
to use lualatex or xelatex, you can use whichever of the options
- 10 January 2024 16
+ 31 January 2024 16
@@ -1060,17 +1060,17 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- -pdflua, -pdfxe, -lualatex or -xelatex applies.) To configure
- latexmk to have such behavior by default, see the section on
+ -pdflua, -pdfxe, -lualatex or -xelatex applies.) To configure
+ latexmk to have such behavior by default, see the section on
"Configuration/initialization (rc) files".
-pdfdvi
- Generate dvi file and then pdf version of document from the dvi
+ Generate dvi file and then pdf version of document from the dvi
file, by default using dvipdf.
- The program used to compile the document to dvi is latex by de-
- fault, but this can be changed to dvilulatex by the use of the
+ The program used to compile the document to dvi is latex by de-
+ fault, but this can be changed to dvilulatex by the use of the
-dvilua option or by setting $dvi_mode to 2.
@@ -1081,43 +1081,43 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-pdfps Generate dvi file, ps file from the dvi file, and then pdf file
from the ps file.
- The program used to compile the document to dvi is latex by de-
- fault, but this can be changed to dvilulatex by the use of the
+ The program used to compile the document to dvi is latex by de-
+ fault, but this can be changed to dvilulatex by the use of the
-dvilua option or by setting $dvi_mode to 2.
- -pdfxe Generate pdf version of document using xelatex. Note that to
- optimize processing time, latexmk uses xelatex to generate an
- .xdv file rather than a pdf file directly. Only after possibly
- multiple runs to generate a fully up-to-date .xdv file does la-
+ -pdfxe Generate pdf version of document using xelatex. Note that to
+ optimize processing time, latexmk uses xelatex to generate an
+ .xdv file rather than a pdf file directly. Only after possibly
+ multiple runs to generate a fully up-to-date .xdv file does la-
texmk then call xdvipdfmx to generate the final .pdf file.
- (Note: The reason why latexmk arranges for xelatex to make an
- .xdv file instead of the xelatex's default of a .pdf file is as
- follows: When the document includes large graphics files, espe-
- cially .png files, the production of a .pdf file can be quite
+ (Note: The reason why latexmk arranges for xelatex to make an
+ .xdv file instead of the xelatex's default of a .pdf file is as
+ follows: When the document includes large graphics files, espe-
+ cially .png files, the production of a .pdf file can be quite
time consuming, even when the creation of the .xdv file by xela-
- tex is fast. So the use of the intermediate .xdv file can re-
+ tex is fast. So the use of the intermediate .xdv file can re-
sult in substantial gains in procesing time, since the .pdf file
is produced once rather than on every run of xelatex.)
- -pdf- Turn off generation of pdf version of document. (This can be
- used to override a setting in a configuration file. It may get
+ -pdf- Turn off generation of pdf version of document. (This can be
+ used to override a setting in a configuration file. It may get
overridden if some other option requires the generation of a pdf
file.)
- If after all options have been processed, pdf generation is
- still turned off, then generation of a dvi file will be turned
+ If after all options have been processed, pdf generation is
+ still turned off, then generation of a dvi file will be turned
on, and then the program used to compiled a document will be la-
- tex (or, more precisely, whatever program is configured to be
+ tex (or, more precisely, whatever program is configured to be
used in the $latex configuration variable).
- 10 January 2024 17
+ 31 January 2024 17
@@ -1130,7 +1130,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
This sets the generation of pdf files by pdflatex, and turns off
the generation of dvi and ps files.
- Note: to set the command used when pdflatex is specified, see
+ Note: to set the command used when pdflatex is specified, see
the -pdflatex="COMMAND" option.
@@ -1142,19 +1142,19 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
latexmk -pdf -pdflatex="pdflatex --shell-escape %O %S"
foo.tex
- The specification of the contents of the string are the same as
+ The specification of the contents of the string are the same as
for the $pdflatex configuration variable. (The option -pdflatex
in fact sets the variable $pdflatex.) Depending on your operat-
- ing system and the command-line shell you are using, you may
- need to change the single quotes to double quotes (or something
+ ing system and the command-line shell you are using, you may
+ need to change the single quotes to double quotes (or something
else).
- Note: This option when provided with the COMMAND argument only
- sets the command for invoking pdflatex; it does not turn on the
+ Note: This option when provided with the COMMAND argument only
+ sets the command for invoking pdflatex; it does not turn on the
use of pdflatex. That is done by other options or in an initial-
ization file.
- To set the command for running latex (rather than the command
+ To set the command for running latex (rather than the command
for pdflatex) see the -latex option.
@@ -1169,10 +1169,10 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-pretex=CODE
Given that CODE is some TeX code, this options sets that code to
- be executed before inputting source file. This only works if
+ be executed before inputting source file. This only works if
the command for invoking the relevant *latex is suitably config-
- ured. See the documentation of the variable $pre_tex_code, and
- the substitution strings %P and %U for more details. This op-
+ ured. See the documentation of the variable $pre_tex_code, and
+ the substitution strings %P and %U for more details. This op-
tion works by setting the variable $pre_tex_code.
See also the -usepretex option.
@@ -1183,7 +1183,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 10 January 2024 18
+ 31 January 2024 18
@@ -1204,12 +1204,12 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-print=dvi, -print=ps, -print=pdf, -print=auto,
- Define which kind of file is printed. This option also ensures
+ Define which kind of file is printed. This option also ensures
that the requisite file is made, and turns on printing.
The (default) case -print=auto determines the kind of print file
- automatically from the set of files that is being made. The
- first in the list postscript, pdf, dvi that is among the files
+ automatically from the set of files that is being made. The
+ first in the list postscript, pdf, dvi that is among the files
to be made is the one used for print out.
@@ -1217,13 +1217,13 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-ps- Turn off generation of postscript version of document. This can
- be used to override a setting in a configuration file. (It may
- get overridden by some other option that requires a postscript
+ be used to override a setting in a configuration file. (It may
+ get overridden by some other option that requires a postscript
file, for example a request for printing.)
- -pF Postscript file filtering. The argument to this option is a
- filter which will generate a filtered postscript file with the
+ -pF Postscript file filtering. The argument to this option is a
+ filter which will generate a filtered postscript file with the
extension ".psF". All extra processing (e.g. preview, printing)
will then be performed on this filtered postscript file.
@@ -1236,20 +1236,20 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
latexmk -ps -pF "psnup -2" foo.tex
Whether to use single or double quotes round the "psnup -2" will
- depend on your command interpreter, as used by the particular
+ depend on your command interpreter, as used by the particular
version of perl and the operating system on your computer.
- -pv Run file previewer. If the -view option is used, that will se-
+ -pv Run file previewer. If the -view option is used, that will se-
lect the kind of file to be previewed (.pdf, .ps or .dvi). Oth-
- erwise the viewer views the "highest" kind of output file that
- is made, with the ordering being .pdf, .ps, .dvi (high to low).
- This option is incompatible with the -p and -pvc options, so it
+ erwise the viewer views the "highest" kind of output file that
+ is made, with the ordering being .pdf, .ps, .dvi (high to low).
+ This option is incompatible with the -p and -pvc options, so it
turns them off.
- 10 January 2024 19
+ 31 January 2024 19
@@ -1261,43 +1261,43 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-pv- Turn off -pv.
- -pvc Run a file previewer and continually update the .dvi, .ps,
+ -pvc Run a file previewer and continually update the .dvi, .ps,
and/or .pdf files whenever changes are made to source files (see
- the Description above). Which of these files is generated and
- which is viewed is governed by the other options, and is the
- same as for the -pv option. The preview-continuous option -pvc
- can only work with one file. So in this case you will normally
- only specify one filename on the command line. It is also in-
- compatible with the -p and -pv options, so it turns these op-
+ the Description above). Which of these files is generated and
+ which is viewed is governed by the other options, and is the
+ same as for the -pv option. The preview-continuous option -pvc
+ can only work with one file. So in this case you will normally
+ only specify one filename on the command line. It is also in-
+ compatible with the -p and -pv options, so it turns these op-
tions off.
- The -pvc option also turns off force mode (-f), as is normally
- best for continuous preview mode. If you really want force
+ The -pvc option also turns off force mode (-f), as is normally
+ best for continuous preview mode. If you really want force
mode, use the options in the order -pvc -f.
With a good previewer the display will be automatically updated.
- (Under some but not all versions of UNIX/Linux "gv -watch" does
- this for postscript files; this can be set by a configuration
- variable. This would also work for pdf files except for an ap-
+ (Under some but not all versions of UNIX/Linux "gv -watch" does
+ this for postscript files; this can be set by a configuration
+ variable. This would also work for pdf files except for an ap-
parent bug in gv that causes an error when the newly updated pdf
file is read.) Many other previewers will need a manual update.
Important note: the acroread program on MS-Windows locks the pdf
- file, and prevents new versions being written, so it is a bad
- idea to use acroread to view pdf files in preview-continuous
- mode. It is better to use a different viewer: SumatraPDF and
+ file, and prevents new versions being written, so it is a bad
+ idea to use acroread to view pdf files in preview-continuous
+ mode. It is better to use a different viewer: SumatraPDF and
gsview are good possibilities.
- There are some other methods for arranging an update, notably
- useful for many versions of xdvi and xpdf. These are best set
+ There are some other methods for arranging an update, notably
+ useful for many versions of xdvi and xpdf. These are best set
in latexmk's configuration; see below.
- Note that if latexmk dies or is stopped by the user, the
+ Note that if latexmk dies or is stopped by the user, the
"forked" previewer will continue to run. Successive invocations
- with the -pvc option will not fork new previewers, but latexmk
- will normally use the existing previewer. (At least this will
- happen when latexmk is running under an operating system where
- it knows how to determine whether an existing previewer is run-
+ with the -pvc option will not fork new previewers, but latexmk
+ will normally use the existing previewer. (At least this will
+ happen when latexmk is running under an operating system where
+ it knows how to determine whether an existing previewer is run-
ning.)
@@ -1305,9 +1305,9 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-pvctimeout
- Do timeout in pvc mode after period of inactivity, which is 30
+ Do timeout in pvc mode after period of inactivity, which is 30
min. by default. Inactivity means a period when latexmk has de-
- tected no file changes and hence has not taken any actions like
+ tected no file changes and hence has not taken any actions like
compiling the document.
@@ -1315,7 +1315,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 10 January 2024 20
+ 31 January 2024 20
@@ -1336,31 +1336,31 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-r <rcfile>
- Read the specified initialization file ("RC file") before pro-
+ Read the specified initialization file ("RC file") before pro-
cessing.
Be careful about the ordering: (1) Standard initialization files
- -- see the section below on "Configuration/initialization (RC)
- files" -- are read first. (2) Then the options on the command
- line are acted on in the order they are given. Therefore if an
- initialization file is specified by the -r option, it is read
- during this second step. Thus an initialization file specified
+ -- see the section below on "Configuration/initialization (RC)
+ files" -- are read first. (2) Then the options on the command
+ line are acted on in the order they are given. Therefore if an
+ initialization file is specified by the -r option, it is read
+ during this second step. Thus an initialization file specified
with the -r option can override both the standard initialization
files and previously specified options. But all of these can be
overridden by later options.
The contents of the RC file just comprise a piece of code in the
- Perl programming language (typically a sequence of assignment
+ Perl programming language (typically a sequence of assignment
statements); they are executed when the -r option is encountered
during latexmk's parsing of its command line. See the -e option
- for a way of giving initialization code directly on latexmk's
- command line. An error results in latexmk stopping. Multiple
+ for a way of giving initialization code directly on latexmk's
+ command line. An error results in latexmk stopping. Multiple
instances of the -r and -e options can be used, and they are ex-
ecuted in the order they appear on the command line.
-rc-report
- After initialization, give a list of the RC files read. (De-
+ After initialization, give a list of the RC files read. (De-
fault)
@@ -1369,10 +1369,10 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-recorder
- Give the -recorder option with *latex. In (most) modern ver-
- sions of these programs, this results in a file of extension
- .fls containing a list of the files that these programs have
- read and written. Latexmk will then use this file to improve
+ Give the -recorder option with *latex. In (most) modern ver-
+ sions of these programs, this results in a file of extension
+ .fls containing a list of the files that these programs have
+ read and written. Latexmk will then use this file to improve
its detection of source files and generated files after a run of
*latex. This is the default setting of latexmk, unless overrid-
den in an initialization file.
@@ -1381,7 +1381,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 10 January 2024 21
+ 31 January 2024 21
@@ -1401,53 +1401,53 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-rules-
- Do not show a list of latexmk's rules and dependencies after
+ Do not show a list of latexmk's rules and dependencies after
processing. (This is the default.)
-showextraoptions
- Show the list of extra *latex options that latexmk recognizes,
- but that it simply passes through to the programs *latex when
- they are run. These options are (currently) a combination of
- those allowed by the TeXLive and MiKTeX implementations. (If a
- particular option is given to latexmk but is not handled by the
- particular implementation of *latex that is being used, that
- program will probably give a warning or an error.) These op-
- tions are very numerous, but are not listed in this documenta-
+ Show the list of extra *latex options that latexmk recognizes,
+ but that it simply passes through to the programs *latex when
+ they are run. These options are (currently) a combination of
+ those allowed by the TeXLive and MiKTeX implementations. (If a
+ particular option is given to latexmk but is not handled by the
+ particular implementation of *latex that is being used, that
+ program will probably give a warning or an error.) These op-
+ tions are very numerous, but are not listed in this documenta-
tion because they have no effect on latexmk's actions.
- There are a few options (e.g., -includedirectory=dir, -initial-
- ize, -ini) that are not recognized, either because they don't
- fit with latexmk's intended operations, or because they need
- special processing by latexmk that isn't implemented (at least,
+ There are a few options (e.g., -includedirectory=dir, -initial-
+ ize, -ini) that are not recognized, either because they don't
+ fit with latexmk's intended operations, or because they need
+ special processing by latexmk that isn't implemented (at least,
not yet).
- There are certain options for *latex (e.g., -recorder) that
+ There are certain options for *latex (e.g., -recorder) that
trigger special actions or behavior by latexmk itself. Depending
- on the action, they may also be passed in some form to the
+ on the action, they may also be passed in some form to the
called *latex program, and/or may affect other programs as well.
- These options do have entries in this documentation. Among
+ These options do have entries in this documentation. Among
these options are: -jobname=STRING, -aux-directory=dir, -output-
directory=DIR, -quiet, and -recorder.
- There are also options that are accepted by *latex, but instead
+ There are also options that are accepted by *latex, but instead
trigger actions purely by latexmk: -help, -version.
-silent
Run commands silently, i.e., with options that reduce the amount
- of diagnostics generated. For example, with the default set-
- tings, the command "latex -interaction=batchmode" is used for
+ of diagnostics generated. For example, with the default set-
+ tings, the command "latex -interaction=batchmode" is used for
latex, and similarly for its friends.
- See also the -logfilewarninglist and -logfilewarninglist- op-
+ See also the -logfilewarninglist and -logfilewarninglist- op-
tions.
- Also reduce the number of informational messages that latexmk
+ Also reduce the number of informational messages that latexmk
- 10 January 2024 22
+ 31 January 2024 22
@@ -1458,62 +1458,62 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
itself generates.
- To change the options used to make the commands run silently,
+ To change the options used to make the commands run silently,
you need to configure latexmk with changed values of its config-
- uration variables, the relevant ones being $bib-
- tex_silent_switch, $biber_silent_switch, $dvipdf_silent_switch,
+ uration variables, the relevant ones being $bib-
+ tex_silent_switch, $biber_silent_switch, $dvipdf_silent_switch,
$dvips_silent_switch, $dvilualatex_silent_switch, $la-
- tex_silent_switch, $lualatex_silent_switch $makein-
- dex_silent_switch, $pdflatex_silent_switch, and $xela-
+ tex_silent_switch, $lualatex_silent_switch $makein-
+ dex_silent_switch, $pdflatex_silent_switch, and $xela-
tex_silent_switch
-stdtexcmds
- Sets the commands for latex, etc, so that they are the standard
+ Sets the commands for latex, etc, so that they are the standard
ones. This is useful to override special configurations.
- The result is that $latex = 'latex %O %S', and similarly for
- $pdflatex, $lualatex, and $xelatex. (The option -no-pdf needed
+ The result is that $latex = 'latex %O %S', and similarly for
+ $pdflatex, $lualatex, and $xelatex. (The option -no-pdf needed
for $xelatex is provided automatically, given that %O appears in
the definition.)
-time Show time used. (On MS Windows, what is shown is clock time; on
- other systems CPU time.) See also the configuration variable
+ other systems CPU time.) See also the configuration variable
$show_time.
- -time- Do not show time used. See also the configuration variable
+ -time- Do not show time used. See also the configuration variable
$show_time.
-use-make
- When after a run of *latex, there are warnings about missing
- files (e.g., as requested by the LaTeX \input, \include, and
- \includgraphics commands), latexmk tries to make them by a cus-
- tom dependency. If no relevant custom dependency with an appro-
+ When after a run of *latex, there are warnings about missing
+ files (e.g., as requested by the LaTeX \input, \include, and
+ \includgraphics commands), latexmk tries to make them by a cus-
+ tom dependency. If no relevant custom dependency with an appro-
priate source file is found, and if the -use-make option is set,
- then as a last resort latexmk will try to use the make program
+ then as a last resort latexmk will try to use the make program
to try to make the missing files.
- Note that the filename may be specified without an extension,
- e.g., by \includegraphics{drawing} in a LaTeX file. In that
- case, latexmk will try making drawing.ext with ext set in turn
- to the possible extensions that are relevant for latex (or as
+ Note that the filename may be specified without an extension,
+ e.g., by \includegraphics{drawing} in a LaTeX file. In that
+ case, latexmk will try making drawing.ext with ext set in turn
+ to the possible extensions that are relevant for latex (or as
appropriate pdflatex, lualatex, xelatex).
- See also the documentation for the $use_make_for_missing_files
+ See also the documentation for the $use_make_for_missing_files
configuration variable.
-use-make-
- Do not use the make program to try to make missing files. (De-
+ Do not use the make program to try to make missing files. (De-
fault.)
- 10 January 2024 23
+ 31 January 2024 23
@@ -1524,13 +1524,13 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-usepretex
Sets the command lines for latex, etc, so that they use the code
- that is defined by the variable $pre_tex_code or that is set by
+ that is defined by the variable $pre_tex_code or that is set by
the option -pretex=CODE to execute the specified TeX code before
the source file is read. This option overrides any previous de-
finition of the command lines.
- The result is that $latex = 'latex %O %P', and similarly for
- $pdflatex, $lualatex, and $xelatex. (The option -no-pdf needed
+ The result is that $latex = 'latex %O %P', and similarly for
+ $pdflatex, $lualatex, and $xelatex. (The option -no-pdf needed
for $xelatex is provided automatically, given that %O appears in
the definition.)
@@ -1552,25 +1552,25 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-view=default, -view=dvi, -view=ps, -view=pdf, -view=none
Set the kind of file used when previewing is requested (e.g., by
the -pv or -pvc switches). The default is to view the "highest"
- kind of requested file (in the low-to-high order .dvi, .ps,
+ kind of requested file (in the low-to-high order .dvi, .ps,
.pdf).
- Note the possibility -view=none where no viewer is opened at
- all. One example of is use is in conjunction with the -pvc op-
- tion, when you want latexmk to do a compilation automatically
- whenever source file(s) change, but do not want a previewer to
+ Note the possibility -view=none where no viewer is opened at
+ all. One example of is use is in conjunction with the -pvc op-
+ tion, when you want latexmk to do a compilation automatically
+ whenever source file(s) change, but do not want a previewer to
be opened.
-Werror
- This causes latexmk to return a non-zero status code if any of
- the files processed gives a warning about problems with cita-
- tions or references (i.e., undefined citations or references or
- about multiply defined references). This is after latexmk has
- completed all the runs it needs to try and resolve references
- and citations. Thus -Werror causes latexmk to treat such warn-
+ This causes latexmk to return a non-zero status code if any of
+ the files processed gives a warning about problems with cita-
+ tions or references (i.e., undefined citations or references or
+ about multiply defined references). This is after latexmk has
+ completed all the runs it needs to try and resolve references
+ and citations. Thus -Werror causes latexmk to treat such warn-
ings as errors, but only when they occur on the last run of *la-
- tex and only after processing is complete. Also can be set by
+ tex and only after processing is complete. Also can be set by
the configuration variable $warnings_as_errors.
@@ -1579,7 +1579,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 10 January 2024 24
+ 31 January 2024 24
@@ -1590,51 +1590,51 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
-xelatex
Use xelatex. That is, use xelatex to process the source file(s)
- to pdf. The generation of dvi and postscript files is turned
+ to pdf. The generation of dvi and postscript files is turned
off.
This option is equivalent to using the following set of options
-pdfxe -dvi- -ps-
- [Note: Note that the method of implementation of this option,
- but not its intended primary effect, differ from some earlier
- versions of latexmk. Latexmk first uses xelatex to make an .xdv
- file, and does all the extra runs needed (including those of
- bibtex, etc). Only after that does it make the pdf file from
- the .xdv file, using xdvipdfmx. See the documentation for the
+ [Note: Note that the method of implementation of this option,
+ but not its intended primary effect, differ from some earlier
+ versions of latexmk. Latexmk first uses xelatex to make an .xdv
+ file, and does all the extra runs needed (including those of
+ bibtex, etc). Only after that does it make the pdf file from
+ the .xdv file, using xdvipdfmx. See the documentation for the
-pdfxe for why this is done.]
-xelatex="COMMAND"
- This sets the string specifying the command to run xelatex. It
+ This sets the string specifying the command to run xelatex. It
sets the variable $xelatex.
Warning: It is important to ensure that the -no-pdf is used when
- xelatex is invoked, since latexmk expects xelatex to produce an
- .xdv file, not a .pdf file. If you provide %O in the command
- specification, this will be done automatically. See the docu-
- mentation for the -pdfxe option for why latexmk makes a .xdv
+ xelatex is invoked, since latexmk expects xelatex to produce an
+ .xdv file, not a .pdf file. If you provide %O in the command
+ specification, this will be done automatically. See the docu-
+ mentation for the -pdfxe option for why latexmk makes a .xdv
file rather than a .pdf file when xelatex is used.
An example of the use of the -pdfxelatex option:
- latexmk -pdfxe -pdfxelatex="xelatex --shell-escape %O %S"
+ latexmk -pdfxe -pdfxelatex="xelatex --shell-escape %O %S"
foo.tex
- Note: This option when provided with the COMMAND argument only
- sets the command for invoking lualatex; it does not turn on the
+ Note: This option when provided with the COMMAND argument only
+ sets the command for invoking lualatex; it does not turn on the
use of lualatex. That is done by other options or in an initial-
ization file.
Compatibility between options
- The preview-continuous option -pvc can only work with one file. So in
- this case you will normally only specify one filename on the command
+ The preview-continuous option -pvc can only work with one file. So in
+ this case you will normally only specify one filename on the command
line.
- Options -p, -pv and -pvc are mutually exclusive. So each of these op-
+ Options -p, -pv and -pvc are mutually exclusive. So each of these op-
tions turns the others off.
@@ -1645,7 +1645,7 @@ EXAMPLES
- 10 January 2024 25
+ 31 January 2024 25
@@ -1674,44 +1674,44 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
DEALING WITH ERRORS, PROBLEMS, ETC
Some possibilities:
- a. If you get a strange error, do look carefully at the output that is
- on the screen and in log files. While there is much that is notori-
+ a. If you get a strange error, do look carefully at the output that is
+ on the screen and in log files. While there is much that is notori-
ously verbose in the output of latex (and that is added to by latexmk),
- the verbosity is there for a reason: to enable the user to diagnose
- problems. Latexmk does repeat some messages at the end of a run that
- it thinks would otherwise be easy to miss in the middle of other out-
+ the verbosity is there for a reason: to enable the user to diagnose
+ problems. Latexmk does repeat some messages at the end of a run that
+ it thinks would otherwise be easy to miss in the middle of other out-
put.
b. Generally, remember that latexmk does its work by running other pro-
grams. Your first priority in dealing with errors should be to examine
what went wrong with the individual programs. Then you need to correct
- the causes of errors in the runs of these programs. (Often these come
- from errors in the source document, but they could also be about miss-
+ the causes of errors in the runs of these programs. (Often these come
+ from errors in the source document, but they could also be about miss-
ing LaTeX packages, etc.)
c. If latexmk doesn't run the programs the way you would like, then you
- need to look in this documentation at the list of command line options
- and then at the sections on configuration/initialization files. A lot
- of latexmk's behavior is configurable to deal with particular situa-
+ need to look in this documentation at the list of command line options
+ and then at the sections on configuration/initialization files. A lot
+ of latexmk's behavior is configurable to deal with particular situa-
tions. (But there is a lot of reading!)
- The remainder of these notes consists of ideas for dealing with more
+ The remainder of these notes consists of ideas for dealing with more
difficult situations.
- d. Further tricks can involve replacing the standard commands that la-
+ d. Further tricks can involve replacing the standard commands that la-
texmk runs by other commands or scripts.
- e. For possible examples of code for use in an RC file, see the direc-
- tory example_rcfiles in the distribution of latexmk (e.g., at
+ e. For possible examples of code for use in an RC file, see the direc-
+ tory example_rcfiles in the distribution of latexmk (e.g., at
http://mirror.ctan.org/support/latexmk/example_rcfiles). Even if these
examples don't do what you want, they may provide suitable inspiration.
- f. There's a useful trick that can be used when you use lualatex in-
- stead of pdflatex (and in some related situations). The problem is
+ f. There's a useful trick that can be used when you use lualatex in-
+ stead of pdflatex (and in some related situations). The problem is
- 10 January 2024 26
+ 31 January 2024 26
@@ -1720,64 +1720,64 @@ DEALING WITH ERRORS, PROBLEMS, ETC
LATEXMK(1) General Commands Manual LATEXMK(1)
- that latexmk won't notice a dependency on a file, bar.baz say, that is
- input by the lua code in your document instead of by the LaTeX part.
- (Thus if you change bar.baz and rerun latexmk, then latexmk will think
- no files have changed and not rerun lualatex, whereas if you had '\in-
- put{bar.baz}' in the LaTeX part of the document, latexmk would notice
- the change.) One solution is just to put the following somewhere in
+ that latexmk won't notice a dependency on a file, bar.baz say, that is
+ input by the lua code in your document instead of by the LaTeX part.
+ (Thus if you change bar.baz and rerun latexmk, then latexmk will think
+ no files have changed and not rerun lualatex, whereas if you had '\in-
+ put{bar.baz}' in the LaTeX part of the document, latexmk would notice
+ the change.) One solution is just to put the following somewhere in
the LaTeX part of the document:
\typeout{(bar.baz)}
- This puts a line in the log file that latexmk will treat as implying
- that the file bar.baz was read. (At present I don't know a way of do-
- ing this automatically.) Of course, if the file has a different name,
+ This puts a line in the log file that latexmk will treat as implying
+ that the file bar.baz was read. (At present I don't know a way of do-
+ ing this automatically.) Of course, if the file has a different name,
change bar.baz to the name of your file.
g. See also the section "Advanced Configuration: Some extra resources".
- h. Look on tex.stackexchange, i.e., at http://tex.stackex-
- change.com/questions/tagged/latexmk Someone may have already solved
+ h. Look on tex.stackexchange, i.e., at http://tex.stackex-
+ change.com/questions/tagged/latexmk Someone may have already solved
your problem.
i. Ask a question at tex.stackexchange.com.
- j. Or ask me (the author of latexmk). My e-mail is at the end of this
+ j. Or ask me (the author of latexmk). My e-mail is at the end of this
documentation.
AUXILIARY AND OUTPUT DIRECTORIES
- Running *latex and the associated programs generate a number of files,
- it is often convenient to arrange for the generated files to be in a
- different directory than the source file(s) of a document. For our
+ Running *latex and the associated programs generate a number of files,
+ it is often convenient to arrange for the generated files to be in a
+ different directory than the source file(s) of a document. For our
purposes here, we identify two classes of generated file.
One class is what one may term the final output files, for example, the
- .pdf file generated by running pdflatex, or the .dvi file from latex.
+ .pdf file generated by running pdflatex, or the .dvi file from latex.
Also in this class is the ps file generated by applying dvips to a .dvi
- file. There are also .synctec or .synctex.gz files that can be used by
- programs that display .pdf files and the like to relate positions in
+ file. There are also .synctec or .synctex.gz files that can be used by
+ programs that display .pdf files and the like to relate positions in
them to positions in source files.
- The second class of file is composed of all other generated files:
- These include notably .aux files that are used for implementing cross
+ The second class of file is composed of all other generated files:
+ These include notably .aux files that are used for implementing cross
referencing, and are both generated on one run and read on a later run.
- Many packages generate yet more such intermediate files, as well as
- programs like bibtex, makeindex, etc. There are also .log files from
+ Many packages generate yet more such intermediate files, as well as
+ programs like bibtex, makeindex, etc. There are also .log files from
*latex and corresponding files from other programs.
- Let us use the term "output directory" for the directory that receives
- the final output files, and "aux directory" for the directory for the
- other generated files. If no special options are provided to the *la-
- tex programs, these directories default to the current directory, and
+ Let us use the term "output directory" for the directory that receives
+ the final output files, and "aux directory" for the directory for the
+ other generated files. If no special options are provided to the *la-
+ tex programs, these directories default to the current directory, and
then the generated files aren't segregated. If the two directories are
- the same, as is the simplest situation, then all generated files are
+ the same, as is the simplest situation, then all generated files are
- 10 January 2024 27
+ 31 January 2024 27
@@ -1786,64 +1786,64 @@ AUXILIARY AND OUTPUT DIRECTORIES
LATEXMK(1) General Commands Manual LATEXMK(1)
- written to the same directory, and one often simply refers to the out-
+ written to the same directory, and one often simply refers to the out-
put directory, without mentioning a separate aux directory.
- Support for them is provided for them in the *latex programs: by the
+ Support for them is provided for them in the *latex programs: by the
single option -output-directory for the TeXLive implementations, and by
- the options -aux-directory and -output-directory for the MiKTeX imple-
+ the options -aux-directory and -output-directory for the MiKTeX imple-
mentations. Special support like this is needed for two reasons: First
- is that there are many packages that write files and it needs to be
+ is that there are many packages that write files and it needs to be
arranged that these are automatically written to the appropriate direc-
- tory without any rewriting of the packages' code. Second is that the
- files are often read in again on subsequent runs of *latex, and it is
+ tory without any rewriting of the packages' code. Second is that the
+ files are often read in again on subsequent runs of *latex, and it is
necessary that the program knows where to find the files.
- A complication is that the TeXLive implementation does not allow for
- separate aux and output directories. Latexmk deals with this by being
- able to emulating a separate aux directory: In this method it invokes
- *latex with just an -output-directory option, with the directory set
- not to the desired output directory, but to the aux directory. After
- running *latex, it moves the relevant final output file(s) to the in-
- tended output directory. Emulation can be turned on by setting the
- configuration variable $emulate_aux to one in a configuration file or
+ A complication is that the TeXLive implementation does not allow for
+ separate aux and output directories. Latexmk deals with this by being
+ able to emulating a separate aux directory: In this method it invokes
+ *latex with just an -output-directory option, with the directory set
+ not to the desired output directory, but to the aux directory. After
+ running *latex, it moves the relevant final output file(s) to the in-
+ tended output directory. Emulation can be turned on by setting the
+ configuration variable $emulate_aux to one in a configuration file or
by using latexmk's -emulate-aux-dir option. The emulation method works
equally well if MiKTeX is used.
- Latexmk also turns emulation on if it is found to be needed, as fol-
- lows. Suppose emulation is initially off, but the aux and output di-
- rectories are different. Then latexmk invokes *latex with an -aux-di-
- rectory option and after the run finds that it hasn't been obeyed, no-
- tably because the .log file is in the output directory rather than the
- aux directory. Latexmk then sets emulation on, and retries. Conceiv-
+ Latexmk also turns emulation on if it is found to be needed, as fol-
+ lows. Suppose emulation is initially off, but the aux and output di-
+ rectories are different. Then latexmk invokes *latex with an -aux-di-
+ rectory option and after the run finds that it hasn't been obeyed, no-
+ tably because the .log file is in the output directory rather than the
+ aux directory. Latexmk then sets emulation on, and retries. Conceiv-
ably, it could move all the appropriate generated files from the output
- directory to the aux directory; but there is such a large variety of
+ directory to the aux directory; but there is such a large variety of
possibilities for these files that this is hard to identify all of them
reliably except for simple cases.
- Note that the emulation issue only arises when the user has arranged
- for the the aux and output directories to be different. When instead
- they are equal, e.g., because the user only set the $out_dir variable,
- then latexmk invokes *latex with only an -output-directory option,
+ Note that the emulation issue only arises when the user has arranged
+ for the the aux and output directories to be different. When instead
+ they are equal, e.g., because the user only set the $out_dir variable,
+ then latexmk invokes *latex with only an -output-directory option,
which works as intended with both TeXLive and MiKTeX.
In addition, latexmk arranges the invocations of any auxiliary programs
like bibtex and makeindex so that they will read and write the relevant
- files from and to the aux directory. Programs like dvips, dvipdf,
- ps2pdf, and xdvipdfmx are invoked so that they read from the appropri-
+ files from and to the aux directory. Programs like dvips, dvipdf,
+ ps2pdf, and xdvipdfmx are invoked so that they read from the appropri-
ate places and write their output to the output directory.
- Files considered as final output files, i.e., those that belong in the
- output directory rather than the aux directory: These have the exten-
+ Files considered as final output files, i.e., those that belong in the
+ output directory rather than the aux directory: These have the exten-
sions .dvi, .ps., .pdf, .synctex, and .synctex.gz. A special case, be-
cause of compatibility issues, is of .fls files: See below.
- Note that xelatex when invoked with its -no-pdf option, as latexmk
- does, generates an .xdv file, which would appear to have the same
+ Note that xelatex when invoked with its -no-pdf option, as latexmk
+ does, generates an .xdv file, which would appear to have the same
- 10 January 2024 28
+ 31 January 2024 28
@@ -1853,36 +1853,36 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
status as a .dvi file generated by latex. Nevertheless, latexmk treats
- .xdv as an intermediate file that is found in the aux directory. This
- is to match MiKTeX's treatment of the -aux-directory option. As fur-
- ther justification, one can say that under modern conditions an .xdv
+ .xdv as an intermediate file that is found in the aux directory. This
+ is to match MiKTeX's treatment of the -aux-directory option. As fur-
+ ther justification, one can say that under modern conditions an .xdv
file is (almost) always an intermediate file. Historically, the situa-
- tion with .dvi files from latex was different, and currently dvi pre-
+ tion with .dvi files from latex was different, and currently dvi pre-
viewers do exist.
- Variables and options for directories: The variables for setting the
- aux and output directories are $aux_dir and $out_dir, with correspond-
- ing command line options -auxdir (or -aux-directory) and -outdir (or
- -output-directory). When a value for these is blank (which is the de-
- fault value), it implies the use of a default: For the aux directory,
+ Variables and options for directories: The variables for setting the
+ aux and output directories are $aux_dir and $out_dir, with correspond-
+ ing command line options -auxdir (or -aux-directory) and -outdir (or
+ -output-directory). When a value for these is blank (which is the de-
+ fault value), it implies the use of a default: For the aux directory,
the default is to set it equal to the output directory. For the output
directory, the default is to be the current directory.
For the turning on and off of the emulation mode, there is the configu-
- ration variable $emulate_aux and the options -emulate-aux-dir, -emu-
+ ration variable $emulate_aux and the options -emulate-aux-dir, -emu-
late-aux-dir-, -noemulate-aux-dir.
Interaction with -cd option: When the -cd option is used (or the equiv-
alent setting of $do_cd variable), then latexmk changes the working di-
- rectory to the document directory before invoking *latex. If the aux
- and/or output directories are given by relative paths, e.g., by -out-
- dir=output for a directory named "output", then the directories are
+ rectory to the document directory before invoking *latex. If the aux
+ and/or output directories are given by relative paths, e.g., by -out-
+ dir=output for a directory named "output", then the directories are
relative to the document directory, rather than relative to the working
directory that was in effect when latexmk was invoked. This matches the
- behavior of *latex as invoked with the provided command line directory
- argument(s) after the change of working directory to the document di-
+ behavior of *latex as invoked with the provided command line directory
+ argument(s) after the change of working directory to the document di-
rectory.
Automatic creation of aux and output directories: Unlike *latex, if la-
@@ -1891,25 +1891,25 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
If the document uses the \include macro to read a .tex file from a sub-
directory, *latex will attempt to write an extra aux file to the corre-
- sponding subdirectory of the aux directory. If the subdirectory
- doesn't exist, then *latex will complain that it can't write the aux
+ sponding subdirectory of the aux directory. If the subdirectory
+ doesn't exist, then *latex will complain that it can't write the aux
file. After the run of *latex, latexmk detects this situation, creates
- the necessary directory, and reruns *latex with the error situation
+ the necessary directory, and reruns *latex with the error situation
corrected.
Choice of aux and output directories: Often the aux and output directo-
- ries are given as subdirectories of the document directory, e.g., by
+ ries are given as subdirectories of the document directory, e.g., by
-outdir=output. But it is possible to provide, for example, an absolute
- path or a path relative to a parent directory, e.g., "/tmp/foo" or
+ path or a path relative to a parent directory, e.g., "/tmp/foo" or
"../output". Be aware that in general this can cause problems, notably
- with makeindex or bibtex. This is because modern versions of these
- programs, by default, will refuse to work when they find that they are
+ with makeindex or bibtex. This is because modern versions of these
+ programs, by default, will refuse to work when they find that they are
asked to write to a file in a directory that appears not to be the cur-
- rent working directory or one of its subdirectories. This is part of
+ rent working directory or one of its subdirectories. This is part of
- 10 January 2024 29
+ 31 January 2024 29
@@ -1921,61 +1921,61 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
security measures by the whole TeX system that try to prevent malicious
or errant TeX documents from incorrectly messing with a user's files.
- By default, latexmk evades this issue: Before running bibtex and
+ By default, latexmk evades this issue: Before running bibtex and
makeindex, latexmk changes working directory to the aux directory, with
appropriate settings of search paths. The use or non-use of this trick
- is governed by the variables $bibtex_fudge and $makeindex_fudge. Un-
- fortunately, the trick sometimes makes bibtex and makeindex unable to
+ is governed by the variables $bibtex_fudge and $makeindex_fudge. Un-
+ fortunately, the trick sometimes makes bibtex and makeindex unable to
find files.
If necessary the trick can be turned off. But this is incompatible with
- an aux directory like, "/tmp/foo" of "../output"). If you really have
+ an aux directory like, "/tmp/foo" of "../output"). If you really have
to deal with this situation, and only if you have to deal with it, then
- you need to disable the security measures (and assume any risks). One
+ you need to disable the security measures (and assume any risks). One
way of doing this is to temporarily set an operating system environment
- variable openout_any to "a" (as in "all"), to override the default
+ variable openout_any to "a" (as in "all"), to override the default
"paranoid" setting.
- Certain names of aux and output directories not allowed on Microsoft
+ Certain names of aux and output directories not allowed on Microsoft
Windows: It is natural to want to use the name "aux" for the aux direc-
- tory, e.g., by using the option -auxdir=aux. But on Microsoft operat-
+ tory, e.g., by using the option -auxdir=aux. But on Microsoft operat-
ing systems "aux" is one of the names that is not allowed for a file or
- directory. I find it useful to standardize on a name like "auxdir"
- (e.g., by -auxdir=auxdir); this works independently of operating sys-
+ directory. I find it useful to standardize on a name like "auxdir"
+ (e.g., by -auxdir=auxdir); this works independently of operating sys-
tem.
- Location of .fls file: Much of the dependency information that latexmk
+ Location of .fls file: Much of the dependency information that latexmk
uses comes from the .fls file generated when *latex is invoked with the
- -recorder option, which latexmk does by default. It may seem rational
- that this is written to the aux directory. But in fact versions of
+ -recorder option, which latexmk does by default. It may seem rational
+ that this is written to the aux directory. But in fact versions of
MiKTeX prior to Oct. 2020 wrote it to the output directory. Later ver-
- sions do write it to the aux directory. To deal with this, latexmk
- does two things: First, if latexmk finds that the .fls file has only
- been generated in the "wrong" directory, then latexmk copies it to the
+ sions do write it to the aux directory. To deal with this, latexmk
+ does two things: First, if latexmk finds that the .fls file has only
+ been generated in the "wrong" directory, then latexmk copies it to the
expected directory, after which latexmk's operation continues correctly
- independently of the behavior of *latex. Second it allows its idea of
- the "correct" (or expected) directory to be configured by the variable
- $fls_uses_aux_dir. This defaults to zero, to correspond to MiKTeX's
+ independently of the behavior of *latex. Second it allows its idea of
+ the "correct" (or expected) directory to be configured by the variable
+ $fls_uses_aux_dir. This defaults to zero, to correspond to MiKTeX's
current behavior.
ALLOWING FOR CHANGE OF OUTPUT FILE TYPE
When one of the latex engines is run, the usual situation is that latex
- produces a .dvi file, while pdflatex and lualatex produce a .pdf file.
+ produces a .dvi file, while pdflatex and lualatex produce a .pdf file.
For xelatex the default is to produce a .pdf file, but to optimize pro-
- cessing time latexmk runs xelatex its -no-pdf option so that it pro-
- duces an .xdv file. Further processing by latexmk takes this as a
+ cessing time latexmk runs xelatex its -no-pdf option so that it pro-
+ duces an .xdv file. Further processing by latexmk takes this as a
starting point.
However, the actual output file may differ from the normal expectation;
- and then latexmk can adjust its processing to accommodate this situa-
- tion. The difference in output file type can happen for two reasons:
- One is that for latex, pdflatex and lualatex the document itself can
+ and then latexmk can adjust its processing to accommodate this situa-
+ tion. The difference in output file type can happen for two reasons:
+ One is that for latex, pdflatex and lualatex the document itself can
- 10 January 2024 30
+ 31 January 2024 30
@@ -1984,64 +1984,64 @@ ALLOWING FOR CHANGE OF OUTPUT FILE TYPE
LATEXMK(1) General Commands Manual LATEXMK(1)
- override the defaults. The other is that there may be a configuration,
+ override the defaults. The other is that there may be a configuration,
or misconfiguration, such that the program that latexmk invokes to com-
- pile the document is not the expected one, or is given options incom-
+ pile the document is not the expected one, or is given options incom-
patible with what latexmk initially expects.
- Under latex and pdflatex, control of the output format by the document
- is done by setting the \pdfoutput macro. Under lualatex, the \output-
+ Under latex and pdflatex, control of the output format by the document
+ is done by setting the \pdfoutput macro. Under lualatex, the \output-
mode macro is used instead.
One example of an important use-case for document control of the output
- format is a document that uses the psfrag package to insert graphical
+ format is a document that uses the psfrag package to insert graphical
elements in the output file. The psfrag package achieves its effects by
inserting postscript code in the output of the compilation of the docu-
- ment. This entails the use of compilation to a .dvi file, followed by
- the use of conversion to a postscript file (either directly, as by
- dvips or implicitly, as an intermediate step by dvipdf). Then it is
- useful to force output to be of the .dvi format by inserting \pdfout-
+ ment. This entails the use of compilation to a .dvi file, followed by
+ the use of conversion to a postscript file (either directly, as by
+ dvips or implicitly, as an intermediate step by dvipdf). Then it is
+ useful to force output to be of the .dvi format by inserting \pdfout-
put=0 in the preamble of the document.
- Another example is where the document uses graphics file of the .pdf,
- .jpg, and png types. With the default setting for the graphicx pack-
- age, these can be processed in compilation to .pdf but not with compi-
- lation to .dvi. In this case, it is useful to insert \pdfoutput=1 in
- the preamble of the document to force compilation to .pdf output for-
+ Another example is where the document uses graphics file of the .pdf,
+ .jpg, and png types. With the default setting for the graphicx pack-
+ age, these can be processed in compilation to .pdf but not with compi-
+ lation to .dvi. In this case, it is useful to insert \pdfoutput=1 in
+ the preamble of the document to force compilation to .pdf output for-
mat.
In all of these cases, it is needed that latexmk has to adjust its pro-
- cessing to deal with a mismatch between the actual output format (out
- of .pdf, .dvi, .xdv) and the initially expected output, if possible.
+ cessing to deal with a mismatch between the actual output format (out
+ of .pdf, .dvi, .xdv) and the initially expected output, if possible.
Latexmk does this provided the following conditions are met.
The first is that latexmk's $allow_switch configuration variable is set
- to a non-zero value as it is by default. If this variable is zero, a
+ to a non-zero value as it is by default. If this variable is zero, a
mismatch of filetypes in the compilation results in an error.
- The second condition for latexmk to be able to handle a change of out-
- put type is that no explicit requests for .dvi or .ps output files are
- made. Explicit requests are by the -dvi and -ps, -print=dvi,
- -print=ps, -view=dvi, and -view=ps options, and by corresponding set-
- tings of the $dvi_mode, $postscript_mode, $print_type, and $view con-
- figuration variables. The print-type and view-type restrictions only
+ The second condition for latexmk to be able to handle a change of out-
+ put type is that no explicit requests for .dvi or .ps output files are
+ made. Explicit requests are by the -dvi and -ps, -print=dvi,
+ -print=ps, -view=dvi, and -view=ps options, and by corresponding set-
+ tings of the $dvi_mode, $postscript_mode, $print_type, and $view con-
+ figuration variables. The print-type and view-type restrictions only
apply when printing and viewing are explicitly requested, respectively.
- For this purpose, the use of the -pdfdvi and -pdfps options (and the
- corresponding setting of the $pdf_mode variable) does not count as an
- explicit request for the .dvi and .ps files; they are merely regarded
- as a request for making a .pdf file together with an initial proposal
+ For this purpose, the use of the -pdfdvi and -pdfps options (and the
+ corresponding setting of the $pdf_mode variable) does not count as an
+ explicit request for the .dvi and .ps files; they are merely regarded
+ as a request for making a .pdf file together with an initial proposal
for the processing route to make it.
Note that when accommodating a change in output file type, there is in-
- volved a substantial change in the network of rules that latexmk uses
- in its actions. The second condition applied to accommodate a change
+ volved a substantial change in the network of rules that latexmk uses
+ in its actions. The second condition applied to accommodate a change
is to avoid situations where the change in the rule network is too rad-
ical to be readily handled automatically.
- 10 January 2024 31
+ 31 January 2024 31
@@ -2051,11 +2051,11 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
CONFIGURATION/INITIALIZATION (RC) FILES
- In this section is explained which configuration files are read by la-
- texmk. Subsequent sections "How to Set Variables in Initialization
- Files", "Format of Command Specifications", "List of Configuration
- Variables Usable in Initialization Files", "Custom Dependencies", and
- "Advanced Configuration" give details on what can be configured and
+ In this section is explained which configuration files are read by la-
+ texmk. Subsequent sections "How to Set Variables in Initialization
+ Files", "Format of Command Specifications", "List of Configuration
+ Variables Usable in Initialization Files", "Custom Dependencies", and
+ "Advanced Configuration" give details on what can be configured and
how.
Latexmk can be customized using initialization files, which are read at
@@ -2063,7 +2063,7 @@ CONFIGURATION/INITIALIZATION (RC) FILES
1) The system RC file, if it exists.
On a UNIX system, latexmk searches the following directories for a
- system RC file, which may be named either "LatexMk" or "latexmkrc".
+ system RC file, which may be named either "LatexMk" or "latexmkrc".
The
directories are searched in the following order, and latexmk uses
the first such file it finds (if any):
@@ -2072,7 +2072,7 @@ CONFIGURATION/INITIALIZATION (RC) FILES
"/usr/local/share/latexmk",
"/usr/local/lib/latexmk".
On a MS-Windows system it looks just in "C:\latexmk".
- On a cygwin system (i.e., a MS-Windows system in which Perl is that
+ On a cygwin system (i.e., a MS-Windows system in which Perl is that
of cygwin), latexmk looks in the directories
"/cygdrive/c/latexmk",
"/etc",
@@ -2080,34 +2080,34 @@ CONFIGURATION/INITIALIZATION (RC) FILES
"/usr/local/share/latexmk",
"/usr/local/lib/latexmk".
- If the environment variable LATEXMKRCSYS is set, its value is used as
+ If the environment variable LATEXMKRCSYS is set, its value is used as
the name of the system RC file, instead of any of the above.
2) The user's RC file, if it exists. This can be in one of two places.
- The traditional one is ".latexmkrc" in the user's home directory. The
- other possibility is "latexmk/latexmkrc" in the user's XDG configura-
- tion home directory. The actual file read is the first of "$XDG_CON-
- FIG_HOME/latexmk/latexmkrc" or "$HOME/.latexmkrc" which exists. (See
+ The traditional one is ".latexmkrc" in the user's home directory. The
+ other possibility is "latexmk/latexmkrc" in the user's XDG configura-
+ tion home directory. The actual file read is the first of "$XDG_CON-
+ FIG_HOME/latexmk/latexmkrc" or "$HOME/.latexmkrc" which exists. (See
https://specifications.freedesktop.org/basedir-spec/basedir-spec-lat-
est.html for details on the XDG Base Directory Specification.)
- Here $HOME is the user's home directory. [Latexmk determines the
- user's home directory as follows: It is the value of the environment
- variable HOME, if this variable exists, which normally is the case on
- UNIX-like systems (including Linux and OS-X). Otherwise the environ-
- ment variable USERPROFILE is used, if it exists, which normally is the
+ Here $HOME is the user's home directory. [Latexmk determines the
+ user's home directory as follows: It is the value of the environment
+ variable HOME, if this variable exists, which normally is the case on
+ UNIX-like systems (including Linux and OS-X). Otherwise the environ-
+ ment variable USERPROFILE is used, if it exists, which normally is the
case on MS-Windows systems. Otherwise a blank string is used instead of
$HOME, in which case latexmk does not look for an RC file in it.]
- $XDG_CONFIG_HOME is the value of the environment variable XDG_CON-
- FIG_HOME if it exists. If this environment variable does not exist,
- but $HOME is non-blank, then $XDG_CONFIG_HOME is set to the default
- value of $HOME/.config. Otherwise $XDG_CONFIG_HOME is blank, and la-
+ $XDG_CONFIG_HOME is the value of the environment variable XDG_CON-
+ FIG_HOME if it exists. If this environment variable does not exist,
+ but $HOME is non-blank, then $XDG_CONFIG_HOME is set to the default
+ value of $HOME/.config. Otherwise $XDG_CONFIG_HOME is blank, and la-
texmk does not look for an RC file under it.
- 10 January 2024 32
+ 31 January 2024 32
@@ -2116,35 +2116,35 @@ CONFIGURATION/INITIALIZATION (RC) FILES
LATEXMK(1) General Commands Manual LATEXMK(1)
- 3) The RC file in the current working directory. This file can be
- named either "latexmkrc" or ".latexmkrc", and the first of these to be
+ 3) The RC file in the current working directory. This file can be
+ named either "latexmkrc" or ".latexmkrc", and the first of these to be
found is used, if any.
4) Any RC file(s) specified on the command line with the -r option.
Each RC file is a sequence of Perl commands. Naturally, a user can use
- this in creative ways. But for most purposes, one simply uses a se-
+ this in creative ways. But for most purposes, one simply uses a se-
quence of assignment statements that override some of the built-in set-
- tings of Latexmk. Straightforward cases can be handled without knowl-
- edge of the Perl language by using the examples in this document as
+ tings of Latexmk. Straightforward cases can be handled without knowl-
+ edge of the Perl language by using the examples in this document as
templates. Comment lines are introduced by the "#" character.
- Note that command line options are obeyed in the order in which they
+ Note that command line options are obeyed in the order in which they
are written; thus any RC file specified on the command line with the -r
- option can override previous options but can be itself overridden by
- later options on the command line. There is also the -e option, which
+ option can override previous options but can be itself overridden by
+ later options on the command line. There is also the -e option, which
allows initialization code to be specified in latexmk's command line.
For possible examples of code for in an RC file, see the directory ex-
- ample_rcfiles in the distribution of latexmk (e.g., at http://mir-
+ ample_rcfiles in the distribution of latexmk (e.g., at http://mir-
ror.ctan.org/support/latexmk/example_rcfiles).
HOW TO SET VARIABLES IN INITIALIZATION FILES
- The important variables that can be configured are described in the
- section "List of configuration variables usable in initialization
- files". (See the earlier section "Configuration/Initialization (rc)
- Files" for the files where the configurations are done.) Syntax for
+ The important variables that can be configured are described in the
+ section "List of configuration variables usable in initialization
+ files". (See the earlier section "Configuration/Initialization (rc)
+ Files" for the files where the configurations are done.) Syntax for
setting these variables is of the following forms:
$bibtex = 'bibtex %O %S';
@@ -2157,23 +2157,23 @@ HOW TO SET VARIABLES IN INITIALIZATION FILES
@default_files = ('paper', 'paper1');
- for the setting of an array of strings. It is possible to append an
+ for the setting of an array of strings. It is possible to append an
item to an array variable as follows:
push @default_files, 'paper2';
- Note that simple "scalar" variables have names that begin with a $
+ Note that simple "scalar" variables have names that begin with a $
character and array variables have names that begin with a @ character.
Each statement ends with a semicolon.
- Strings should be enclosed in single quotes. (You could use double
- quotes, as in many programming languages. But then the Perl program-
- ming language brings into play some special rules for interpolating
- variables into strings. People not fluent in Perl will want to avoid
+ Strings should be enclosed in single quotes. (You could use double
+ quotes, as in many programming languages. But then the Perl program-
+ ming language brings into play some special rules for interpolating
+ variables into strings. People not fluent in Perl will want to avoid
- 10 January 2024 33
+ 31 January 2024 33
@@ -2184,33 +2184,33 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
these complications.)
- You can do much more complicated things, but for this you will need to
+ You can do much more complicated things, but for this you will need to
consult a manual for the Perl programming language.
FORMAT OF COMMAND SPECIFICATIONS
- Some of the variables set the commands that latexmk uses for carrying
- out its work, for example to generate a .dvi file from a .tex file or
- to view a postscript file. This section describes some important fea-
+ Some of the variables set the commands that latexmk uses for carrying
+ out its work, for example to generate a .dvi file from a .tex file or
+ to view a postscript file. This section describes some important fea-
tures of how the commands are specified. (Note that some of the possi-
- bilities listed here do not apply to the $kpsewhich variable; see its
+ bilities listed here do not apply to the $kpsewhich variable; see its
documentation.)
Placeholders: Supposed you wanted latexmk to use the command elatex in
- place of the regular latex command, and suppose moreover that you
- wanted to give it the option "--shell-escape". You could do this by
+ place of the regular latex command, and suppose moreover that you
+ wanted to give it the option "--shell-escape". You could do this by
the following setting:
$latex = 'elatex --shell-escape %O %S';
- The two items starting with the % character are placeholders. These
- are substituted by appropriate values before the command is run. Thus
- %S will be replaced by the source file that elatex will be applied to,
- and %O will be replaced by any options that latexmk has decided to use
+ The two items starting with the % character are placeholders. These
+ are substituted by appropriate values before the command is run. Thus
+ %S will be replaced by the source file that elatex will be applied to,
+ and %O will be replaced by any options that latexmk has decided to use
for this command. (E.g., if you used the -silent option in the invoca-
- tion of latexmk, it results in the replacement of %O by "-interac-
+ tion of latexmk, it results in the replacement of %O by "-interac-
tion=batchmode".)
The available placeholders are:
@@ -2219,27 +2219,27 @@ FORMAT OF COMMAND SPECIFICATIONS
the setting of a jobname by the -jobname option or the $jobname
configuration value.
- %B base of filename for current command. E.g., if a postscript
- file document.ps is being made from the dvi file document.dvi,
+ %B base of filename for current command. E.g., if a postscript
+ file document.ps is being made from the dvi file document.dvi,
then the basename is document.
- %D destination file (e.g., the name of the postscript file when
+ %D destination file (e.g., the name of the postscript file when
converting a dvi file to postscript).
%O options
- %P If the variable $pre_tex_code is non-empty, then %P is substi-
- tuted by the contents of $pre_tex_code followed by \in-
- put{SOURCE}, where SOURCE stands for the name of the source
+ %P If the variable $pre_tex_code is non-empty, then %P is substi-
+ tuted by the contents of $pre_tex_code followed by \in-
+ put{SOURCE}, where SOURCE stands for the name of the source
file. Appropriate quoting is done. This enables TeX code to be
- passed to one of the *latex engines to be executed before the
+ passed to one of the *latex engines to be executed before the
source file is read.
- If the variable $pre_tex_code is the empty string, then %P is
+ If the variable $pre_tex_code is the empty string, then %P is
- 10 January 2024 34
+ 31 January 2024 34
@@ -2252,60 +2252,60 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
%R root filename. This is the base name for the main tex file.
- By default this is the basename of the main tex file. However
- the value can be changed by the use of the -jobname option or
+ By default this is the basename of the main tex file. However
+ the value can be changed by the use of the -jobname option or
the $jobname configuration variable.
- %S source file (e.g., the name of the dvi file when converting a
+ %S source file (e.g., the name of the dvi file when converting a
.dvi file to ps).
%T The name of the primary tex file.
- %U If the variable $pre_tex_code is non-empty, then its value is
- substituted for %U (appropriately quoted). Otherwise it is re-
+ %U If the variable $pre_tex_code is non-empty, then its value is
+ substituted for %U (appropriately quoted). Otherwise it is re-
placed by a null string.
%Y Name of directory for auxiliary output files (see the configura-
tion variable $aux_dir). A directory separation character ('/')
is appended if $aux_dir is non-empty and does not end in a suit-
able character, with suitable characters being those appropriate
- to UNIX and MS-Windows, i.e., ':', '/' and '\'. Note that if
- after initialization, $out_dir is set, but $aux_dir is not set
- (i.e., it is blank), then latexmk sets $aux_dir to the same
+ to UNIX and MS-Windows, i.e., ':', '/' and '\'. Note that if
+ after initialization, $out_dir is set, but $aux_dir is not set
+ (i.e., it is blank), then latexmk sets $aux_dir to the same
value $out_dir.
- %Z Name of directory for output files (see the configuration vari-
- able $out_dir). A directory separation character ('/') is ap-
- pended if $out_dir is non-empty and does not end in a suitable
- character, with suitable characters being those appropriate to
+ %Z Name of directory for output files (see the configuration vari-
+ able $out_dir). A directory separation character ('/') is ap-
+ pended if $out_dir is non-empty and does not end in a suitable
+ character, with suitable characters being those appropriate to
UNIX and MS-Windows, i.e., ':', '/' and '\'.
- If for some reason you need a literal % character in your string not
+ If for some reason you need a literal % character in your string not
subject to the above rules, use "%%".
- Appropriate quoting will be applied to the filename substitutions, so
- you mustn't supply them yourself even if the names of your files have
+ Appropriate quoting will be applied to the filename substitutions, so
+ you mustn't supply them yourself even if the names of your files have
spaces in them. (But if your TeX filenames have spaces in them, beware
- that some older versions of the TeX program cannot correctly handle
- filenames containing spaces.) In case latexmk's quoting does not work
- correctly on your system, you can turn it off -- see the documentation
+ that some older versions of the TeX program cannot correctly handle
+ filenames containing spaces.) In case latexmk's quoting does not work
+ correctly on your system, you can turn it off -- see the documentation
for the variable $quote_filenames.
- See the default values in the section "List of configuration variables
+ See the default values in the section "List of configuration variables
usable in initialization files" for what is normally the most appropri-
ate usage.
If you omit to supply any placeholders whatever in the specification of
- a command, latexmk will supply what its author thinks are appropriate
+ a command, latexmk will supply what its author thinks are appropriate
defaults. This gives compatibility with configuration files for previ-
ous versions of latexmk, which didn't use placeholders.
- "Detaching" a command: Normally when latexmk runs a command, it waits
+ "Detaching" a command: Normally when latexmk runs a command, it waits
for the command to run to completion. This is appropriate for commands
- 10 January 2024 35
+ 31 January 2024 35
@@ -2315,24 +2315,24 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
like latex, of course. But for previewers, the command should normally
- run detached, so that latexmk gets the previewer running and then re-
- turns to its next task (or exits if there is nothing else to do). To
- achieve this effect of detaching a command, you need to precede the
+ run detached, so that latexmk gets the previewer running and then re-
+ turns to its next task (or exits if there is nothing else to do). To
+ achieve this effect of detaching a command, you need to precede the
command name with "start ", as in
$dvi_previewer = 'start xdvi %O %S';
- This will be translated to whatever is appropriate for your operating
+ This will be translated to whatever is appropriate for your operating
system.
Notes: (1) In some circumstances, latexmk will always run a command de-
- tached. This is the case for a previewer in preview continuous mode,
- since otherwise previewing continuously makes no sense. (2) This pre-
- cludes the possibility of running a command named start. (3) If the
- word start occurs more than once at the beginning of the command
- string, that is equivalent to having just one. (4) Under cygwin, some
- complications happen, since cygwin amounts to a complicated merging of
- UNIX and MS-Windows. See the source code for how I've handled the
+ tached. This is the case for a previewer in preview continuous mode,
+ since otherwise previewing continuously makes no sense. (2) This pre-
+ cludes the possibility of running a command named start. (3) If the
+ word start occurs more than once at the beginning of the command
+ string, that is equivalent to having just one. (4) Under cygwin, some
+ complications happen, since cygwin amounts to a complicated merging of
+ UNIX and MS-Windows. See the source code for how I've handled the
problem.
Command names containing spaces: Under MS-Windows it is common that the
@@ -2344,26 +2344,26 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
%S';
$pdf_previewer = 'start "c:/Program Files/SumatraPDF/Suma-
traPDF.exe" %O %S';
- $pdf_previewer = 'start "c:/Program Files/SumatraPDF (x86)/Suma-
+ $pdf_previewer = 'start "c:/Program Files/SumatraPDF (x86)/Suma-
traPDF.exe" %O %S';
- (Note about the above example: Under MS-Windows forward slashes are
+ (Note about the above example: Under MS-Windows forward slashes are
equivalent to backslashes in a filename under almost all circumstances,
- provided that the filename is inside double quotes. It is easier to
+ provided that the filename is inside double quotes. It is easier to
use forward slashes in examples like the one above, since then one does
- not have to worry about the rules for dealing with forward slashes in
+ not have to worry about the rules for dealing with forward slashes in
strings in the Perl language.)
- Command names under Cygwin: If latexmk is executed by Cygwin's Perl,
+ Command names under Cygwin: If latexmk is executed by Cygwin's Perl,
be particularly certain that pathnames in commands have forward slashes
- not the usual backslashes for the separator of pathname components.
- See the above examples. Backslashes often get misinterpreted by the
+ not the usual backslashes for the separator of pathname components.
+ See the above examples. Backslashes often get misinterpreted by the
Unix shell used by Cygwin's Perl to execute external commands. Forward
slashes don't suffer from this problem, and (when quoted, as above) are
equally acceptable to MS-Windows.
- Using MS-Windows file associations: A useful trick under modern ver-
+ Using MS-Windows file associations: A useful trick under modern ver-
sions of MS-Windows (e.g., WinXP) is to use just the command 'start' by
itself:
@@ -2371,7 +2371,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 10 January 2024 36
+ 31 January 2024 36
@@ -2381,9 +2381,9 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
Under MS-Windows, this will cause to be run whatever program the system
- has associated with dvi files. (The same applies for a postscript
+ has associated with dvi files. (The same applies for a postscript
viewer and a pdf viewer.) But note that this trick is not always suit-
- able for the pdf previwer, if your system has acroread for the default
+ able for the pdf previwer, if your system has acroread for the default
pdf viewer. As explained elsewhere, acroread under MS-Windows does not
work well with latex and latexmk, because acroread locks the pdf file.
@@ -2392,18 +2392,18 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$lpr = 'NONE lpr';
- This typically is used when an appropriate command does not exist on
+ This typically is used when an appropriate command does not exist on
your system. The string after the "NONE" is effectively a comment.
Options to commands: Setting the name of a command can be used not only
for changing the name of the command called, but also to add options to
- command. Suppose you want latexmk to use latex with source specials
- enabled. Then you might use the following line in an initialization
+ command. Suppose you want latexmk to use latex with source specials
+ enabled. Then you might use the following line in an initialization
file:
$latex = 'latex --src-specials %O %S';
- Running a subroutine instead of an external command: Use a specifica-
+ Running a subroutine instead of an external command: Use a specifica-
tion starting with "internal", as in
$latex = 'internal mylatex %O %S';
@@ -2413,31 +2413,31 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
return system 'latex', @args;
}
- For some of the more exotic possibilities that then become available,
- see the section "Advanced configuration: Some extra resources and ad-
- vanced tricks". Also see some of the examples in the directory exam-
+ For some of the more exotic possibilities that then become available,
+ see the section "Advanced configuration: Some extra resources and ad-
+ vanced tricks". Also see some of the examples in the directory exam-
ple_rcfiles in the latexmk distribution.
- Advanced tricks: Normally one specifies a single command for the com-
- mands invoked by latexmk. Naturally, if there is some complicated ad-
- ditional processing you need to do in your special situation, you can
+ Advanced tricks: Normally one specifies a single command for the com-
+ mands invoked by latexmk. Naturally, if there is some complicated ad-
+ ditional processing you need to do in your special situation, you can
write a script (or batch file) to do the processing, and then configure
latexmk to use your script in place of the standard program.
- You can also use a Perl subroutine instead of a script -- see above.
+ You can also use a Perl subroutine instead of a script -- see above.
This is generally the most flexible and portable solution.
It is also possible to configure latexmk to run multiple commands. For
- example, if when running pdflatex to generate a pdf file from a tex
+ example, if when running pdflatex to generate a pdf file from a tex
file you need to run another program after pdflatex to perform some ex-
tra processing, you could do something like:
- $pdflatex = 'pdflatex --shell-escape %O %S; pst2pdf_for_latexmk
+ $pdflatex = 'pdflatex --shell-escape %O %S; pst2pdf_for_latexmk
%B';
- 10 January 2024 37
+ 31 January 2024 37
@@ -2446,8 +2446,8 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- This definition assumes you are using a UNIX-like system (which in-
- cludes Linux and OS-X), so that the two commands to be run are sepa-
+ This definition assumes you are using a UNIX-like system (which in-
+ cludes Linux and OS-X), so that the two commands to be run are sepa-
rated by the semicolon in the middle of the string.
If you are using MS-Windows, you would replace the above line by
@@ -2455,36 +2455,36 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$pdflatex = 'cmd /c pdflatex --shell-escape %O %S'
. '&& pst2pdf_for_latexmk %B';
- Here, the UNIX command separator ; is replaced by &&. In addition,
+ Here, the UNIX command separator ; is replaced by &&. In addition,
there is a problem that some versions of Perl on MS-Windows do not obey
- the command separator; this problem is overcome by explicitly invoking
+ the command separator; this problem is overcome by explicitly invoking
the MS-Windows command-line processor cmd.exe.
LIST OF CONFIGURATION VARIABLES USABLE IN INITIALIZATION FILES
- In this section are specified the variables whose values can be ad-
- justed to configure latexmk. (See the earlier section "Configura-
- tion/Initialization (rc) Files" for the files where the configurations
+ In this section are specified the variables whose values can be ad-
+ justed to configure latexmk. (See the earlier section "Configura-
+ tion/Initialization (rc) Files" for the files where the configurations
are done.)
Default values are indicated in brackets. Note that for variables that
- are boolean in character, concerning whether latexmk does or does not
- behave in a certain way, a non-zero value, normally 1, indicates true,
- i.e., the behavior occurs, while a zero value indicates a false value,
+ are boolean in character, concerning whether latexmk does or does not
+ behave in a certain way, a non-zero value, normally 1, indicates true,
+ i.e., the behavior occurs, while a zero value indicates a false value,
i.e., the behavior does not occur.
$allow_switch [1]
- This controls what happens when the output extension of latex,
- pdflatex, lualatex or xelatex differs from what is expected.
+ This controls what happens when the output extension of latex,
+ pdflatex, lualatex or xelatex differs from what is expected.
(The possible extensions are .dvi, .pdf, .xdv.) This can happen
- with the use of the \pdfoutput macro in a document compiled un-
- der latex or pdflatex, or with the use of the \outputmode macro
+ with the use of the \pdfoutput macro in a document compiled un-
+ der latex or pdflatex, or with the use of the \outputmode macro
under lualatex. It can also happen with certain kinds of incor-
rect configuration.
- In such a case, latexmk can appropriately adjust its network of
+ In such a case, latexmk can appropriately adjust its network of
rules. The adjustment is made if $allow_switch is on, and if no
request for a dvi or ps file has been made.
@@ -2492,18 +2492,18 @@ LIST OF CONFIGURATION VARIABLES USABLE IN INITIALIZATION FILES
$always_view_file_via_temporary [0]
- Whether .ps and .pdf files are initially to be made in a tempo-
- rary directory and then moved to the final location. (This ap-
+ Whether .ps and .pdf files are initially to be made in a tempo-
+ rary directory and then moved to the final location. (This ap-
plies to dvips, dvipdf, and ps2pdf operations, and the filtering
operators on .dvi and .ps files. It does not apply to pdflatex,
- unfortunately, since pdflatex provides no way of specifying a
+ unfortunately, since pdflatex provides no way of specifying a
chosen name for the output file.)
This use of a temporary file solves a problem that the making of
- 10 January 2024 38
+ 31 January 2024 38
@@ -2518,58 +2518,58 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
which can cause havoc.
See the $pvc_view_file_via_temporary variable for a setting that
- applies only if preview-continuous mode (-pvc option) is used.
+ applies only if preview-continuous mode (-pvc option) is used.
See $tmpdir for the setting of the directory where the temporary
file is created.
$analyze_input_log_always [1]
- After a run of latex (etc), always analyze .log for input files
- in the <...> and (...) constructions. Otherwise, only do the
+ After a run of latex (etc), always analyze .log for input files
+ in the <...> and (...) constructions. Otherwise, only do the
analysis when fls file doesn't exist or is out of date.
- Under normal circumstances, the data in the fls file is reli-
+ Under normal circumstances, the data in the fls file is reli-
able, and the test of the log file gets lots of false positives;
- usually $analyze_input_log_always is best set to zero. But the
- test of the log file is needed at least in the following situa-
- tion: When a user needs to persuade latexmk that a certain file
- is a source file, and latexmk doesn't otherwise find it. Then
- the user can write code that causes a line with (...) to be
- written to log file. One important case is for lualatex, which
- doesn't always generate lines in the .fls file for input lua
- files. (The situation with lualatex is HIGHLY version depen-
- dent, e.g., there was a big change between TeXLive 2016 and
+ usually $analyze_input_log_always is best set to zero. But the
+ test of the log file is needed at least in the following situa-
+ tion: When a user needs to persuade latexmk that a certain file
+ is a source file, and latexmk doesn't otherwise find it. Then
+ the user can write code that causes a line with (...) to be
+ written to log file. One important case is for lualatex, which
+ doesn't always generate lines in the .fls file for input lua
+ files. (The situation with lualatex is HIGHLY version depen-
+ dent, e.g., there was a big change between TeXLive 2016 and
TeXLive 2017.)
- To keep backward compatibility with older versions of latexmk,
+ To keep backward compatibility with older versions of latexmk,
the default is to set $analyze_input_log_always to 1.
$auto_rc_use [1]
- Whether to automatically read the standard initialization (rc)
+ Whether to automatically read the standard initialization (rc)
files, which are the system RC file, the user's RC file, and the
RC file in the current directory. The command line option -norc
- can be used to turn this setting off. Each RC file co2uld also
- turn this setting off, i.e., it could set $auto_rc_use to zero
+ can be used to turn this setting off. Each RC file co2uld also
+ turn this setting off, i.e., it could set $auto_rc_use to zero
to prevent automatic reading of the later RC files.
- This variable does not affect the reading of RC files specified
+ This variable does not affect the reading of RC files specified
on the command line by the -r option.
$aux_dir [""]
- The aux directory, i.e., the directory in which auxiliary files
+ The aux directory, i.e., the directory in which auxiliary files
(aux, log, etc) are to be written by a run of *latex.
- If this variable is not set, but $out_dir is set, then latexmk
- takes the aux directory to equal the output directory which is
+ If this variable is not set, but $out_dir is set, then latexmk
+ takes the aux directory to equal the output directory which is
the directory to which final output files are to be written.
- If neither variable is set, then the current directory when
+ If neither variable is set, then the current directory when
- 10 January 2024 39
+ 31 January 2024 39
@@ -2578,64 +2578,64 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- *latex is invoked is used both for the aux and output directo-
+ *latex is invoked is used both for the aux and output directo-
ries.
If the aux and output directories are distinct, then the aux di-
- rectory contains all generated files with the exception of "fi-
- nal output files", which are defined to be .dvi, .ps, .pdf,
+ rectory contains all generated files with the exception of "fi-
+ nal output files", which are defined to be .dvi, .ps, .pdf,
.synctex, and .synctex.gz files.
- See the section AUXILIARY AND OUTPUT DIRECTORIES for more de-
+ See the section AUXILIARY AND OUTPUT DIRECTORIES for more de-
tails.
$aux_out_dir_report [0]
- If this variable is set to 1, then prior to the processing of
+ If this variable is set to 1, then prior to the processing of
each primary .tex file, list the settings for aux and output di-
- rectories, after they have been normalized from the settings
+ rectories, after they have been normalized from the settings
specified during initialization.
- This report gives a reminder of where to look for generated
+ This report gives a reminder of where to look for generated
files.
- The report is done per primary .tex file, because of possible
- directory changes for each file (when the -cd option is used).
+ The report is done per primary .tex file, because of possible
+ directory changes for each file (when the -cd option is used).
In the simplest cases, the directory names are the same as orig-
inally specified. But in general some clean up/normalization is
- performed; this helps performance and cleans up output to the
+ performed; this helps performance and cleans up output to the
screen.
If this variable is set to 2, then halt after reporting the set-
- tings for the aux and out directories, rather than continuing
- with processing of tex files. This setting is primarily used
- for debugging configuration issues. See the -dir-report-only
+ tings for the aux and out directories, rather than continuing
+ with processing of tex files. This setting is primarily used
+ for debugging configuration issues. See the -dir-report-only
option.
$bad_warning_is_error [0]
- Whether to treat bad warnings reported by *latex in log file as
- errors. The specifications of the warning messages are in
+ Whether to treat bad warnings reported by *latex in log file as
+ errors. The specifications of the warning messages are in
@bad_warnings.
@bad_warnings
- Array of regular expressions specifying messages in log file
- that are officially treated as warnings rather than errors by
- *latex, but which a user may treat as errors: See $bad_warn-
+ Array of regular expressions specifying messages in log file
+ that are officially treated as warnings rather than errors by
+ *latex, but which a user may treat as errors: See $bad_warn-
ing_is_error.
- Currently the default set of these warnings is those about \end
- occuring inside constructs.
+ Currently the default set of these warnings is those about \end
+ occurring inside constructs.
$banner [0]
- If nonzero, the banner message is printed across each page when
+ If nonzero, the banner message is printed across each page when
- 10 January 2024 40
+ 31 January 2024 40
@@ -2644,8 +2644,8 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- converting the dvi file to postscript. Without modifying the
- variable $banner_message, this is equivalent to specifying the
+ converting the dvi file to postscript. Without modifying the
+ variable $banner_message, this is equivalent to specifying the
-d option.
Note that if $banner is nonzero, the $postscript_mode is assumed
@@ -2654,7 +2654,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$banner_intensity [0.95]
Equivalent to the -bi option, this is a decimal number between 0
- and 1 that specifies how dark to print the banner message. 0 is
+ and 1 that specifies how dark to print the banner message. 0 is
black, 1 is white. The default is just right if your toner car-
tridge isn't running too low.
@@ -2663,19 +2663,19 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
dvi file to postscript. This is equivalent to the -bm option.
$banner_scale [220.0]
- A decimal number that specifies how large the banner message
- will be printed. Experimentation is necessary to get the right
- scale for your message, as a rule of thumb the scale should be
- about equal to 1100 divided by the number of characters in the
- message. The Default is just right for 5 character messages.
+ A decimal number that specifies how large the banner message
+ will be printed. Experimentation is necessary to get the right
+ scale for your message, as a rule of thumb the scale should be
+ about equal to 1100 divided by the number of characters in the
+ message. The Default is just right for 5 character messages.
This is equivalent to the -bs option.
@BIBINPUTS
- This is an array variable, now mostly obsolete, that specifies
- directories where latexmk should look for .bib files. By de-
- fault it is set from the BIBINPUTS environment variable of the
- operating system. If that environment variable is not set, a
- single element list consisting of the current directory is set.
+ This is an array variable, now mostly obsolete, that specifies
+ directories where latexmk should look for .bib files. By de-
+ fault it is set from the BIBINPUTS environment variable of the
+ operating system. If that environment variable is not set, a
+ single element list consisting of the current directory is set.
The format of the directory names depends on your operating sys-
tem, of course. Examples for setting this variable are:
@@ -2685,23 +2685,23 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
@BIBINPUTS = ( ".", "//server/bibfiles" );
@BIBINPUTS = ( ".", "/usr/local/texmf/bibtex/bib" );
- Note that under MS Windows, either a forward slash "/" or a
- backward slash "\" can be used to separate pathname components,
- so the first two and the second two examples are equivalent.
- Each backward slash should be doubled to avoid running afoul of
- Perl's rules for writing strings. Generally, it is simplest al-
+ Note that under MS Windows, either a forward slash "/" or a
+ backward slash "\" can be used to separate pathname components,
+ so the first two and the second two examples are equivalent.
+ Each backward slash should be doubled to avoid running afoul of
+ Perl's rules for writing strings. Generally, it is simplest al-
ways to use forward slashes instead of backward slashes.
Important note: This variable is now mostly obsolete in the cur-
- rent version of latexmk, since it now uses a better method of
- searching for files using the kpsewhich command. However, if
+ rent version of latexmk, since it now uses a better method of
+ searching for files using the kpsewhich command. However, if
your system is an unusual one without the kpsewhich command, you
may need to set the variable @BIBINPUTS.
- 10 January 2024 41
+ 31 January 2024 41
@@ -2715,29 +2715,29 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$biber_silent_switch ["--onlylog"]
- Switch(es) for the biber processing program when silent mode is
+ Switch(es) for the biber processing program when silent mode is
on.
$bibtex ["bibtex %O %S"]
The BibTeX processing program.
$bibtex_fudge [1]
- When using bibtex, whether to change directory to $aux_dir be-
+ When using bibtex, whether to change directory to $aux_dir be-
fore running bibtex.
The need arises as follows:
- a. With bibtex before about 2019, if the filename given to it
+ a. With bibtex before about 2019, if the filename given to it
contains a path component, there was a bug that bibtex would not
- find extra aux files, as produced by the \include command in
+ find extra aux files, as produced by the \include command in
TeX.
- b. With all moderately recent versions of bibtex, bibtex may
+ b. With all moderately recent versions of bibtex, bibtex may
refuse to write its bbl and blg files, for security reasons, for
certain cases of the path component of the filename given to it.
- However, there are also rare cases where the change-directory
- method prevents bibtex from finding certain bib or bst files.
+ However, there are also rare cases where the change-directory
+ method prevents bibtex from finding certain bib or bst files.
Then $bibtex_fudge needs to be set to 0.
@@ -2748,26 +2748,26 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$bibtex_use [1]
Under what conditions to run bibtex or biber. When latexmk dis-
- covers from the log file that one (or more) bibtex/biber-gener-
- ated bibliographies are used, it can run bibtex or biber when-
- ever it appears necessary to regenerate the bbl file(s) from
- their source bib database file(s). But sometimes, the bib
+ covers from the log file that one (or more) bibtex/biber-gener-
+ ated bibliographies are used, it can run bibtex or biber when-
+ ever it appears necessary to regenerate the bbl file(s) from
+ their source bib database file(s). But sometimes, the bib
file(s) are not available (e.g., for a document obtained from an
external archive), but the bbl files are provided. In that case
- use of bibtex or biber will result in incorrect overwriting of
- the precious bbl files. The variable $bibtex_use controls
- whether this happens, and also controls whether or not .bbl
+ use of bibtex or biber will result in incorrect overwriting of
+ the precious bbl files. The variable $bibtex_use controls
+ whether this happens, and also controls whether or not .bbl
files are deleted in a cleanup operation.
The possible values of $bibtex_use are:
- 0: never use bibtex or biber; never delete .bbl files in a
+ 0: never use bibtex or biber; never delete .bbl files in a
cleanup.
1: only use bibtex or biber if the bib file(s) exist; never
delete .bbl files in a cleanup.
- 10 January 2024 42
+ 31 January 2024 42
@@ -2777,63 +2777,63 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
1.5: only use bibtex or biber if the bib files exist;
- conditionally delete .bbl files in a cleanup (i.e., delete
+ conditionally delete .bbl files in a cleanup (i.e., delete
them only when
the bib files all exist).
2: run bibtex or biber whenever it appears necessary to update
- the bbl file(s), without testing for the existence of the bib
+ the bbl file(s), without testing for the existence of the bib
files; always delete .bbl files in a cleanup.
- Note: When biber is being used, conditional use of biber can be
- problematic. From latexmk's point of view the problem is that
+ Note: When biber is being used, conditional use of biber can be
+ problematic. From latexmk's point of view the problem is that
because of how biber works, a full knowledge of its source files
can only be obtained after running biber. In contrast, for bib-
- tex, full information on which bib files are used is obtained
+ tex, full information on which bib files are used is obtained
from the .aux file(s) after a run of *latex. But for biber, the
- corresponding information is somewhat incomplete; this the in-
- formation obtained in the .bcf file that is generated by the
+ corresponding information is somewhat incomplete; this the in-
+ formation obtained in the .bcf file that is generated by the
biblatex package during a run of *latex.
$cleanup_includes_cusdep_generated [0]
- If nonzero, specifies that cleanup also deletes files that are
+ If nonzero, specifies that cleanup also deletes files that are
generated by custom dependencies. (When doing a clean up, e.g.,
by use of the -C option, custom dependencies are those listed in
the .fdb_latexmk file from a previous run.)
$cleanup_includes_generated [0]
- If nonzero, specifies that cleanup also deletes files that are
+ If nonzero, specifies that cleanup also deletes files that are
detected in the fls file (or failing that, in log file) as being
- generated. It will also include files made from these first
+ generated. It will also include files made from these first
generation generated files.
- This operation is somewhat dangerous, and can have unintended
- consequences, since the files to be deleted are determined from
- a file created by *latex, which can contain erroneous informa-
+ This operation is somewhat dangerous, and can have unintended
+ consequences, since the files to be deleted are determined from
+ a file created by *latex, which can contain erroneous informa-
tion. Therefore this variable is turned off by default, and then
files to be deleted are restricted to those explicitly specified
- by patterns configured in the variables clean_ext,
+ by patterns configured in the variables clean_ext,
clean_full_ext, and @generated_exts. Standard cases (e.g., .log
- files) appear in latexmk's initial value for the array @gener-
+ files) appear in latexmk's initial value for the array @gener-
ated_exts.
$cleanup_mode [0]
- If nonzero, specifies cleanup mode: 1 for full cleanup, 2 for
- cleanup except for .dvi, .ps and .pdf files, 3 for cleanup ex-
- cept for dep and aux files. (There is also extra cleaning as
+ If nonzero, specifies cleanup mode: 1 for full cleanup, 2 for
+ cleanup except for .dvi, .ps and .pdf files, 3 for cleanup ex-
+ cept for dep and aux files. (There is also extra cleaning as
specified by the $clean_ext, $clean_full_ext and @generated_exts
variables.)
- This variable is equivalent to specifying one of the -c or -C
- options. But there should be no need to set this variable from
+ This variable is equivalent to specifying one of the -c or -C
+ options. But there should be no need to set this variable from
an RC file.
- 10 January 2024 43
+ 31 January 2024 43
@@ -2843,9 +2843,9 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$clean_ext [""]
- Extra extensions of files for latexmk to remove when any of the
- clean-up options (-c or -C) is selected. The value of this
- variable is a string containing the extensions separated by
+ Extra extensions of files for latexmk to remove when any of the
+ clean-up options (-c or -C) is selected. The value of this
+ variable is a string containing the extensions separated by
spaces.
It is also possible to specify a more general pattern of file to
@@ -2856,50 +2856,50 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
files-%R/*";
in an initialization file will imply that when a clean-up opera-
- tion is specified, not only is the standard set of files
- deleted, but also files of the form FOO.out, FOO-blx.bib, FOO-
- figures*.log, and pythontex-files-FOO/*, where FOO stands for
+ tion is specified, not only is the standard set of files
+ deleted, but also files of the form FOO.out, FOO-blx.bib, FOO-
+ figures*.log, and pythontex-files-FOO/*, where FOO stands for
the basename of the file being processed (as in FOO.tex).
- Most of the files to be deleted are relative to the directory
- specified by $aux_dir. Note that if $out_dir but not $aux_dir
- is set, then in its initialization, latexmk sets $aux_dir equal
- to $out_dir. A normal situation is therefore that $aux_dir
- equals $out_dir, which is the only case directly supported by
- TeXLive, unlike MiKTeX. Note that even with TeXLive latexmk
+ Most of the files to be deleted are relative to the directory
+ specified by $aux_dir. Note that if $out_dir but not $aux_dir
+ is set, then in its initialization, latexmk sets $aux_dir equal
+ to $out_dir. A normal situation is therefore that $aux_dir
+ equals $out_dir, which is the only case directly supported by
+ TeXLive, unlike MiKTeX. Note that even with TeXLive latexmk
does now support different values for the directories -- see the
explanation of the $emulate_aux variable.
If $out_dir and $aux_dir different, latexmk actually deletes any
files of the specified names in both $aux_dir and $out_dir; this
- is because under certain error conditions, the files may be put
- in $out_dir instead of $aux_dir. This also handles the case of
+ is because under certain error conditions, the files may be put
+ in $out_dir instead of $aux_dir. This also handles the case of
deleting any fls file, since that file is in $out_dir.
- The filenames specified for a clean-up operation can refer not
- only to regular files but also to directories. Directories are
+ The filenames specified for a clean-up operation can refer not
+ only to regular files but also to directories. Directories are
only deleted if they are empty. An example of an application is
- to pythontex, which creates files in a particular directory.
- You can arrange to remove both the files and the directory by
+ to pythontex, which creates files in a particular directory.
+ You can arrange to remove both the files and the directory by
setting
$clean_ext = "pythontex-files-%R/* pythontex-files-%R";
- See also the (array) variable @generated_exts. In the past,
- this variable had certain uses beyond that of $clean_ext. But
- now, they accomplish the same things. In fact, after initial-
- ization including the processing of command line options, la-
+ See also the (array) variable @generated_exts. In the past,
+ this variable had certain uses beyond that of $clean_ext. But
+ now, they accomplish the same things. In fact, after initial-
+ ization including the processing of command line options, la-
texmk simply appends the list of extensions in $clean_ext to the
array @generated_exts.
$clean_full_ext [""]
- Extra extensions of files for latexmk to remove when the -C op-
- tion is selected, i.e., extensions of files to remove when the
+ Extra extensions of files for latexmk to remove when the -C op-
+ tion is selected, i.e., extensions of files to remove when the
.dvi, etc files are to be cleaned-up.
- 10 January 2024 44
+ 31 January 2024 44
@@ -2910,62 +2910,62 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
More general patterns are allowed, as for $clean_ext.
- The files specified by $clean_full_ext to be deleted are rela-
+ The files specified by $clean_full_ext to be deleted are rela-
tive to the directory specified by $out_dir.
$compiling_cmd [""], $failure_cmd [""], $warning_cmd [""], $success_cmd
[""]
- These variables specify commands that are executed at certain
- points of compilations. One motivation for their existence is
- to allow very useful convenient visual indications of compila-
- tion status even when the window receiving the screen output of
- the compilation is hidden. This is particularly useful in pre-
+ These variables specify commands that are executed at certain
+ points of compilations. One motivation for their existence is
+ to allow very useful convenient visual indications of compila-
+ tion status even when the window receiving the screen output of
+ the compilation is hidden. This is particularly useful in pre-
view-continuous mode.
- The commands are executed at the following points: $compil-
- ing_cmd at the start of compilation, $success_cmd at the end of
- a completely successful compilation, $failure_cmd at the end of
+ The commands are executed at the following points: $compil-
+ ing_cmd at the start of compilation, $success_cmd at the end of
+ a completely successful compilation, $failure_cmd at the end of
an unsuccessful compilation, $warning_cmd at the of an otherwise
successful compilation that gives warnings about undefined cita-
tions or references or about multiply defined references. If any
- of above variables is undefined or blank (the default situa-
+ of above variables is undefined or blank (the default situa-
tion), then the corresponding command is not executed.
- However, when $warning_cmd is not set, then in the case of a
- compilation with warnings about references or citations, but
- with no other error, one or other of $success_cmd or $fail-
- ure_cmd is used (if it is set) according to the setting of
+ However, when $warning_cmd is not set, then in the case of a
+ compilation with warnings about references or citations, but
+ with no other error, one or other of $success_cmd or $fail-
+ ure_cmd is used (if it is set) according to the setting of
$warnings_as_errors.
An example of a simple setting of these variables is as follows
- $compiling_cmd = "xdotool search --name \"%D\" set_window
+ $compiling_cmd = "xdotool search --name \"%D\" set_window
--name \"%D compiling\"";
- $success_cmd = "xdotool search --name \"%D\" set_window
+ $success_cmd = "xdotool search --name \"%D\" set_window
--name \"%D OK\"";
$warning_cmd = "xdotool search --name \"%D\" ".
"set_window --name \"%D CITE/REF ISSUE\"";
- $failure_cmd = "xdotool search --name \"%D\" set_window
+ $failure_cmd = "xdotool search --name \"%D\" set_window
--name \"%D FAILURE\"";
- These assume that the program xdotool is installed, that the
- previewer is using an X-Window system for display, and that the
- title of the window contains the name of the displayed file, as
- it normally does. When the commands are executed, the place-
- holder string %D is replaced by the name of the destination
+ These assume that the program xdotool is installed, that the
+ previewer is using an X-Window system for display, and that the
+ title of the window contains the name of the displayed file, as
+ it normally does. When the commands are executed, the place-
+ holder string %D is replaced by the name of the destination
file, which is the previewed file. The above commands result in
an appropriate string being appended to the filename in the win-
dow title: " compiling", " OK", or " FAILURE".
- Other placeholders that can be used are %S, %T, and %R, with %S
- and %T normally being identical. These can be useful for a com-
- mand changing the title of the edit window. The visual
+ Other placeholders that can be used are %S, %T, and %R, with %S
+ and %T normally being identical. These can be useful for a com-
+ mand changing the title of the edit window. The visual
- 10 January 2024 45
+ 31 January 2024 45
@@ -2975,17 +2975,17 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
indication in a window title can useful, since the user does not
- have to keep shifting attention to the (possibly hidden) compi-
+ have to keep shifting attention to the (possibly hidden) compi-
lation window to know the status of the compilation.
- More complicated situations can best be handled by defining a
- Perl subroutine to invoke the necessary commands, and using the
- "internal" keyword in the definitions to get the subroutine to
+ More complicated situations can best be handled by defining a
+ Perl subroutine to invoke the necessary commands, and using the
+ "internal" keyword in the definitions to get the subroutine to
be invoked. (See the section "Format of Command Specifications"
for how to do this.)
- Naturally, the above settings that invoke the xdotool program
- are only applicable when the X-Window system is used for the
+ Naturally, the above settings that invoke the xdotool program
+ are only applicable when the X-Window system is used for the
relevant window(s). For other cases, you will have to find what
software solutions are available.
@@ -2994,15 +2994,15 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
Custom dependency list -- see section on "Custom Dependencies".
@default_excluded_files [()]
- When latexmk is invoked with no files specified on the command
+ When latexmk is invoked with no files specified on the command
line, then, by default, it will process all files in the current
directory with the extension .tex. (In general, it will process
the files specified in the @default_files variable.)
But sometimes you want to exclude particular files from this de-
- fault list. In that case you can specify the excluded files in
+ fault list. In that case you can specify the excluded files in
the array @default_excluded_files. For example if you wanted to
- process all .tex files with the exception of common.tex, which
+ process all .tex files with the exception of common.tex, which
is a not a standard alone LaTeX file but a file input by some or
all of the others, you could do
@@ -3012,26 +3012,26 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
If you have a variable or large number of files to be processed,
this method saves you from having to list them in detail in @de-
- fault_files and having to update the list every time you change
+ fault_files and having to update the list every time you change
the set of files to be processed.
- Notes: 1. This variable has no effect except when no files are
+ Notes: 1. This variable has no effect except when no files are
specified on the latexmk command line. 2. Wildcards are allowed
in @default_excluded_files.
@default_files [("*.tex")]
Default list of files to be processed.
- If no filenames are specified on the command line, latexmk
- processes all tex files specified in the @default_files vari-
- able, which by default is set to all tex files ("*.tex") in the
- current directory. This is a convenience: just run latexmk and
- it will process an appropriate set of files. But sometimes you
+ If no filenames are specified on the command line, latexmk
+ processes all tex files specified in the @default_files vari-
+ able, which by default is set to all tex files ("*.tex") in the
+ current directory. This is a convenience: just run latexmk and
+ it will process an appropriate set of files. But sometimes you
want only some of these files to be processed. In this case you
- 10 January 2024 46
+ 31 January 2024 46
@@ -3040,10 +3040,10 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- can list the files to be processed by setting @default_files in
- an initialization file (e.g., the file "latexmkrc" in the cur-
- rent directory). Then if no files are specified on the command
- line then the files you specify by setting @default_files are
+ can list the files to be processed by setting @default_files in
+ an initialization file (e.g., the file "latexmkrc" in the cur-
+ rent directory). Then if no files are specified on the command
+ line then the files you specify by setting @default_files are
processed.
Three examples:
@@ -3054,50 +3054,50 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
@default_files = ("*.tex", "*.dtx");
- Note that more than file may be given, and that the default ex-
+ Note that more than file may be given, and that the default ex-
tension is ".tex". Wild cards are allowed. The parentheses are
because @default_files is an array variable, i.e., a sequence of
filename specifications is possible.
- If you want latexmk to process all .tex files with a few excep-
+ If you want latexmk to process all .tex files with a few excep-
tions, see the @default_excluded_files array variable.
$dependents_phony [0]
- If a list of dependencies is output, this variable determines
- whether to include a phony target for each source file. If you
- use the dependents list in a Makefile, the dummy rules work
- around errors make gives if you remove header files without up-
+ If a list of dependencies is output, this variable determines
+ whether to include a phony target for each source file. If you
+ use the dependents list in a Makefile, the dummy rules work
+ around errors make gives if you remove header files without up-
dating the Makefile to match.
$dependents_list [0]
- Whether to display a list(s) of dependencies at the end of a
+ Whether to display a list(s) of dependencies at the end of a
run.
$deps_escape ["none"]
This variable determines which kind of escaping of space charac-
ters to use in dependency lists. The possible values are "none",
- "unix", "nmake", corresponding respectively to no escaping, es-
- caping with a "\" suitable for standard Unix make, and escaping
+ "unix", "nmake", corresponding respectively to no escaping, es-
+ caping with a "\" suitable for standard Unix make, and escaping
with "^", suitable for Microsoft's nmake.
- Currently the only character escaped is a space, since that is
- particularly common in file names and directory names. There
- are other characters that would need escaping if a dependency
+ Currently the only character escaped is a space, since that is
+ particularly common in file names and directory names. There
+ are other characters that would need escaping if a dependency
list is to be used as-is by a make program; but those characters
(e.g., "$") commonly cause difficulties when used for .tex docu-
- ments. Moreover, the detailed rules for which characters need
+ ments. Moreover, the detailed rules for which characters need
to be escaped depends on the version of make.
$deps_file ["-"]
- Name of file to receive list(s) of dependencies at the end of a
- run, to be used if $dependents_list is set. If the filename is
- "-", then the dependency list is set to stdout (i.e., normally
+ Name of file to receive list(s) of dependencies at the end of a
+ run, to be used if $dependents_list is set. If the filename is
+ "-", then the dependency list is set to stdout (i.e., normally
- 10 January 2024 47
+ 31 January 2024 47
@@ -3110,10 +3110,10 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$do_cd [0]
- Whether to change working directory to the directory specified
- for the main source file before processing it. The default be-
- havior is not to do this, which is the same as the behavior of
- *latex programs. This variable is set by the -cd and -cd- op-
+ Whether to change working directory to the directory specified
+ for the main source file before processing it. The default be-
+ havior is not to do this, which is the same as the behavior of
+ *latex programs. This variable is set by the -cd and -cd- op-
tions on latexmk's command line.
$dvi_filter [empty]
@@ -3122,48 +3122,48 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$dvilualatex ["dvilualatex %O %S"]
- Specifies the command line to invoke the dvilualatex program.
- Note that as with other programs, you can use this variable not
- just to change the name of the program used, but also specify
+ Specifies the command line to invoke the dvilualatex program.
+ Note that as with other programs, you can use this variable not
+ just to change the name of the program used, but also specify
options to the program. E.g.,
- $dvilualatex = "dvilualatex --src-specials
+ $dvilualatex = "dvilualatex --src-specials
%O %S";
- To do a coordinated setting of all of $dvilualatex, $hilatex,
+ To do a coordinated setting of all of $dvilualatex, $hilatex,
$latex, $pdflatex, $lualatex, and $xelatex, see the section "Ad-
vanced Configuration".
$dvi_mode [See below for default]
- If one, generate a dvi version of the document by use of latex.
+ If one, generate a dvi version of the document by use of latex.
Equivalent to the -dvi option.
If 2, generate a dvi version of the document by use of dviluala-
tex. Equivalent to the -dvilua option.
- The variable $dvi_mode defaults to 0, but if no explicit re-
- quests are made for other types of file (postscript, pdf), then
- $dvi_mode will be set to 1. In addition, if a request for a
- file for which a .dvi file is a prerequisite and $dvi_mode is
+ The variable $dvi_mode defaults to 0, but if no explicit re-
+ quests are made for other types of file (postscript, pdf), then
+ $dvi_mode will be set to 1. In addition, if a request for a
+ file for which a .dvi file is a prerequisite and $dvi_mode is
zero, then $dvi_mode is set to 1.
$dvilualatex_silent_switch ["-interaction=batchmode"]
- Switch(es) for the dvilualatex program (specified in the vari-
+ Switch(es) for the dvilualatex program (specified in the vari-
able $dvilualatex) when silent mode is on.
- See details of the $latex_silent_switch for other information
+ See details of the $latex_silent_switch for other information
that equally applies to $dvilualatex_silent_switch.
$dvi_previewer ["start xdvi %O %S" under UNIX]
- The command to invoke a dvi-previewer. [Under MS-Windows the
+ The command to invoke a dvi-previewer. [Under MS-Windows the
- 10 January 2024 48
+ 31 January 2024 48
@@ -3172,64 +3172,64 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- default is "start"; then latexmk arranges to use the MS-Windows
- start program, which will cause to be run whatever command the
+ default is "start"; then latexmk arranges to use the MS-Windows
+ start program, which will cause to be run whatever command the
system has associated with .dvi files.]
- Important note: Normally you will want to have a previewer run
+ Important note: Normally you will want to have a previewer run
detached, so that latexmk doesn't wait for the previewer to ter-
- minate before continuing its work. So normally you should pre-
- fix the command by "start ", which flags to latexmk that it
- should do the detaching of the previewer itself (by whatever
- method is appropriate to the operating system). But sometimes
+ minate before continuing its work. So normally you should pre-
+ fix the command by "start ", which flags to latexmk that it
+ should do the detaching of the previewer itself (by whatever
+ method is appropriate to the operating system). But sometimes
letting latexmk do the detaching is not appropriate (for a vari-
- ety of non-trivial reasons), so you should put the "start " bit
+ ety of non-trivial reasons), so you should put the "start " bit
in yourself, whenever it is needed.
$dvi_previewer_landscape ["start xdvi %O %S"]
The command to invoke a dvi-previewer in landscape mode. [Under
- MS-Windows the default is "start"; then latexmk arranges to use
- the MS-Windows start program, which will cause to be run what-
+ MS-Windows the default is "start"; then latexmk arranges to use
+ the MS-Windows start program, which will cause to be run what-
ever command the system has associated with .dvi files.]
$dvipdf ["dvipdf -dALLOWPSTRANSPARENCY %O %S %D"]
- Command to convert .dvi to .pdf file. A common reconfiguration
- is to use the dvipdfm command, which needs its arguments in a
+ Command to convert .dvi to .pdf file. A common reconfiguration
+ is to use the dvipdfm command, which needs its arguments in a
different order:
$dvipdf = "dvipdfm %O -o %D %S";
- WARNING: The default dvipdf script generates pdf files with
+ WARNING: The default dvipdf script generates pdf files with
bitmapped fonts, which do not look good when viewed by acroread.
- That script should be modified to give dvips the options "-P
+ That script should be modified to give dvips the options "-P
pdf" to ensure that type 1 fonts are used in the pdf file.
$dvipdf_silent_switch ["-q"]
Switch(es) for dvipdf program when silent mode is on.
- N.B. The standard dvipdf program runs silently, so adding the
- silent switch has no effect, but is actually innocuous. But if
- an alternative program is used, e.g., dvipdfmx, then the silent
- switch has an effect. The default setting is correct for
+ N.B. The standard dvipdf program runs silently, so adding the
+ silent switch has no effect, but is actually innocuous. But if
+ an alternative program is used, e.g., dvipdfmx, then the silent
+ switch has an effect. The default setting is correct for
dvipdfm and dvipdfmx.
$dvips ["dvips %O -o %D %S"]
- The program to used as a filter to convert a .dvi file to a .ps
- file. If pdf is going to be generated from pdf, then the value
- of the $dvips_pdf_switch variable -- see below -- will be in-
+ The program to used as a filter to convert a .dvi file to a .ps
+ file. If pdf is going to be generated from pdf, then the value
+ of the $dvips_pdf_switch variable -- see below -- will be in-
cluded in the options substituted for "%O".
$dvips_landscape ["dvips -tlandscape %O -o %D %S"]
- The program to used as a filter to convert a .dvi file to a .ps
+ The program to used as a filter to convert a .dvi file to a .ps
file in landscape mode.
$dvips_pdf_switch ["-P pdf"]
- Switch(es) for dvips program when pdf file is to be generated
+ Switch(es) for dvips program when pdf file is to be generated
from .ps file.
- 10 January 2024 49
+ 31 January 2024 49
@@ -3242,60 +3242,60 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
Switch(es) for dvips program when silent mode is on.
$dvi_update_command [""]
- When the dvi previewer is set to be updated by running a com-
- mand, this is the command that is run. See the information for
+ When the dvi previewer is set to be updated by running a com-
+ mand, this is the command that is run. See the information for
the variable $dvi_update_method for further information, and see
- information on the variable $pdf_update_method for an example
+ information on the variable $pdf_update_method for an example
for the analogous case of a pdf previewer.
$dvi_update_method [2 under UNIX, 1 under MS-Windows]
- How the dvi viewer updates its display when the dvi file has
- changed. The values here apply equally to the $pdf_up-
+ How the dvi viewer updates its display when the dvi file has
+ changed. The values here apply equally to the $pdf_up-
date_method and to the $ps_update_method variables.
0 => update is automatic,
1=> manual update by user, which may only mean a mouse click
on the viewer's window or may mean a more serious action.
- 2 => Send the signal, whose number is in the variable
- $dvi_update_signal. The default value under UNIX is suitable
+ 2 => Send the signal, whose number is in the variable
+ $dvi_update_signal. The default value under UNIX is suitable
for xdvi.
- 3 => Viewer cannot do an update, because it locks the file.
+ 3 => Viewer cannot do an update, because it locks the file.
(As with acroread under MS-Windows.)
- 4 => run a command to do the update. The command is speci-
+ 4 => run a command to do the update. The command is speci-
fied by the variable $dvi_update_command.
- See information on the variable $pdf_update_method for an exam-
+ See information on the variable $pdf_update_method for an exam-
ple of updating by command.
$dvi_update_signal [Under UNIX: SIGUSR1, which is a system-dependent
value]
- The number of the signal that is sent to the dvi viewer when it
- is updated by sending a signal -- see the information on the
- variable $dvi_update_method. The default value is the one ap-
+ The number of the signal that is sent to the dvi viewer when it
+ is updated by sending a signal -- see the information on the
+ variable $dvi_update_method. The default value is the one ap-
propriate for xdvi on a UNIX system.
$emulate_aux [0]
- Whether to emulate the use of aux directory when $aux_dir and
+ Whether to emulate the use of aux directory when $aux_dir and
$out_dir are different, rather than using the -aux-directory op-
- tion for the *latex programs. (MiKTeX supports -aux-directory,
+ tion for the *latex programs. (MiKTeX supports -aux-directory,
but TeXLive doesn't.)
- If you use a version of *latex that doesn't support -aux-direc-
- tory, e.g., TeXLive, latexmk will automatically switch aux_dir
+ If you use a version of *latex that doesn't support -aux-direc-
+ tory, e.g., TeXLive, latexmk will automatically switch aux_dir
emulation on after the first run of *latex, because it will find
the .log file in the wrong place. But it is better to set $emu-
- late_aux to 1 in an rc file, or equivalently to use the -emu-
+ late_aux to 1 in an rc file, or equivalently to use the -emu-
late-aux-dir option. This emulation mode works equally well with
MiKTeX.
- Aux directory emulation means that when *latex is invoked, the
+ Aux directory emulation means that when *latex is invoked, the
output directory provided to *latex is set to be the desired aux
- directory. After that, any files that need to be in the output
- directory will be moved there by latexmk. (These are the files
- with extensions .dvi, .ps, .pdf, .synctex, .synctex.gz, and,
+ directory. After that, any files that need to be in the output
+ directory will be moved there by latexmk. (These are the files
+ with extensions .dvi, .ps, .pdf, .synctex, .synctex.gz, and,
- 10 January 2024 50
+ 31 January 2024 50
@@ -3313,26 +3313,26 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$fdb_ext ["fdb_latexmk"]
- The extension of the file which latexmk generates to contain a
- database of information on source files. You will not normally
+ The extension of the file which latexmk generates to contain a
+ database of information on source files. You will not normally
need to change this.
@file_not_found
- This an array of Perl regular expressions that are patterns to
- find messages in the .log file from a run of *latex that indi-
- cate that a file was looked for and not found. To see the cur-
- rent default set, you should look at the definition of
+ This an array of Perl regular expressions that are patterns to
+ find messages in the .log file from a run of *latex that indi-
+ cate that a file was looked for and not found. To see the cur-
+ rent default set, you should look at the definition of
@file_not_found in the latexmk.pl file.
- In the regular expression, the string for the name of the miss-
- ing file should be enclosed in parentheses. That carries the
- implication that after latexmk gets a succesful match to the
- pattern, the variable $1 is set to the filename, which is then
+ In the regular expression, the string for the name of the miss-
+ ing file should be enclosed in parentheses. That carries the
+ implication that after latexmk gets a successful match to the
+ pattern, the variable $1 is set to the filename, which is then
picked up by latexmk.
- If you happen to encounter a package that gives a missing file
- message of a different form than one that matches one of the
+ If you happen to encounter a package that gives a missing file
+ message of a different form than one that matches one of the
built-in patterns, you can add another pattern to the array. An
example would be
@@ -3345,23 +3345,23 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
But the corresponding string specification in the push statement
has to have the backslashes doubled.
- This regular expression matches a line that starts with 'No
- file', then has one or more white space characters, then any
- number of characters forming the filename, then possible white
- space, and finally the end of the line. (See documentation on
+ This regular expression matches a line that starts with 'No
+ file', then has one or more white space characters, then any
+ number of characters forming the filename, then possible white
+ space, and finally the end of the line. (See documentation on
Perl regular expressions for details.)
$filetime_causality_threshold [5]
- The use of this variable is as follows: At a number of places,
- latexmk needs to determine whether a particular file has been
- produced during a just-concluded run of some rule/program or is
+ The use of this variable is as follows: At a number of places,
+ latexmk needs to determine whether a particular file has been
+ produced during a just-concluded run of some rule/program or is
leftover from a previous run. (An example is the production of a
- .bcf file by the biblatex package during a run of *latex to
+ .bcf file by the biblatex package during a run of *latex to
- 10 January 2024 51
+ 31 January 2024 51
@@ -3370,52 +3370,52 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- provide bibliographic information to the biber program. If a
+ provide bibliographic information to the biber program. If a
.bcf file is not produced during a current run of *latex, but is
- leftover from a previous run, then latexmk has to conclude that
- the .tex document has changed so that biber is no longer to be
+ leftover from a previous run, then latexmk has to conclude that
+ the .tex document has changed so that biber is no longer to be
used.)
- Latexmk's criterion that a file has been produced during a run
- is that the modification time of the file is more recent than
- the system time at the beginning of the run. Bascially, if the
- modification time is earlier than this, then it is a leftover
+ Latexmk's criterion that a file has been produced during a run
+ is that the modification time of the file is more recent than
+ the system time at the beginning of the run. Bascially, if the
+ modification time is earlier than this, then it is a leftover
from a previous run. However, a naive use of the criterion can,
- among other things, run afoul of the granularity of how file
- times are stored in some file systems, which means it is possi-
- ble that the filesystem's reported time for a file might be a
- second or more earlier than the actual modification time, the
+ among other things, run afoul of the granularity of how file
+ times are stored in some file systems, which means it is possi-
+ ble that the filesystem's reported time for a file might be a
+ second or more earlier than the actual modification time, the
exact difference being quite random.
- The variable $filetime_causality_threshold allows an appopriate
- sloppiness in latexmk's use of file modification time. It can
- be quite generous; it should merely be less than the time scale
- on which a human user makes changes to source files for a docu-
+ The variable $filetime_causality_threshold allows an appopriate
+ sloppiness in latexmk's use of file modification time. It can
+ be quite generous; it should merely be less than the time scale
+ on which a human user makes changes to source files for a docu-
ment (or to configuration files, etc).
$fls_uses_out_dir [0]
- This variable determines whether or not the .fls file should be
- in the output directory instead of the natural directory, which
+ This variable determines whether or not the .fls file should be
+ in the output directory instead of the natural directory, which
is the aux directory. If the variable is nonzero, the .fls file
is to be in the output directory. See the section AUXILIARY AND
- OUTPUT DIRECTORIES for more details about these directories.
- The rationale for the existence of the variable
+ OUTPUT DIRECTORIES for more details about these directories.
+ The rationale for the existence of the variable
$fls_uses_aux_dir is explained there.
In all cases, if latexmk finds that an .fls file has been gener-
- ated in the opposite directory to the one specified by
- $fls_uses_out_dir, it copies the file to the other directory
- (aux or output directory as appropriate). The file is copied
- rather than simply moved, to avoid potential clashes with other
- software that assumes the .fls file is generated in the direc-
- tory it was written to by *latex. Thus the effect an incorrect
+ ated in the opposite directory to the one specified by
+ $fls_uses_out_dir, it copies the file to the other directory
+ (aux or output directory as appropriate). The file is copied
+ rather than simply moved, to avoid potential clashes with other
+ software that assumes the .fls file is generated in the direc-
+ tory it was written to by *latex. Thus the effect an incorrect
setting of $fls_uses_out_dir is only to cause a superfluous copy
of the .fls file to be generated.
$force_mode [0]
- If nonzero, continue processing past minor latex errors includ-
+ If nonzero, continue processing past minor latex errors includ-
ing unrecognized cross references. Equivalent to specifying the
-f option.
@@ -3423,11 +3423,11 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
@generated_exts [( 'aux', 'bcf', 'fls', 'idx', 'ind', 'lof', 'lot',
'out', 'toc', 'blg', 'ilg', 'log', 'xdv' )]
- This contains a list of extensions for files that are generated
+ This contains a list of extensions for files that are generated
- 10 January 2024 52
+ 31 January 2024 52
@@ -3436,64 +3436,64 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- during processing, and that should be deleted during a main
- clean up operation, as invoked by the command line option -c.
+ during processing, and that should be deleted during a main
+ clean up operation, as invoked by the command line option -c.
(The use of -C or -gg gives this clean up and more.)
- The default values are extensions for standard files generated
- by *latex, bibtex, and the like. (Note that the clean up also
- deletes the fdb_latexmk file, but that's separately coded into
+ The default values are extensions for standard files generated
+ by *latex, bibtex, and the like. (Note that the clean up also
+ deletes the fdb_latexmk file, but that's separately coded into
latexmk, currently.)
- After initialization of latexmk and the processing of its com-
- mand line, the items in clean_ext are appended to @gener-
- ated_exts. So these two variables have the same meaning (con-
+ After initialization of latexmk and the processing of its com-
+ mand line, the items in clean_ext are appended to @gener-
+ ated_exts. So these two variables have the same meaning (con-
trary to older versions of latexmk).
- The items in @generated_exts are normally extensions of files,
- whose base name is the same as the main tex file. But it is
- also possible to specify patterns including that basename ---
+ The items in @generated_exts are normally extensions of files,
+ whose base name is the same as the main tex file. But it is
+ also possible to specify patterns including that basename ---
see the explanation of the variable $clean_ext.
In addition to specifying files to be deleted in a clean up, la-
- texmk uses the same specification to assist its examination of
- changes in source files: Under some situations it needs to find
- those changes in files (since a previous run) that are expected
- to be due to the user editing a file. This contrasts with the
+ texmk uses the same specification to assist its examination of
+ changes in source files: Under some situations it needs to find
+ those changes in files (since a previous run) that are expected
+ to be due to the user editing a file. This contrasts with the
cases of files that are generated by some program run by latexmk
- and that differ from the results of the previous run. This use
- of @generated_exts is normally unimportant, given the usual ac-
- curacy of latexmk's other ways of determining these generated
+ and that differ from the results of the previous run. This use
+ of @generated_exts is normally unimportant, given the usual ac-
+ curacy of latexmk's other ways of determining these generated
files.
- A convenient way to add an extra extension to the list, without
- losing the already defined ones is to use a push command in the
+ A convenient way to add an extra extension to the list, without
+ losing the already defined ones is to use a push command in the
line in an RC file. E.g.,
push @generated_exts, "end";
adds the extension "end" to the list of predefined generated ex-
- tensions. (This extension is used by the RevTeX package, for
+ tensions. (This extension is used by the RevTeX package, for
example.)
$go_mode [0]
- If nonzero, process files regardless of timestamps, and is then
+ If nonzero, process files regardless of timestamps, and is then
equivalent to the -g option.
%hash_calc_ignore_pattern
!!!This variable is for experts only!!!
- The general rule latexmk uses for determining when an extra run
- of some program is needed is that one of the source files has
- changed. But consider for example a latex package that causes
- an encapsulated postscript file (an "eps" file) to be made that
- is to be read in on the next run. The file contains a comment
+ The general rule latexmk uses for determining when an extra run
+ of some program is needed is that one of the source files has
+ changed. But consider for example a latex package that causes
+ an encapsulated postscript file (an "eps" file) to be made that
+ is to be read in on the next run. The file contains a comment
- 10 January 2024 53
+ 31 January 2024 53
@@ -3502,10 +3502,10 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- line giving its creation date and time. On the next run the
- time changes, latex sees that the eps file has changed, and
- therefore reruns latex. This causes an infinite loop, that is
- only terminated because latexmk has a limit on the number of
+ line giving its creation date and time. On the next run the
+ time changes, latex sees that the eps file has changed, and
+ therefore reruns latex. This causes an infinite loop, that is
+ only terminated because latexmk has a limit on the number of
runs to guard against pathological situations.
But the changing line has no real effect, since it is a comment.
@@ -3514,31 +3514,31 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$hash_calc_ignore_pattern{'eps'} = '^%%CreationDate: ';
This creates a rule for files with extension .eps about lines to
- ignore. The left-hand side is a Perl idiom for setting an item
- in a hash. Note that the file extension is specified without a
+ ignore. The left-hand side is a Perl idiom for setting an item
+ in a hash. Note that the file extension is specified without a
period. The value, on the right-hand side, is a string contain-
- ing a regular expression. (See documentation on Perl for how
- they are to be specified in general.) This particular regular
- expression specifies that lines beginning with "%%CreationDate:
- " are to be ignored in deciding whether a file of the given ex-
+ ing a regular expression. (See documentation on Perl for how
+ they are to be specified in general.) This particular regular
+ expression specifies that lines beginning with "%%CreationDate:
+ " are to be ignored in deciding whether a file of the given ex-
tension .eps has changed.
- There is only one regular expression available for each exten-
- sion. If you need more one pattern to specify lines to ignore,
- then you need to combine the patterns into a single regular ex-
- pression. The simplest method is separate the different simple
- patterns by a vertical bar character (indicating "alternation"
+ There is only one regular expression available for each exten-
+ sion. If you need more one pattern to specify lines to ignore,
+ then you need to combine the patterns into a single regular ex-
+ pression. The simplest method is separate the different simple
+ patterns by a vertical bar character (indicating "alternation"
in the jargon of regular expressions). For example,
- $hash_calc_ignore_pattern{'eps'} = '^%%CreationDate: |^%%Ti-
+ $hash_calc_ignore_pattern{'eps'} = '^%%CreationDate: |^%%Ti-
tle: ';
causes lines starting with either "^%%CreationDate: " or "^%%Ti-
tle: " to be ignored.
- It may happen that a pattern to be ignored is specified in, for
- example, in a system or user initialization file, and you wish
- to remove this in a file that is read later. To do this, you
+ It may happen that a pattern to be ignored is specified in, for
+ example, in a system or user initialization file, and you wish
+ to remove this in a file that is read later. To do this, you
use Perl's delete function, e.g.,
delete $hash_calc_ignore_pattern{'eps'};
@@ -3549,17 +3549,17 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$hnt_mode [0]
- Whether to generate a hnt version of the document by use of hi-
+ Whether to generate a hnt version of the document by use of hi-
latex. Can be turned on by the use of the -hnt option.
$jobname [""]
- This specifies the jobname, i.e., the basename that is used for
+ This specifies the jobname, i.e., the basename that is used for
- 10 January 2024 54
+ 31 January 2024 54
@@ -3568,56 +3568,56 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- generated files (.aux, .log, .dvi, .ps, .pdf, etc). If this
- variable is a null string, then the basename is the basename of
- the main tex file. (At present, the string in $jobname should
+ generated files (.aux, .log, .dvi, .ps, .pdf, etc). If this
+ variable is a null string, then the basename is the basename of
+ the main tex file. (At present, the string in $jobname should
not contain spaces.)
- The placeholder '%A' is permitted. This will be substituted by
+ The placeholder '%A' is permitted. This will be substituted by
the basename of the TeX file. The primary purpose is when a va-
- riety of tex files are to be processed, and you want to use a
- different jobname for each but one that is distinct for each.
- Thus if you wanted to compare compilations of a set of files on
+ riety of tex files are to be processed, and you want to use a
+ different jobname for each but one that is distinct for each.
+ Thus if you wanted to compare compilations of a set of files on
different operating systems, with distinct filenames for all the
cases, you could set
$jobname = "%A-$^O";
- in an initialization file. (Here $^O is a variable provided by
+ in an initialization file. (Here $^O is a variable provided by
perl that contains perl's name for the operating system.)
- Suppose you had .tex files test1.tex and test2.tex. Then when
+ Suppose you had .tex files test1.tex and test2.tex. Then when
you run
latexmk -pdf *.tex
- both files will be compiled. The .aux, .log, and .pdf files
- will have basenames test1-MSWin32 ante test2-MSWin32 on a MS-
+ both files will be compiled. The .aux, .log, and .pdf files
+ will have basenames test1-MSWin32 ante test2-MSWin32 on a MS-
Windows system, test1-darwin and test2-darwin on an OS-X system,
and a variety of similar cases on linux systems.
$kpsewhich ["kpsewhich %S"]
- The program called to locate a source file when the name alone
- is not sufficient. Most filenames used by latexmk have suffi-
+ The program called to locate a source file when the name alone
+ is not sufficient. Most filenames used by latexmk have suffi-
cient path information to be found directly. But sometimes, no-
tably when a .bib or a .bst file is found from the log file of a
- bibtex or biber run, only the base name of the file is known,
+ bibtex or biber run, only the base name of the file is known,
but not its path. The program specified by $kpsewhich is used to
find it.
- (For advanced users: Because of the different way in which la-
+ (For advanced users: Because of the different way in which la-
texmk uses the command specified in $kpsewhich, some of the pos-
sibilities listed in the FORMAT OF COMMAND SPECIFICATIONS do not
- apply. The internal and start keywords are not available. A
+ apply. The internal and start keywords are not available. A
simple command specification with possible options and then "%S"
- is all that is guaranteed to work. Note that for other com-
+ is all that is guaranteed to work. Note that for other com-
mands, "%S" is substituted by a single source file. In contrast,
for $kpsewhich, "%S" may be substituted by a long list of space-
- separated filenames, each of which is quoted. The result on
+ separated filenames, each of which is quoted. The result on
STDOUT of running the command is then piped to latexmk.)
- See also the @BIBINPUTS variable for another way that latexmk
+ See also the @BIBINPUTS variable for another way that latexmk
also uses to try to locate files; it applies only in the case of
.bib files.
@@ -3625,7 +3625,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 10 January 2024 55
+ 31 January 2024 55
@@ -3635,52 +3635,52 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$kpsewhich_show [0]
- Whether to show diagnostics about invocations of kpsewhich: the
- command line use to invoke it and the results. These diagnos-
- tics are shown if $kpsewhich_show is non-zero or if diagnostics
- mode is on. (But in the second case, lots of other diagnostics
- are also shown.) Without these diagnostics there is nothing
- visible in latexmk's screen output about invocations of kpse-
+ Whether to show diagnostics about invocations of kpsewhich: the
+ command line use to invoke it and the results. These diagnos-
+ tics are shown if $kpsewhich_show is non-zero or if diagnostics
+ mode is on. (But in the second case, lots of other diagnostics
+ are also shown.) Without these diagnostics there is nothing
+ visible in latexmk's screen output about invocations of kpse-
which.
$landscape_mode [0]
If nonzero, run in landscape mode, using the landscape mode pre-
- viewers and dvi to postscript converters. Equivalent to the -l
+ viewers and dvi to postscript converters. Equivalent to the -l
option. Normally not needed with current previewers.
$latex ["latex %O %S"]
- Specifies the command line for the LaTeX processing program.
- Note that as with other programs, you can use this variable not
- just to change the name of the program used, but also specify
+ Specifies the command line for the LaTeX processing program.
+ Note that as with other programs, you can use this variable not
+ just to change the name of the program used, but also specify
options to the program. E.g.,
$latex = "latex --src-specials %O %S";
- To do a coordinated setting of all of $dvilualatex, $hilatex,
+ To do a coordinated setting of all of $dvilualatex, $hilatex,
$latex, $pdflatex, $lualatex, and $xelatex, see the section "Ad-
vanced Configuration".
%latex_input_extensions
- This variable specifies the extensions tried by latexmk when it
- finds that a LaTeX run resulted in an error that a file has not
- been found, and the file is given without an extension. This
- typically happens when LaTeX commands of the form \input{file}
- or \includegraphics{figure}, when the relevant source file does
+ This variable specifies the extensions tried by latexmk when it
+ finds that a LaTeX run resulted in an error that a file has not
+ been found, and the file is given without an extension. This
+ typically happens when LaTeX commands of the form \input{file}
+ or \includegraphics{figure}, when the relevant source file does
not exist.
- In this situation, latexmk searches for custom dependencies to
- make the missing file(s), but restricts it to the extensions
- specified by the variable %latex_input_extensions. The default
+ In this situation, latexmk searches for custom dependencies to
+ make the missing file(s), but restricts it to the extensions
+ specified by the variable %latex_input_extensions. The default
extensions are 'tex' and 'eps'.
- (For Perl experts: %latex_input_extensions is a hash whose keys
- are the extensions. The values are irrelevant.) Two subrou-
- tines are provided for manipulating this and the related vari-
- able %pdflatex_input_extensions, add_input_ext and remove_in-
- put_ext. They are used as in the following examples are possi-
+ (For Perl experts: %latex_input_extensions is a hash whose keys
+ are the extensions. The values are irrelevant.) Two subrou-
+ tines are provided for manipulating this and the related vari-
+ able %pdflatex_input_extensions, add_input_ext and remove_in-
+ put_ext. They are used as in the following examples are possi-
ble lines in an initialization file:
remove_input_ext( 'latex', 'tex' );
@@ -3691,7 +3691,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 10 January 2024 56
+ 31 January 2024 56
@@ -3700,19 +3700,19 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- add the extension 'asdf to latex_input_extensions. (Naturally
+ add the extension 'asdf to latex_input_extensions. (Naturally
with such an extension, you should have made an appropriate cus-
tom dependency for latexmk, and should also have done the appro-
- priate programming in the LaTeX source file to enable the file
- to be read. The standard extensions are handled by LaTeX and
+ priate programming in the LaTeX source file to enable the file
+ to be read. The standard extensions are handled by LaTeX and
its graphics/graphicx packages.)
$latex_silent_switch ["-interaction=batchmode"]
- Switch(es) for the LaTeX processing program when silent mode is
+ Switch(es) for the LaTeX processing program when silent mode is
on.
- If you use MikTeX, you may prefer the results if you configure
- the options to include -c-style-errors, e.g., by the following
+ If you use MikTeX, you may prefer the results if you configure
+ the options to include -c-style-errors, e.g., by the following
line in an initialization file
$latex_silent_switch = "-interaction=batchmode -c-style-er-
@@ -3722,19 +3722,19 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$lpr ["lpr %O %S" under UNIX/Linux, "NONE lpr" under MS-Windows]
The command to print postscript files.
- Under MS-Windows (unlike UNIX/Linux), there is no standard pro-
+ Under MS-Windows (unlike UNIX/Linux), there is no standard pro-
gram for printing files. But there are ways you can do it. For
example, if you have gsview installed, you could use it with the
option "/p":
$lpr = '"c:/Program Files/Ghostgum/gsview/gsview32.exe" /p';
- If gsview is installed in a different directory, you will need
- to make the appropriate change. Note the combination of single
- and double quotes around the name. The single quotes specify
- that this is a string to be assigned to the configuration vari-
- able $lpr. The double quotes are part of the string passed to
- the operating system to get the command obeyed; this is neces-
+ If gsview is installed in a different directory, you will need
+ to make the appropriate change. Note the combination of single
+ and double quotes around the name. The single quotes specify
+ that this is a string to be assigned to the configuration vari-
+ able $lpr. The double quotes are part of the string passed to
+ the operating system to get the command obeyed; this is neces-
sary because one part of the command name ("Program Files") con-
tains a space which would otherwise be misinterpreted.
@@ -3744,20 +3744,20 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$lpr_pdf ["NONE lpr_pdf"]
The printing program to print pdf files.
- Under MS-Windows you could set this to use gsview, if it is in-
+ Under MS-Windows you could set this to use gsview, if it is in-
stalled, e.g.,
$lpr = '"c:/Program Files/Ghostgum/gsview/gsview32.exe" /p';
- If gsview is installed in a different directory, you will need
- to make the appropriate change. Note the double quotes around
+ If gsview is installed in a different directory, you will need
+ to make the appropriate change. Note the double quotes around
the name: this is necessary because one part of the command name
("Program Files") contains a space which would otherwise be mis-
interpreted.
- 10 January 2024 57
+ 31 January 2024 57
@@ -3768,35 +3768,35 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$lualatex ["lualatex %O %S"]
Specifies the command line for the LaTeX processing program that
- is to be used when the lualatex program is called for (e.g., by
+ is to be used when the lualatex program is called for (e.g., by
the option -lualatex.
- To do a coordinated setting of all of $dvilualatex, $hilatex,
+ To do a coordinated setting of all of $dvilualatex, $hilatex,
$latex, $pdflatex, $lualatex, and $xelatex, see the section "Ad-
vanced Configuration".
%lualatex_input_extensions
- This variable specifies the extensions tried by latexmk when it
- finds that a lualatex run resulted in an error that a file has
- not been found, and the file is given without an extension.
- This typically happens when LaTeX commands of the form \in-
- put{file} or \includegraphics{figure}, when the relevant source
+ This variable specifies the extensions tried by latexmk when it
+ finds that a lualatex run resulted in an error that a file has
+ not been found, and the file is given without an extension.
+ This typically happens when LaTeX commands of the form \in-
+ put{file} or \includegraphics{figure}, when the relevant source
file does not exist.
- In this situation, latexmk searches for custom dependencies to
- make the missing file(s), but restricts it to the extensions
- specified by the variable %pdflatex_input_extensions. The de-
+ In this situation, latexmk searches for custom dependencies to
+ make the missing file(s), but restricts it to the extensions
+ specified by the variable %pdflatex_input_extensions. The de-
fault extensions are 'tex', 'pdf', 'jpg, and 'png'.
See details of the %latex_input_extensions for other information
that equally applies to %lualatex_input_extensions.
$lualatex_silent_switch ["-interaction=batchmode"]
- Switch(es) for the lualatex program (specified in the variable
+ Switch(es) for the lualatex program (specified in the variable
$lualatex) when silent mode is on.
- See details of the $latex_silent_switch for other information
+ See details of the $latex_silent_switch for other information
that equally applies to $lualatex_silent_switch.
$make ["make"]
@@ -3806,24 +3806,24 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
The index processing program.
$makeindex_fudge [0]
- When using makeindex, whether to change directory to $aux_dir
- before running makeindex. Set to 1 if $aux_dir is not an ex-
- plicit subdirectory of current directory, otherwise makeindex
+ When using makeindex, whether to change directory to $aux_dir
+ before running makeindex. Set to 1 if $aux_dir is not an ex-
+ plicit subdirectory of current directory, otherwise makeindex
will refuse to write its output and log files, for security rea-
sons.
$makeindex_silent_switch ["-q"]
- Switch(es) for the index processing program when silent mode is
+ Switch(es) for the index processing program when silent mode is
on.
$max_repeat [5]
- The maximum number of times latexmk will run *latex before de-
- ciding that there may be an infinite loop and that it needs to
- bail out, rather than rerunning *latex again to resolve cross-
+ The maximum number of times latexmk will run *latex before de-
+ ciding that there may be an infinite loop and that it needs to
+ bail out, rather than rerunning *latex again to resolve cross-
- 10 January 2024 58
+ 31 January 2024 58
@@ -3838,58 +3838,58 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
tex generates files to be read in on a later run.)
$MSWin_back_slash [1]
- This configuration variable only has an effect when latexmk is
- running under MS-Windows. With the default value of 1 for this
- variable, when a command is executed under MS-Windows, latexmk
- substitutes "\" for the separator character between components
- of a directory name. Internally, latexmk uses "/" for the di-
- rectory separator character, which is the character used by
+ This configuration variable only has an effect when latexmk is
+ running under MS-Windows. With the default value of 1 for this
+ variable, when a command is executed under MS-Windows, latexmk
+ substitutes "\" for the separator character between components
+ of a directory name. Internally, latexmk uses "/" for the di-
+ rectory separator character, which is the character used by
Unix-like systems.
- For almost all programs and for almost all filenames under MS-
- Windows, both "\" and "/" are acceptable as the directory sepa-
- rator character, provided at least that filenames are properly
+ For almost all programs and for almost all filenames under MS-
+ Windows, both "\" and "/" are acceptable as the directory sepa-
+ rator character, provided at least that filenames are properly
quoted. But it is possible that programs exist that only accept
- "\" on the command line, since that is the standard directory
- separator for MS-Windows. So for safety latexmk makes the sub-
+ "\" on the command line, since that is the standard directory
+ separator for MS-Windows. So for safety latexmk makes the sub-
stitution from "/" to "\", by default.
- However there are also programs on MS-Windows for which a back
+ However there are also programs on MS-Windows for which a back
slash "\" is interpreted differently than as a directory separa-
- tor; for these the directory separator should be "/". Programs
- with this behavior include all the *latex programs in the
- TeXLive implementation (but not the MiKTeX implementation).
- Hence if you use TeXLive on MS-Windows, then $MSWin_back_slash
+ tor; for these the directory separator should be "/". Programs
+ with this behavior include all the *latex programs in the
+ TeXLive implementation (but not the MiKTeX implementation).
+ Hence if you use TeXLive on MS-Windows, then $MSWin_back_slash
should be set to zero.
$new_viewer_always [0]
- This variable applies to latexmk only in continuous-preview
+ This variable applies to latexmk only in continuous-preview
mode. If $new_viewer_always is 0, latexmk will check for a pre-
- viously running previewer on the same file, and if one is run-
- ning will not start a new one. If $new_viewer_always is non-
- zero, this check will be skipped, and latexmk will behave as if
+ viously running previewer on the same file, and if one is run-
+ ning will not start a new one. If $new_viewer_always is non-
+ zero, this check will be skipped, and latexmk will behave as if
no viewer is running.
$out_dir [""]
If non-blank, this variable specifies the output directory.
- This is the directory in which final output files are written
- (dvi, ps, pdf, synctex, synctex.gz). In addition, if the aux
- directory equals the output directory, as is the case by de-
- fault, then other generated files are in effect written to the
+ This is the directory in which final output files are written
+ (dvi, ps, pdf, synctex, synctex.gz). In addition, if the aux
+ directory equals the output directory, as is the case by de-
+ fault, then other generated files are in effect written to the
output directory.
If $out_dir is blank, the output directory is the current direc-
- tory at the invocation of *latex; this is equivalent to setting
+ tory at the invocation of *latex; this is equivalent to setting
$out_dir to '.'.
- See the section AUXILIARY AND OUTPUT DIRECTORIES for more de-
+ See the section AUXILIARY AND OUTPUT DIRECTORIES for more de-
tails.
- 10 January 2024 59
+ 31 January 2024 59
@@ -3899,21 +3899,21 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$pdf_mode [0]
- If zero, do NOT generate a pdf version of the document. If
- equal to 1, generate a pdf version of the document using pdfla-
- tex, using the command specified by the $pdflatex variable. If
- equal to 2, generate a pdf version of the document from the ps
- file, by using the command specified by the $ps2pdf variable.
- If equal to 3, generate a pdf version of the document from the
- dvi file, by using the command specified by the $dvipdf vari-
+ If zero, do NOT generate a pdf version of the document. If
+ equal to 1, generate a pdf version of the document using pdfla-
+ tex, using the command specified by the $pdflatex variable. If
+ equal to 2, generate a pdf version of the document from the ps
+ file, by using the command specified by the $ps2pdf variable.
+ If equal to 3, generate a pdf version of the document from the
+ dvi file, by using the command specified by the $dvipdf vari-
able. If equal to 4, generate a pdf version of the document us-
ing lualatex, using the command specified by the $lualatex vari-
- able. If equal to 5, generate a pdf version (and an xdv ver-
- sion) of the document using xelatex, using the commands speci-
+ able. If equal to 5, generate a pdf version (and an xdv ver-
+ sion) of the document using xelatex, using the commands speci-
fied by the $xelatex and xdvipdfmx variables.
- In $pdf_mode=2, it is ensured that .dvi and .ps files are also
- made. In $pdf_mode=3, it is ensured that a .dvi file is also
+ In $pdf_mode=2, it is ensured that .dvi and .ps files are also
+ made. In $pdf_mode=3, it is ensured that a .dvi file is also
made. But this may be overridden by the document.
$pdflatex ["pdflatex %O %S"]
@@ -3925,28 +3925,28 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$pdflatex = "pdflatex --shell-escape %O %S";
- (In some earlier versions of latexmk, you needed to use an as-
- signment to $pdflatex to allow the use of lualatex or xelatex
+ (In some earlier versions of latexmk, you needed to use an as-
+ signment to $pdflatex to allow the use of lualatex or xelatex
instead of pdflatex. There are now separate configuration vari-
- ables for the use of lualatex or xelatex. See $lualatex and
+ ables for the use of lualatex or xelatex. See $lualatex and
$xelatex.)
- To do a coordinated setting of all of $dvilualatex, $hilatex,
+ To do a coordinated setting of all of $dvilualatex, $hilatex,
$latex, $pdflatex, $lualatex, and $xelatex, see the section "Ad-
vanced Configuration".
%pdflatex_input_extensions
- This variable specifies the extensions tried by latexmk when it
- finds that a pdflatex run resulted in an error that a file has
- not been found, and the file is given without an extension.
- This typically happens when LaTeX commands of the form \in-
- put{file} or \includegraphics{figure}, when the relevant source
+ This variable specifies the extensions tried by latexmk when it
+ finds that a pdflatex run resulted in an error that a file has
+ not been found, and the file is given without an extension.
+ This typically happens when LaTeX commands of the form \in-
+ put{file} or \includegraphics{figure}, when the relevant source
file does not exist.
- In this situation, latexmk searches for custom dependencies to
- make the missing file(s), but restricts it to the extensions
- specified by the variable %pdflatex_input_extensions. The de-
+ In this situation, latexmk searches for custom dependencies to
+ make the missing file(s), but restricts it to the extensions
+ specified by the variable %pdflatex_input_extensions. The de-
fault extensions are 'tex', 'pdf', 'jpg, and 'png'.
See details of the %latex_input_extensions for other information
@@ -3955,7 +3955,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 10 January 2024 60
+ 31 January 2024 60
@@ -3965,55 +3965,55 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$pdflatex_silent_switch ["-interaction=batchmode"]
- Switch(es) for the pdflatex program (specified in the variable
+ Switch(es) for the pdflatex program (specified in the variable
$pdflatex) when silent mode is on.
- See details of the $latex_silent_switch for other information
+ See details of the $latex_silent_switch for other information
that equally applies to $pdflatex_silent_switch.
$pdf_previewer ["start acroread %O %S"]
The command to invoke a pdf-previewer.
- On MS-Windows, the default is changed to "cmd /c start """; un-
- der more recent versions of Windows, this will cause to be run
+ On MS-Windows, the default is changed to "cmd /c start """; un-
+ der more recent versions of Windows, this will cause to be run
whatever command the system has associated with .pdf files. But
- this may be undesirable if this association is to acroread --
+ this may be undesirable if this association is to acroread --
see the notes in the explanation of the -pvc option.]
- On OS-X the default is changed to "open %S", which results in
- OS-X starting up (and detaching) the viewer associated with the
- file. By default, for pdf files this association is to OS-X's
+ On OS-X the default is changed to "open %S", which results in
+ OS-X starting up (and detaching) the viewer associated with the
+ file. By default, for pdf files this association is to OS-X's
preview, which is quite satisfactory.
- WARNING: Problem under MS-Windows: if acroread is used as the
- pdf previewer, and it is actually viewing a pdf file, the pdf
- file cannot be updated. Thus makes acroread a bad choice of
- previewer if you use latexmk's previous-continuous mode (option
+ WARNING: Problem under MS-Windows: if acroread is used as the
+ pdf previewer, and it is actually viewing a pdf file, the pdf
+ file cannot be updated. Thus makes acroread a bad choice of
+ previewer if you use latexmk's previous-continuous mode (option
-pvc) under MS-windows. This problem does not occur if, for ex-
ample, SumatraPDF or gsview is used to view pdf files.
- Important note: Normally you will want to have a previewer run
+ Important note: Normally you will want to have a previewer run
detached, so that latexmk doesn't wait for the previewer to ter-
- minate before continuing its work. So normally you should pre-
- fix the command by "start ", which flags to latexmk that it
- should do the detaching of the previewer itself (by whatever
- method is appropriate to the operating system). But sometimes
+ minate before continuing its work. So normally you should pre-
+ fix the command by "start ", which flags to latexmk that it
+ should do the detaching of the previewer itself (by whatever
+ method is appropriate to the operating system). But sometimes
letting latexmk do the detaching is not appropriate (for a vari-
- ety of non-trivial reasons), so you should put the "start " bit
+ ety of non-trivial reasons), so you should put the "start " bit
in yourself, whenever it is needed.
$pdf_update_command [""]
- When the pdf previewer is set to be updated by running a com-
- mand, this is the command that is run. See the information for
+ When the pdf previewer is set to be updated by running a com-
+ mand, this is the command that is run. See the information for
the variable $pdf_update_method.
$pdf_update_method [1 under UNIX, 3 under MS-Windows]
- How the pdf viewer updates its display when the pdf file has
- changed. See the information on the variable $dvi_update_method
+ How the pdf viewer updates its display when the pdf file has
+ changed. See the information on the variable $dvi_update_method
for the codes. (Note that information needs be changed slightly
- so that for the value 4, to run a command to do the update, the
- command is specified by the variable $pdf_update_command, and
- for the value 2, to specify update by signal, the signal is
+ so that for the value 4, to run a command to do the update, the
+ command is specified by the variable $pdf_update_command, and
+ for the value 2, to specify update by signal, the signal is
specified by $pdf_update_signal.)
Note that acroread under MS-Windows (but not UNIX) locks the pdf
@@ -4021,7 +4021,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 10 January 2024 61
+ 31 January 2024 61
@@ -4037,47 +4037,47 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$pdf_update_method = 4;
$pdf_update_command = "xpdf -remote %R -reload";
- The first setting arranges for the xpdf program to be used in
- its "remote server mode", with the server name specified as the
- rootname of the TeX file. The second setting arranges for up-
- dating to be done in response to a command, and the third set-
+ The first setting arranges for the xpdf program to be used in
+ its "remote server mode", with the server name specified as the
+ rootname of the TeX file. The second setting arranges for up-
+ dating to be done in response to a command, and the third set-
ting sets the update command.
$pdf_update_signal [Under UNIX: SIGHUP, which is a system-dependent
value]
- The number of the signal that is sent to the pdf viewer when it
- is updated by sending a signal -- see the information on the
- variable $pdf_update_method. The default value is the one ap-
+ The number of the signal that is sent to the pdf viewer when it
+ is updated by sending a signal -- see the information on the
+ variable $pdf_update_method. The default value is the one ap-
propriate for gv on a UNIX system.
$pid_position[1 under UNIX, -1 under MS-Windows]
- The variable $pid_position is used to specify which word in
- lines of the output from $pscmd corresponds to the process ID.
- The first word in the line is numbered 0. The default value of
+ The variable $pid_position is used to specify which word in
+ lines of the output from $pscmd corresponds to the process ID.
+ The first word in the line is numbered 0. The default value of
1 (2nd word in line) is correct for Solaris 2.6, Linux, and OS-X
with their default settings of $pscmd.
- Setting the variable to -1 is used to indicate that $pscmd is
+ Setting the variable to -1 is used to indicate that $pscmd is
not to be used.
$postscript_mode [0]
- If nonzero, generate a postscript version of the document.
+ If nonzero, generate a postscript version of the document.
Equivalent to the -ps option.
- If some other request is made for which a postscript file is
+ If some other request is made for which a postscript file is
needed, then $postscript_mode will be set to 1.
$pre_tex_code ['']
- Sets TeX code to be executed before inputting the source file.
- This works if the relevant one of $latex, etc contains a suit-
+ Sets TeX code to be executed before inputting the source file.
+ This works if the relevant one of $latex, etc contains a suit-
able command line with a %P or %U substitution. For example you
could do
$latex = 'latex %O %P';
$pre_tex_code = '\AtBeginDocument{An initial message\par}';
- To set all of $latex, $pdflatex, $lualatex, and $xelatex you
+ To set all of $latex, $pdflatex, $lualatex, and $xelatex you
could use the subroutine alt_tex_cmds:
&alt_tex_cmds;
@@ -4087,7 +4087,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 10 January 2024 62
+ 31 January 2024 62
@@ -4097,41 +4097,41 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$preview_continuous_mode [0]
- If nonzero, run a previewer to view the document, and continue
+ If nonzero, run a previewer to view the document, and continue
running latexmk to keep .dvi up-to-date. Equivalent to the -pvc
- option. Which previewer is run depends on the other settings,
+ option. Which previewer is run depends on the other settings,
see the command line options -view=, and the variable $view.
$preview_mode [0]
If nonzero, run a previewer to preview the document. Equivalent
- to the -pv option. Which previewer is run depends on the other
- settings, see the command line options -view=, and the variable
+ to the -pv option. Which previewer is run depends on the other
+ settings, see the command line options -view=, and the variable
$view.
$printout_mode [0]
- If nonzero, print the document using the command specified in
+ If nonzero, print the document using the command specified in
the $lpr variable. Equivalent to the -p option. This is recom-
- mended not to be set from an RC file, otherwise you could waste
+ mended not to be set from an RC file, otherwise you could waste
lots of paper.
$print_type = ["auto"]
- Type of file to printout: possibilities are "auto", "dvi",
+ Type of file to printout: possibilities are "auto", "dvi",
"none", "pdf", or "ps". See the option -print= for the meaning
of the "auto" value.
$pscmd Command used to get all the processes currently run by the user.
- The -pvc option uses the command specified by the variable
- $pscmd to determine if there is an already running previewer,
- and to find the process ID (needed if latexmk needs to signal
+ The -pvc option uses the command specified by the variable
+ $pscmd to determine if there is an already running previewer,
+ and to find the process ID (needed if latexmk needs to signal
the previewer about file changes).
Each line of the output of this command is assumed to correspond
- to one process. See the $pid_position variable for how the
+ to one process. See the $pid_position variable for how the
process number is determined.
- The default for pscmd is "NONE" under MS-Windows and cygwin
- (i.e., the command is not used), "ps -ww -u $ENV{USER}" under
- OS-X, and "ps -f -u $ENV{USER}" under other operating systems
+ The default for pscmd is "NONE" under MS-Windows and cygwin
+ (i.e., the command is not used), "ps -ww -u $ENV{USER}" under
+ OS-X, and "ps -f -u $ENV{USER}" under other operating systems
(including Linux). In these specifications "$ENV{USER}" is sub-
stituted by the username.
@@ -4140,20 +4140,20 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$ps_filter [empty]
The postscript file filter to be run on the newly produced post-
- script file before other processing. Equivalent to specifying
+ script file before other processing. Equivalent to specifying
the -pF option.
$ps_previewer ["start gv %O %S", but start %O %S under MS-Windows]
- The command to invoke a ps-previewer. (The default under MS-
+ The command to invoke a ps-previewer. (The default under MS-
Windows will cause to be run whatever command the system has as-
sociated with .ps files.)
- Note that gv could be used with the -watch option updates its
- display whenever the postscript file changes, whereas ghostview
+ Note that gv could be used with the -watch option updates its
+ display whenever the postscript file changes, whereas ghostview
- 10 January 2024 63
+ 31 January 2024 63
@@ -4162,22 +4162,22 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- does not. However, different versions of gv have slightly dif-
- ferent ways of writing this option. You can configure this
+ does not. However, different versions of gv have slightly dif-
+ ferent ways of writing this option. You can configure this
variable appropriately.
WARNING: Linux systems may have installed one (or more) versions
- of gv under different names, e.g., ggv, kghostview, etc, but
+ of gv under different names, e.g., ggv, kghostview, etc, but
perhaps not one actually called gv.
- Important note: Normally you will want to have a previewer run
+ Important note: Normally you will want to have a previewer run
detached, so that latexmk doesn't wait for the previewer to ter-
- minate before continuing its work. So normally you should pre-
- fix the command by "start ", which flags to latexmk that it
- should do the detaching of the previewer itself (by whatever
- method is appropriate to the operating system). But sometimes
+ minate before continuing its work. So normally you should pre-
+ fix the command by "start ", which flags to latexmk that it
+ should do the detaching of the previewer itself (by whatever
+ method is appropriate to the operating system). But sometimes
letting latexmk do the detaching is not appropriate (for a vari-
- ety of non-trivial reasons), so you should put the "start " bit
+ ety of non-trivial reasons), so you should put the "start " bit
in yourself, whenever it is needed.
@@ -4186,29 +4186,29 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
The command to invoke a ps-previewer in landscape mode.
$ps_update_command [""]
- When the postscript previewer is set to be updated by running a
- command, this is the command that is run. See the information
+ When the postscript previewer is set to be updated by running a
+ command, this is the command that is run. See the information
for the variable $ps_update_method.
$ps_update_method [0 under UNIX, 1 under MS-Windows]
- How the postscript viewer updates its display when the .ps file
- has changed. See the information on the variable $dvi_up-
- date_method for the codes. (Note that information needs be
+ How the postscript viewer updates its display when the .ps file
+ has changed. See the information on the variable $dvi_up-
+ date_method for the codes. (Note that information needs be
changed slightly so that for the value 4, to run a command to do
- the update, the command is specified by the variable $ps_up-
- date_command, and for the value 2, to specify update by signal,
+ the update, the command is specified by the variable $ps_up-
+ date_command, and for the value 2, to specify update by signal,
the signal is specified by $ps_update_signal.)
$ps_update_signal [Under UNIX: SIGHUP, which is a system-dependent
value]
- The number of the signal that is sent to the pdf viewer when it
- is updated by sending a signal -- see $ps_update_method. The
+ The number of the signal that is sent to the pdf viewer when it
+ is updated by sending a signal -- see $ps_update_method. The
default value is the one appropriate for gv on a UNIX system.
$pvc_timeout [0]
- If this variable is nonzero, there will be a timeout in pvc
- mode after a period of inactivity. Inactivity means a period
- when latexmk has detected no file changes and hence has not
+ If this variable is nonzero, there will be a timeout in pvc
+ mode after a period of inactivity. Inactivity means a period
+ when latexmk has detected no file changes and hence has not
taken any actions like compiling the document. The period of in-
activity is in the variable $pvc_timeout_mins.
@@ -4219,7 +4219,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 10 January 2024 64
+ 31 January 2024 64
@@ -4235,57 +4235,57 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$quote_filenames [1]
This specifies whether substitutions for placeholders in command
specifications (as in $pdflatex) are surrounded by double
- quotes. If this variable is 1 (or any other value Perl regards
+ quotes. If this variable is 1 (or any other value Perl regards
as true), then quoting is done. Otherwise quoting is omitted.
- The quoting method used by latexmk is tested to work correctly
- under UNIX systems (including Linux and Mac OS-X) and under MS-
- Windows. It allows the use of filenames containing special
- characters, notably spaces. (But note that many versions of
- *latex cannot correctly deal with TeX files whose names contain
- spaces. Latexmk's quoting only ensures that such filenames are
- correctly treated by the operating system in passing arguments
+ The quoting method used by latexmk is tested to work correctly
+ under UNIX systems (including Linux and Mac OS-X) and under MS-
+ Windows. It allows the use of filenames containing special
+ characters, notably spaces. (But note that many versions of
+ *latex cannot correctly deal with TeX files whose names contain
+ spaces. Latexmk's quoting only ensures that such filenames are
+ correctly treated by the operating system in passing arguments
to programs.)
$rc_report [1]
- After initialization, whether to give a list of the RC files
+ After initialization, whether to give a list of the RC files
read.
$recorder [1]
- Whether to use the -recorder option to *latex. Use of this op-
- tion results in a file of extension .fls containing a list of
- the files that these programs have read and written. Latexmk
+ Whether to use the -recorder option to *latex. Use of this op-
+ tion results in a file of extension .fls containing a list of
+ the files that these programs have read and written. Latexmk
will then use this file to improve its detection of source files
and generated files after a run of *latex.
- It is generally recommended to use this option (or to configure
- the $recorder variable to be on.) But it only works if *latex
- supports the -recorder option, which is true for most current
+ It is generally recommended to use this option (or to configure
+ the $recorder variable to be on.) But it only works if *latex
+ supports the -recorder option, which is true for most current
implementations
- Note about the name of the .fls file: Most implementations of
- *latex produce an .fls file with the same basename as the main
+ Note about the name of the .fls file: Most implementations of
+ *latex produce an .fls file with the same basename as the main
document's LaTeX, e.g., for Document.tex, the .fls file is Docu-
- ment.fls. However, some implementations instead produce files
+ ment.fls. However, some implementations instead produce files
named for the program, i.e., latex.fls or pdflatex.fls. In this
- second case, latexmk copies the latex.fls or pdflatex.fls to a
- file with the basename of the main LaTeX document, e.g., Docu-
+ second case, latexmk copies the latex.fls or pdflatex.fls to a
+ file with the basename of the main LaTeX document, e.g., Docu-
ment.fls.
$search_path_separator [See below for default]
The character separating paths in the environment variables TEX-
- INPUTS, BIBINPUTS, and BSTINPUTS. This variable is mainly used
- by latexmk when the -outdir, -output-directory, -auxdir, and/or
- -aux-directory options are used. In that case latexmk needs to
+ INPUTS, BIBINPUTS, and BSTINPUTS. This variable is mainly used
+ by latexmk when the -outdir, -output-directory, -auxdir, and/or
+ -aux-directory options are used. In that case latexmk needs to
communicate appropriately modified search paths to bibtex,
dvipdf, dvips, and *latex.
- [Comment to technically savvy readers: *latex doesn't actually
- need the modified search path. But, surprisingly, dvipdf and
+ [Comment to technically savvy readers: *latex doesn't actually
+ need the modified search path. But, surprisingly, dvipdf and
- 10 January 2024 65
+ 31 January 2024 65
@@ -4294,25 +4294,25 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- dvips do, because sometimes graphics files get generated in the
+ dvips do, because sometimes graphics files get generated in the
output or aux directories.]
- The default under MSWin and Cygwin is ';' and under UNIX-like
- operating systems (including Linux and OS-X) is ':'. Normally
- the defaults give correct behavior. But there can be difficul-
- ties if your operating system is of one kind, but some of your
- software is running under an emulator for the other kind of op-
- erating system; in that case you'll need to find out what is
- needed, and set $search_path_separator explicitly. (The same
- goes, of course, for unusual operating systems that are not in
+ The default under MSWin and Cygwin is ';' and under UNIX-like
+ operating systems (including Linux and OS-X) is ':'. Normally
+ the defaults give correct behavior. But there can be difficul-
+ ties if your operating system is of one kind, but some of your
+ software is running under an emulator for the other kind of op-
+ erating system; in that case you'll need to find out what is
+ needed, and set $search_path_separator explicitly. (The same
+ goes, of course, for unusual operating systems that are not in
the MSWin, Linux, OS-X, Unix collection.)
$show_time [0]
- Whether to show time used, both the total and for individual
+ Whether to show time used, both the total and for individual
steps.
Note: On MS Windows, this is clock time. On other OSs it is the
- CPU time used (by latexmk and the child processes it invokes).
+ CPU time used (by latexmk and the child processes it invokes).
The OS-dependence is because of a limitation of Windows. If you
wish to force the use of clock instead of CPU time, you can set
@@ -4321,37 +4321,37 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$silence_logfile_warnings [0]
- Whether after a run of *latex to summarize warnings in the log
- file about undefined citations and references. Setting $si-
+ Whether after a run of *latex to summarize warnings in the log
+ file about undefined citations and references. Setting $si-
lence_logfile_warnings=0 gives the summary of warnings (provided
- silent mode isn't also set), and this is useful to locate unde-
- fined citations and references without searching through the
- much more verbose log file or the screen output of *latex. But
- the summary can also be excessively annoying. The default is
- not to give these warnings. The command line options -si-
- lence_logfile_warning_list and -silence_logfile_warning_list-
+ silent mode isn't also set), and this is useful to locate unde-
+ fined citations and references without searching through the
+ much more verbose log file or the screen output of *latex. But
+ the summary can also be excessively annoying. The default is
+ not to give these warnings. The command line options -si-
+ lence_logfile_warning_list and -silence_logfile_warning_list-
also set this variable.
- Note that multiple occurrences for the same undefined object on
+ Note that multiple occurrences for the same undefined object on
the same page and same line will be compressed to a single warn-
ing.
$silent [0]
- Whether to run silently. Setting $silent to 1 has the same ef-
+ Whether to run silently. Setting $silent to 1 has the same ef-
fect as the -quiet of -silent options on the command line.
$sleep_time [2]
- The time to sleep (in seconds) between checking for source-file
- changes when running with the -pvc option. If non-zero, it is
+ The time to sleep (in seconds) between checking for source-file
+ changes when running with the -pvc option. If non-zero, it is
subject to a minimum value give by the $min_sleep_time variable.
But a zero value is also allowed.
- 10 January 2024 66
+ 31 January 2024 66
@@ -4360,24 +4360,24 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- A value of exactly 0 gives no delay between checks for source-
- file changes; it typically results in 100% CPU usage, which may
+ A value of exactly 0 gives no delay between checks for source-
+ file changes; it typically results in 100% CPU usage, which may
not be desirable.
- In old versions of latexmk, the default value of $sleep_time of
- 2 wB-pvctmodegand theeamountlofcCPUrusage.beOnemodernpocomputers
+ In old versions of latexmk, the default value of $sleep_time of
+ 2 waB-pvc modeiandatheaamounteofoCPUousage.etOnemodernocomputers
in
- with fast multi-core CPUs, a smaller value, e.g., 0.1 can give
+ with fast multi-core CPUs, a smaller value, e.g., 0.1 can give
good results, especially when working with small documents whose
compilation may take well under a second.
$texfile_search [""]
- This is an obsolete variable, replaced by the @default_files
+ This is an obsolete variable, replaced by the @default_files
variable.
- For backward compatibility, if you choose to set $tex-
- file_search, it is a string of space-separated filenames, and
+ For backward compatibility, if you choose to set $tex-
+ file_search, it is a string of space-separated filenames, and
then latexmk replaces @default_files with the filenames in $tex-
file_search to which is added "*.tex".
@@ -4385,39 +4385,39 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
See the documentation for $compiling_cmd.
$tmpdir [See below for default]
- Directory to store temporary files that latexmk may generate
+ Directory to store temporary files that latexmk may generate
while running.
- The default under MSWindows (including cygwin), is to set $tm-
- pdir to the value of the first of whichever of the system envi-
- ronment variables TMPDIR or TEMP exists, otherwise to the cur-
- rent directory. Under other operating systems (expected to be
- UNIX/Linux, including OS-X), the default is the value of the
- system environment variable TMPDIR if it exists, otherwise
+ The default under MSWindows (including cygwin), is to set $tm-
+ pdir to the value of the first of whichever of the system envi-
+ ronment variables TMPDIR or TEMP exists, otherwise to the cur-
+ rent directory. Under other operating systems (expected to be
+ UNIX/Linux, including OS-X), the default is the value of the
+ system environment variable TMPDIR if it exists, otherwise
"/tmp".
$use_make_for_missing_files [0]
Whether to use make to try and make files that are missing after
- a run of *latex, and for which a custom dependency has not been
- found. This is generally useful only when latexmk is used as
- part of a bigger project which is built by using the make pro-
+ a run of *latex, and for which a custom dependency has not been
+ found. This is generally useful only when latexmk is used as
+ part of a bigger project which is built by using the make pro-
gram.
Note that once a missing file has been made, no further calls to
- make will be made on a subsequent run of latexmk to update the
- file. Handling this problem is the job of a suitably defined
- Makefile. See the section "USING latexmk WITH make" for how to
- do this. The intent of calling make from latexmk is merely to
+ make will be made on a subsequent run of latexmk to update the
+ file. Handling this problem is the job of a suitably defined
+ Makefile. See the section "USING latexmk WITH make" for how to
+ do this. The intent of calling make from latexmk is merely to
detect dependencies.
$view ["default"]
- Which kind of file is to be previewed if a previewer is used.
- The possible values are "default", "dvi", "ps", "pdf". The
+ Which kind of file is to be previewed if a previewer is used.
+ The possible values are "default", "dvi", "ps", "pdf". The
value of "default" means that the "highest" of the kinds of file
- 10 January 2024 67
+ 31 January 2024 67
@@ -4430,60 +4430,60 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$warnings_as_errors [0]
- Normally latexmk copies the behavior of latex in treating unde-
- fined references and citations and multiply defined references
- as conditions that give a warning but not an error. The vari-
+ Normally latexmk copies the behavior of latex in treating unde-
+ fined references and citations and multiply defined references
+ as conditions that give a warning but not an error. The vari-
able $warnings_as_errors controls whether this behavior is modi-
fied.
- When the variable is non-zero, latexmk at the end of its run
- will return a non-zero status code to the operating system if
- any of the files processed gives a warning about problems with
+ When the variable is non-zero, latexmk at the end of its run
+ will return a non-zero status code to the operating system if
+ any of the files processed gives a warning about problems with
citations or references (i.e., undefined citations or references
or multiply defined references). This is after latexmk has com-
- pleted all the runs it needs to try and resolve references and
- citations. Thus $warnings_as_errors being nonzero causes la-
+ pleted all the runs it needs to try and resolve references and
+ citations. Thus $warnings_as_errors being nonzero causes la-
texmk to treat such warnings as errors, but only when they occur
on the last run of *latex and only after processing is complete.
- A non-zero value $warnings_as_errors can be set by the command-
+ A non-zero value $warnings_as_errors can be set by the command-
line option -Werror.
The default behavior is normally satisfactory in the usual edit-
- compile-edit cycle. But, for example, latexmk can also be used
- as part of a build process for some bigger project, e.g., for
- creating documentation in the build of a software application.
- Then it is often sensible to treat citation and reference warn-
- ings as errors that require the overall build process to be
+ compile-edit cycle. But, for example, latexmk can also be used
+ as part of a build process for some bigger project, e.g., for
+ creating documentation in the build of a software application.
+ Then it is often sensible to treat citation and reference warn-
+ ings as errors that require the overall build process to be
aborted. Of course, since multiple runs of *latex are generally
- needed to resolve references and citations, what matters is not
+ needed to resolve references and citations, what matters is not
the warnings on the first run, but the warnings on the last run;
latexmk takes this into account appropriately.
- In addition, when preview-continuous mode is used, a non-zero
- value for $warnings_as_errors changes the use of the commands
- $failure_cmd, $warning_cmd, and $success_cmd after a complia-
+ In addition, when preview-continuous mode is used, a non-zero
+ value for $warnings_as_errors changes the use of the commands
+ $failure_cmd, $warning_cmd, and $success_cmd after a complia-
tion. If there are citation or reference warnings, but no other
- errors, the behavior is as follows. If $warning_cmd is set, it
- is used. If it is not set, then then if $warnings_as_errors is
- non-zero and $failure_cmd is set, then $failure_cmd. Otherwise
- $success_cmd is used, if it is set. (The foregoing explanation
+ errors, the behavior is as follows. If $warning_cmd is set, it
+ is used. If it is not set, then then if $warnings_as_errors is
+ non-zero and $failure_cmd is set, then $failure_cmd. Otherwise
+ $success_cmd is used, if it is set. (The foregoing explanation
is rather complicated, because latexmk has to deal with the case
that one or more of the commands isn't set.)
$xdv_mode [0]
- If one, generate an xdv version of the document by use of xela-
+ If one, generate an xdv version of the document by use of xela-
tex.
$xdvipdfmx ["xdvipdfmx -E -o %D %O %S"]
- The program to make a pdf file from an xdv file (used in con-
+ The program to make a pdf file from an xdv file (used in con-
junction with xelatex when $pdf_mode=5).
- 10 January 2024 68
+ 31 January 2024 68
@@ -4496,60 +4496,60 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
Switch(es) for the xdvipdfmx program when silent mode is on.
$xelatex ["xelatex %O %S"]
- Specifies the command line for the LaTeX processing program of
- when the xelatex program is called for. See the documentation
- of the -xelatex option for some special properties of latexmk's
+ Specifies the command line for the LaTeX processing program of
+ when the xelatex program is called for. See the documentation
+ of the -xelatex option for some special properties of latexmk's
use of xelatex.
- Note about xelatex: latexmk uses xelatex to make an .xdv rather
- than .pdf file, with the .pdf file being created in a separate
+ Note about xelatex: latexmk uses xelatex to make an .xdv rather
+ than .pdf file, with the .pdf file being created in a separate
step. This is enforced by the use of the -no-pdf option. If %O
- is part of the command for invoking xelatex, then latexmk will
+ is part of the command for invoking xelatex, then latexmk will
insert the -no-pdf option automatically, otherwise you must pro-
- vide the option yourself. See the documentation for the -pdfxe
+ vide the option yourself. See the documentation for the -pdfxe
option for why latexmk makes a .xdv file rather than a .pdf file
when xelatex is used.
- To do a coordinated setting of all of $dvilualatex, $hilatex,
+ To do a coordinated setting of all of $dvilualatex, $hilatex,
$latex, $pdflatex, $lualatex, and $xelatex, see the section "Ad-
vanced Configuration".
%xelatex_input_extensions
- This variable specifies the extensions tried by latexmk when it
- finds that an xelatex run resulted in an error that a file has
- not been found, and the file is given without an extension.
- This typically happens when LaTeX commands of the form \in-
- put{file} or \includegraphics{figure}, when the relevant source
+ This variable specifies the extensions tried by latexmk when it
+ finds that an xelatex run resulted in an error that a file has
+ not been found, and the file is given without an extension.
+ This typically happens when LaTeX commands of the form \in-
+ put{file} or \includegraphics{figure}, when the relevant source
file does not exist.
- In this situation, latexmk searches for custom dependencies to
- make the missing file(s), but restricts it to the extensions
- specified by the variable %xelatex_input_extensions. The de-
+ In this situation, latexmk searches for custom dependencies to
+ make the missing file(s), but restricts it to the extensions
+ specified by the variable %xelatex_input_extensions. The de-
fault extensions are 'tex', 'pdf', 'jpg, and 'png'.
See details of the %latex_input_extensions for other information
that equally applies to %xelatex_input_extensions.
$xelatex_silent_switch ["-interaction=batchmode"]
- Switch(es) for the xelatex program (specified in the variable
+ Switch(es) for the xelatex program (specified in the variable
$xelatex) when silent mode is on.
- See details of the $latex_silent_switch for other information
+ See details of the $latex_silent_switch for other information
that equally applies to $xelatex_silent_switch.
CUSTOM DEPENDENCIES
- In any RC file a set of custom dependencies can be set up to convert a
+ In any RC file a set of custom dependencies can be set up to convert a
file with one extension to a file with another. An example use of this
would be to allow latexmk to convert a .fig file to .eps to be included
in the .tex file.
- 10 January 2024 69
+ 31 January 2024 69
@@ -4560,9 +4560,9 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
Defining a custom dependency:
The old method of configuring latexmk to use a custom dependency was to
- directly manipulate the @cus_dep_list array that contains information
- defining the custom dependencies. (See the section "Old Method of
- Defining Custom Dependencies" for details.) This method still works,
+ directly manipulate the @cus_dep_list array that contains information
+ defining the custom dependencies. (See the section "Old Method of
+ Defining Custom Dependencies" for details.) This method still works,
but is no longer preferred.
A better method is to use the subroutines that allow convenient manipu-
@@ -4575,47 +4575,47 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
The arguments are as follows:
from extension:
- The extension of the file we are converting from (e.g. "fig").
+ The extension of the file we are converting from (e.g. "fig").
It is specified without a period.
to extension:
The extension of the file we are converting to (e.g. "eps"). It
is specified without a period.
- must: If non-zero, the file from which we are converting must exist,
- if it doesn't exist latexmk will give an error message and exit
+ must: If non-zero, the file from which we are converting must exist,
+ if it doesn't exist latexmk will give an error message and exit
unless the -f option is specified. If must is zero and the file
- we are converting from doesn't exist, then no action is taken.
+ we are converting from doesn't exist, then no action is taken.
Generally, the appropriate value of must is zero.
function:
- The name of the subroutine that latexmk should call to perform
- the file conversion. The first argument to the subroutine is
+ The name of the subroutine that latexmk should call to perform
+ the file conversion. The first argument to the subroutine is
the base name of the file to be converted without any extension.
- The subroutines are declared in the syntax of Perl. The func-
- tion should return 0 if it was successful and a nonzero number
+ The subroutines are declared in the syntax of Perl. The func-
+ tion should return 0 if it was successful and a nonzero number
if it failed.
- Naturally add_cus_dep adds a custom dependency with the specified from
- and to extensions. If a custom dependency has been previously defined
- (e.g., in an rcfile that was read earlier), then it is replaced by the
+ Naturally add_cus_dep adds a custom dependency with the specified from
+ and to extensions. If a custom dependency has been previously defined
+ (e.g., in an rcfile that was read earlier), then it is replaced by the
new one.
- The subroutine remove_cus_dep removes the specified custom dependency.
+ The subroutine remove_cus_dep removes the specified custom dependency.
The subroutine show_cus_dep causes a list of the currently defined cus-
tom dependencies to be sent to the screen output.
How custom dependencies are used:
An instance of a custom dependency rule is created whenever latexmk de-
- tects that a run of *latex needs to read a file, like a graphics file,
- whose extension is the to-extension of a custom dependency. Then la-
- texmk examines whether a file exists with the same name, but with the
+ tects that a run of *latex needs to read a file, like a graphics file,
+ whose extension is the to-extension of a custom dependency. Then la-
+ texmk examines whether a file exists with the same name, but with the
- 10 January 2024 70
+ 31 January 2024 70
@@ -4624,45 +4624,45 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- corresponding from-extension, as specified in the custom-dependency.
- If it does, then a corresponding instance of the custom dependency is
- created, after which the rule is invoked whenever the destination file
+ corresponding from-extension, as specified in the custom-dependency.
+ If it does, then a corresponding instance of the custom dependency is
+ created, after which the rule is invoked whenever the destination file
(the one with the to-extension) is out-of-date with respect to the cor-
responding source file.
- To make the new destination file, the Perl subroutine specified in the
+ To make the new destination file, the Perl subroutine specified in the
rule is invoked, with an argument that is the base name of the files in
- question. Simple cases just involve a subroutine invoking an external
- program; this can be done by following the templates below, even by
- those without knowledge of the Perl programming language. Of course,
+ question. Simple cases just involve a subroutine invoking an external
+ program; this can be done by following the templates below, even by
+ those without knowledge of the Perl programming language. Of course,
experts could do something much more elaborate.
- One item in the specification of each custom-dependency rule, labeled
- "must" above, specifies how the rule should be applied when the source
+ One item in the specification of each custom-dependency rule, labeled
+ "must" above, specifies how the rule should be applied when the source
file fails to exist.
- When latex reports that an input file (e.g., a graphics file) does not
+ When latex reports that an input file (e.g., a graphics file) does not
exist, latexmk tries to find a source file and a custom dependency that
can be used to make it. If it succeeds, then it creates an instance of
- the custom dependency and invokes it to make the missing file, after
+ the custom dependency and invokes it to make the missing file, after
which the next pass of latex etc will be able to read the newly created
file.
- Note for advanced usage: The operating system's environment variable
+ Note for advanced usage: The operating system's environment variable
TEXINPUTS can be used to specify a search path for finding files by la-
- tex etc. Correspondingly, when a missing file is reported, latexmk
- looks in the directories specified in TEXINPUTS as well as in the cur-
- rent directory, to find a source file from which an instance of a cus-
+ tex etc. Correspondingly, when a missing file is reported, latexmk
+ looks in the directories specified in TEXINPUTS as well as in the cur-
+ rent directory, to find a source file from which an instance of a cus-
tom dependency can be used to make the missing file.
Function to implement custom dependency, traditional method:
- The function that implements a custom dependency gets the information
+ The function that implements a custom dependency gets the information
on the files to be processed in two ways. The first is through its one
- argument; the argument contains the base name of the source and desti-
+ argument; the argument contains the base name of the source and desti-
nation files. The second way is described later.
- A simple and typical example of code in an initialization rcfile using
+ A simple and typical example of code in an initialization rcfile using
the first method is:
add_cus_dep( 'fig', 'eps', 0, 'fig2eps' );
@@ -4670,18 +4670,18 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
system( "fig2dev -Leps \"$_[0].fig\" \"$_[0].eps\"" );
}
- The first line adds a custom dependency that converts a file with ex-
+ The first line adds a custom dependency that converts a file with ex-
tension "fig", as created by the xfig program, to an encapsulated post-
- script file, with extension "eps". The remaining lines define a sub-
- routine that carries out the conversion. If a rule for converting
- "fig" to "eps" files already exists (e.g., from a previously read-in
- initialization file), the latexmk will delete this rule before making
+ script file, with extension "eps". The remaining lines define a sub-
+ routine that carries out the conversion. If a rule for converting
+ "fig" to "eps" files already exists (e.g., from a previously read-in
+ initialization file), the latexmk will delete this rule before making
the new one.
- 10 January 2024 71
+ 31 January 2024 71
@@ -4690,25 +4690,25 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- Suppose latexmk is using this rule to convert a file "figure.fig" to
- "figure.eps". Then it will invoke the fig2eps subroutine defined in
- the above code with a single argument "figure", which is the basename
- of each of the files (possibly with a path component). This argument
- is referred to by Perl as $_[0]. In the example above, the subroutine
+ Suppose latexmk is using this rule to convert a file "figure.fig" to
+ "figure.eps". Then it will invoke the fig2eps subroutine defined in
+ the above code with a single argument "figure", which is the basename
+ of each of the files (possibly with a path component). This argument
+ is referred to by Perl as $_[0]. In the example above, the subroutine
uses the Perl command system to invoke the program fig2dev. The double
quotes around the string are a Perl idiom that signify that each string
- of the form of a variable name, $_[0] in this case, is to be substi-
+ of the form of a variable name, $_[0] in this case, is to be substi-
tuted by its value.
- If the return value of the subroutine is non-zero, then latexmk will
- assume an error occurred during the execution of the subroutine. In
- the above example, no explicit return value is given, and instead the
- return value is the value returned by the last (and only) statement,
+ If the return value of the subroutine is non-zero, then latexmk will
+ assume an error occurred during the execution of the subroutine. In
+ the above example, no explicit return value is given, and instead the
+ return value is the value returned by the last (and only) statement,
i.e., the invocation of system, which returns the value 0 on success.
- If you use pdflatex, lualatex or xelatex instead of latex, then you
- will probably prefer to convert your graphics files to pdf format, in
- which case you would replace the above code in an initialization file
+ If you use pdflatex, lualatex or xelatex instead of latex, then you
+ will probably prefer to convert your graphics files to pdf format, in
+ which case you would replace the above code in an initialization file
by
add_cus_dep( 'fig', 'pdf, 0, 'fig2pdf' );
@@ -4716,30 +4716,30 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
system( "fig2dev -Lpdf \"$_[0].fig\" \"$_[0].pdf\"" );
}
- Note 1: In the command lines given in the system commands in the above
- examples, double quotes have been inserted around the file names (im-
- plemented by '\"' in the Perl language). They immunize the running of
- the program against special characters in filenames. Very often these
- quotes are not necessary, i.e., they can be omitted. But it is nor-
- mally safer to keep them in. Even though the rules for quoting vary
- between operating systems, command shells and individual pieces of
+ Note 1: In the command lines given in the system commands in the above
+ examples, double quotes have been inserted around the file names (im-
+ plemented by '\"' in the Perl language). They immunize the running of
+ the program against special characters in filenames. Very often these
+ quotes are not necessary, i.e., they can be omitted. But it is nor-
+ mally safer to keep them in. Even though the rules for quoting vary
+ between operating systems, command shells and individual pieces of
software, the quotes in the above examples do not cause problems in the
cases I have tested.
- Note 2: One case in which the quotes are important is when the files
- are in a subdirectory and your operating system is Microsoft Windows.
- Then the separator character for directory components can be either a
- forward slash '/' or Microsoft's more usual backward slash '\'. For-
- ward slashes are generated by latexmk, to maintain its sanity from
- software like MiKTeX that mixes both directory separators; but their
+ Note 2: One case in which the quotes are important is when the files
+ are in a subdirectory and your operating system is Microsoft Windows.
+ Then the separator character for directory components can be either a
+ forward slash '/' or Microsoft's more usual backward slash '\'. For-
+ ward slashes are generated by latexmk, to maintain its sanity from
+ software like MiKTeX that mixes both directory separators; but their
correct use normally requires quoted filenames. (See a log file from a
- run of MiKTeX (at least in v. 2.9) for an example of the use of both
+ run of MiKTeX (at least in v. 2.9) for an example of the use of both
directory separators.)
- Note 3: The subroutines implementing custom dependencies in the exam-
- ples given just have a single line invoking an external program.
- That's the usual situation. But since the subroutines are in the Perl
- language, you can implement much more complicated processing if you
+ Note 3: The subroutines implementing custom dependencies in the exam-
+ ples given just have a single line invoking an external program.
+ That's the usual situation. But since the subroutines are in the Perl
+ language, you can implement much more complicated processing if you
need it.
@@ -4747,7 +4747,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 10 January 2024 72
+ 31 January 2024 72
@@ -4757,19 +4757,19 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
Removing custom dependencies, and when you might need to do this:
- If you have some general custom dependencies defined in the system or
- user initialization file, you may find that for a particular project
- they are undesirable. So you might want to delete the unneeded ones.
- A situation where this would be desirable is where there are multiple
- custom dependencies with the same from-extension or the same to-exten-
- sion. In that case, latexmk might choose a different one from the one
+ If you have some general custom dependencies defined in the system or
+ user initialization file, you may find that for a particular project
+ they are undesirable. So you might want to delete the unneeded ones.
+ A situation where this would be desirable is where there are multiple
+ custom dependencies with the same from-extension or the same to-exten-
+ sion. In that case, latexmk might choose a different one from the one
you want for a specific project. As an example, to remove any "fig" to
"eps" rule you would use:
remove_cus_dep( 'fig', 'eps' );
- If you have complicated sets of custom dependencies, you may want to
- get a listing of the custom dependencies. This is done by using the
+ If you have complicated sets of custom dependencies, you may want to
+ get a listing of the custom dependencies. This is done by using the
line
show_cus_dep();
@@ -4780,29 +4780,29 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
Function implementing custom dependency, alternative methods:
So far the examples for functions to implement custom dependencies have
used the argument of the function to specify the base name of converted
- file. This method has been available since very old versions of la-
+ file. This method has been available since very old versions of la-
texmk, and many examples can be found, e.g., on the web.
- However in later versions of latexmk the internal structure of the im-
+ However in later versions of latexmk the internal structure of the im-
plementation of its "rules" for the steps of processing, including cus-
tom dependencies, became much more powerful. The function implementing
a custom dependency is executed within a special context where a number
- of extra variables and subroutines are defined. Publicly documented
- ones, intended to be long-term stable, are listed below, under the
+ of extra variables and subroutines are defined. Publicly documented
+ ones, intended to be long-term stable, are listed below, under the
heading "Variables and subroutines for processing a rule".
- Examples of their use is given in the following examples, concerning
+ Examples of their use is given in the following examples, concerning
multiple index files and glossaries.
- The only index-file conversion built-in to latexmk is from an ".idx"
- file written on one run of *latex to an ".ind" file to be read in on a
- subsequent run. But with the index.sty package, for example, you can
- create extra indexes with extensions that you configure. Latexmk does
+ The only index-file conversion built-in to latexmk is from an ".idx"
+ file written on one run of *latex to an ".ind" file to be read in on a
+ subsequent run. But with the index.sty package, for example, you can
+ create extra indexes with extensions that you configure. Latexmk does
not know how to deduce the extensions from the information it has. But
- you can easily write a custom dependency. For example if your latex
+ you can easily write a custom dependency. For example if your latex
file uses the command "\newindex{special}{ndx}{nnd}{Special index}" you
- will need to get latexmk to convert files with the extension .ndx to
- .nnd. The most elementary method is to define a custom dependency as
+ will need to get latexmk to convert files with the extension .ndx to
+ .nnd. The most elementary method is to define a custom dependency as
follows:
add_cus_dep( 'ndx', 'nnd', 0, 'ndx2nnd' );
@@ -4813,7 +4813,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 10 January 2024 73
+ 31 January 2024 73
@@ -4822,14 +4822,14 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- Notice the added line compared with earlier examples. The extra line
+ Notice the added line compared with earlier examples. The extra line
gets the extensions "ndx" and "nnd" added to the list of extensions for
generated files; then the extra index files will be deleted by clean-up
operations
- But if you have yet more indexes with yet different extensions, e.g.,
- "adx" and "and", then you will need a separate function for each pair
- of extensions. This is quite annoying. You can use the Run_subst
+ But if you have yet more indexes with yet different extensions, e.g.,
+ "adx" and "and", then you will need a separate function for each pair
+ of extensions. This is quite annoying. You can use the Run_subst
function to simplify the definitions to use a single function:
add_cus_dep( 'ndx', 'nnd', 0, 'dx2nd' );
@@ -4848,38 +4848,38 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
}
push @generated_exts, 'ndx', 'nnd', 'adx', 'and';
- This last example uses the command specification in $makeindex, and so
- any customization you have made for the standard index also applies to
+ This last example uses the command specification in $makeindex, and so
+ any customization you have made for the standard index also applies to
your extra indexes.
Similar techniques can be applied for glossaries.
Those of you with experience with Makefiles, may get concerned that the
- .ndx file is written during a run of *latex and is always later than
+ .ndx file is written during a run of *latex and is always later than
the .nnd last read in. Thus the .nnd appears to be perpetually out-of-
- date. This situation, of circular dependencies, is endemic to latex,
- and is one of the issues that latexmk is programmed to overcome. It
- examines the contents of the files (by use of a checksum), and only
+ date. This situation, of circular dependencies, is endemic to latex,
+ and is one of the issues that latexmk is programmed to overcome. It
+ examines the contents of the files (by use of a checksum), and only
does a remake when the file contents have actually changed.
- Of course if you choose to write random data to the .nnd (or the .aux
- file, etc) that changes on each new run, then you will have a problem.
+ Of course if you choose to write random data to the .nnd (or the .aux
+ file, etc) that changes on each new run, then you will have a problem.
For real experts: See the %hash_calc_ignore_pattern if you have to deal
with such problems.
Old Method of Defining Custom Dependencies:
- In much older versions of latexmk, the only method of defining custom
- dependencies was to directly manipulate the table of custom dependen-
+ In much older versions of latexmk, the only method of defining custom
+ dependencies was to directly manipulate the table of custom dependen-
cies. This is contained in the @cus_dep_list array. It is an array of
- strings, and each string in the array has four items in it, each sepa-
- rated by a space, the from-extension, the to-extension, the "must"
- item, and the name of the subroutine for the custom dependency. These
+ strings, and each string in the array has four items in it, each sepa-
+ rated by a space, the from-extension, the to-extension, the "must"
+ item, and the name of the subroutine for the custom dependency. These
were all defined above.
- 10 January 2024 74
+ 31 January 2024 74
@@ -4889,7 +4889,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
An example of the old method of defining custom dependencies is as fol-
- lows. It is the code in an RC file to ensure automatic conversion of
+ lows. It is the code in an RC file to ensure automatic conversion of
.fig files to .eps files:
push @cus_dep_list, "fig eps 0 fig2eps";
@@ -4897,21 +4897,21 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
return system( "fig2dev -Lps \"$_[0].fig\" \"$_[0].eps\"" );
}
- This method still works, and is almost equivalent to the code given
- earlier that used the add_cus_dep subroutine. However, the old method
- doesn't delete any previous custom-dependency for the same conversion.
+ This method still works, and is almost equivalent to the code given
+ earlier that used the add_cus_dep subroutine. However, the old method
+ doesn't delete any previous custom-dependency for the same conversion.
So the new method is preferable.
Advanced configuration: Some extra resources and advanced tricks
- For most purposes, simple configuration for latexmk along the lines of
- the examples given is sufficient. But sometimes you need something
- harder. In this section, I indicate some extra possibilities. Gener-
- ally to use these, you need to be fluent in the Perl language, since
+ For most purposes, simple configuration for latexmk along the lines of
+ the examples given is sufficient. But sometimes you need something
+ harder. In this section, I indicate some extra possibilities. Gener-
+ ally to use these, you need to be fluent in the Perl language, since
this is what is used in the rc files.
- See also the section DEALING WITH ERRORS, PROBLEMS, ETC. See also the
+ See also the section DEALING WITH ERRORS, PROBLEMS, ETC. See also the
examples in the directory example_rcfiles in the latexmk distributions.
Even if none of the examples apply to your case, they may give you use-
ful ideas
@@ -4920,13 +4920,13 @@ Advanced configuration: Some extra resources and advanced tricks
Utility subroutines
ensure_path( var, values ...)
- The first parameter is the name of one of the system's environ-
- ment variables for search paths. The remaining parameters are
- values that should be in the variable. For each of the value
- parameters, if it isn't already in the variable, then it is
+ The first parameter is the name of one of the system's environ-
+ ment variables for search paths. The remaining parameters are
+ values that should be in the variable. For each of the value
+ parameters, if it isn't already in the variable, then it is
prepended to the variable; in that case the environment variable
- is created if it doesn't already exist. For separating values,
- the character appropriate the the operating system is used --
+ is created if it doesn't already exist. For separating values,
+ the character appropriate the the operating system is used --
see the configuration variable $search_path_separator.
Example:
@@ -4934,18 +4934,18 @@ Advanced configuration: Some extra resources and advanced tricks
ensure_path( 'TEXINPUTS', './custom_cls_sty_files//' );
(In this example, the trailing '//' is documented by TeX systems
- to mean that *latex search for files in the specified directory
+ to mean that *latex search for files in the specified directory
and in all subdirectories.)
- Technically ensure_path works by setting Perl's variable
- $ENV{var}, where var is the name of the target variable. The
- changed value is then passed as an environment variable to any
+ Technically ensure_path works by setting Perl's variable
+ $ENV{var}, where var is the name of the target variable. The
+ changed value is then passed as an environment variable to any
invoked programs.
- 10 January 2024 75
+ 31 January 2024 75
@@ -4956,22 +4956,22 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
Variables and subroutines for processing a rule
A step in the processing is called a rule. One possibility to implement
- the processing of a rule is by a Perl subroutine. This is always the
- case for custom dependencies. Also, for any other rule, you can use a
- subroutine by prefixing the command specification by the word "inter-
+ the processing of a rule is by a Perl subroutine. This is always the
+ case for custom dependencies. Also, for any other rule, you can use a
+ subroutine by prefixing the command specification by the word "inter-
nal" -- see the section FORMAT OF COMMAND SPECIFICATIONS.
- When you use a subroutine for processing a rule, all the possibilities
+ When you use a subroutine for processing a rule, all the possibilities
of Perl programming are available, of course. In addition, some of la-
- texmk's internal variables and subroutines are available. The ones
- listed below are intended to be available to (advanced) users, and
+ texmk's internal variables and subroutines are available. The ones
+ listed below are intended to be available to (advanced) users, and
their specifications will generally have stability under upgrades. Gen-
- erally, the variables should be treated as read-only: Changing their
- values can have bad consequences, since it is liable to mess up the
+ erally, the variables should be treated as read-only: Changing their
+ values can have bad consequences, since it is liable to mess up the
consistency of what latexmk is doing.
- $rule This variable has the name of the rule, as known to latexmk.
- Note that the exact contents of this variable for a given rule
+ $rule This variable has the name of the rule, as known to latexmk.
+ Note that the exact contents of this variable for a given rule
may be dependent on the version of latexmk
$$Psource
@@ -4979,39 +4979,39 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
dollar signs.
$$Pdest
- This gives the name of the main output file if any. Note the
+ This gives the name of the main output file if any. Note the
double dollar signs.
pushd( path ), popd()
- These subroutines are used when it is needed to temporarily
+ These subroutines are used when it is needed to temporarily
change the working directory, as in
pushd( 'some_directory' );
- ... Processing done with 'some_directory' as the working
+ ... Processing done with 'some_directory' as the working
directory
popd()
- They perform exactly the same function as the commands of the
+ They perform exactly the same function as the commands of the
same names in operating system command shells like bash on Unix,
and cmd.exe on the Windows.
rdb_add_generated( file, ... )
This subroutine is to be used in the context of a rule, that is,
- from within a subroutine that is carrying out processing of a
+ from within a subroutine that is carrying out processing of a
rule. Such is the case for the subroutine implementing a custom
- dependency, or the subroutine invoked by using the "internal"
- keyword in the command specification like that in the variable
+ dependency, or the subroutine invoked by using the "internal"
+ keyword in the command specification like that in the variable
$latex.
- Its arguments are a sequence of filenames which are generated
- during the running of the rule. The names might arise from an
+ Its arguments are a sequence of filenames which are generated
+ during the running of the rule. The names might arise from an
analysis of the results of the run, e.g., in a log file, or from
- 10 January 2024 76
+ 31 January 2024 76
@@ -5020,64 +5020,64 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- knowledge of properties of the specific rule. Calling
- rdb_add_generated with these filenames ensures that these files
- are flagged as generated by the rule in latexmk's internal data
+ knowledge of properties of the specific rule. Calling
+ rdb_add_generated with these filenames ensures that these files
+ are flagged as generated by the rule in latexmk's internal data
structures. Basically, no action is taken if the files have al-
ready been flagged as generated.
- A main purpose of using this subroutine is for the situation
- when a generated file is also the source file for some rule, so
- that latexmk can correctly link the dependency information in
+ A main purpose of using this subroutine is for the situation
+ when a generated file is also the source file for some rule, so
+ that latexmk can correctly link the dependency information in
its network of rules.
Note: Unlike some other subroutines in this section, there is no
- argument for a rule for rdb_add_generated. Instead, the subrou-
- tine is to be invoked during the processing of a rule when la-
+ argument for a rule for rdb_add_generated. Instead, the subrou-
+ tine is to be invoked during the processing of a rule when la-
texmk has set up an appropriate context (i.e., appropriate vari-
- ables). In contrast, subroutines with a rule argument can be
+ ables). In contrast, subroutines with a rule argument can be
used also outside a rule context.
rdb_ensure_file( $rule, file )
- This subroutine ensures that the given file is among the source
+ This subroutine ensures that the given file is among the source
files for the specified rule. It is typically used when, during
- the processing of a rule, it is known that a particular extra
+ the processing of a rule, it is known that a particular extra
file is among the dependencies that latexmk should know, but its
- default methods don't find the dependency. Almost always the
- first argument is the name of the rule currently being
+ default methods don't find the dependency. Almost always the
+ first argument is the name of the rule currently being
processed, so it is then appropriate to specify it by $rule.
- For examples of its use, see some of the files in the directory
- example_rcfiles of latexmk's distribution. Currently the cases
- that use this subroutine are bib2gls-latexmkrc, exceltex_la-
- texmkrc and texinfo-latexmkrc. These illustrate typical cases
- where latexmk's normal processing fails to detect certain extra
+ For examples of its use, see some of the files in the directory
+ example_rcfiles of latexmk's distribution. Currently the cases
+ that use this subroutine are bib2gls-latexmkrc, exceltex_la-
+ texmkrc and texinfo-latexmkrc. These illustrate typical cases
+ where latexmk's normal processing fails to detect certain extra
source files.
Note that rdb_ensure_file only has one filename argument, unlike
other subroutines in this section. If you want to apply its ac-
- tion to multiple files, you will need one call to rdb_en-
+ tion to multiple files, you will need one call to rdb_en-
sure_file for each file.
rdb_remove_files( $rule, file, ... )
- This subroutine removes one or more files from the dependency
+ This subroutine removes one or more files from the dependency
list for the given rule.
rdb_remove_generated( file, ... )
This subroutine is to be used in the context of a rule, that is,
- from within a subroutine that is carrying out processing of a
- rule. It performs the opposite action to rdb_add_generated.
- Its effect is to ensure that the given filenames are not listed
- in latexmk's internal data structures as being generated by the
+ from within a subroutine that is carrying out processing of a
+ rule. It performs the opposite action to rdb_add_generated.
+ Its effect is to ensure that the given filenames are not listed
+ in latexmk's internal data structures as being generated by the
rule.
- 10 January 2024 77
+ 31 January 2024 77
@@ -5087,7 +5087,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
rdb_list_source( $rule )
- This subroutine returns the list of source files (i.e., the de-
+ This subroutine returns the list of source files (i.e., the de-
pendency list) for the given rule.
@@ -5095,9 +5095,9 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
rdb_set_source( $rule, @files )
- This subroutine sets the dependency list for the given rule to
+ This subroutine sets the dependency list for the given rule to
be the specified files. Files that are already in the list have
- unchanged information. Files that were not in the list are
+ unchanged information. Files that were not in the list are
added to it. Files in the previous dependency list that are not
in the newly specified list of files are removed from the depen-
dency list.
@@ -5105,18 +5105,18 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
Run_subst( command_spec )
This subroutine runs the command specified by command_spec. The
- specification is a string in the format listed in the section
- "Format of Command Specifications". An important action of the
+ specification is a string in the format listed in the section
+ "Format of Command Specifications". An important action of the
Run_subst is to make substitutions of placeholders, e.g., %S and
- %D for source and destination files; these get substituted be-
+ %D for source and destination files; these get substituted be-
fore the command is run. In addition, the command after substi-
- tution is printed to the screen unless latexmk is running in
+ tution is printed to the screen unless latexmk is running in
silent mode.
Coordinated Setting of Commands for *latex
To set all of $dvilualatex, $hilatex, $latex, $pdflatex, $lualatex, and
- $xelatex to a common pattern, you can use one of the following subrou-
+ $xelatex to a common pattern, you can use one of the following subrou-
tines, std_tex_cmds, alt_tex_cmds, and set_tex_cmds.
To get the standard commands, use
@@ -5124,26 +5124,26 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
&std_tex_cmds;
This results in $latex = 'latex %O %S', and similarly for $dvilualatex,
- $hilatex, $pdflatex, $lualatex, and $xelatex. Note the ampersand in
- the invocation; this indicates to Perl that a subroutine is being
- called. (The use of this subroutine enables you to override previous
- redefinitions of the $latex, etc variables, which might have occurred
+ $hilatex, $pdflatex, $lualatex, and $xelatex. Note the ampersand in
+ the invocation; this indicates to Perl that a subroutine is being
+ called. (The use of this subroutine enables you to override previous
+ redefinitions of the $latex, etc variables, which might have occurred
in an earlier-read rc file.)
- To be able to use the string provided by the -pretex option (if any),
+ To be able to use the string provided by the -pretex option (if any),
you can use
&alt_tex_cmds;
- This results in $latex = 'latex %O %P', etc. Again note the ampersand
- in the invocation; this indicates to Perl that a subroutine is being
+ This results in $latex = 'latex %O %P', etc. Again note the ampersand
+ in the invocation; this indicates to Perl that a subroutine is being
called.
A more general way of specifying the variables is using
- 10 January 2024 78
+ 31 January 2024 78
@@ -5154,9 +5154,9 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
set_tex_cmds( 'CMD_SPEC' );
- Here CMD_SPEC is the command line without the program name. This re-
- sults in $latex = 'latex CMD_SPEC', and similarly for $pdflatex, etc.
- (An ampersand preceding the subroutine name is not necessary here,
+ Here CMD_SPEC is the command line without the program name. This re-
+ sults in $latex = 'latex CMD_SPEC', and similarly for $pdflatex, etc.
+ (An ampersand preceding the subroutine name is not necessary here,
since the parentheses show Perl that a subroutine is being invoked.)
An example that provides the --interaction=batchmode option to the *la-
@@ -5164,52 +5164,52 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
set_tex_cmds( '--interaction=batchmode %O %S' );
- This results in $latex = 'latex --interaction=batchmode %O %S ', etc.
- Note that when '%O' appears after the added option, as here, options
+ This results in $latex = 'latex --interaction=batchmode %O %S ', etc.
+ Note that when '%O' appears after the added option, as here, options
provided on the command line to latexmk can override the supplied one.
A more general command line can be set up by using the placeholder '%C'
in CMD_SPEC. The '%C' is substituted by the basic name of the command,
i.e., whichever of 'latex', 'pdflatex', etc is appropriate. (More than
- one occurrence of '%C' is allowed.) For example to use the develop-
+ one occurrence of '%C' is allowed.) For example to use the develop-
ment/pre-release versions of latex, etc, which have names, 'latex-dev',
'pdflatex-dev', etc, you could use
set_tex_cmds( '%C-dev %O %S' );
This results in $latex = 'latex-dev %O %S', etc. (The pre-release pro-
- grams latex-dev etc are provided in current distributions of TeXLive
+ grams latex-dev etc are provided in current distributions of TeXLive
and MiKTeX.)
Advanced configuration: Using latexmk with make
- This section is targeted only at advanced users who use the make pro-
+ This section is targeted only at advanced users who use the make pro-
gram for complex projects, as for software development, with the depen-
dencies specified by a Makefile.
- Now the basic task of latexmk is to run the appropriate programs to
- make a viewable version of a LaTeX document. However, the usual make
- program is not suited to this purpose for at least two reasons. First
+ Now the basic task of latexmk is to run the appropriate programs to
+ make a viewable version of a LaTeX document. However, the usual make
+ program is not suited to this purpose for at least two reasons. First
is that the use of LaTeX involves circular dependencies (e.g., via .aux
files), and these cannot be handled by the standard make program. Sec-
- ond is that in a large document the set of source files can change
- quite frequently, particularly with included graphics files; in this
- situation keeping a Makefile manually updated is inappropriate and er-
+ ond is that in a large document the set of source files can change
+ quite frequently, particularly with included graphics files; in this
+ situation keeping a Makefile manually updated is inappropriate and er-
ror-prone, especially when the dependencies can be determined automati-
cally. Latexmk solves both of these problems robustly.
- Thus for many standard LaTeX documents latexmk can be used by itself
- without the make program. In a complex project it simply needs to be
- suitably configured. A standard configuration would be to define cus-
- tom dependencies to make graphics files from their source files (e.g.,
- as created by the xfig program). Custom dependencies are latexmk's
+ Thus for many standard LaTeX documents latexmk can be used by itself
+ without the make program. In a complex project it simply needs to be
+ suitably configured. A standard configuration would be to define cus-
+ tom dependencies to make graphics files from their source files (e.g.,
+ as created by the xfig program). Custom dependencies are latexmk's
equivalent of pattern rules in Makefiles.
- Nevertheless there are projects for which a Makefile is appropriate,
+ Nevertheless there are projects for which a Makefile is appropriate,
- 10 January 2024 79
+ 31 January 2024 79
@@ -5220,13 +5220,13 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
and it is useful to know how to use latexmk from a Makefile. A typical
example would be to generate documentation for a software project. Po-
- tentially the interaction with the rest of the rules in the Makefile
+ tentially the interaction with the rest of the rules in the Makefile
could be quite complicated, for example if some of the source files for
a LaTeX document are generated by the project's software.
In this section, I give a couple of examples of how latexmk can be use-
- fully invoked from a Makefile. The examples use specific features of
- current versions of GNU make, which is the default on both linux and
+ fully invoked from a Makefile. The examples use specific features of
+ current versions of GNU make, which is the default on both linux and
OS-X systems. They may need modifications for other versions of make.
The simplest method is simply to delegate all the relevant tasks to la-
@@ -5238,33 +5238,33 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
%.pdf : %.tex FORCE_MAKE
latexmk -pdf -dvi- -ps- $<
- (Note: the last line must be introduced by a tab for the Makefile to
- function correctly!) Naturally, if making try.pdf from its associated
- LaTeX file try.tex were the only task to be performed, a direct use of
- latexmk without a Makefile would normally be better. The benefit of
- using a Makefile for a LaTeX document would be in a larger project,
+ (Note: the last line must be introduced by a tab for the Makefile to
+ function correctly!) Naturally, if making try.pdf from its associated
+ LaTeX file try.tex were the only task to be performed, a direct use of
+ latexmk without a Makefile would normally be better. The benefit of
+ using a Makefile for a LaTeX document would be in a larger project,
where lines such as the above would be only be a small part of a larger
Makefile.
The above example has a pattern rule for making a .pdf file from a .tex
- file, and it is defined to use latexmk in the obvious way. There is a
+ file, and it is defined to use latexmk in the obvious way. There is a
conventional default target named "all", with a prerequisite of
- try.pdf. So when make is invoked, by default it makes try.pdf. The
- only complication is that there may be many source files beyond
+ try.pdf. So when make is invoked, by default it makes try.pdf. The
+ only complication is that there may be many source files beyond
try.tex, but these aren't specified in the Makefile, so changes in them
- will not by themselves cause latexmk to be invoked. Instead, the pat-
- tern rule is equipped with a "phony" prerequisite FORCE_MAKE; this has
- the effect of causing the rule to be always out-of-date, so that la-
- texmk is always run. It is latexmk that decides whether any action is
- needed, e.g., a rerun of pdflatex. Effectively the Makefile delegates
- all decisions to latexmk, while make has no knowledge of the list of
+ will not by themselves cause latexmk to be invoked. Instead, the pat-
+ tern rule is equipped with a "phony" prerequisite FORCE_MAKE; this has
+ the effect of causing the rule to be always out-of-date, so that la-
+ texmk is always run. It is latexmk that decides whether any action is
+ needed, e.g., a rerun of pdflatex. Effectively the Makefile delegates
+ all decisions to latexmk, while make has no knowledge of the list of
source files except for primary LaTeX file for the document. If there
are, for example, graphics files to be made, these must be made by cus-
tom dependencies configured in latexmk.
- But something better is needed in more complicated situations, for ex-
+ But something better is needed in more complicated situations, for ex-
ample, when the making of graphics files needs to be specified by rules
- in the Makefile. To do this, one can use a Makefile like the follow-
+ in the Makefile. To do this, one can use a Makefile like the follow-
ing:
TARGETS = document1.pdf document2.pdf
@@ -5275,7 +5275,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 10 January 2024 80
+ 31 January 2024 80
@@ -5295,53 +5295,53 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
%.pdf : %.fig
fig2dev -Lpdf $< $@
- (Again, the lines containing the commands for the rules should be
+ (Again, the lines containing the commands for the rules should be
started with tabs.) This example was inspired by how GNU automake han-
dles automatic dependency tracking of C source files.
- After each run of latexmk, dependency information is put in a file in
- the .deps subdirectory. The Makefile causes these dependency files to
+ After each run of latexmk, dependency information is put in a file in
+ the .deps subdirectory. The Makefile causes these dependency files to
be read by make, which now has the full dependency information for each
- target .pdf file. To make things less trivial it is specificed that
- two files document1.pdf and document2.pdf are the targets. The depen-
+ target .pdf file. To make things less trivial it is specificed that
+ two files document1.pdf and document2.pdf are the targets. The depen-
dency files are .deps/document1.pdfP and .deps/document2.pdfP.
- There is now no need for the phony prerequisite for the rule to make
+ There is now no need for the phony prerequisite for the rule to make
.pdf files from .tex files. But I have added a rule to make .pdf files
- from .fig files produced by the xfig program; these are commonly used
- for graphics insertions in LaTeX documents. Latexmk is arranged to
+ from .fig files produced by the xfig program; these are commonly used
+ for graphics insertions in LaTeX documents. Latexmk is arranged to
output a dependency file after each run. It is given the -recorder op-
- tion, which improves its detection of files generated during a run of
- pdflatex; such files should not be in the dependency list. The -e op-
- tions are used to turn off all custom dependencies, and to document
- this. Instead the -use-make is used to delegate the making of missing
+ tion, which improves its detection of files generated during a run of
+ pdflatex; such files should not be in the dependency list. The -e op-
+ tions are used to turn off all custom dependencies, and to document
+ this. Instead the -use-make is used to delegate the making of missing
files to make itself.
- Suppose in the LaTeX file there is a command \includegraphics{graph},
- and an xfig file "graph.fig" exists. On a first run, pdflatex reports
- a missing file, named "graph". Latexmk succeeds in making "graph.pdf"
+ Suppose in the LaTeX file there is a command \includegraphics{graph},
+ and an xfig file "graph.fig" exists. On a first run, pdflatex reports
+ a missing file, named "graph". Latexmk succeeds in making "graph.pdf"
by calling "make graph.pdf", and after completion of its work, it lists
"fig.pdf" among the dependents of the file latexmk is making. Then let
- "fig.fig" be updated, and then let make be run. Make first remakes
+ "fig.fig" be updated, and then let make be run. Make first remakes
"fig.pdf", and only then reruns latexmk.
- Thus we now have a method by which all the subsidiary processing is
+ Thus we now have a method by which all the subsidiary processing is
delegated to make.
- Escaping of characters in dependency lists: There are certain special
- characters that need to be escaped when names of files and directories
- containing them appear in a dependency list used by a make program.
+ Escaping of characters in dependency lists: There are certain special
+ characters that need to be escaped when names of files and directories
+ containing them appear in a dependency list used by a make program.
Generally, such special characters are best avoided.
- By default, latexmk does no escaping of this kind, and the user will
+ By default, latexmk does no escaping of this kind, and the user will
have to arrange to deal with the issue separately, if the relevant spe-
- cial characters are used. Note that the rules for escaping depend on
+ cial characters are used. Note that the rules for escaping depend on
which make program is used, and on its version.
- 10 January 2024 81
+ 31 January 2024 81
@@ -5350,20 +5350,20 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- One special case is of spaces, since those are particularly prevalent,
- notably in standard choices of name for a user's home directory. So
- latexmk does provide an option to escape spaces. See the option
+ One special case is of spaces, since those are particularly prevalent,
+ notably in standard choices of name for a user's home directory. So
+ latexmk does provide an option to escape spaces. See the option
-deps_escape=... and the variable $deps_escape for details.
NON_ASCII CHARACTERS IN FILENAMES, RC FILES, ETC
Modern operating systems and file systems allow non-ASCII characters in
- the names of files and directories that encompass the full Unicode
+ the names of files and directories that encompass the full Unicode
range. Mostly, latexmk deals with these correctly. However, there are
- some situations in which there are problems, notably on Microsoft Win-
+ some situations in which there are problems, notably on Microsoft Win-
dows. Prior to version 4.77, latexmk had problems with non-ASCII file-
- names on Windows, even though there were no corresponding problems on
+ names on Windows, even though there were no corresponding problems on
macOS and Linux. These problems are corrected in the present version.
DETAILS TO BE FILLED IN
@@ -5376,38 +5376,38 @@ SEE ALSO
BUGS (SELECTED)
Sometimes a viewer (gv) tries to read an updated .ps or .pdf file after
- its creation is started but before the file is complete. Work around:
+ its creation is started but before the file is complete. Work around:
manually refresh (or reopen) display. Or use one of the other preview-
ers and update methods.
- (The following isn't really a bug, but concerns features of preview-
- ers.) Preview continuous mode only works perfectly with certain pre-
- viewers: Xdvi on UNIX/Linux works for dvi files. Gv on UNIX/Linux
- works for both postscript and pdf. Ghostview on UNIX/Linux needs a
- manual update (reopen); it views postscript and pdf. Gsview under MS-
- Windows works for both postscript and pdf, but only reads the updated
- file when its screen is refreshed. Acroread under UNIX/Linux views
- pdf, but the file needs to be closed and reopened to view an updated
- version. Under MS-Windows, acroread locks its input file and so the
- pdf file cannot be updated. (Remedy: configure latexmk to use suma-
+ (The following isn't really a bug, but concerns features of preview-
+ ers.) Preview continuous mode only works perfectly with certain pre-
+ viewers: Xdvi on UNIX/Linux works for dvi files. Gv on UNIX/Linux
+ works for both postscript and pdf. Ghostview on UNIX/Linux needs a
+ manual update (reopen); it views postscript and pdf. Gsview under MS-
+ Windows works for both postscript and pdf, but only reads the updated
+ file when its screen is refreshed. Acroread under UNIX/Linux views
+ pdf, but the file needs to be closed and reopened to view an updated
+ version. Under MS-Windows, acroread locks its input file and so the
+ pdf file cannot be updated. (Remedy: configure latexmk to use suma-
trapdf instead.)
THANKS TO
- Authors of previous versions. Many users with their feedback, and es-
+ Authors of previous versions. Many users with their feedback, and es-
pecially David Coppit (username david at node coppit.org) who made many
- useful suggestions that contributed to version 3, and Herbert Schulz.
- (Please note that the e-mail addresses are not written in their stan-
+ useful suggestions that contributed to version 3, and Herbert Schulz.
+ (Please note that the e-mail addresses are not written in their stan-
dard form to avoid being harvested too easily.)
AUTHOR
- Current version, by John Collins (Version 4.82a). Report bugs etc to
+ Current version, by John Collins (Version 4.83). Report bugs etc to
his e-mail (jcc8 at psu.edu).
- Released version can be obtained from CTAN:
+ Released version can be obtained from CTAN:
- 10 January 2024 82
+ 31 January 2024 82
@@ -5416,7 +5416,7 @@ AUTHOR
LATEXMK(1) General Commands Manual LATEXMK(1)
- <http://www.ctan.org/pkg/latexmk/>, and from the author's website
+ <http://www.ctan.org/pkg/latexmk/>, and from the author's website
<https://www.cantab.net/users/johncollins/latexmk/>.
Modifications and enhancements by Evan McLean (Version 2.0)
Original script called "go" by David J. Musliner (RCS Version 3.2)
@@ -5473,6 +5473,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 10 January 2024 83
+ 31 January 2024 83
diff --git a/support/splint/INSTALL b/support/splint/INSTALL
index 033877aba0..a8a1634b55 100644
--- a/support/splint/INSTALL
+++ b/support/splint/INSTALL
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -40,7 +40,13 @@ compiled and used. For this purpose, make variables BISON_ROOT and
FLEX_ROOT can be set to the appropriate locations in makefile.loc. The
appropriate versions of bison and flex can be downloaded from
http://ftp.gnu.org/gnu/bison/ and http://flex.sourceforge.net/,
-respectively. The installation instructions in those packages are easy
+respectively. Due to the changes in glibc, the bison that comes with the
+distribution (bison-2.7) needs to be patched first. Uncompress the archive
+(bison-2.7.tar.gz) in some directory, copy bison_patch1 to it and run
+
+ # patch -p0 < bison_patch1
+
+The installation instructions in those packages are easy
to follow (the standard ./configure --prefix=<local bin directory> &&\
make && cp src/bison <local bin directory> && cp -a data/* \
<local bin directory>/share/bison should work).
diff --git a/support/splint/Makefile b/support/splint/Makefile
index b7f0269350..e122cfb363 100644
--- a/support/splint/Makefile
+++ b/support/splint/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2012-2020, Alexander Shibakov
+# Copyright 2012-2024, Alexander Shibakov
# This file is part of SPLinT
#
# SPLinT is free software: you can redistribute it and/or modify
@@ -13,11 +13,16 @@
#
# You should have received a copy of the GNU General Public License
# along with SPLinT. If not, see <http://www.gnu.org/licenses/>.
+SPLINT_EXAMPLES_BASE = expression ld
+SPLINT_EXAMPLES_EXTRA = symbols xxpression
+SPLINT_EXAMPLE_OTHER = $(if $BISON_IS_CRIPPLED,,$SPLINT_EXAMPLES_EXTRA)
-SPLINT_EXAMPLE_OTHER = $(if $BISON_IS_CRIPPLED,,symbols xxpression)
+SPLINT_EXAMPLES_DIRS = ${SPLINT_EXAMPLES_BASE} ${SPLINT_EXAMPLE_OTHER}
+SPLINT_EXAMPLES_DIRS_ALL = ${SPLINT_EXAMPLES_BASE} ${SPLINT_EXAMPLES_EXTRA}
-SPLINT_EXAMPLES_DIRS = expression ld ${SPLINT_EXAMPLE_OTHER}
-SPLINT_EXAMPLES_DIRS_ALL = expression ld symbols xxpression
+# the install directory; should be replaced by the appropriate local directory
+# in makefile.loc
+SPLINT_INSTALL_DIR = /tmp
DO_SUBMAKE = for dir in ${SPLINT_EXAMPLES_DIRS}; do cd ${SPLINT_ROOT}examples/$$dir && ${MAKE} $(1); done
CLEAN_SUBMAKE = for dir in ${SPLINT_EXAMPLES_DIRS_ALL}; do cd ${SPLINT_ROOT}examples/$$dir && ${MAKE} $(1); done
@@ -31,12 +36,28 @@ lists: tex/*.sty
perl scripts/cslist.pl $^ > cseqs.lst
manual:
- cd ${SPLINT_ROOT}cweb && ${MAKE} splint.pdf
+ cd ${SPLINT_ROOT}cweb && ${MAKE} docs
docs:
- cd ${SPLINT_ROOT}cweb && ${MAKE} splint.pdf && ${MAKE} ssffo.pdf
+ cd ${SPLINT_ROOT}cweb && ${MAKE} docs
$(call DO_SUBMAKE,docs)
+# install a stand alone version of all the parsers in the package
+
+install: all
+ @cp ${SPLINT_ROOT}tex/*.sty ${SPLINT_INSTALL_DIR}/tex/
+ @cp ${SPLINT_ROOT}cweb/*.tok ${SPLINT_INSTALL_DIR}/cweb/
+ @cp -a ${SPLINT_ROOT}other/ ${SPLINT_INSTALL_DIR}/other/
+ @cp ${SPLINT_XPTABLES} ${SPLINT_INSTALL_DIR}/cweb/
+ @cp ${SPLINT_XLTABLES} ${SPLINT_INSTALL_DIR}/cweb/
+ @cd ${SPLINT_ROOT}examples/ld && ${MAKE} install
+
+uninstall:
+ @cd ${SPLINT_ROOT}examples/ld && ${MAKE} uninstall
+ @rm -f ${SPLINT_INSTALL_DIR}/tex/*
+ @rm -f ${SPLINT_INSTALL_DIR}/cweb/*
+ @rm -rf ${SPLINT_INSTALL_DIR}/other/texmf/
+
# clean will erase all automatically generated files in the current directory
clean: clean_core
diff --git a/support/splint/README b/support/splint/README
index 9665ca2e7c..56e01e55d4 100644
--- a/support/splint/README
+++ b/support/splint/README
@@ -1,6 +1,6 @@
To make the licensing part clear, SPLinT is GPL v.~3:
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -38,7 +38,6 @@ cweb/* - executables and documentation:
fo.w - parser for the flex grammar
so.w - lexer for the flex grammar
np.w - scanner and parser for token names
- ssffo.w - lexer for state grabbing
mkeparser.w - parser output `driver'
mkscanner.w - lexer output `driver'
splint.w - documentation
@@ -51,7 +50,7 @@ tex/* - \TeX\ macros
xarithm.sty - expandable arithmetic for parsing macros
grabstates.sty - macros for state grabbing
*tokenset.sty - token typesetting definitions
- gindex.sty -generic indexing macros
+ gindex.sty - generic indexing macros
dcols.sty - multiple column output
noweb.sty - noweb style references (local within a page)
limbo.sty - limbo section macros
@@ -85,4 +84,4 @@ VERSION - the current version
The most recent version of this software can be downloaded at
- math.tntech.edu/alex/splint.tar.bz2
+ www.shibakov.org/splint/archive/splint.tar.bz2
diff --git a/support/splint/TODO b/support/splint/TODO
index 95e44e9459..ad8473cb6d 100644
--- a/support/splint/TODO
+++ b/support/splint/TODO
@@ -4,22 +4,32 @@ o Typo and style fixes
... sometime in the future
-o Change generic macro names (such as \table, \symstream, etc) to something more specific
+* Add an `install_macros' (or the like) to makefile.loc to automate macro installation
+ for the parser generated by this package (the parsers and lexers are not separated
+ into different directories, the new targets are `install' and `uninstall')
+* Fix the double column output macros to correctly process the \mark commands (every time
+ an output routine runs it resets the \topmark; this needs to be corrected)
+* Change generic macro names (such as \table) to something more specific (\table will stay
+ but most macro names are unique enough)
+* Add a macro to index arbitrary strings in an arbitrary domain (store the string in a
+ global array and pass the pointer to the indexing macros)
+* Reimplement the action for the bison parser using lists
* Add \bgrulealign and \egrulealign macros to align rules across sections (a simple way to
implement this is given as an example in the included package, a more flexible method would
have to wait)
* Rewrite yytexlex.sty for better \TeX\ pretty printing macros (* the new macros are still
not ideal but are very unlikely to change in the near future)
- o Change the name of the namespace (currently 'index') used by the \TeXx macros to avoid
- confusion with the special '[index]' namespace used by the parser for inserted symbols
- (like an empty right hand side and implicit terms)
+ * Change the name of the namespace (currently `index') used by the \TeXx macros to avoid
+ confusion with the special `[index]' namespace used by the parser for inserted symbols
+ (like an empty right hand side and implicit terms) (`index' has been changed to `index:tex')
o Develop a 'loose' parsing scheme for \TeX\ macros by requiring some macros to
follow stricter rules
* Rewrite limbo.sty to provide a more logical structure (* several changes have been implemented)
* Add indexing features to \TeXx macros (* there is a mechanism to do this)
+o Optimize \yyinput to minimize expansion in the most common cases
o Change CWEB macros so that \pdfoutput=0 does not cause conflicts (this is a bug in cwebmac.tex)
-o Change the support for named references so that the driver generates references while outputting
- the 'action switch' (using code like stack_depth = $$ - $[name])
+* Change the support for named references so that the driver generates references while outputting
+ the 'action switch' (using code like stack_depth = $$ - $[name];* done using `lazy' postprocessing)
... very remote future
diff --git a/support/splint/VERSION b/support/splint/VERSION
index 9084fa2f71..f0bb29e763 100644
--- a/support/splint/VERSION
+++ b/support/splint/VERSION
@@ -1 +1 @@
-1.1.0
+1.3.0
diff --git a/support/splint/cweb/Makefile b/support/splint/cweb/Makefile
index 1c3b4d6bc3..f80b6b5886 100644
--- a/support/splint/cweb/Makefile
+++ b/support/splint/cweb/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2012-2020, Alexander Shibakov
+# Copyright 2012-2024, Alexander Shibakov
# This file is part of SPLinT
#
# SPLinT is free software: you can redistribute it and/or modify
@@ -13,17 +13,30 @@
#
# You should have received a copy of the GNU General Public License
# along with SPLinT. If not, see <http://www.gnu.org/licenses/>.
+docs: splint.pdf
include ../makefile.inc
-all: ${SPLINT_PTABLES} ${SPLINT_LTABLES}
+tables: ${SPLINT_PTABLES} ${SPLINT_LTABLES}
-b%out: mkeparser.c b%.c
- ${CC} ${BISON_STATE} -DPARSER_FILE=\"$(lastword $^)\" -DYYPARSE_PARAMETERS= -o $@ $<
+bdout bbout bgout \
+bfout:b%out: mkeparser.c b%.c
+ ${CC} ${BISON_STATE} -DPARSER_FILE=\"$(lastword $^)\" -DYYPARSE_PARAMETERS= -o $@ $<
-b%.yy: bo.x
+bd.yy bg.yy \
+bb.yy bf.yy:b%.yy: bo.u bo.m
${CTANGLE} $<
+bd.yx bg.yx \
+bb.yx bf.yx:%.yx: %.yy
+ ${BRACK} --replace-only --bison-link=bo.m $*.yy $*.yx
+
+bd.y bg.y \
+bb.y bf.y:%.y: %.yx
+ cp -f $^ $@
+
+byytab.tex gyytab.tex \
+dyytab.tex fyytab.tex:\
%yytab.tex: b%out
${SPLINT_DRIVER_DIR}/$< --optimize-actions $@
@@ -33,15 +46,13 @@ ltab.tex: ltout
ltout: mkscanner.c lo_states.h lo.c
${CC} -DLEXER_FILE=\"$(lastword $^)\" -o $@ $<
-ssffo.ll lo.ll: \
-%.ll: %.x
+lo.ll: %.ll: %.x
${CTANGLE} $< && rm $(patsubst %.x, %.c, $^)
fil.ll: so.x
${CTANGLE} $< && rm $(patsubst %.x, %.c, $^)
-fip.yy rep.yy rap.yy \
-ddp.yy: fo.x
+fip.yy rep.yy rap.yy ddp.yy: fo.x
${CTANGLE} $< && rm $(patsubst %.x, %.c, $^)
# flex parser
@@ -52,19 +63,21 @@ fil.c: fil.l
fil_out: mkscanner.c fil_states.h fil.c
${CC} -DLEXER_FILE=\"$(lastword $^)\" -o $@ $<
-fil_states.h: so.tex lstab.tex byytab.tex
- ${PDFTEX} $<
-
filtab.tex: fil_out
${SPLINT_DRIVER_DIR}/$< --optimize-actions --optimize-tables $@
-fip.c rep.c rap.c \
-ddp.c:%.c: %.y
+# state parsing for the \flex\ input scanner
+
+fil_states.h: so.tex ssfstab.tex ddptab.tex ${SPLINT_ROOT}tex/grabstates.sty
+ @echo "Generating state list for the flex lexer ..."
+ @${PDFTEX} $<
+
+fip.c rep.c rap.c ddp.c:%.c: %.y
${BISON} -o $@ $<
fip_out rap_out \
-ddp_out rep_out:%_out: mkeparser.c %.c
- ${CC} ${BISON_STATE} -DPARSER_FILE=\"$(lastword $^)\" -DYYPARSE_PARAMETERS= -o $@ $<
+ddp_out rep_out:%_out: mkeparser.c %.c
+ ${CC} ${BISON_STATE} -DPARSER_FILE=\"$(lastword $^)\" -DYYPARSE_PARAMETERS= -o $@ $<
fiptab.tex raptab.tex \
ddptab.tex reptab.tex:%tab.tex: %_out
@@ -74,10 +87,11 @@ so.tex: so.x
${CWEAVE} $<
fo.tex: fo.x
- ${CWEAVE} $<
+ -${CWEAVE} $<
-fo.tok: fo.tex ltab.tex byytab.tex
- ${TEX} ${MODEBOOTSTRAP} \\input $<
+fo.tok: fo.tex ltab.tex dyytab.tex bo.tok
+ @echo "Generating token equivalences for flex input parser ..."
+ @${TEX} ${MODEBOOTSTRAP} \\input $<
lo.c: lo.l
${FLEX} -o $@ $<
@@ -86,10 +100,24 @@ mkscanner.c mkeparser.c: \
%.c: %.w
${CTANGLE} $<
+# bootstrap flex parser
+
+ssfs.ll: so.x
+ ${CTANGLE} $< && rm $(patsubst %.x, %.c, $^)
+
+ssfs.c: ssfs.l
+ ${FLEX} -o $@ $<
+
+ssfs_out: mkscanner.c ssfs.c
+ ${CC} -DLEXER_FILE=\"$(lastword $^)\" -o $@ $<
+
+ssfstab.tex: ssfs_out
+ ${SPLINT_DRIVER_DIR}/$< --optimize-actions --optimize-tables $@
+
# name parser
-smallp_out: mkeparser.c small_parser.c
- ${CC} ${BISON_STATE} -DPARSER_FILE=\"$(lastword $^)\" -DYYPARSE_PARAMETERS= -o $@ $<
+smallp_out: mkeparser.c small_parser.c
+ ${CC} ${BISON_STATE} -DPARSER_FILE=\"$(lastword $^)\" -DYYPARSE_PARAMETERS= -o $@ $<
smalll_out: mkscanner.c small_lexer.c
${CC} -DLEXER_FILE=\"$(lastword $^)\" -o $@ $<
@@ -105,71 +133,56 @@ small_lexer.ll: np.x
@${CTANGLE} $<
bo.tex: bo.x
- -${CWEAVE} -x $<
+ -${CWEAVE} -x $< 1>/dev/null
splint.tex \
splint.idx \
splint.scn: splint.x bo.x lo.x fo.x so.x np.x common.w bs.w \
fk.w philosophy.w checklists.w references.w alphas.hx
- -${CWEAVE} $<
+ -${CWEAVE} $< 1>/dev/null
alphas.hx:
- ${MISCCW} --alpha-list --alpha-length=1 $@
-
-ssffo.tex \
-ssffo.idx ssffo.scn: ssffo.x
- ${CWEAVE} $<
+ @${MISCCW} --alpha-list --alpha-length=1 $@
bo.tok: bo.tex ltab.tex byytab.tex
- ${TEX} ${MODEBOOTSTRAP} \\input $<
-
-ssffo.pdf: %.pdf: ${SPLINT_DOC_PREREQS_XREF}
- ${PDFTEX} $*.tex
-
-ssffo.dvi: %.dvi: ${SPLINT_DOC_PREREQS_XREF}
- ${TEX} $*.tex
+ @echo "Making token equivalence tables for the bison parser ..."
+ @${TEX} ${MODEBOOTSTRAP} \\input $< #1>/dev/null
-splint.gdx: %.gdx: ${SPLINT_DOC_PREREQS_XREF}
+splint.gdx splint.aux: ${SPLINT_DOC_PREREQS_XREF}
@echo "Making the bison and TeX indices ..."
- ${PDFTEX} $*.tex
+ @${PDFTEX} splint.tex #1>/dev/null
+
+# remove the implicit rule before building the main index
%.gdy: %.gdx
splint.gdy: splint.gdx
${BINDX} --fine $^ $@
-splint.xxr: %.xxr: ${SPLINT_DOC_PREREQS_XREF}
- @echo "Generating the cross references ..."
- ${PDFTEX} $*.tex
-
-splint.pdf: %.pdf: ${SPLINT_DOC_PREREQS_XREF} %.gdy %.xxr
- ${PDFTEX} \\input $*.tex && touch $*.gdy && touch $*.pdf
+splint.pdf: %.pdf: ${SPLINT_DOC_PREREQS_XREF} %.gdy %.aux
+ @echo "Generating SPLinT documentation (splint.pdf) ..."
+ while test "`diff --new-file splint.pdf /tmp/splint.pdf`"; do \
+ echo "Files differ" && mv splint.pdf /tmp/; \
+ ${PDFTEX} \\input $*.tex && touch $*.gdy && touch $*.pdf; \
+ done
splint.dvi: %.dvi: ${SPLINT_DOC_PREREQS_XREF} %.gdy
- ${TEX} $*.tex && touch $*.gdy && touch $*.dvi && rm $*.xxr && rm $*.ftn
-
-${SPLINT_ROOT}tex/btokenset.sty: # stupid make weirdness
- @
+ @${TEX} $*.tex && touch $*.gdy && touch $*.dvi && rm $*.ftn
# state parsing
-lstabout: mkscanner.c ssffo.c
- ${CC} -DLEXER_FILE=\"$(lastword $^)\" -o $@ $<
-
-lstab.tex: lstabout
- ${SPLINT_DRIVER_DIR}/$< --optimize-actions $@
-
lo.tex: lo.x
${CWEAVE} $<
-lo_states.h: lo.tex lstab.tex byytab.tex
- ${PDFTEX} $<
+lo_states.h: lo.tex ssfstab.tex ddptab.tex ${SPLINT_ROOT}tex/grabstates.sty
+ @echo "Generating state list for the bison lexer ..."
+ @${PDFTEX} $<
# clean will erase all automatically generated files in the current directory
clean: clean_core
- -rm -f ctablesout b?out ltout smallp_out \
- smalll_out lstabout fil_out fip_out rep_out rap_out ddp_out
+ -rm -f ctablesout b?out ltout smallp_out /tmp/splint.pdf \
+ smalll_out ssfs_out fil_out fip_out rep_out rap_out ddp_out
include ${SPLINT_ROOT}makefile.loc
@@ -178,9 +191,9 @@ include ${SPLINT_ROOT}makefile.loc
# of bo.tok, lo.tex, eventually leading to remaking of splint.pdf;
# the special target below tells make to treat bg.yy as if it were not an intermediate file
-.PRECIOUS: %.yy bo.tok fo.tok %.ll b%.y splint.gdx splint.xxr
+.PRECIOUS: %.yy bo.tok fo.tok %.ll b%.y splint.gdx
# the files below appear as targets but are really intermediaries for other files
-.INTERMEDIATE: smallp_out smalll_out lstabout ltout fil_out \
+.INTERMEDIATE: smallp_out smalll_out ssfs_out ltout fil_out \
fip_out rep_out rap_out ddp_out splint.gdx
diff --git a/support/splint/cweb/bo.w b/support/splint/cweb/bo.w
index fe7bf59f52..630602559e 100644
--- a/support/splint/cweb/bo.w
+++ b/support/splint/cweb/bo.w
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% Copyright 2002-2014 Free Software Foundation, Inc.
% This file is part of SPLinT
%
@@ -24,6 +24,20 @@
\fi
@**The \eatone{bison}\bison\ parser stack.
+{%
+\newdimen\halfhsize
+\newdimen\preskip
+\halfhsize=\hsize
+\divide\halfhsize by2
+\def\mypar{%
+\parshape 6
+0pt \hsize
+0pt \hsize
+0pt \hsize
+0pt \hsize
+0pt \hsize
+\halfhsize \halfhsize
+}%
The input language for \bison\ loosely follows the {\sc BNF} notation, with
a few enhancements, such as the syntax for {\em actions}, to implement
the syntax-directed translation@^syntax-directed translation@>, as
@@ -33,8 +47,8 @@ On the one hand, the language is relatively easy to handle, is
nearly whitespace agnostic, on the other, a primitive parser is
required for some basic setup even at a very early stage, so the
design must be carefully thought out. This {\em
-bootstrapping\/}@^bootstrapping@> step is discussed in more details
-later on.
+bootstrapping\/}@^bootstrapping@> step is discussed in more detail
+further down.
The path chosen here is by no means optimal. What it lacks in
efficiency, though, it may amply gain in practicality, as we reuse the
@@ -47,13 +61,13 @@ As was described in the
stacks \endlink\fi@^parser stack@> above, to pretty print a variety
of grammar fragments, one may employ
a {\em parser stack\/} derived from the original grammar. The most
-natural and common unit of a \bison\ grammar is a set of
+common unit of a \bison\ grammar is a set of
productions. It is thus natural to begin our discussion of the parsers
in the \bison\ stack with the parser responsible for processing
individual rules.
-One should note that the productions below are not concerned with the
-typesetting of the grammar. Instead this task is delegated to the
+One should note that the productions below are not directly concerned with the
+typesetting of the grammar. Instead, this task is delegated to the
macros in \.{yyunion.sty} and its companions. The first pass of the
parser merely constructs an `executable abstract syntax tree' (or
\EAST\footnote{One may argue that \EAST\ is still merely a syntactic
@@ -61,7 +75,11 @@ construct requiring a proper macro framework for its execution and
should be called a `weak executable syntax tree' or \WEST. This
acronym extravagnza is heading south so we shall stop here.}) which
can serve very diverse purposes: from collecting token declarations in
-the boostrapping pass to typesetting the grammar rules.
+the boostrapping pass to typesetting the grammar rules. This allows for a
+great deal of flexibility in where and when the parsing results are
+used. A clear divide between the parsing step and the typesetting step
+provides for better debugging facilities, as well as more reliable
+macro design.
It would be impossible to completely avoid the question of the visual
presentation of the \bison\ input, however. It has already been
@@ -72,14 +90,23 @@ variety of typographic devices that take advantage of the meaningful
positioning of text on the page: skips, indents, etc. Therefore, the
macros for \bison\ pretty printing trade a number of \bison\ syntax
elements (such as \.{\yl}, \.{;}, action braces, etc.) for the careful
-placement of each fragment of the input on the page.
+placement of each fragment of the input on the page. The syntax tree
+generated by the parsers in the \bison\ stack is not fully {\em faithful\/} in
+that it does not preserve every syntactic element from the original input.
+Thus, e.g.\ optional semicolons (\prodstyle{semi.opt}) never find their way into
+the tree and their original position is lost\footnote{The opposite is true about
+the {\em whitespace\/} the parser sees (or {\em stash\/} as it is called
+in this document): all of it is carefully packaged into streams, as was described
+\locallink{parser.streams}earlier\endlink.}.
Let's take a short break for a broad overview of the input file.
The basic structure is that of an ordinary \bison\ file that produces
plain \Cee\ output. The \Cee\ actions, however, are programmed to output \TeX.
The \bison\ sections (separated by \.{\%\%} (shown (pretty printed)
as \prodstyle{\%\%} below)) appear between the successive dotted lines.
-
+A number of sections are empty, since the generated \Cee\ is rather trivial.
+}%
+%\checktabletrue
@(bg.yy@>=
@G Switch to generic mode.
%{@> @<Grammar parser \Cee\ preamble@> @=%}
@@ -94,11 +121,13 @@ as \prodstyle{\%\%} below)) appear between the successive dotted lines.
%%
@g
-@ Bootstrap\namedspot{bootstrapping}@^bootstrapping@> mode is next.
-The reason for a separate bootstrap parser is to
-collect the minimal amount of information to `spool up' the `production'
-parsers. To understand the mechanics and the reasons behind it, consider what happens
-following a declaration such as \.{\%token TOKEN "token"}
+@*1 Bootstrapping.
+%\checktablefalse
+Bootstrap\namedspot{bootstrapping}@^bootstrapping@> parser is
+defined next. The purpose of the bootstrapping parser is to
+collect a minimal amount of information to `spool up' the `production'
+parsers. To understand its inner workings and the reasons behind it,
+consider what happens following a declaration such as \.{\%token TOKEN "token"}
(or, as it would be typeset by the macros in this package
`\prodstyle{\%token} \.{TOKEN} \.{token}'; see the index entries for
more details)%
@@ -119,8 +148,8 @@ equivalences or find some other means to find out the numerical values
of the tokens.
One approach is to parse the file containing the {\it declarations\/}
-and extract the equivalences between the names from it. This is the
-function of the bootstrap parser. Since the lexer is reused, some
+and extract the equivalences between the names from it. This is
+precisely the function of the bootstrap parser. Since the lexer is reused, some
token values need to be known in advance (and the rest either ignored
or replaced by some `made up' values). These tokens are `hard coded'
into the parser file generated by \bison\ and output using a special
@@ -145,25 +174,43 @@ which it would need a parser for a subset of \bison\ syntax $\ldots$
it is a genuine `chicken and egg' problem). Hence the need for
`bootstrap'. Once a functional parser for a large enough subset of the
\bison\ input grammar is operational, {\it it\/} can be used to pair
-up the token names.
-
-The second function of the bootstrap parser is to collect information
-about the scanner's states. The mechanism is slightly different for
-states. While the token equivalences are collected purely in
-`\TeX\ mode', the bootstrap parser collects all the state names into a
+up the token names. The bootstrap parser is not strictly minimal in that
+it is also capable of parsing the \prodstyle{\%nterm} declarations.
+This ability is not utilized by the parsers in \splint, however (nor
+is the accompanying bootstrap lexer designed to output the
+\prodstyle{\%nterm} tokens), and was added for the scenarios other
+than bootstrapping.
+
+The second, perhaps even more important function of the bootstrap process
+is to collect information about the scanner's states. The mechanism
+is slightly different from that for token definition gathering.
+While the token equivalences are collected purely in
+`\TeX\ mode', the bootstrap mode parser collects all the state names into a
special \Cee\ header file. The reason is simple: unlike the token
values, the numerical values of the scanner states are not passed to
-the `driver' program in any data structure and are instead defined as
-ordinary macros. The header file is the information the `driver' file
-needs to output the state values.
-
-An additional subtlety in the case of the state value output is that the
-main lexer for the \bison\ grammar utilizes states extensively and thus
-cannot be easily used with the bootstrap parser before the state
-values are known. The solution is to substitute a very simple scanner barely
-capable of lexing state declarations. Such a scanner is implemented
-in \.{ssffo.w} (the somewhat cryptic name stands for `{\bf s}imple {\bf s}canner
-{\bf f}or {\bf f}lex {\bf o}ptions').
+the `driver' program in any data structure (the |yytname| array) and are instead defined as
+ordinary (\Cee) macros. The header file is the information the `driver' file
+needs to output the state values for the use by the lexer.
+
+Naturally, to accomplish their task, the lexer and the parser emplyed in
+state gathering need the state and token information, as well. Fortunately,
+the parser is a subset of the \flex\ input parser that does not define
+any `string' names for it tokens. Similarly, the lexer collects all the necessary
+tokens in the \flexsnstyle{INITIAL} state\footnote{An additional subtlety is
+the necessity to gracefully handle (and, in some cases, cause) the multiple
+possible {\em failures\/} for which the lexer redefines \inlineTeXx{/yyBEGIN}\
+to fail immediately when attempting to switch states. Note that the bootstrap
+mode parser looks at sections other than those where the declarations reside
+and must fail quickly and quietly in such cases.}.
+
+To reiterate a point made in the middle of this section, the bootstrapping
+process described here is necessary to `spool up' the \bison\ and \flex\ input parsers.
+A simpler procedure may be followed while designing other custom parsers where
+the programmer uses, say the full \bison\ parser to collect information about
+the token equivalences (whether such information is needed to make the parser operational
+or just to facilitate the typesetting of the token names). By adding custom
+`bootstrapping' macros to the ones defined in \.{yyunion.sty}, a number of different
+preprocessing tasks can be accomplished.
@(bb.yy@>=
@G Switch to generic mode.
%{
@@ -177,13 +224,11 @@ in \.{ssffo.w} (the somewhat cryptic name stands for `{\bf s}imple {\bf s}canner
%%
@> @<Fake start symbol for bootstrap grammar@> @=
@> @<Parser bootstrap productions@> @=
- @> @<\flex\ options parser productions@> @=
- @> @<List of symbols@> @=
- @> @<Definition of \prodstyle{symbol}@> @=
%%
@g
-@ The prologue parser is responsible for parsing various grammar
+@*1 Prologue and full parsers.
+The prologue parser is responsible for parsing various grammar
declarations as well as parser options.
@(bd.yy@>=
@G Switch to generic mode.
@@ -201,7 +246,12 @@ declarations as well as parser options.
@ The full \bison\ input parser is used when a complete \bison\ file is
expected. It is also capable of parsing a `skeleton' of such a file,
-similar to the one that follows this paragraph.
+similar to the one that follows this paragraph. As a stopgap measure,
+the skeleton of a \flex\ scanner is also parsed by this parser, as they have
+an almost identical structure. This is not a perfect arrangement, however, since
+it precludes one from putting the constructs that this parser does not
+recognize into the outline. To give an example, one cannot put \flex\ specific
+options into such `skeleton'.
@(bf.yy@>=
@G Switch to generic mode.
%{@> @<Grammar parser \Cee\ preamble@> @=%}
@@ -227,7 +277,7 @@ parsing algorithm to be used (provided the supplied grammar is in the
appropriate class): {\sc LALR}($n$), {\sc LR}($n$), {\sc GLR}, etc.
The default is to use the {\sc LALR}($1$) algorithm (with the
corresponding assumption about the grammar) which can also be set
-explicitly by putting
+explicitly by putting\gtextidx{\bison\ options example}{bison options example}{\bisonidxdomain}%
\medskip
\beginprod
\%define lr.type canonical-lr
@@ -259,7 +309,6 @@ special bootstrapping parser as explained earlier.
\iffalse
\checktrailingstashtrue % see what is left at the end
\checktabletrue % display the table
- \let\stashnext\stashnextwithnothing % collect the stash expanded
\fi
@<Tokens and types for the grammar parser@>=
@G
@@ -289,7 +338,6 @@ the original parser.
\iffalse
\checktrailingstashfalse
\checktablefalse
- \let\stashnext\stashnextwithnothingnx
\fi
@<Global Declarations@>=
@G
@@ -339,17 +387,6 @@ the original parser.
%token <param> PERCENT_PARAM "%param";
@g
-@ \namedspot{flex.options}Extra tokens for typesetting \flex\ state
-declarations and options are declared in addition to the ones that a
-standard \bison\ parser recognizes. This extension of the original
-grammar has become unnecessary with the addition of the \flex\ input
-parser(s) but is left as part of the extended grammar for convenience and
-`historical' reasons.
-@<Tokens and...@>=
-@G
-%token FLEX_OPTION FLEX_STATE_X FLEX_STATE_S
-@g
-
@*1 Grammar productions.
We are ready to describe the top levels of the parse tree. The first
`sub parser' we consider is a `full' parser, that is the parser that
@@ -373,10 +410,15 @@ parser on the stack.
@t}\vb{\inline}{@>
input:
prologue_declarations
- "%%" grammar epilogue.opt {@> TeX_( "/getsecond{/yy(3)}/to/table" ); @=}
+ "%%" grammar epilogue.opt {@> @<Extract the grammar from a full file@> @=}
;
@g
+@ @<Extract the grammar from a full file@>=
+ @[TeX_( "/finishlist{/expandafter/yyfirstoftwo/the/yy(3)}" );@]@; /* complete the list */
+ @[TeX_( "/table/expandafter{/romannumeral0" );@]@;
+ @[TeX_( " /executelistat{/expandafter/yyfirstoftwo/the/yy(3)}{0}}" );@]@;
+
@ Another subgrammar deals with the syntax of isolated \bison\ rules. This is
the most commonly used `subparser' since a rules cluster is the most
natural `unit' to include in a \CWEB\ file.
@@ -384,10 +426,15 @@ natural `unit' to include in a \CWEB\ file.
@G
@t}\vb{\inline}{@>
input:
- grammar epilogue.opt {@> TeX_( "/getsecond{/yy(1)}/to/table" ); @=}
+ grammar epilogue.opt {@> @<Save the grammar@> @=}
;
@g
+@ @<Save the grammar@>=
+ @[TeX_( "/finishlist{/expandafter/yyfirstoftwo/the/yy(1)}" );@]@; /* complete the list */
+ @[TeX_( "/table/expandafter{/romannumeral0" );@]@;
+ @[TeX_( " /executelistat{/expandafter/yyfirstoftwo/the/yy(1)}{0}}" );@]@;
+
@ The bootstrap parser has a very narrow set of goals: it is concerned
with \prodstyle{\%token} declarations only in
order to supply the token information to the lexer (since, as noted
@@ -395,7 +442,7 @@ above, such information is not kept in the |yytname| array).
The parser can also parse \prodstyle{\%nterm} declarations but the
bootstrap lexer ignores the \prodstyle{\%nterm} token, since the
\bison\ grammar does not use one.
-It also extends the syntax of a \prodstyle{grammar\_declaration} by allowing a
+It also extends the syntax of a \prodstyle{grammar_declaration} by allowing a
declaration with or without a semicolon at the end (the latter is only
allowed in the prologue). This works since the token declarations have
been carefully separated from the rest of the grammar in different
@@ -410,11 +457,8 @@ input:
@t}\vb{\resetf}{@>
grammar_declarations:
symbol_declaration semi.opt {@> @<Carry on@> @=}
-| flex_declaration semi.opt {@> @<Carry on@> @=}
| grammar_declarations
symbol_declaration semi.opt {@> TeX_( "/yy0{/the/yy(1)/the/yy(2)}" ); @=}
-| grammar_declarations
- flex_declaration semi.opt {@> TeX_( "/yy0{/the/yy(1)/the/yy(2)}" ); @=}
;
@t}\vb{\inline\flatten}{@>
semi.opt: {} | ";" {};
@@ -429,35 +473,42 @@ is undocumented so we supply an explicit action in each case.
@ Next comes a subgrammar for processing prologue declarations. Finer
differentiation is possible but the `subparsers' described here work
pretty well and impose a mild style on the grammar writer. Note that
-these roles are not part of the official \bison\ input grammar and are
+these rules are not part of the official \bison\ input grammar and are
added to make the typesetting of `file outlines' (e.g.~|@(bb.yy@>|
above) possible.
@<Fake start symbol for prologue grammar@>=
@G
@t}\vb{\inline}{@>
input:
- prologue_declarations epilogue.opt {@> TeX_( "/getsecond{/yy(1)}/to/table" ); @=}
+ prologue_declarations epilogue.opt {@> @<Save the declarations@> @=}
| prologue_declarations
- "%%" "%%" EPILOGUE {@> TeX_( "/getsecond{/yy(1)}/to/table" ); @=}
+ "%%" "%%" EPILOGUE {@> @<Save the declarations@> @=}
| prologue_declarations
- "%%" "%%" {@> TeX_( "/getsecond{/yy(1)}/to/table" ); @=}
+ "%%" "%%" {@> @<Save the declarations@> @=}
;
@g
+@ @<Save the declarations@>=
+ @[TeX_( "/finishlist{/expandafter/yyfirstoftwo/the/yy(1)}" );@]@; /* complete the list */
+ @[TeX_( "/table/expandafter{/romannumeral0" );@]@;
+ @[TeX_( " /executelistat{/expandafter/yyfirstoftwo/the/yy(1)}{0}}" );@]@;
+
@ {\it Declarations: before the first \prodstyle{\%\%}}. We are now
-ready to deal with the specifics of the declarations themselves. The
-\.{\\grammar} macro is a `structure', whose first `field' is the
-grammar itself, whereas the second carries the type of the last
-declaration added to the grammar.
+ready to deal with the specifics of the declarations themselves.
@<Parser prologue productions@>=
@G
prologue_declarations:
- {@> TeX_( "/yy0{/nx/grammar{}{/nx/empty}}" ); @=}
+ {@> @<Start with an empty list of declarations@> @=}
| prologue_declarations
prologue_declaration {@> @<Attach a prologue declaration@> @=}
;
@g
+@ @<Start with an empty list of declarations@>=
+ @[TeX_( "/initlist{/prologuedeclarationsprefix prologue_declarations}" );@]@;
+ @[TeX_( "/yy0{{/prologuedeclarationsprefix prologue_declarations}{/nx/empty}}" );@]@;
+ @[TeX_( "/edef/prologuedeclarationsprefix{./prologuedeclarationsprefix}" );@]@;
+
@ @<Attach a prologue declaration@>=
@<Attach a productions cluster@>@;
@@ -466,6 +517,7 @@ prologue. The scanner returns the `stream pointers' for all the
keywords so the declaration `structures' pass on those pointers to the
grammar list. The original syntax has been left intact even though for
the purposes of this parser some of the inline rules are unnecessary.
+\eraselocalformattrue
@<Parser prologue productions@>=
@G
prologue_declaration:
@@ -474,10 +526,13 @@ prologue_declaration:
| "%<flag>" {@> TeX_( "/yy0{/nx/optionflag/the/yy(1)}" ); @=}
| "%define" variable value {@> TeX_( "/yy0{/nx/vardef{/the/yy(2)}{/the/yy(3)}/the/yy(1)}" ); @=}
| "%defines" {@> TeX_( "/yy0{/nx/optionflag{defines}{}/the/yy(1)}" ); @=}
-| "%defines" STRING {@> @[TeX_( "/toksa{defines}" );@]@+@<Prepare one parametric option@> @=}
+| "%defines" STRING {@> @t}\vb{\stashed{\Xmark prologue.decls:\Xmark}}{@> @=
+ @> @[TeX_( "/toksa{defines}" );@]@+@<Prepare one parametric option@> @=}
| "%error-verbose" {@> TeX_( "/yy0{/nx/optionflag{error verbose}{}/the/yy(1)}" ); @=}
-| "%expect" INT {@> @[TeX_( "/toksa{expect}" );@]@+@<Prepare a generic one parametric option@> @=}
-| "%expect-rr" INT {@> @[TeX_( "/toksa{expect-rr}" );@]@+@<Prepare a generic one parametric option@> @=}
+| "%expect" INT {@> @t}\vb{\stashed{\Xmark prologue.decls(g):\Xmark}}{@> @=
+ @> @[TeX_( "/toksa{expect}" );@]@+@<Prepare a generic one parametric option@> @=}
+| "%expect-rr" INT {@> @t}\vb{\stashed{\Xmark prologue.decls(g):\Xmark}}{@> @=
+ @> @[TeX_( "/toksa{expect-rr}" );@]@+@<Prepare a generic one parametric option@> @=}
| "%file-prefix" STRING {@> @[TeX_( "/toksa{file prefix}" );@]@+@<Prepare one parametric option@> @=}
| "%glr-parser" {@> TeX_( "/yy0{/nx/optionflag{glr parser}{}/the/yy(1)}" ); @=}
| "%initial-action" "{...}" {@> TeX_( "/yy0{/nx/initaction/the/yy(2)}" ); @=}
@@ -485,12 +540,14 @@ prologue_declaration:
| "%name-prefix" STRING {@> @[TeX_( "/toksa{name prefix}" );@]@+@<Prepare one parametric option@> @=}
| "%no-lines" {@> TeX_( "/yy0{/nx/optionflag{no lines}{}/the/yy(1)}" ); @=}
| "%nondeterministic-parser" {@> TeX_( "/yy0{/nx/optionflag{nondet. parser}{}/the/yy(1)}" ); @=}
-| "%output" STRING {@> @[TeX_( "/toksa{output}" );@]@+@<Prepare one parametric option@> @=}
+| "%output" STRING {@> @t}\vb{\stashed{\Xmark prologue.decls:\Xmark}}{@> @=
+ @> @[TeX_( "/toksa{output}" );@]@+@<Prepare one parametric option@> @=}
@t}\vb{\flatten}{@>
-| "%param" {}
+| "%param" {@> @t}\vb{\stashed{\rm (we simply return pointers below)}}{@> @=}
params {@> TeX_( "/yy0{/nx/paramdef{/the/yy(3)}/the/yy(1)}" ); @=}
@t}\vb{\fold}{@>
-| "%require" STRING {@> @[TeX_( "/toksa{require}" );@]@+@<Prepare one parametric option@> @=}
+| "%require" STRING {@> @t}\vb{\stashed{\Xmark prologue.decls:\Xmark}}{@> @=
+ @> @[TeX_( "/toksa{require}" );@]@+@<Prepare one parametric option@> @=}
| "%skeleton" STRING {@> @[TeX_( "/toksa{skeleton}" );@]@+@<Prepare one parametric option@> @=}
| "%token-table" {@> TeX_( "/yy0{/nx/optionflag{token table}{}/the/yy(1)}" ); @=}
| "%verbose" {@> TeX_( "/yy0{/nx/optionflag{verbose}{}/the/yy(1)}" ); @=}
@@ -507,69 +564,22 @@ params:
@ This is a typical parser action: encapsulate the `type' of the
construct just parsed and attach some auxiliary info, in this case the
stream pointers.
+\eraselocalformatfalse
+\smallskip
+\rulereferencex{\showlastactionfalse}{\nx\inline\nx\flatten}{prologue.decls}
+\smallskip
+\noindent The productions above are typical examples.
@<Prepare one parametric option@>=
@[TeX_( "/yy0{/nx/oneparametricoption{/the/toksa}{/nx/stringify/the/yy(2)}/the/yy(1)}" );@]@;
-@ @<Prepare a generic one parametric option@>=
+@ A variation on the theme above where the parameter is not a \prodstyle{STRING}.
+\smallskip
+\rulereferencex{\showlastactionfalse}{\nx\inline\nx\flatten}{prologue.decls(g)}
+\smallskip
+\noindent A sample of the rules to which the code below applies are given above.
+@<Prepare a generic one parametric option@>=
@[TeX_( "/yy0{/nx/oneparametricoption{/the/toksa}{/the/yy(2)}/the/yy(1)}" );@]@;
-@ These rules handle extra declarations to typeset \flex\ options and
-declarations. These are not part of the \bison\ syntax but their
-structure is similar enough that they can be included in the
-grammar. As was pointed out \locallink{flex.options}earlier \endlink
-the addition of the \flex\ input parser to \splint\ made this
-extension of the original \bison\ grammar obsolete but it was kept as
-part of the extended grammar for convenience and `historical'
-reasons. The convenience results from simplifying the bootstrap
-procedure by using a single parser.
-@<Parser prologue productions@>=
-@G
-prologue_declaration:
- flex_declaration {@> @<Carry on@> @=}
-;
-@g
-@<\flex\ options parser productions@>@;
-
-@ The syntax of \flex\ options was extracted from \flex\ documentation
-so it is not guaranteed to be correct.
-@<\flex\ options parser productions@>=
-@G
-flex_declaration:
- FLEX_OPTION flex_option_list {@> @<Define \flex\ option list@> @=}
-| flex_state symbols.1 {@> @<Define \flex\ states@> @=}
-;
-
-flex_state:
- FLEX_STATE_X {@> TeX_( "/yy0{/nx/flexxstatedecls/the/yy(1)}" ); @=}
-| FLEX_STATE_S {@> TeX_( "/yy0{/nx/flexsstatedecls/the/yy(1)}" ); @=}
-;
-
-flex_option_list:
- flex_option {@> @<Carry on@> @=}
-| flex_option_list flex_option {@> @<Add a \flex\ option@> @=}
-;
-
-flex_option:
- ID {@> TeX_( "/yy0{/nx/flexoptionpair{/nx/idit/the/yy(1)}{}}" ); @=}
-| ID "=" symbol {@> TeX_( "/yy0{/nx/flexoptionpair{/nx/idit/the/yy(1)}{/the/yy(3)}}" ); @=}
-;
-@g
-
-@ @<Define \flex\ option list@>=
- @[TeX_( "/yy0{/nx/flexoptiondecls{/the/yy(2)}/the/yy(1)}" );@]@;
-
-@ @<Define \flex\ states@>=
- @[TeX_( "/getfirst{/yy(1)}/to/toksa" );@]@;
- @[TeX_( "/getsecond{/yy(1)}/to/toksb" );@]@;
- @[TeX_( "/getthird{/yy(1)}/to/toksc" );@]@;
- @[TeX_( "/yy0{/the/toksa{/the/yy(2)}{/the/toksb}{/the/toksc}}" );@]@;
-
-@ @<Add a \flex\ option@>=
- @[TeX_( "/getsecond{/yy(2)}/to/toksa" );@]@; /* the identifier */
- @[TeX_( "/getfourth{/toksa}/to/toksb" );@]@; /* the format pointer */
- @[TeX_( "/getfifth{/toksa}/to/toksc" );@]@; /* the stash pointer */
- @[TeX_( "/yy0{/the/yy(1)/nx/hspace{/the/toksb}{/the/toksc}/the/yy(2)}" );@]@;
-
@ {\it Grammar declarations}. These declarations can appear in both
the prologue and the rules sections. Their treatment is very similar to
the prologue-only options.
@@ -578,7 +588,8 @@ the prologue-only options.
grammar_declaration:
precedence_declaration {@> @<Carry on@> @=}
| symbol_declaration {@> @<Carry on@> @=}
-| "%start" symbol {@> @[TeX_( "/toksa{start}" );@]@+@<Prepare a generic one parametric option@> @=}
+| "%start" symbol {@> @t}\vb{\stashed{\Xmark prologue.decls(g):\Xmark}}{@> @=
+ @> @[TeX_( "/toksa{start}" );@]@+@<Prepare a generic one parametric option@> @=}
| code_props_type "{...}" generic_symlist {@> @<Assign a code fragment to symbols@> @=}
| "%default-prec" {@> TeX_( "/yy0{/nx/optionflag{default prec.}{}/the/yy(1)}" ); @=}
| "%no-default-prec" {@> TeX_( "/yy0{/nx/optionflag{no default prec.}{}/the/yy(1)}" ); @=}
@@ -617,7 +628,6 @@ union_name:
grammar_declaration:
"%union" union_name "{...}" {@> @<Prepare union definition@> @=}
;
-
symbol_declaration:
"%type" TAG symbols.1 {@> @<Define symbol types@> @=}
;
@@ -637,6 +647,7 @@ tag.opt:
{@> TeX_( "/yy0{}" ); @=}
| TAG {@> @<Prepare a \prodstyle{TAG}@> @=}
;
+@t}\vb{\insertraw{\beginfoldedsections}}{@>
@g
@ @<Prepare union definition@>=
@@ -644,6 +655,7 @@ tag.opt:
@ @<Define symbol types@>=
@[TeX_( "/yy0{/nx/typedecls{/nx/tagit/the/yy(2)}{/the/yy(3)}/the/yy(1)}" );@]@;
+@t}\endfoldedsections{@>
@ @<Define symbol precedences@>=
@[TeX_( "/getthird{/yy(1)}/to/toksa" );@]@; /* format pointer */
@@ -677,7 +689,9 @@ symbol_declaration:
@ {\it Just like \prodstyle{symbols.1} but accept \prodstyle{INT} for
the sake of \POSIX}. Perhaps the only point worth mentioning here is
-the inserted separator (\.{\\hspace\{}$p_0$\.{\}\{}$p_1$\.{\}},
+the inserted separator (%
+\texrefx{/hspace}{other}%
+\.{\{}$p_0$\.{\}\{}$p_1$\.{\}},
typeset as
|TeXa("/hspace"); TeXao(@t\TeXlit"\{\hbox{$p_0$}\}\{\hbox{$p_1$}\}\hbox{$\!$}"@>);|).
@q A string "..." is a syntactic unit in \CWEB\ so it is impossible@>
@@ -700,22 +714,16 @@ symbol.prec:
;
@g
-@ {\it One or more symbols to be \prodstyle{\%type}'d}. The |@<List of
-symbols@>| rules below are reused in the boostrap parser and are put
-in a separate section for this reason.
+@ {\it One or more symbols to be \prodstyle{\%type}'d}.
@<Parser common productions@>=
- @<List of symbols@>@;
-
-@ @<List of symbols@>=
@G
+%type <intval> symbols.1 symbol;
+
symbols.1:
symbol {@> @<Carry on@> @=}
-| symbols.1 symbol {@> TeX_( "/yy0{/the/yy(1)/nx/hspace{0}{0}/the/yy(2)}" ); @=}
+| symbols.1 symbol {@> TeX_( "/yy0{/the/yy(1)/nx/hspace{0}{0}/the$[symbol]}" ); @=}
;
-@g
-@ @<Parser common productions@>=
-@G
generic_symlist:
generic_symlist_item {@> @<Carry on @> @=}
| generic_symlist generic_symlist_item {@> TeX_( "/yy0{/the/yy(1)/nx/hspace{0}{0}/the/yy(2)}" ); @=}
@@ -772,42 +780,50 @@ grammar:
;
@g
-@ {\it As a \bison\ extension, one can use the grammar declarations in the
+@*2 Rules syntax. {\it As a \bison\ extension, one can use the grammar declarations in the
body of the grammar}. What follows is the syntax of the right hand
-side of a grammar rule.
+side of a grammar rule. The type declarations for various non-terminals are used exclusively
+by the postprocessor whenever the `native' \bison\ term references are used (see elsewhere
+for details).
@<Parser grammar productions@>=
@G
+%type <intval> rhs id_colon named_ref.opt rhses.1 "|";
+
rules_or_grammar_declaration:
- rules {@> @<Add a productions cluster@> @=}
+ rules {@> @<Form a productions cluster@> @=}
| grammar_declaration ";" {@> @<Carry on@> @=}
| error ";" {@> TeX_( "/errmessage{parsing error!}" ); @=}
;
@t}\vb{\flatten\inline}{@>
rules:
- id_colon named_ref.opt {@> TeX_( "/relax" ); @=}
+ id_colon named_ref.opt {@> @t}\vb{\stashed{\rm (we simply return pointers below)}}{@> @=}
rhses.1 {@> @<Complete a production@> @=}
;
@t}\vb{\resetf}{@>
rhses.1[o]:
rhs {@> @<Start the right hand side@> @=}
-| rhses.1[a] "|"[b] {@> @<Insert local formatting@> @=}[c]
+| rhses.1[rhses] "|"[mid] {@> @<Insert local formatting@> @=}[c]
rhs[d] {@> @<Add a right hand side to a production@> @=}
-| rhses.1 ";" {@> @<Add an optional semicolon@> @=}
+| rhses.1 ";" {@> @<Carry on@> @=}
;
@g
@ The next few actions describe what happens when a left hand side is
attached to a rule.
@<Start with a production cluster@>=
- @[TeX_( "/getfirst{/yy(1)}/to/toksa" );@]@;
- @[TeX_( "/yy0{/nx/grammar{/the/yy(1)}{/the/toksa}}" );@]@;
+ @[TeX_( "/initlist{/grammarprefix grammar}" );@]@;
+ @[TeX_( "/getfirst{/yy(1)}/to/toksa" );@]@; /* type of the last addition */
+ @[TeX_( "/yy0{{/grammarprefix grammar}{/the/toksa}}" );@]@;
+ @[TeX_( "/appendtolistx{/grammarprefix grammar}{/the/yy(1)}" );@]@;
+ @[TeX_( "/edef/grammarprefix{./grammarprefix}" );@]@;
@ @<Attach a productions cluster@>=
- @[TeX_( "/getthird{/yy(1)}/to/toksa" );@]@; /* type of the last rule */
- @[TeX_( "/getsecond{/yy(1)}/to/toksc" );@]@; /* accumulated rules */
+ @[TeX_( "/getsecond{/yy(1)}/to/toksa" );@]@; /* type of the last rule */
+ @[TeX_( "/getfirst{/yy(1)}/to/toksc" );@]@; /* pointer to the accumulated rules */
@[TeX_( "/getfirst{/yy(2)}/to/toksb" );@]@; /* type of the new rule */
@[TeX_( "/let/default/positionswitchdefault" );@]@;
@[TeX_( "/switchon{/the/toksb}/in/positionswitch" );@]@; /* determine the position of the first token in the group */
+ @; /* determine the spacing between sections */
@[TeX_( "/edef/next{/the/toksa}" );@]@;
@[TeX_( "/edef/default{/the/toksb}" );@]@; /* reuse \.{\\default} */
@[TeX_( "/ifx/next/default" );@]@;
@@ -818,9 +834,10 @@ attached to a rule.
@[TeX_( " /let/default/separatorswitchdefaultneq" );@]@;
@[TeX_( " /switchon{/the/toksa}/in/separatorswitchneq" );@]@;
@[TeX_( "/fi" );@]@;
- @[TeX_( "/yy0{/nx/grammar{/the/toksc/the/postoks/the/toksd/the/yy(2)}{/the/toksb}}" );@]@;
+ @[TeX_( "/appendtolistx{/the/toksc}{/the/postoks/the/toksd/the/yy(2)}" );@]@;
+ @[TeX_( "/yy0{{/the/toksc}{/the/toksb}}" );@]@;
-@ @<Add a productions cluster@>=
+@ @<Form a productions cluster@>=
@[TeX_( "/getsecond{/yy(1)}/to/toksa" );@]@; /* \.{\\prodheader} */
@[TeX_( "/getsecond{/toksa}/to/toksb" );@]@; /* \.{\\idit} */
@[TeX_( "/getfourth{/toksb}/to/toksc" );@]@; /* format stream pointer */
@@ -828,90 +845,152 @@ attached to a rule.
@[TeX_( "/getthird{/yy(1)}/to/toksb" );@]@; /* \.{\\rules} */
@[TeX_( "/yy0{/nx/oneproduction{/the/toksa/the/toksb}{/the/toksc}{/the/toksd}}" );@]@;
-@ @<Complete a production@>=
- @[TeX_( "/getfourth{/yy(1)}/to/toksa" );@]@; /* format stream pointer */
- @[TeX_( "/getfifth{/yy(1)}/to/toksb" );@]@; /* stash stream pointer */
- @[TeXb( "/yy0{/nx/pcluster{/nx/prodheader{/the/yy(1)}{/the/yy(2)}" );@]@;
- @[TeXao( "{/the/toksa}{/the/toksb}}{/the/yy(4)}}" );@]@;
+@ Several productions for a given nonterminal are collected in a `production cluster':
+\smallskip
+\thisrulereference{}%
+\smallskip
+\noindent The inline action does nothing at the moment and is omitted in the main text.
+@<Complete a production@>=
+ @[TeX_( "/getfourth{$[id_colon]}/to/toksa" );@]@; /* format stream pointer */
+ @[TeX_( "/getfifth{$[id_colon]}/to/toksb" );@]@; /* stash stream pointer */
+ @[TeX_( "/finishlist{/the$[rhses.1]}" );@]@; /* complete the list of rules */
+ @[TeXb_( "/yy0{/nx/pcluster{/nx/prodheader{/the$[id_colon]}{/the$[named_ref.opt]}" );@]@;
+ @[TeXfo_( " {/the/toksa}{/the/toksb}}{/nx/rules{/nx/executelist{/the$[rhses.1]}}}}" );@]@;
@ It is important to format the right hand side properly, since we
would like to indicate that an action is inlined by an
-indentation. The `format' of the \.{\\rhs} `structure' includes the
-stash pointers and a `boolean' to indicate whether the right hand side ends
-with an action. Since the action can be implicit, this decision has to
-be postponed until, say, a semicolon is seen.
-No formatting or stash pointers are added for implicit actions.
+indentation.
+\smallskip
+\thisrulereference{\nx\inline\nx\flatten}
+\smallskip
+\noindent The `layout' of the \texref{/rhs} `structure' includes
+a `boolean' to indicate whether the right hand side ends with an action. Since
+the action can be implicit, this decision has to be postponed until, say,
+a semicolon is seen. No formatting or stash pointers are added for implicit actions.
@<Start the right hand side@>=
- @[TeX_( "/rhsbool{/yy(1)}/to/toksa /the/toksa" );@]@;
- @[TeX_( "/getthird{/yy(1)}/to/toksb" );@]@; /* the format pointer */
- @[TeX_( "/getfourth{/yy(1)}/to/toksc" );@]@; /* the stash pointer */
+ @[TeX_( "/initlist{/rhsesoneprefix rhses1}" );@]@;
+ @[TeX_( "/yy0{/rhsesoneprefix rhses1}" );@]@;
+ @[TeX_( "/edef/rhsesoneprefix{./rhsesoneprefix}" );@]@;
+ @[TeX_( "/rhsbool{$[rhs]}/to/toksa /the/toksa" );@]@;
@[TeX_( "/ifrhsfull" );@]@;
- @[TeX_( " /yy0{/nx/rules{/the/yy(1)}{/the/toksb}{/the/toksc}}" );@]@;
- @[TeX_( "/else" );@]@; /* it does not end with an action, fake one */
- @[TeX_( " /rhscont{/yy(1)}/to/toksa" );@]@; /* rules */
- @[TeX_( " /edef/next{/the/toksa}" );@]@;
- @[TeX_( " /ifx/next/empty" );@]@;
- @[TeX_( " /toksa{/emptyterm}" );@]@;
- @[TeX_( " /fi" );@]@;
- @[TeXb( " /yy0{/nx/rules{/nx/rhs{/the/toksa/nx/rarhssep{0}{0}" );@]@;
- @[TeXfo( " /nx/actbraces{}{}{0}{0}/nx/bdend}{}{/nx/rhsfulltrue}}{/the/toksb}{/the/toksc}}" );@]@;
+ @[TeX_( " /appendtolistx{/the/yyval}{/the$[rhs]}" );@]@;
+ @[TeX_( "/else" );@]@; /* right hand side does not end with an action, fake one */
+ @[TeX_( " /rhscont{$[rhs]}/to/toksa" );@]@; /* rules */
+ @[TeX_( " /yytoksempty/toksa{/toksa{/emptyterm}}{}" );@]@;
+ @[TeXb( " /appendtolistx{/the/yyval}{/nx/rhs{/the/toksa/nx/rarhssep{0}{0}" );@]@;
+ @[TeXfo( " /nx/actbraces{}{}{0}{0}/nx/bdend}{}{/nx/rhsfulltrue}}" );@]@;
@[TeX_( "/fi" );@]@;
@ Using standard notation, here is what the middle action
-does.
+does. The part of the rule this action applies to is given below for
+reference. This action may have been omitted altogether but it serves
+as a good illustration of how `inline actions' work.
+\smallskip
+\rulereference{\nx\inline\nx\flatten}{|@<Insert local formatting@>|}%
+\smallskip
+\noindent The terms are counted from left (deeper in the value stack) to right
+(on top of the value stack) although \texref{/yy(0)}
+(which is the same as \texref{/yyval}) is the {\it right\/}most term,
+i.e.\ the implicit action itself.
+
+What the parser sees at this point
+are the first two terms on the stack (i.e.\ \prodstyle{rhses.1} and
+{\toksa\expandafter{\expandafter'\vl'}\expandafter\prodtstyle\expandafter{\the\toksa}})
+and is ready to make a reduction which will push
+the value of the term corresponding to the inline action (i.e.\ |@<Insert
+local formatting@>|) on the stack.
+
+The way \bison\ does this is by
+introducing a new grammar term (named \prodstyle{bogus_inline} for some integer
+$n$) for each inline action and adding a new rule that reduces an
+empty sequence of terms to \prodstyle{bogus_inline}. The action for this rule is
+the inline action. In our case this would read as
+\begingroup
+\medskip
+\def\skipalltoks#1\par{}
+\def\preparsefallbacktext#1{%
+ \let\postparse\relax
+ \message{#1}%
+ \skipalltoks
+}
+
+\extendswitch\multicharswitch\at\stashed\by\PB\to\multicharswitchadjust
+\let\multicharswitch\multicharswitchadjust
+\def\textproductionsetup{%
+ \rulereftextproductionsetup
+ \let\acharswitch\texcharadjust
+ \let\onecharswitch\texcsadjust
+}%
+\beginprod
+\inline\flatten
+ bogus_inline:
+ \{|@<Insert local formatting@>|\}
+\endprod
+\medskip
+\endgroup
+\noindent$\ldots$except the parser knows what the state of the stack is at this
+point and thus the code inside |@<Insert local formatting@>| can now refer
+to the terms on the stack as described above.
@<Old `Insert local formatting'@>=
- @[TeX_( "/rhscont{/yy(1)}/to{/yy(0)}" );@]@;
- @[TeX_( "/yy0{/the/yy(0)/nx/midf/the/yy(2)}" );@]@;
+ @[TeX_( "/appendtolistx{/the/yy(1)}{/nx/midf/the/yy(2)}" );@]@;
@ However, if the length of the rule preceding the inline action
-is not known a different way of accessing the stack is necessary.
-@<Insert local formatting@>=
+is not known to the parser in advance (as is the case for the parsers
+\splint\ generates using any version of \bison\ that is $\geq3.0$)
+a different way of accessing the stack is necessary. This notation is also more
+natural as it counts the terms from right to left, i.e.\ `into the depths
+of the stack' (for example \texref{/bb2\{\}} is the register holding the value
+of~\prodstyle{rhses1}). It is worth noting that in this case
+\texref{/yy(0)} and \texref{/yyval} are still the same
+register, the one that holds the value of the term corresponding to
+the inline action itself.
+@<Newer `Insert local formatting'@>=
@[TeX_( "/bb2{/toksa}/bb1{/toksb}" );@]@;
- @[TeX_( "/rhscont{/toksa}/to{/yy(0)}" );@]@;
- @[TeX_( "/yy0{/the/yy(0)/nx/midf/the/toksb}" );@]@;
-
-@ @<Old `Add a right hand side to a production'@>=
- @[TeX_( "/rhsbool{/yy(4)}/to/toksa /the/toksa" );@]@;
- @[TeX_( "/ifrhsfull" );@]@;
- @[TeX_( " /yy0{/nx/rules{/the/yy(3)/nx/rrhssep/the/yy(2)/the/yy(4)}/the/yy(2)}" );@]@;
- @[TeX_( "/else" );@]@;
- @[TeX_( " /rhscont{/yy(4)}/to/toksa" );@]@;
- @[TeX_( " /edef/next{/the/toksa}" );@]@;
- @[TeX_( " /ifx/next/empty" );@]@;
- @[TeX_( " /toksa{/emptyterm}" );@]@;
- @[TeX_( " /fi" );@]@;
- @[TeXb( " /yy0{/nx/rules{/the/yy(3)/nx/rrhssep/the/yy(2)" );@]@;
- @[TeXf( " /nx/rhs{/the/toksa/nx/rarhssep{0}{0}" );@]@; /* streams have already been grabbed */
- @[TeXfo( " /nx/actbraces{}{}{0}{0}/nx/bdend}{}{/nx/rhsfulltrue}}/the/yy(2)}" );@]@;
- @[TeX_( "/fi" );@]@;
+ @[TeX_( "/appendtolistx{/the/toksa}{/nx/midf/the/toksb}" );@]@;
-@ No pointers are provided for an {\it implicit\/} action. Processing a set of rules involves a large number of
-reexpansions. This seems to be a good place to use an array to store {\sc AST} nodes ({\let\writetexidxentry\writetextxtidxentry
-\def\texnspace{texline}\def\texispace{index}\inlineTeXx{/astarray}}). While
+@ Finally, using the `native' way of referring to term values results
+in the most natural code. In this case, one can mix numeric and
+symbolic references for both implicit and explicit rules.
+@<Insert local formatting@>=
+ @[TeX_( "/appendtolistx{/the$[rhses]}{/nx/midf/the$[mid]}" );@]@;
+
+@ Productions are collected in a `productions cluster' (not an official term) by the
+following action:
+\smallskip
+\thisrulereference{\nx\inline\nx\flatten}
+\smallskip\noindent
+As can be seen in the code below, no pointers are provided for an {\it implicit\/}
+action (since there are no tokens associated with it).
+
+Processing a set of rules involves a large number of
+reexpansions. This seems to be a good place to use a list to store the nodes
+(see \.{yycommon.sty} for details on list macros). While
providing a noticeable speed up, this technique significantly
complicates the debugging of the grammar. In particular, inspecting a
-parsed table supplies very little information if the {\sc AST} nodes are not
+parsed table supplies very little information if the list not
expanded. The macros in \.{yyunion.sty} provide a special debugging
namespace where the expansion of the parser produced control sequences
may be modified to safely expand the generated table.
+
+The code below relies on the inline action |@<Insert local formatting@>| above
+to store the relevant information from \texref{/yy(1)} (corresponding to
+\prodstyle{rhses1}) in \texref{/yy(3)} (which is
+the inline action `term' \inlineactionsymbol\ in the production above).
+@q Note that one cannot use \prodstyle{...} above to display \inlineactionsymbol@>
+@q since the \prodstyle{...} macro relies on the name parser. See yyunion.sty @>
+@q for further details about the special terms like this. @>
@<Add a right hand side to a production@>=
@[TeX_( "/rhsbool{/yy(4)}/to/toksa /the/toksa" );@]@;
@[TeX_( "/ifrhsfull" );@]@;
- @[TeX_( " /yypushx{/the/yy(3)/nx/rrhssep/the/yy(2)/the/yy(4)}/on/astarray" );@]@;
+ @[TeX_( " /appendtolistx{/the/yy(1)}{/nx/rrhssep/the/yy(2)/the/yy(4)}" );@]@;
@[TeX_( "/else" );@]@;
@[TeX_( " /rhscont{/yy(4)}/to/toksa" );@]@;
- @[TeX_( " /edef/next{/the/toksa}" );@]@;
- @[TeX_( " /ifx/next/empty" );@]@;
- @[TeX_( " /toksa{/emptyterm}" );@]@;
- @[TeX_( " /fi" );@]@;
- @[TeXb( " /yypushx{/the/yy(3)/nx/rrhssep/the/yy(2)" );@]@;
+ @[TeX_( " /yytoksempty/toksa{/toksa{/emptyterm}}{}" );@]@;
+ @[TeXb( " /appendtolistx{/the/yy(1)}{/nx/rrhssep/the/yy(2)" );@]@;
@[TeXf( " /nx/rhs{/the/toksa/nx/rarhssep{0}{0}" );@]@; /* streams have already been grabbed */
- @[TeXfo( " /nx/actbraces{}{}{0}{0}/nx/bdend}{}{/nx/rhsfulltrue}}/on/astarray" );@]@;
+ @[TeXfo( " /nx/actbraces{}{}{0}{0}/nx/bdend}{}{/nx/rhsfulltrue}}" );@]@;
@[TeX_( "/fi" );@]@;
- @[TeX_( "/yy0{/nx/rules{/astarraylastcs}/the/yy(2)}" );@]@;
-
-@ @<Add an optional semicolon@>=
- @<Carry on@>@;
+ @[TeX_( "/yy0{/the/yy(1)}" );@]@;
@ @<Tokens and types...@>=
@G
@@ -942,33 +1021,46 @@ named_ref.opt:
;
@g
-@ \saveparseoutputfalse
+@ The simplest form of the right hand side is an empty rule. In this case the parser
+must make a reduction based on the lookahead only (or the current state), i.e.\ no
+tokens are consumed from the input.
+\saveparseoutputfalse
@<Make an empty right hand side@>=
@[TeX_( "/yy0{/nx/rhs{}{}{/nx/rhsfullfalse}}" );@]@;
-@ @<Add a term to the right hand side@>=
+@ Adding a \bison\ term to the right hand side involves collecting of several pieces of information.
+One of them is the (optional) symbolic named that can be used by the action code to refer to
+the place on the value stack that is allocated for this term.
+\smallskip
+\thisrulereference{\nx\inline\nx\flatten}%
+\smallskip
+\noindent The space between the term and the preceeding part of the rule may depend on the
+type of rule element that appears at the end of the rule parsed so far.
+@<Add a term to the right hand side@>=
@[TeX_( "/rhscont{/yy(1)}/to/toksa" );@]@;
@[TeX_( "/rhscnct{/yy(1)}/to/toksb" );@]@;
- @[TeX_( "/edef/next{/the/toksb}" );@]@;
- @[TeX_( "/ifx/next/empty" );@]@;
- @[TeX_( "/else" );@]@;
+ @[TeX_( "/yytoksempty/toksb{}{" );@]@;
@[TeX_( " /getfourth{/yy(2)}/to/toksc" );@]@;
@[TeX_( " /getfifth{/yy(2)}/to/toksd" );@]@;
@[TeX_( " /appendr/toksb{{/the/toksc}{/the/toksd}}" );@]@;
- @[TeX_( "/fi" );@]@;
+ @[TeX_( "}" );@]@;
@[TeXb( "/yy0{/nx/rhs{/the/toksa/the/toksb" );@]@;
@[TeXao( "/nx/termname{/the/yy(2)}{/the/yy(3)}}{/nx/hspace}{/nx/rhsfullfalse}}" );@]@;
-@ @<Add an action to the right hand side@>=
+@ Action processing is somewhat complicated since the action can be either inline or terminal,
+affecting the typesetting.
+\smallskip
+\thisrulereference{\nx\inline\nx\flatten}%
+\smallskip
+\noindent Additionally, an action may follow an empty rule in which case a special term
+must be added to aid the reader.
+@<Add an action to the right hand side@>=
@[TeX_( "/rhscont{/yy(1)}/to/toksa" );@]@;
@[TeX_( "/rhsbool{/yy(1)}/to/toksb /the/toksb" );@]@;
@[TeX_( "/ifrhsfull" );@]@; /* the first half ends with an action */
@[TeX_( " /appendr/toksa{/nx/arhssep{0}{0}/nx/emptyterm}" );@]@; /* no pointers to streams */
@[TeX_( "/fi" );@]@;
- @[TeX_( "/edef/next{/the/toksa}" );@]@;
- @[TeX_( "/ifx/next/empty" );@]@;
- @[TeX_( " /toksa{/emptyterm}" );@]@;
- @[TeX_( "/fi" );@]@;
+ @[TeX_( "/yytoksempty/toksa{/toksa{/emptyterm}}{}" );@]@;
@[TeX_( "/getfirst{/yy(2)}/to/toksb" );@]@; /* the contents of the braced code */
@[TeX_( "/getsecond{/yy(2)}/to/toksc" );@]@; /* the format stream pointer */
@[TeX_( "/getthird{/yy(2)}/to/toksd" );@]@; /* the stash stream pointer */
@@ -982,10 +1074,7 @@ named_ref.opt:
@[TeX_( "/ifrhsfull" );@]@; /* the first half ends with an action */
@[TeX_( " /appendr/toksa{/nx/arhssep{0}{0}/nx/emptyterm}" );@]@; /* no pointers to streams */
@[TeX_( "/fi" );@]@;
- @[TeX_( "/edef/next{/the/toksa}" );@]@;
- @[TeX_( "/ifx/next/empty" );@]@;
- @[TeX_( " /toksa{/emptyterm}" );@]@;
- @[TeX_( "/fi" );@]@;
+ @[TeX_( "/yytoksempty/toksa{/toksa{/emptyterm}}{}" );@]@;
@[TeX_( "/getfirst{/yy(2)}/to/toksb" );@]@; /* the contents of the braced code */
@[TeX_( "/getsecond{/yy(2)}/to/toksc" );@]@; /* the format stream pointer */
@[TeX_( "/getthird{/yy(2)}/to/toksd" );@]@; /* the stash stream pointer */
@@ -993,16 +1082,17 @@ named_ref.opt:
@[TeXf( " /nx/bpredicate{/the/toksb}{}{/the/toksc}{/the/toksd}/nx/bdend}" );@]@;
@[TeXao( "{/nx/arhssep}{/nx/rhsfulltrue}}" );@]@;
-@ @<Add \prodstyle{\%empty} to the right hand side@>=
+@ An empty right hand side may be specified explicitly by using \prodstyle{\%empty} as
+the sole token in the production. This will increase the readability of the grammar by
+making the programmer's intentions more transparent.
+@<Add \prodstyle{\%empty} to the right hand side@>=
@[TeX_( "/rhscont{/yy(1)}/to/toksa" );@]@;
@[TeX_( "/rhscnct{/yy(1)}/to/toksb" );@]@;
- @[TeX_( "/edef/next{/the/toksb}" );@]@;
- @[TeX_( "/ifx/next/empty" );@]@;
- @[TeX_( "/else" );@]@;
+ @[TeX_( "/yytoksempty/toksb{}{" );@]@;
@[TeX_( " /getfourth{/yy(2)}/to/toksc" );@]@;
@[TeX_( " /getfifth{/yy(2)}/to/toksd" );@]@;
@[TeX_( " /appendr/toksb{{/the/toksc}{/the/toksd}}" );@]@;
- @[TeX_( "/fi" );@]@;
+ @[TeX_( "}" );@]@;
@[TeXb( "/yy0{/nx/rhs{/the/toksa/the/toksb" );@]@;
@[TeXao( "/nx/emptyterm}{/nx/hspace}{/nx/rhsfullfalse}}" );@]@;
@@ -1045,13 +1135,17 @@ named_ref.opt:
@[TeXao( "/nx/mergeop{/nx/tagit/the/yy(3)}/the/yy(2)}{/the/toksb}{/nx/rhsfullfalse}}" );@]@;
@[TeX_( "/fi" );@]@;
+ @t}\beginfoldedsections{@>
+
@ @<Create an empty named reference@>=
@[TeX_( "/yy0{}" );@]@;
@ @<Create a named reference@>=
@<Turn an identifier into a term@>@;
-@ Identifiers.
+ @t}\endfoldedsections{@>
+
+@*2 Identifiers and other symbols.
{\it Identifiers are returned as |uniqstr| values by the scanner.
Depending on their use, we may need to make them genuine symbols}. We,
on the other hand, simply copy the values returned by the scanner.
@@ -1095,6 +1189,7 @@ string_as_id:
placeholders for the appropriate actions in case the parser gains some
sophistication in processing low level types (or starts expecting
different types from the scanner).
+\beginfoldedsectionshere
@<Turn an identifier into a term@>=
@[TeX_( "/yy0{/nx/idit/the/yy(1)}" );@]@;
@@ -1113,6 +1208,8 @@ different types from the scanner).
@ @<Prepare a string for use@>=
@[TeX_( "/yy0{/nx/stringify/the/yy(1)}" );@]@;
+@t}\endfoldedsections{@>
+
@ {\it Variable and value.
The \prodstyle{STRING} form of variable is deprecated and is not \.{M4}-friendly.
For example, \.{M4} fails for \.{\%define "[" "value"}.}
@@ -1151,8 +1248,6 @@ as they have to be inserted in a place that is aware of the internal definitions
definitions are used.
@<Grammar parser \Cee\ postamble@>=
-#define YYPRINT(file, type, value) @[yyprint (file, type, value)@]
- static void yyprint (FILE *file, int type, YYSTYPE value){}
@ @<Bootstrap parser \Cee\ postamble@>=
@<Grammar parser \Cee\ postamble@>@;
@@ -1183,8 +1278,15 @@ token information from the grammar.
@q _register_token_d(SEMICOLON) /* can be omitted in prologue */ @>
@q _register_token_d(TAG) /* only encountered in the definition of PERCENT_PARAM */ @>
-@ Union of types. This section of the \bison\ input lists the types
+@*1 Union of types. This section of the \bison\ input lists the types
that may appear on the value stack. Since \TeX\ does not provide any
mechanism for type checking (nor is it clear how to translate a \Cee\
-|union| into any data structure usable in \TeX), this section is left empty.
+|union| into any data structure usable in \TeX), this section is left (nearly)
+empty. The reason for the lonely type below is the postprocessor that facilitates
+the use of \bison\ `native' term references (see elsewhere). In order to
+translate such references into appropriate \TeX\ code, the postprocessor
+must let \bison\ calculate offsets into the value stack, which requires
+assigning types to various terminals and non-terminals. The specific type
+has no significance.
@<Union of grammar parser types@>=
+ int intval; \ No newline at end of file
diff --git a/support/splint/cweb/bs.w b/support/splint/cweb/bs.w
index adefd23f8b..8b32617ef3 100644
--- a/support/splint/cweb/bs.w
+++ b/support/splint/cweb/bs.w
@@ -1,4 +1,4 @@
-@q Copyright 2012-2020, Alexander Shibakov@>
+@q Copyright 2012-2024, Alexander Shibakov@>
@q This file is part of SPLinT@>
@q SPLinT is free software: you can redistribute it and/or modify@>
@@ -31,7 +31,6 @@ be done here.
_register_table_d(yypgoto)@;
_register_table_d(yytable)@;
_register_table_d(yycheck)@;
- _register_table_d(yytoknum)@;
_register_table_d(yystos)@;
_register_table_d(yytname)@;
_register_table_d(yyprhs)@;
@@ -46,8 +45,13 @@ with version~\.{3.0}) does not generate |yyprhs| and |yyrhs| or any
other arrays that contain similar information, so we fake them here if
such a crippled version of \bison\ is used.
+The |yyrimplicit| array will be used by the table output code, together with
+the postprocessor to output right hand side lengths for the term references that
+require them in the case when the `native' \bison\ references are
+used.
@<Variables and types local to the parser@>=
unsigned int yyrthree[YYNRULES + 1] = { 0 };
+ int yyrimplicit[YYNRULES + 1] = { 0 };
#ifdef BISON_IS_CRIPPLED
unsigned int yyrhs[YYNRULES + 1] = { -1 };
unsigned int yyprhs[YYNRULES + 1] = { 0 };
@@ -102,6 +106,23 @@ such a crippled version of \bison\ is used.
@<Parser table names@>=
_register_table_d(yyrthree)@;
+@ We list some macros that are used to assist the post
+processor and take advantage of the |yyrimlicit| array. As at this
+time the size of the array is unknown (the preamble is included before
+the parser file by \.{mkeparser.w} so the number of rules is unknown
+at this point), we declare the array as a pointer.
+@d BZ( term, anchor ) ( ((YYSTYPE *)&(term)) - ((YYSTYPE *)&(anchor)) + 1 )
+@d BZZ( term, anchor ) (
+ (yyrimplicit_p[yyn] = ((yyrimplicit_p[yyn] < 0) ?
+ yyrimplicit_p[yyn] : ((YYSTYPE *)&(term)) - ((YYSTYPE *)&(anchor)) + 1)),
+ ((YYSTYPE *)&(term)) - ((YYSTYPE *)&(anchor)) + 1
+)
+@<\Cee\ setup code specific to \bison@>=
+ int *yyrimplicit_p;
+
+@ @<Output parser semantic actions@>=
+ yyrimplicit_p = yyrimplicit;
+
@*2Actions. There are several ways of making |yyparse()| execute all portions of
the action code. The one chosen here makes sure that none of the
tables gets written past its last element. To see how it works, it
@@ -154,6 +175,7 @@ change affects the generated parser.
yyr1[i] = YYNTOKENS;
yydefact[0] = i;
+ yyrimplicit[i] = -yyr2[i];
yyr2[i] = 0;
yyparse(YYPARSE_PARAMETERS);
@@ -173,18 +195,32 @@ change affects the generated parser.
}
+ for ( int i = 1; i < YYNRULES + 1; i++ ) {
+
+ if ( yyrimplicit[i] > 0 ) {
+ fprintf( tables_out, "\\yyimplicitlengthset{%d}{%d}%%\n", i, yyrimplicit[i] );
+ }
+
+ }
+
@*2Constants. A generic list of constants to be used later in different contexts is defined below.
As before, the appropriate macro will be defined generically to do what is required with these
names (for example, we can turn each name into a string for reporting purposes).
@<Parser constants@>=
_register_const_d(YYEMPTY)@;
_register_const_d(YYPACT_NINF)@;
- _register_const_d(YYEOF)@;
_register_const_d(YYLAST)@;
_register_const_d(YYNTOKENS)@;
_register_const_d(YYNRULES)@;
_register_const_d(YYNSTATES)@;
_register_const_d(YYFINAL)@;
+#ifndef YYEOF
+ _register_const_d(YYSYMBOL_YYEOF)@;
+#endif
+
+@ Constants defined to maintain compatibility with the older versions of \bison.
+@<Parser virtual constants@>=
+ _register_const_d(YYSYMBOL_YYEOF, YYEOF)@;
@*2Tokens.
Similar techniques are employed in token output. Tokens are parser
@@ -582,20 +618,32 @@ rules are not output if a crippled \bison\ is used.
@ \TeX\ constant output is another place where the techniques described above are applied.
As before, the macro handles the repetitive work of initialization, declaration, etc in
-each place where the corresponding constant is mentioned. The one exception is \.{YYPACT\_NINF},
-which has to be handled separately because the underscore in its name makes it difficult to
-use it as a command sequence name.
+each place where the corresponding constant is mentioned. The exceptions are \.{YYPACT\_NINF}
+and \.{YYSYMBOL\_YYEOF} that have to be handled separately because the
+underscore in its name makes it difficult to use it as a command sequence name.
\def\YYPACTxNINFxdesc{\.{YYPACT\_NINF\_}\\{desc}}
+\def\YYSYMBOLxYYEOFxdesc{\.{YYSYMBOL\_YYEOF\_}\\{desc}}
@s YYPACT_NINF_desc TeX
+@s YYSYMBOL_YYEOF_desc TeX
@<Prepare \TeX\ format for parser constants@>=
#define _register_const_d(c_name) @[c_name##_desc.format = "\\constset{%s}{%d}%%\n"; \
c_name##_desc.name = #c_name; \
+ c_name##_desc.value = c_name; \
output_desc.output_##c_name = 1;@]
@<Parser constants@>@;
#undef _register_const_d
+#ifdef YYEOF /* other values have already been set correctly */
+#define _register_const_d(c_name,vvalue) @[c_name##_desc.format = "\\constset{%s}{%d}%%\n"; \
+ c_name##_desc.name = #c_name; \
+ c_name##_desc.value = vvalue; \
+ output_desc.output_##c_name = 1;@]
+ @<Parser virtual constants@>@;
+#undef _register_const_d
+#endif
YYPACT_NINF_desc.name = "YYPACTNINF";
+YYSYMBOL_YYEOF_desc.name = "YYSYMBOLxYYEOF";
@ Token definitions round off the \TeX\ output mode.
diff --git a/support/splint/cweb/checklists.w b/support/splint/cweb/checklists.w
index 754855d747..446bc46b96 100644
--- a/support/splint/cweb/checklists.w
+++ b/support/splint/cweb/checklists.w
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% Copyright 2002-2014 Free Software Foundation, Inc.
% This file is part of SPLinT
%
diff --git a/support/splint/cweb/common.w b/support/splint/cweb/common.w
index 0f50fdcabd..5112fb5414 100644
--- a/support/splint/cweb/common.w
+++ b/support/splint/cweb/common.w
@@ -1,4 +1,4 @@
-@q Copyright 2012-2020, Alexander Shibakov@>
+@q Copyright 2012-2024, Alexander Shibakov@>
@q This file is part of SPLinT@>
@q SPLinT is free software: you can redistribute it and/or modify@>
@@ -454,6 +454,19 @@ code easier to look at. Further explanation is given in the grammar
file. If the parser is doing its job, this is the only place where one
would actually see these as functions (or, rather, macros).
+In case one wishes to use the `native' \bison\ way of referencing
+terms (i.e.\ something along the lines of~\.{\\the\char`\$[term]})
+these macros should be used with a trailing underscore (say, \.{TeXa\_})
+to let the postprocessor know that the code inside should be
+postprocessed. The postprocessor will then create three files: one,
+destined for \CWEAVE, will use the same macro withough the underscore
+(i.e.\ \.{TeXa} to continue our example, and have the native \bison\
+terms replaced wih the appropriate \TeX\ commands. Another file is
+intended for \CTANGLE, where the whole macro will be replaced first
+with a special identifier, which in turn, after \CTANGLE\ finishes,
+will be replaced by an appropriately constructed call to \.{TeX\_\_}. The
+third file will contain the substitutions.
+
In compliance with paragraph 6.10.8(2)\footnote{[$\ldots$] {\it Any
other predefined macro names shall begin with a leading underscore
followed by an uppercase letter or a second underscore.}} of the \ISO\
@@ -482,7 +495,7 @@ macros which produces undesirable typesetting artefacts.}.
@q \CWEB\ is not aware of variadic macros, so this has to be done the old way@>
@<\Cee\ preamble@>=
-#define TeX__( string, ... ) @[fprintf( tables_out, " " string "%s\n", __VA_ARGS__, "%" )@]
+#define TeX__( string, ... ) @[fprintf( tables_out, " " string "%%\n", __VA_ARGS__ )@]
@ If a full parser is not needed, the lexing mechanism is not required. To satisfy the compiler
and the linker, the lexer and other functions still have to be declared and defined, since these functions
@@ -524,27 +537,32 @@ values. When the names are concatenated with other tokens, however,
the \Cee\ preprocessor postpones the macro expansion until the
concatenation is complete (see clauses 6.10.3.1, 6.10.3.2, and
6.10.3.3 of the \ISO\ \Cee\ Standard, \cite[ISO/C11]). Unless the result of the
-concatenation is still expandable, the expansion will halt.
+concatenation is still expandable, the expansion will halt\footnote{Another trick
+to halt expansion is to use {\it function macros} which will expand only when
+they are followed by parentheses. Since we do not have control over how
+constants are defined by \bison, we cannot take advantage of this feature of the
+\Cee\ preprocessor.}.
@<Global variables and types@>=
struct const_d {
char *format;
char *name;
+ int value;
};
@ @<Local variable and type declarations@>=
-#define _register_const_d(c_name) @[struct const_d c_name##_desc;@]
+#define _register_const_d(c_name,...) @[struct const_d c_name##_desc;@]
@<Constant names@>@;
#undef _register_const_d
@ @<Output descriptor fields@>=
-#define _register_const_d(c_name) @[bool output_##c_name:1;@]
+#define _register_const_d(c_name,...) @[bool output_##c_name:1;@]
@<Constant names@>@;
#undef _register_const_d
@ @<Default outputs@>=
-#define _register_const_d(c_name) @[@[@].output_##c_name = 0,@[@]@]
+#define _register_const_d(c_name,...) @[@[@].output_##c_name = 0,@[@]@]
@<Constant names@>@;
#undef _register_const_d
@@ -556,10 +574,10 @@ concatenation is still expandable, the expansion will halt.
{
int any_constants = 0;
-#define _register_const_d(c_name) \
+#define _register_const_d(c_name,...) \
\
if ( output_desc.output_##c_name ) { \
- const_out( tables_out, c_name##_desc, c_name)@; \
+ const_out( tables_out, c_name##_desc)@; \
any_constants = 1; \
}
@@ -575,7 +593,7 @@ concatenation is still expandable, the expansion will halt.
@<Constant names@>=
@ A macro to help with constant output.
-@d const_out(stream, c_desc, c_name) fprintf(stream, c_desc.format, c_desc.name, c_name);
+@d const_out(stream, c_desc) fprintf(stream, c_desc.format, c_desc.name, c_desc.value);
@ Action switch output routines modify the automata tables and
therefore have to be output last. Since action output is highly
@@ -728,7 +746,7 @@ specific cases are added to in the course of adding new features.
FOREVER {
- c = getopt_long (argc, argv, ( char [] ){':'@t, @>@<Short option list@>}, long_options, &option_index);
+ c = getopt_long (argc, argv, ( char [] )@[{':'@t, @>@<Short option list@>}@], long_options, &option_index);
if (c == -1) break;
diff --git a/support/splint/cweb/fk.w b/support/splint/cweb/fk.w
index fc0c5d2e14..c25a7e8cc2 100644
--- a/support/splint/cweb/fk.w
+++ b/support/splint/cweb/fk.w
@@ -1,4 +1,4 @@
-@q Copyright 2012-2020, Alexander Shibakov@>
+@q Copyright 2012-2022, Alexander Shibakov@>
@q This file is part of SPLinT@>
@q SPLinT is free software: you can redistribute it and/or modify@>
@@ -330,6 +330,7 @@ known to the \flex\ generated scanner.
}
@*2Constants.
+The few hard coded constants needed for the lexer to work are listed here.
@<Scanner constants@>=
_register_const_d(YY_END_OF_BUFFER_CHAR)@;
_register_const_d(YY_NUM_RULES)@;
@@ -427,6 +428,7 @@ are handled separately, because they contain underscores.
@<Prepare \TeX\ format for scanner constants@>=
#define _register_const_d(c_name) @[c_name##_desc.format = "\\constset{%s}{%d}%%\n"; \
c_name##_desc.name = #c_name; \
+ c_name##_desc.value = c_name; \
output_desc.output_##c_name = 1;@]
@<Scanner constants@>@;
#undef _register_const_d
diff --git a/support/splint/cweb/fo.w b/support/splint/cweb/fo.w
index 81694024c3..d34ca57d96 100644
--- a/support/splint/cweb/fo.w
+++ b/support/splint/cweb/fo.w
@@ -30,14 +30,23 @@
@q PURPOSE. @>
@**The \ifbootstrapmode flex \else\flex\ \fi parser stack.
-\ifbootstrapmode % this is a bootstrap run to generate the tables
+\ifbootstrapmode % this is a bootstrap run to generate the token references
\input limbo.sty
\def\optimization{5}
\input yy.sty
+ \def\bstrapparser{dyytab.tex}% use the full prologue parser
+ \def\bstraptokens{bo.tok}% for which we will need token equivalences
\modebootstrap
\else % otherwise set up the pretty printing of tokens
\let\hostparsernamespace\flexnamespace
\fi
+% we can get away with the setup above because the minimal lexer
+% used for bootstrapping does not know about the \prodstyle{\%left}
+% token so in the declarations list below, the two tokens,
+% \prodstyle{CCL_OP_DIFF} and \prodstyle{CCL_OP_UNION} become
+% part of the previous \prodstyle{\%token} declaration which is a
+% legal declaration syntax; see ldman.w and ldlex.w and ldgram.w for
+% a more elaborate setup;
The scanner generator, \flex, uses \bison\ to produce a parser for its
input language. Its lexer is output by \flex\ itself so both are
reused to generate the parser and the scanner for pretty printing
@@ -69,7 +78,7 @@ any custom adjustments to the lexer state to operate correctly.
@g
@ The selection of options for \bison\ parsers suitable for \splint\
-have been discussed
+has been discussed
\ifbootstrapmode\else\locallink{bison.options}earlier \endlink\fi so we
list them here without further comments.
@<Options for \flex\ parser@>=
@@ -157,7 +166,7 @@ point of recognition, while the typesetting parser needs to be aware of them.
@G
%token TOP_OP POINTER_OP ARRAY_OP DEF_OP RE_DEF OPT_OTHER OPT_DEPRECATED
-@ {\em \POSIX\ and \.{AT\&T} \lex\ place the
+@ \namedspot{flex braces}{\em \POSIX\ and \.{AT\&T} \lex\ place the
precedence of the repeat operator, \.{\{\}}, below that of concatenation.
Thus, \.{ab\{3\}} is\/ \.{ababab}. Most other \POSIX\ utilities use an {\rm Extended
Regular Expression (ERE)} precedence that has the repeat operator
@@ -166,8 +175,8 @@ higher than concatenation. This causes \.{ab\{3\}} to yield\/ \.{abbb}.
In order to support the \POSIX\ and \.{AT\&T} precedence and the \flex\
precedence we define two token sets for the begin and end tokens of
the repeat operator, \prodstyle{BEGIN_REPEAT_POSIX} and\/ \prodstyle{END_REPEAT_POSIX}. The lexical scanner chooses
-which tokens to return based on whether {\let\it\itbold\prodstyle{posix\_compat} or \prodstyle{lex\_compat}
-are specified. Specifying either \prodstyle{posix\_compat} or \prodstyle{lex\_compat}} will
+which tokens to return based on whether {\let\it\itbold\prodstyle{posix_compat} or \prodstyle{lex_compat}
+are specified. Specifying either \prodstyle{posix_compat} or \prodstyle{lex_compat}} will
cause \flex\ to parse scanner files as per the \.{AT\&T} and \POSIX-mandated behavior.}
@<Token definitions for \flex\ input parser@>=
@G
@@ -186,6 +195,7 @@ explanation). We can nevertheless get away with an empty \Cee\ preamble.
@ @<Productions for \flex\ parser@>=
@G
+@t}\vb{\insertraw{\beginfoldedsections}}{@>
@t}\vb{\inline\flatten}{@>
goal:
initlex sect1 sect1end
@@ -202,12 +212,15 @@ initlex:
@g
@ @<Assemble a \flex\ input file@>=
- @[TeX_( "/yy0{/the/yy(2)/the/yy(4)}" );@]@;
+ @[TeX_( "/finishlist{/the/yy(4)}" );@]@;
+ @[TeX_( "/yy0{/the/yy(2)/nx/executelist{/the/yy(4)}}" );@]@;
@ @<Productions for \flex\ parser@>=
@<Productions for \flex\ section~1 parser@>@;
@<Productions for \flex\ section~2 parser@>@;
+@t}\endfoldedsections{@>
+
@ @<Exclusive productions for \flex\ section~1 parser@>=
@G
@t}\vb{\inline\flatten}{@>
@@ -220,6 +233,7 @@ goal:
@ @<Productions for \flex\ section~1 parser@>=
@G
+@t}\vb{\insertraw{\beginfoldedsections}}{@>
sect1:
sect1 startconddecl namelist1 {@> @<Add start condition declarations@> @=}
| sect1 options {@> @<Add options to section~1@> @=}
@@ -266,8 +280,11 @@ namelist1:
@ @<Report an error in \prodstylens{namelist1}{\flexnamespace} and quit@>=
@[TeX_( "/yyerror" );@]@;
+@t}\endfoldedsections{@>
+
@ @<Productions for \flex\ section~1 parser@>=
@G
+@t}\vb{\insertraw{\beginfoldedsections}}{@>
options:
OPTION_OP optionlist {@> @<Start an options list@> @=}
| POINTER_OP {@> @<Add a pointer option@> @=}
@@ -338,15 +355,19 @@ option:
@ @<Output a deprecated option@>=
@[TeX_( "/yy0{/nx/flopt{deprecated}/the/yy(1)}" );@]@;
+@t}\endfoldedsections{@>
+
@ @<Special \flex\ section~2 parser productions@>=
@G
+@t}\vb{\inline\flatten}{@>
goal:
sect2 {@> @<Output section~2@> @=}
;
@g
@ @<Output section~2@>=
- @[TeX_( "/table/yy(1)" );@]@;
+ @[TeX_( "/finishlist{/the/yy(1)}" );@]@;
+ @[TeX_( "/table/expandafter{/expandafter/executelist/expandafter{/the/yy(1)}}" );@]@;
@ This portion of the grammar was changed to make it possible to read the
action code.
@@ -364,25 +385,54 @@ initforrule:
;
@g
-@ @<Add a rule to section~2@>=
+@ The production below describes the most typical way a regular expression is
+assigned an action. The redundant term \prodstyle{initforrule} is a standard
+\bison\ trick to make sure that the appropriate initializations happen at
+the right time.
+\smallskip
+\thisrulereference{\nx\inline\nx\flatten}
+\smallskip\noindent
+The original production has been modified so that the pretty printing parser has a chance
+to consume the action code. The second \prodstyle{'\\n'} is output by the action
+processing code.
+@<Add a rule to section~2@>=
@[TeX_( "/ifflcontinued@@action" );@]@;
@[TeX_( " /toksb{/flactionc}" );@]@;
@[TeX_( "/else" );@]@;
@[TeX_( " /toksb{/flaction}" );@]@;
@[TeX_( "/fi" );@]@;
@[TeX_( "/toksa/expandafter{/astformat@@flaction}" );@]@; /* capture the formatting action */
- @[TeX_( "/yypushx{/the/yy(1)/the/toksb{/the/yy(2)}{/the/yy(4)}/the/yy(5)/the/yy(6){/the/toksa}}/on/astarray" );@]@;
- @[TeX_( "/yy0{/astarraylastcs}" );@]@;
+ @[TeX_( "/yy0{/the/yy(1)}" );@]@;
+ @[TeX_( "/appendtolistx{/the/yy(1)}{/the/toksb{/the/yy(2)}{/the/yy(4)}/the/yy(5)/the/yy(6){/the/toksa}}" );@]@;
@[TeX_( "/let/astformat@@flaction/empty" );@]@; /* reset the format */
-@ @<Add a group of rules to section~2@>=
- @[TeX_( "/yy0{/the/yy(1)/nx/flactiongroup{/the/yy(2)}/the/yy(3){/the/yy(4)}/the/yy(5)}" );@]@;
+@ For convenience, rules that are active in the same set of states may be grouped together.
+This pattern is the subject of the next production.
+\smallskip
+\thisrulereference{\nx\inline\nx\flatten}
+\smallskip\noindent
+The original parser ignores the braces while the pretty printing parser
+uses the pointers associated with the braces to collect and process the accumulated
+stash. This is how comments and \CWEB\ section references are typeset.
+@<Add a group of rules to section~2@>=
+ @[TeX_( "/yy0{/the/yy(1)}" );@]@;
+ @[TeX_( "/finishlist{/the/yy(4)}" );@]@;
+ @[TeX_( "/appendtolistx{/the/yy(1)}{/nx/flactiongroup{/the/yy(2)}/the/yy(3){/nx/executelist{/the/yy(4)}}/the/yy(5)}" );@]@;
-@ @<Start an empty section~2@>=
- @[TeX_( "/yy0{}" );@]@;
+@ Simple left recursive terms like~\prodstyle{sect2} are very suitable for being implemented as a list
+(see the macros in \.{yycommon.sty} for the details on the list implementation). The `type' of~\prodstyle{sect2}
+is a (symbolic pointer to a) list of items built up from an empty initial list. This production initializes
+the list (with the name identical to the terminal on the left hand side of the production)
+and updates the list name (rather the name's prefix) for future invocations of this action.
+
+@<Start an empty section~2@>=
+ @[TeX_( "/initlist{/secttwoprefix sect2}" );@]@;
+ @[TeX_( "/yy0{/secttwoprefix sect2}" );@]@;
+ @[TeX_( "/edef/secttwoprefix{/secttwoprefix.}" );@]@;
@ @<Add a bare action@>=
- @[TeX_( "/yy0{/the/yy(1)/nx/flbareaction/the/yy(2)}" );@]@;
+ @[TeX_( "/yy0{/the/yy(1)}" );@]@;
+ @[TeX_( "/appendtolistx{/the/yy(1)}{/nx/flbareaction/the/yy(2)}" );@]@;
@ @<Productions for \flex\ section~2 parser@>=
@G
@@ -400,14 +450,23 @@ scon:
namelist2:
namelist2 ',' sconname {@> @<Add a start condition to a list@> @=}
| sconname {@> @<Start a list with a start condition name@> @=}
- | error {@> @<Report an error compiling a start condition list@> @=}
+ | error {@> @<Report an error in a start condition list@> @=}
;
@t}\vb{\inline\flatten}{@>
sconname:
NAME {@> @<Make a \prodstylens{NAME}{\flexnamespace} into a start condition@> @=}
;
-@ @<Create a list of start conditions@>=
+@ Start conditions are just names. The data structure that is output has
+location pointers for the streams to enable interaction with \CWEB. These
+pointers are in turn the values of the angle bracket tokens that enclose the
+list of start conditions.
+
+Start condition lists may be collected in their own sections, while the list itself
+may be followed by a comment. The pointers mentioned above are used to typeset the comments
+and section references.
+\beginfoldedsectionshere
+@<Create a list of start conditions@>=
@[TeX_( "/yy0{/nx/flsconlist{/the/yy(1)}{/the/yy(3)}{/the/yy(4)}}" );@]@;
@ @<Create a universal start condition@>=
@@ -422,17 +481,24 @@ sconname:
@ @<Start a list with a start condition name@>=
@<Copy the value@>@;
-@ @<Report an error compiling a start condition list@>=
+@ @<Report an error in a start condition list@>=
@[TeX_( "/yyerror" );@]@;
@ @<Make a \prodstylens{NAME}{\flexnamespace} into a start condition@>=
@[TeX_( "/yy0{/nx/flname/the/yy(1)}" );@]@;
-@ @<Productions for \flex\ section~2 parser@>=
+@t}\endfoldedsections{@>
+
+@*1 The syntax of regular expressions. The productions in this section define the
+syntax of \flex\ regular expressions in detail. The same productions are used for
+parsing isolated regular expressions (e.g.\ to present example code). A few of these
+productions have been modified to suit the needs of the pretty printing parser.
+@<Productions for \flex\ section~2 parser@>=
@<Rules for \flex\ regular expressions@>@;
@ @<Special productions for regular expressions@>=
@G
+@t}\vb{\inline\flatten}{@>
goal:
flexrule {@> @<Output a regular expression@> @=}
;
@@ -446,33 +512,48 @@ ensures that all the changes are local to the parsing macro.
@<Output a regular expression@>=
@[TeX_( "/table/yy(1)" );@]@;
-@ @<Rules for \flex\ regular expressions@>=
+@ Regular expressions are parsed using the following productions. There are
+two major cases: rules active only at the beginning of the line, and the rest. From the
+typesetting parser's point of view, there is not much difference between the two
+(certainly not enough to justify singling out the rules at the beginning of the line into
+their own production) but it was decided to keep the original grammar rules
+for consistency.
+@<Rules for \flex\ regular expressions@>=
@G
+@t}\vb{\insertraw{\beginfoldedsections}}{@>
flexrule:
- '^' rule {@> @<Match a rule at the beginning of the line@> @=}
+ '^' rule {@> @<Match a rule at the start of the line@> @=}
| rule {@> @<Match an ordinary rule@> @=}
| EOF_OP {@> @<Match an end of file@> @=}
| error {@> @<Report an error and quit@> @=}
;
-@ @<Match a rule at the beginning of the line@>=
+@ @<Match a rule at the start of the line@>=
@[TeX_( "/toksa/expandafter{/astformat@@flrule}" );@]@;
@[TeX_( "/let/astformat@@flrule/empty" );@]@;
@[TeX_( "/yy0{/nx/flbolrule{/the/yy(2)}{/the/toksa}}" );@]@;
+@ @<Match an end of file@>=
+ @[TeX_( "/yy0{/nx/fleof/the/yy(1)}" );@]@;
+
@ @<Match an ordinary rule@>=
@[TeX_( "/toksa/expandafter{/astformat@@flrule}" );@]@;
@[TeX_( "/let/astformat@@flrule/empty" );@]@;
@[TeX_( "/yy0{/nx/flrule{/the/yy(1)}{/the/toksa}}" );@]@;
-@ @<Match an end of file@>=
- @[TeX_( "/yy0{/nx/fleof/the/yy(1)}" );@]@;
-
@ @<Report an error and quit@>=
@[TeX_( "/yyerror" );@]@;
-
-@ @<Rules for \flex\ regular expressions@>=
+
+@t}\endfoldedsections{@>
+
+@ Another broad overview of regular expression types before diving into the details
+of various operations. Note that the only trailing context that \splint\ output
+lexer can process is the end of line (\prodstyle{'\$'}) due to the way the
+scanner routine is written. It does not affect its ability to pretty print the appropriate
+rules (for a lexer that is produced by \flex\ itself, for example).
+@<Rules for \flex\ regular expressions@>=
@G
+@t}\vb{\insertraw{\beginfoldedsections}}{@>
rule:
re2 re {@> @<Match a regular expression with a trailing context@> @=}
| re2 re '$' {@> @<Disallow a repeated trailing context@> @=}
@@ -511,9 +592,22 @@ re2:
@ @<Prepare to match a trailing context@>=
@[TeX_( "/yy0{/nx/fltrail{/the/yy(1)}{/the/yy(2)}}" );@]@;
+
+ @t}\endfoldedsections{@>
-@ @<Rules for \flex\ regular expressions@>=
+@*2 Atoms. Every regular expression is assembled of atomic subexpressions, each
+of which may be modified by an repetition operator that establishes how many
+times a given pattern can repeat to stay part of the original atom. New atomic expressions
+(or \prodstyle{singleton}s as they are called below) can be formed the usual way, by
+enclosing a regular expression in parentheses.
+
+As explained \locallink{flex braces}above\endlink, braced repetition operators may
+have different binding strengths, depending on the options supplied to \flex. The pretty
+printing in both cases is identical as only the application scopes of the operator differ, and not
+its meaning.
+@<Rules for \flex\ regular expressions@>=
@G
+@t}\vb{\insertraw{\beginfoldedsections}}{@>
series:
series singleton {@> @<Extend a series by a singleton@> @=}
| singleton {@> @<Match a singleton@> @=}
@@ -540,9 +634,12 @@ series:
@ @<Match a series of exact length@>=
@<Create a series of exact length@>@;
-
+
+@t}\endfoldedsections{@>
+
@ @<Rules for \flex\ regular expressions@>=
@G
+@t}\vb{\insertraw{\beginfoldedsections}}{@>
singleton:
singleton '*' {@> @<Create a lazy series match@> @=}
| singleton '+' {@> @<Create a nonempty series match@> @=}
@@ -600,8 +697,15 @@ singleton:
@ @<Match a specific character@>=
@[TeX_( "/yy0{/nx/flchar/the/yy(1)}" );@]@;
-@ @<Rules for \flex\ regular expressions@>=
+@t}\endfoldedsections{@>
+
+@*2 Characters. Several facilities are available to specify sets of characters, including
+built-in characters classes such as {\em whitespace}, {\em printable characters},
+{\em alphanumerics}, etc. Some simple boolean operaions are also supported to make specifying
+character classes more efficient.
+@<Rules for \flex\ regular expressions@>=
@G
+@t}\vb{\insertraw{\beginfoldedsections}}{@>
fullccl:
fullccl CCL_OP_DIFF braceccl {@> @<Subtract a character class@> @=}
| fullccl CCL_OP_UNION braceccl {@> @<Create a union of character classes@> @=}
@@ -610,7 +714,7 @@ fullccl:
braceccl:
'[' ccl ']' {@> @<Create a character class@> @=}
- | '[' '^' ccl ']' {@> @<Create a complementary character class@> @=}
+ | '[' '^' ccl ']' {@> @<Complement a character class@> @=}
;
ccl:
@@ -633,11 +737,13 @@ ccl:
@ @<Create a character class@>=
@[TeX_( "/yy0{/nx/flbraceccl{/the/yy(1)}{/the/yy(2)}{/the/yy(3)}}" );@]@;
-@ @<Create a complementary character class@>=
- @[TeX_( "/yy0{/nx/flbracecclneg{/the/yy(1)}{/the/yy(3)}{/the/yy(4)}}" );@]@;
+@ @<Complement a character class@>=
+ @[TeXb( "/yy0{/nx/flbracecclneg" );@]@;
+ @[TeXfo( " {/the/yy(1)}{/the/yy(3)}{/the/yy(4)}}" );@]@;
@ @<Add a range to a character class@>=
- @[TeX_( "/yy0{/the/yy(1)/nx/flcclrnge{/nx/flchar/the/yy(2)}{/nx/flchar/the/yy(4)}}" );@]@;
+ @[TeXb( "/yy0{/the/yy(1)/nx/flcclrnge" );@]@;
+ @[TeXfo( " {/nx/flchar/the/yy(2)}{/nx/flchar/the/yy(4)}}" );@]@;
@ @<Add a character to a character class@>=
@[TeX_( "/yy0{/the/yy(1)/nx/flchar/the/yy(2)}" );@]@;
@@ -648,7 +754,12 @@ ccl:
@ @<Create an empty character class@>=
@[TeX_( "/yy0{}" );@]@;
-@ @<Rules for \flex\ regular expressions@>=
+@t}\endfoldedsections{@>
+
+@*3 Special character classes. Various character classes are predefined in \flex.
+These include alphabetic and alphanumeric characters, digits, blank characters, upper and lower
+case characters, etc.
+@<Rules for \flex\ regular expressions@>=
@G
ccl_expr:
@t}\vb{\flatten}{@>
@@ -696,7 +807,5 @@ string:
@ @<Make an empty regular expression string@>=
@[TeX_( "/yy0{}" );@]@;
-@ This is needed to get the |yytoknum| array. A trivial declaration suffices.
+@ The postamble is empty for now.
@<Postamble for \flex\ parser@>=
-#define YYPRINT(file, type, value) @[yyprint (file, type, value)@]
- static void yyprint (FILE *file, int type, YYSTYPE value){}
diff --git a/support/splint/cweb/lo.w b/support/splint/cweb/lo.w
index 68ef1b6595..c2461787a9 100644
--- a/support/splint/cweb/lo.w
+++ b/support/splint/cweb/lo.w
@@ -1,4 +1,4 @@
-@q Copyright 2012-2020 Alexander Shibakov@>
+@q Copyright 2012-2024 Alexander Shibakov@>
@q Copyright 2002-2014 Free Software Foundation, Inc.@>
@q This file is part of SPLinT@>
@@ -18,6 +18,7 @@
@**The scanner for \ifx\bison\UNDEFINED\.{bison}\else\bison\fi\ syntax.
\ifx\bison\UNDEFINED
\input limbo.sty
+ \input yystype.sty
\input grabstates.sty
\immediate\openout\stlist=lo_states.h
\fi
@@ -95,7 +96,7 @@ output it in the form of a header file for the `real' lexer output
@ {\it A \Cee-like comment in directives/rules}.
@<Grammar lexer states@>=
-@G
+@G(fs1)
%x SC_YACC_COMMENT
@g
@@ -106,22 +107,26 @@ output it in the form of a header file for the `real' lexer output
%\tracerulestrue
%\traceactionstrue
%\tracebadcharstrue
+%\traceparseresultstrue
+%\traceparserstatestrue
%\prodstyle{\%\%}%
-\traceparserstatesfalse
-\tracestacksfalse
-\tracerulesfalse
-\traceactionsfalse
-\tracebadcharsfalse
-\yyflexdebugfalse
@<Grammar lexer states@>=
-@G
+@G(fs1)
%x SC_ESCAPED_STRING SC_ESCAPED_CHARACTER
@g
@ {\it A identifier was just read in directives/rules. Special state
to capture the sequence `\.{identifier:}'}.
+\traceparserstatesfalse
+\tracestacksfalse
+\tracerulesfalse
+\traceactionsfalse
+\tracebadcharsfalse
+\yyflexdebugfalse
+\traceparseresultsfalse
+\traceparserstatesfalse
@<Grammar lexer states@>=
-@G
+@G(fs1)
%x SC_AFTER_IDENTIFIER
@g
@@ -131,7 +136,7 @@ disallow \prodstyle{NUL}, as this simplifies our implementation. We match
angle brackets in nested pairs: several languages use them for
generics/template types}.
@<Grammar lexer states@>=
-@G
+@G(fs1)
%x SC_TAG
@g
@@ -150,25 +155,25 @@ Four types of user code:
\aterm predicate (code between \.{\%?\{} and \.{\}} in middle section);
}%
@<Grammar lexer states@>=
-@G
+@G(fs1)
%x SC_PROLOGUE SC_BRACED_CODE SC_EPILOGUE SC_PREDICATE
@g
@ {\it \Cee\ and \Ceepp\ comments in code}.
@<Grammar lexer states@>=
-@G
+@G(fs1)
%x SC_COMMENT SC_LINE_COMMENT
@g
@ {\it Strings and characters in code}.
@<Grammar lexer states@>=
-@G
+@G(fs1)
%x SC_STRING SC_CHARACTER
@g
@ Bracketed identifiers support.
@<Grammar lexer states@>=
-@G
+@G(fs1)
%x SC_BRACKETED_ID SC_RETURN_BRACKETED_ID
@g
@@ -179,9 +184,9 @@ Four types of user code:
@ The code for the generated scanner is highly dependent on the options
supplied. Most of the options below are essential for the scheme
-adopted in this package to work.
+adopted in this package to work.\gtextidx{\flex\ options example}{flex options example}{\flexidxdomain}%
@<Grammar lexer options@>=
-@G
+@G(fs1)
%option bison-bridge
%option noyywrap nounput noinput reentrant
%option noyy_top_state
@@ -194,7 +199,6 @@ adopted in this package to work.
Here is a full list of regular expressions recognized by the \bison\ scanner.
@<Grammar token regular expressions@>=
@<Scan grammar white space@>@;
- @<Scan \flex\ directives and options@>@;
@<Scan \bison\ directives@>@;
@<Do not support zero characters@>@;
@<Scan after an identifier, check whether a colon is next@>@;
@@ -340,23 +344,11 @@ returns a pair of pointers as the value.
}
@g
-@ Some additional constructs needed to typeset simple \flex\
-declarations. This is not part of the original \bison\ scanner.
-@<Scan \flex\ directives and options@>=
-@G(fs2)
-<INITIAL>
-{
- "%option" {@> @[TeX_( "/yylexreturnptr{FLEX_OPTION}" );@]@=}
- "%x" {@> @[TeX_( "/yylexreturnptr{FLEX_STATE_X}" );@]@=}
- "%s" {@> @[TeX_( "/yylexreturnptr{FLEX_STATE_S}" );@]@=}
-}
-@g
-
@ We present the `bad character' code first, before going into the details
of the character matching by the rest of the lexer.
@<Process a bad character@>=
- @[TeX_( "/edef/next{/nx/csname lexspecial[/the/yytextpure]/nx/endcsname}" );@]@;
- @[TeX_( "/expandafter/expandafter/expandafter/ifx/next/relax" );@]@;
+ @[TeX_( "/expandafter/let/expandafter/next/csname lexspecial[/the/yytextpure]/endcsname" );@]@;
+ @[TeX_( "/ifx/next/relax" );@]@;
@[TeX_( " /iftracebadchars" );@]@;
@[TeX_( " /yyfatal{invalid character(s): /the/yytext}" );@]@;
@[TeX_( " /fi" );@]@;
@@ -436,13 +428,12 @@ later, after the context is known.
@ @<Process the bracketed part of an identifier@>=
@[TeX_( "/ifx/bracketedidstr/empty" );@]@;
@[TeX_( " /bracketedidcontextstate/YYSTART /yyBEGIN{SC_BRACKETED_ID}" );@]@;
- @[TeX_( " /let/next=/yylexnext" );@]@;
+ @[TeX_( " /yybreak/yylexnext" );@]@;
@[TeX_( "/else" );@]@;
@[TeX_( " /ROLLBACKCURRENTTOKEN" );@]@;
@[TeX_( " /yyBEGIN{SC_RETURN_BRACKETED_ID}" );@]@;
- @[TeX_( " /def/next{/yylexreturn{ID}}" );@]@;
- @[TeX_( "/fi" );@]@;
- @[TeX_( "/next" );@]@;
+ @[TeX_( " /yybreak{/yylexreturn{ID}}" );@]@;
+ @[TeX_( "/yycontinue" );@]@;
@ @<Process a colon after an identifier@>=
@[TeX_( "/ifx/bracketedidstr/empty" );@]@;
@@ -485,27 +476,25 @@ later, after the context is known.
@[TeX_( "/ifx/bracketedidstr/empty" );@]@;
@[TeX_( " /edef/bracketedidstr{{/the/yytextpure}{/the/yytext}" );@]@;
@[TeX_( " {/the/yyfmark}{/the/yysmark}}" );@]@;
- @[TeX_( " /let/next=/yylexnext" );@]@;
+ @[TeX_( " /yybreak/yylexnext" );@]@;
@[TeX_( "/else" );@]@;
- @[TeX_( " /def/next{/yywarn{unexpected identifier " );@]@;
+ @[TeX_( " /yybreak{/yywarn{unexpected identifier " );@]@;
@[TeX_( " in bracketed name: /the/yytext}}" );@]@;
- @[TeX_( "/fi" );@]@;
- @[TeX_( "/next" );@]@;
+ @[TeX_( "/yycontinue" );@]@;
@ @<Finish processing bracketed identifier@>=
@[TeX_( "/yyBEGINr/bracketedidcontextstate" );@]@;
@[TeX_( "/ifx/bracketedidstr/empty" );@]@;
- @[TeX_( " /def/next{/yywarn{an identifier expected}}" );@]@;
+ @[TeX_( " /yybreak{/yywarn{an identifier expected}}" );@]@;
@[TeX_( "/else" );@]@;
@[TeX_( " /ifnum/bracketedidcontextstate=/yylexstate{INITIAL}/relax" );@]@;
@[TeX_( " /expandafter/yylval/expandafter{/bracketedidstr}" );@]@;
@[TeX_( " /let/bracketedidstr=/empty" );@]@;
- @[TeX_( " /def/next{/yylexreturn{BRACKETED_ID}}" );@]@;
+ @[TeX_( " /yybreak@@{/yylexreturn{BRACKETED_ID}}" );@]@;
@[TeX_( " /else" );@]@;
- @[TeX_( " /let/next=/yylexnext" );@]@;
+ @[TeX_( " /yybreak@@/yylexnext" );@]@;
@[TeX_( " /fi" );@]@;
- @[TeX_( "/fi" );@]@;
- @[TeX_( "/next" );@]@;
+ @[TeX_( "/yycontinue" );@]@;
@ @<Complain about improper identifier characters@>=
@[TeX_( "/yyfatal{invalid character(s) in bracketed name: /the/yytext}" );@]@;
@@ -621,11 +610,10 @@ The initial quote is already eaten}.
@[TeX_( " {/the/yyfmark}{/the/yysmark}}}/next" );@]@;
@[TeX_( " /STRINGFREE" );@]@;
@[TeX_( " /yyBEGIN{INITIAL}" );@]@;
- @[TeX_( " /def/next{/yylexreturn{TAG}}" );@]@;
+ @[TeX_( " /yybreak{/yylexreturn{TAG}}" );@]@;
@[TeX_( "/else" );@]@;
- @[TeX_( " /STRINGGROW/let/next=/yylexnext" );@]@;
- @[TeX_( "/fi" );@]@;
- @[TeX_( "/next" );@]@;
+ @[TeX_( " /STRINGGROW/yybreak/yylexnext" );@]@;
+ @[TeX_( "/yycontinue" );@]@;
@ This is a slightly different rule from the original scanner. We do not perform |yyleng| computations,
so it makes sense to raise the nesting level one by one.
@@ -722,13 +710,12 @@ braced code.
@[TeX_( "/ifnum/lonesting</z@@" );@]@;
@[TeX_( " /STRINGFINISH" );@]@;
@[TeX_( " /edef/next{/yylval{{/the/laststring}{/the/yyfmark}{/the/yysmark}}}/next" );@]@;
- @[TeX_( " /def/next{/yylexreturn{BRACED_CODE}}" );@]@;
@[TeX_( " /yyBEGIN{INITIAL}" );@]@;
+ @[TeX_( " /yybreak{/yylexreturn{BRACED_CODE}}" );@]@;
@[TeX_( "/else" );@]@;
@[TeX_( " /STRINGGROW" );@]@;
- @[TeX_( " /let/next=/yylexnext" );@]@;
- @[TeX_( "/fi" );@]@;
- @[TeX_( "/next" );@]@;
+ @[TeX_( " /yybreak/yylexnext" );@]@;
+ @[TeX_( "/yycontinue" );@]@;
@ @<Add closing brace to a predicate@>=
@[TeX_( "/advance/lonesting/m@@ne" );@]@;
@@ -736,12 +723,11 @@ braced code.
@[TeX_( " /STRINGFINISH" );@]@;
@[TeX_( " /edef/next{/yylval{{/the/laststring}{/the/yyfmark}{/the/yysmark}}}/next" );@]@;
@[TeX_( " /yyBEGIN{INITIAL}" );@]@;
- @[TeX_( " /def/next{/yylexreturn{BRACED_PREDICATE}}" );@]@;
+ @[TeX_( " /yybreak{/yylexreturn{BRACED_PREDICATE}}" );@]@;
@[TeX_( "/else" );@]@;
@[TeX_( " /STRINGGROW" );@]@;
- @[TeX_( " /let/next=/yylexnext" );@]@;
- @[TeX_( "/fi" );@]@;
- @[TeX_( "/next" );@]@;
+ @[TeX_( " /yybreak/yylexnext" );@]@;
+ @[TeX_( "/yycontinue" );@]@;
@ {\it Scanning some prologue: from \.{\%\{} (already scanned) to \.{\%\}}}.
@<Scan prologue@>=
diff --git a/support/splint/cweb/mkeparser.w b/support/splint/cweb/mkeparser.w
index f60ccf5d64..79505b3be4 100644
--- a/support/splint/cweb/mkeparser.w
+++ b/support/splint/cweb/mkeparser.w
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -24,7 +24,7 @@ Sourcer(er?) (\.{bs.w}) which will be included as soon as this paragraph is
over. Since the main function of this code is to {\it dump\/} tables
produced by \bison, and a {\it bison\/} is a large buffalo like
animal, {\it and\/} the only reason it has to be done like this is due
-to the less than optimal choices of a few developers, feel free to
+to a less than optimal choices of a few developers, feel free to
interpret the acronym as something easier to remember.
@ @<Table names@>=
@@ -32,6 +32,9 @@ interpret the acronym as something easier to remember.
@ @<Constant names@>=
@<Parser constants@>@;
+#ifdef YYEOF
+ @<Parser virtual constants@>@;
+#endif
@ @<Local variable and type declarations@>=
@<Variables and types local to the parser@>@;
@@ -83,6 +86,7 @@ interpret the acronym as something easier to remember.
@ @<\Cee\ preamble@>=
@<Common code for \Cee\ preamble@>@;
+ @<\Cee\ setup code specific to \bison@>@;
@i common.w
@i bs.w
diff --git a/support/splint/cweb/mkscanner.w b/support/splint/cweb/mkscanner.w
index e847428199..05f22bd6e3 100644
--- a/support/splint/cweb/mkscanner.w
+++ b/support/splint/cweb/mkscanner.w
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
diff --git a/support/splint/cweb/np.w b/support/splint/cweb/np.w
index 58379649a5..a4216ee058 100644
--- a/support/splint/cweb/np.w
+++ b/support/splint/cweb/np.w
@@ -1,4 +1,4 @@
-@q Copyright 2012-2020, Alexander Shibakov@>
+@q Copyright 2012-2024, Alexander Shibakov@>
@q This file is part of SPLinT@>
@q SPLinT is free software: you can redistribute it and/or modify@>
@@ -18,7 +18,11 @@
name processing. This approach (i.e. using a `full blown' parser/scanner
combination) is probably not the best way to implement such machinery
but its main purpose is to demonstrate a way to create a separate
-parser for local purposes.
+parser for local purposes. The name parser is what allows one to
+automatically typeset term names such as \.{example1}
+and \.{\%option\_name} as \prodstyle{example1} and \prodstyle{\%option_name}.
+@q The reference to \prodstyle{example1} above serves a dual role of correcting@>
+@q an owerfull \vbox in the index.@>
% We include the macros here since this file is intended to be
% included by the documentation `aggregator' so putting bare \TeX\
% at the beginning of the file runs the risk of producing and error
@@ -61,7 +65,7 @@ parser for local purposes.
@G
full_name:
identifier_string suffixes.opt {@> @<Compose the full name@> @=}
-| META_IDENTIFIER {@> @<Turn a \prodstylens{META\_IDENTIFIER}{\smallnamespace} into a full name@> @=}
+| META_IDENTIFIER {@> @<Turn a \prodstylens{META_IDENTIFIER}{\smallnamespace} into a full name@> @=}
| quoted_name suffixes.opt {@> @<Compose the full name@> @=}
;
@@ -123,7 +127,7 @@ qualifier:
@ @<Compose the full name@>=
@[TeX_( "/yy0{/the/yy(1)/the/yy(2)}/namechars/yyval" );@]@;
-@ @<Turn a \prodstylens{META\_IDENTIFIER}{\smallnamespace} into a full name@>=
+@ @<Turn a \prodstylens{META_IDENTIFIER}{\smallnamespace} into a full name@>=
@[TeX_( "/getfirst{/yy(1)}/to/toksa" );@]@;
@[TeX_( "/getsecond{/yy(1)}/to/toksb" );@]@;
@[TeX_( "/yy0{/nx/idstr{/the/toksa}{/the/toksb}}/namechars/yyval" );@]@;
@@ -138,7 +142,9 @@ qualifier:
@[TeX_( "/getsecond{/yy(1)}/to/toksb" );@]@;
@[TeX_( "/yy0{/nx/idstr{/the/toksa}{/the/toksb}}" );@]@;
-@ @<Start with a tag@>=
+@ Tags are recognized as a separate syntax element although no special
+processing is performed by the name parser or the associated macros.
+@<Start with a tag@>=
@[TeX_( "/getfirst{/yy(2)}/to/toksa" );@]@;
@[TeX_( "/getsecond{/yy(2)}/to/toksb" );@]@;
@[TeX_( "/yy0{/nx/idstr{</the/toksa>}{</the/toksb>}}" );@]@;
@@ -193,14 +199,15 @@ qualifier:
@ An integer at the end of an identifier (such as |id1|) is
interpreted as a suffix (similar to the way \MF\ treats identifiers,
-and \mft\ typesets them\footnote{This allows, for example, names like
-|$[term0]| while leaving |$[char2int]| in its `natural' form.}) to
+and \mft\ typesets them,\footnote{This allows, for example, names like
+|$[term0]| while leaving |$[char2int]| in its `natural' form.} as \prodstyle{id1}) to
mitigate a well-intentioned but surprisingly inconvenient feature of
\CTANGLE, namely outputting something like \.{id.1} as \.{id\ .1} in an
attempt to make sure that integers do not interfere with structure
dereferences. For this to produce meaningful results, a stricter
interpretation of \prodstyle{IDENTIFIER} syntax is required,
-represented by the \.{id\_strict} syntax below.
+represented by the \flexrenstyle{id\_strict} syntax
+\locallink{id_strict definition}below\endlink.
@<Attach an integer@>=
@[TeX_( "/yy0{/the/yy(1)/nx/dotsp/nx/sfxi/the/yy(2)}" );@]@;
@@ -251,8 +258,6 @@ as they have to be inserted in a place that is aware of the internal definitions
definitions are used.
@<Name parser \Cee\ postamble@>=
-#define YYPRINT(file, type, value) @[yyprint (file, type, value)@]
- static void yyprint (FILE *file, int type, YYSTYPE value){}
@ Union of types.
@@ -281,7 +286,10 @@ void define_all_states( void ) {
@o
@g
-@ @<Lexer definitions@>=
+@ \namedspot{id_strict definition}The tokens consumed by the name parser must
+represent a relatively fine classification of various identifier substrings to be able to
+detect various suffixes.
+@<Lexer definitions@>=
@<Lexer states@>@;
@G(fs1)
letter [_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]
@@ -300,7 +308,7 @@ int [0-9]+
@ Strings and characters in directives/rules.
@<Lexer states@>=
-@G
+@G(fs1)
%x SC_ESCAPED_STRING SC_ESCAPED_CHARACTER
@g
@@ -310,7 +318,7 @@ int [0-9]+
#include <stdbool.h>
@ @<Lexer options@>=
-@G
+@G(fs1)
%option bison-bridge
%option noyywrap nounput noinput reentrant
%option noyy_top_state
diff --git a/support/splint/cweb/philosophy.w b/support/splint/cweb/philosophy.w
index 7b173f5d2f..1f5c4a3dfc 100644
--- a/support/splint/cweb/philosophy.w
+++ b/support/splint/cweb/philosophy.w
@@ -1,4 +1,4 @@
-@q Copyright 2012-2020, Alexander Shibakov@>
+@q Copyright 2012-2022, Alexander Shibakov@>
@q This file is part of SPLinT@>
@q SPLinT is free software: you can redistribute it and/or modify@>
@@ -64,6 +64,12 @@ they set a special reading rhythm, which is an added bonus in many
cases, although their presense openly violates
the `universally gray pages are a must' dogma.
+One final remark concerns the abundance of footnotes in this manual. I confess,
+there is almost no reason for it $\ldots$ except {\em I like footnotes\/}!
+They help introduce the air of mystery and adventure to an otherwise boring
+text. They are akin to the author wispering a secret in the reader's
+ear\footnote{Breaking convention by making the pages even less uniform is an added bonus.}.
+
@*1 Why GPL.
Selecting the license for this project involves more than the
availability of the source code. \TeX, by its very nature is an
@@ -191,12 +197,19 @@ the language. `Make it object-oriented' is neither a good reason nor a
clearly defined one, however.
@*1 Why not $*$\TeX.
-Simple. I never use it and have no idea of how packages, classes,
+Simple. I rarely, if ever\footnote{In some cases, a publisher would only accept
+a \LaTeX\ document, sadly. Better than most alternatives though.},
+use it and have no idea of how packages, classes,
etc., are designed. I have heard it has impressive mechanisms for
dealing with various problems commonly encountered in \TeX. Sadly, my
-knowledge of $*$\TeX\ machinery is almost nonexistent. This may change
-but right now I have tried to make the macros as generic as possible,
-hopefully making $*$\TeX\ adaptation easy.
+knowledge of $*$\TeX\ machinery is almost nonexistent\footnote{I am well familiar
+with the programming that went into \LaTeX, which is of highest quality. I do not
+share the design philosophy though and try to use only the most standard features}.
+This may change but right now I have tried to make the macros as generic as possible,
+hopefully making $*$\TeX\ adaptation easy\footnote{Unfortunately some redesign would
+be certainly necessary. Thus, \splint\ relies on the way plain \TeX\ allocates token
+registers so if the corresponding scheme in \LaTeX\ is drastically different, this
+portion of the macros would have to be rewritten.}.
The following quote from \cite[Ho] makes me feel particularly uneasy
about the current state of development of various \TeX\ variants:
@@ -205,7 +218,7 @@ and even more important is that the general impression is that of a finished boo
sometimes it seems like\/ \.{WEB} actively discourages development. This is
a subjective point, but nevertheless a quite important one.}''
-{\it Discouraging development\/} seems like a good thing to
+{\it Discouraging development\/} seems like a good feature to
me. Otherwise we are one step away from encouraging writing poor
software with inadequate tools merely `to encourage development'.
@@ -300,7 +313,7 @@ inserts \.{\\hbox\{\}}$\,$\TeX\ stuff$\,$\.{\{\}} into \CWEAVE's output. The
cost of this hack (aside from looking and feeling rather ugly on the
editor screen, not to mention disrupting the editor's brace
accounting) is a superfluous \.{\\hbox\{\}} left behind {\em before\/}
-the `\TeX\ stuff'. The programmer's provided \TeX\ code is unable to
+the `\TeX\ stuff'. The programmer provided \TeX\ code is unable to
remove this box (at the macro level, i.e.~in \TeX's `mouth' using
D.~Knuth's terminology, one may still succeed with the \.{\\lastbox}
approach unless the \.{\\hbox} was inserted in the main vertical mode)
@@ -312,6 +325,16 @@ cases such side-effects are indeed desirable, and save the programmer some
typing but it seems that the \.{@@t} facility was not well thought
out in its entirety.}.
+Continuing with the theme of inserting \TeX\ material into \CWEAVE\ output,
+another one of \CWEB's inflexibilities is the lack of means of inserting
+\TeX\ {\em between\/} sections. While inserting pure text may be arranged by
+putting a codeless section after the one with the code (appropriate macros
+can be written to suppress the generation of a reference to such a section),
+inserting command sequences that affect, say, the typesetting style
+of the consequent sections is not so easy. The trick with a `fake' section below
+will be quite visible in the final output which is almost always undesirable.
+Using the \.{@@t} mechanism is also far from ideal.
+
In general, the lack of structure in \CWEAVE's generated \TeX\ seems
to hinder even seemingly legitimate uses of \.{cwebmac.tex}
macros. Even such a natural desire as to use a different type size for
diff --git a/support/splint/cweb/references.w b/support/splint/cweb/references.w
index 83397c93bb..3824972d65 100644
--- a/support/splint/cweb/references.w
+++ b/support/splint/cweb/references.w
@@ -1,4 +1,4 @@
-@q Copyright 2012-2020, Alexander Shibakov@>
+@q Copyright 2012-2022, Alexander Shibakov@>
@q This file is part of SPLinT@>
@q SPLinT is free software: you can redistribute it and/or modify@>
diff --git a/support/splint/cweb/so.w b/support/splint/cweb/so.w
index d7a7696b8c..944f2cb82f 100644
--- a/support/splint/cweb/so.w
+++ b/support/splint/cweb/so.w
@@ -32,6 +32,7 @@
@**The lexer for \ifx\flex\UNDEFINED\.{flex}\else\flex\ \fi syntax.
\ifx\flex\UNDEFINED
\input limbo.sty
+ \input yystype.sty
\input grabstates.sty
\immediate\openout\stlist=fil_states.h
\fi
@@ -43,16 +44,31 @@ to replace them with ordinary patterns and use |yyless()| in the actions.
@G
%{@> @<Preamble for \flex\ lexer@> @=%}
@> @<Options for \flex\ input lexer@> @=
- @> @<Additional options for \flex\ input lexer@> @=
+ @> @<Output file for \flex\ input lexer@> @=
@> @<State definitions for \flex\ input lexer@> @=
@> @<Definitions for \flex\ input lexer@> @=
%%
@> @<Postamble for \flex\ input lexer@> @=
+ @> @<Common patterns for \flex\ lexer@> @=
@> @<Patterns for \flex\ lexer@> @=
%%
@> @<Auxilary code for \flex\ lexer@> @=
@g
+@ Bootstrap lexer.
+@(ssfs.ll@>=
+@G
+%{@> @<Preamble for \flex\ lexer@> @=%}
+ @> @<Options for \flex\ input lexer@> @=
+ @> @<Output file for the bootstrap \flex\ lexer@> @=
+ @> @<Definitions for \flex\ input lexer@> @=
+%%
+ @> @<Common patterns for \flex\ lexer@> @=
+ @> @<Catchall rule for the bootstrap lexer@> @=
+%%
+ @> @<Auxilary code for the bootstrap \flex\ lexer@> @=
+@g
+
@ @<Preamble for \flex\ lexer@>=
@ There are a few options that are necessary to ensure that the lexer
@@ -60,27 +76,31 @@ functions properly. Some of them (like \.{caseless}) directly
affect the behavior of the scanner, others (e.g.~\.{noyy\_top\_state})
prevent generation of unnecessary code.
@<Options for \flex\ input lexer@>=
-@G
+@G(fs1)
%option caseless nodefault stack noyy_top_state
%option nostdinit
-@g
-
-@ @<Additional options for \flex\ input lexer@>=
-@G
%option bison-bridge
%option noyywrap nounput noinput reentrant
%option debug
%option stack
+
+@ @<Output file for \flex\ input lexer@>=
+@G(fs1)
%option outfile="fil.c"
@g
+@ @<Output file for the bootstrap \flex\ lexer@>=
+@G(fs1)
+%option outfile="ssfs.c"
+@g
+
@*1 Regular expression and state definitions.
The lexer uses a large number of states to control its operation. Both
section~1 and section~2 rules rely on the scanner being in the
appropriate state. Otherwise (see \.{symbols.sty} example) the lexer
may parse the same fragment in a wrong context.
@<State definitions for \flex\ input lexer@>=
-@G
+@G(fs1)
%x SECT2 SECT2PROLOG SECT3 CODEBLOCK PICKUPDEF SC CARETISBOL NUM QUOTE
%x FIRSTCCL CCL ACTION RECOVER COMMENT ACTION_STRING PERCENT_BRACE_ACTION
%x OPTION LINEDIR CODEBLOCK_MATCH_BRACE
@@ -132,7 +152,7 @@ M4QEND "]]"
@*1 Regular expressions for \flex\ input scanner.
The code below treats \prodstyle{\%pointer} and \prodstyle{\%array} the same way it treats
\prodstyle{\%option} while typesetting.
-@<Patterns for \flex\ lexer@>=
+@<Common patterns for \flex\ lexer@>=
@G(fs2)
<INITIAL>{
^{WS} {@> @[TeX_( "/flindented@@codetrue/yyBEGIN{CODEBLOCK}/yylexnext" );@]@=}
@@ -211,7 +231,7 @@ The code below treats \prodstyle{\%pointer} and \prodstyle{\%array} the same way
<LINEDIR>{
\n {@> @[TeX_( "/yypopstate/yylexnext" );@]@=}
- [[:digit:]]+ {@> @[TeX_( "/fllinenum=/number/yytext/yylexnext" );@]@=}
+ [[:digit:]]+ {@> @[TeX_( "/fllinenum=/number/the/yytext/yylexnext" );@]@=}
\"[^"\n]*\" {@> @[TeX_( "/yylexnext" );@] /* ignore the file name in the line directives */ @=}
. {@> @[TeX_( "/yylexnext" );@] /* ignore spurious characters */ @=}
}
@@ -257,10 +277,10 @@ The code below treats \prodstyle{\%pointer} and \prodstyle{\%array} the same way
@ @<Complain if not inside a definition, continue otherwise@>=
@[TeX_( "/iffldidadef" );@]@;
@[TeX_( " /yylval/expandafter{/flnmdef}" );@]@;
- @[TeX_( " /def/next{/flinc@@linenum/yyBEGIN{INITIAL}/yylexreturn{RE_DEF}}" );@]@;
+ @[TeX_( " /yybreak{/flinc@@linenum/yyBEGIN{INITIAL}/yylexreturn{RE_DEF}}" );@]@;
@[TeX_( "/else" );@]@;
- @[TeX_( " /def/next{/yyfatal{incomplete name definition}}" );@]@;
- @[TeX_( "/fi/next" );@]@;
+ @[TeX_( " /yybreak{/yyfatal{incomplete name definition}}" );@]@;
+ @[TeX_( "/yycontinue" );@]@;
@ @<Patterns for \flex\ lexer@>=
@G(fs2)
@@ -390,7 +410,6 @@ The code below treats \prodstyle{\%pointer} and \prodstyle{\%array} the same way
<RECOVER>.*{NL} {@> @[TeX_( "/flinc@@linenum/yyBEGIN{INITIAL}/yylexnext" );@] @=}
@ Like \bison, \flex\ allows insertion of \Cee\ code in the middle of the input file.
-\saveparseoutputtrue
@<Patterns for \flex\ lexer@>=
@G(fs2)
<SECT2PROLOG>{
@@ -407,7 +426,6 @@ The code below treats \prodstyle{\%pointer} and \prodstyle{\%array} the same way
}
@ All the code inside is ignored.
-\saveparseoutputfalse
@<Consume the brace and increment the brace level@>=
@[TeX_( "/flinc/flbracelevel/yyless{2}/yylexnext" );@]@;
@@ -416,13 +434,16 @@ The code below treats \prodstyle{\%pointer} and \prodstyle{\%array} the same way
@ @<Begin section 2, prepare to reread, or ignore braced code@>=
@[TeX_( "/ifnum/flbracelevel>/z@@" );@]@;
- @[TeX_( " /let/next/yylexnext" );@]@;
+ @[TeX_( " /yybreak/yylexnext" );@]@;
@[TeX_( "/else" );@]@;
- @[TeX_( " /def/next{/yysetbol{/@@ne}/yyBEGIN{SECT2}/yyless{0}/yylexnext}" );@]@;
- @[TeX_( "/fi/next" );@]@;
+ @[TeX_( " /yybreak{/yysetbol{/@@ne}/yyBEGIN{SECT2}/yyless{0}/yylexnext}" );@]@;
+ @[TeX_( "/yycontinue" );@]@;
@ A pattern below (for the character class processing) had to be broken into two lines.
-A symbol ($\odot$@^$\odot$ separator, \flex@>) was inserted to indicate that a break had occured. The macros for \flex\
+A special symbol ($\odot$\gtextidx{$\odot$ separator, \flex}{0. separator, flex}{\flexidxdomain})
+has been inserted to indicate that a break had occured.
+
+The macros for \flex\
typesetting use a different mechanism from that of \bison\ macros and allow typographic
corrections to be applied to sections of the \flex\ code represented by various nonterminals.
These corrections can also be delayed. For the details, an interested reader may consult
@@ -477,14 +498,14 @@ These corrections can also be delayed. For the details, an interested reader may
@ @<Process a repeat pattern@>=
@[TeX_( "/yyless{1}/yyBEGIN{NUM}" );@]@;
@[TeX_( "/iffllex@@compat" );@]@;
- @[TeX_( " /def/next{/yylexreturn{BEGIN_REPEAT_POSIX}}" );@]@;
+ @[TeX_( " /yybreak{/yylexreturn{BEGIN_REPEAT_POSIX}}" );@]@;
@[TeX_( "/else" );@]@;
@[TeX_( " /ifflposix@@compat" );@]@;
- @[TeX_( " /def/next{/yylexreturn{BEGIN_REPEAT_POSIX}}" );@]@;
+ @[TeX_( " /yybreak@@{/yylexreturn{BEGIN_REPEAT_POSIX}}" );@]@;
@[TeX_( " /else" );@]@;
- @[TeX_( " /def/next{/yylexreturn{BEGIN_REPEAT_FLEX}}" );@]@;
+ @[TeX_( " /yybreak@@{/yylexreturn{BEGIN_REPEAT_FLEX}}" );@]@;
@[TeX_( " /fi" );@]@;
- @[TeX_( "/fi/next" );@]@;
+ @[TeX_( "/yycontinue" );@]@;
@ @<Process braced code in the middle of section 2@>=
@[TeX_( "/def/flbracelevel{1}" );@]@;
@@ -492,17 +513,17 @@ These corrections can also be delayed. For the details, an interested reader may
@[TeX_( "/ifflin@@rule" );@]@;
@[TeX_( " /fldoing@@rule@@actiontrue" );@]@;
@[TeX_( " /flin@@rulefalse" );@]@;
- @[TeX_( " /def/next{/yylexreturnxchar/n}" );@]@;
+ @[TeX_( " /yybreak{/yylexreturnxchar/n}" );@]@;
@[TeX_( "/else" );@]@;
- @[TeX_( " /let/next/yylexnext" );@]@;
- @[TeX_( "/fi/next" );@]@;
+ @[TeX_( " /yybreak/yylexnext" );@]@;
+ @[TeX_( "/yycontinue" );@]@;
@ This action has been changed to accomodate the new grammar. The separator (\.{\yl})
is treated as an ordinary (empty) action.
@<Process a deferred action@>=
@[TeX_( "/ifflsf@@skip@@ws" );@]@;/* whitespace ignored, still inside a pattern */
@[TeX_( " /yylessafter{|}" );@]@;
- @[TeX_( " /let/next/yylexnext" );@]@;
+ @[TeX_( " /yybreak/yylexnext" );@]@;
@[TeX_( "/else" );@]@;
@[TeX_( " /flinc@@linenum" );@]@;
@[TeX_( " /fldoing@@rule@@actiontrue" );@]@;
@@ -510,8 +531,8 @@ is treated as an ordinary (empty) action.
@[TeX_( " /flcontinued@@actiontrue" );@]@;
@[TeX_( " /unput{/n}" );@]@;
@[TeX_( " /yyBEGIN{ACTION}" );@]@;
- @[TeX_( " /edef/next{/nx/yylexreturnxchar/n}" );@]@;
- @[TeX_( "/fi/next" );@]@;
+ @[TeX_( " /yybreak{/yylexreturnxchar/n}" );@]@;
+ @[TeX_( "/yycontinue" );@]@;
@ @<Process a comment inside a pattern@>=
@[TeX_( "/ifflsf@@skip@@ws" );@]@;
@@ -525,7 +546,7 @@ is treated as an ordinary (empty) action.
@ @<Decide whether to start an action or skip whitespace inside a rule@>=
@[TeX_( "/ifflsf@@skip@@ws" );@]@;
- @[TeX_( " /let/next/yylexnext" );@]@;
+ @[TeX_( " /yybreak/yylexnext" );@]@;
@[TeX_( "/else" );@]@;
@[TeX_( " /def/flbracelevel{0}" );@]@;
@[TeX_( " /flcontinued@@actionfalse" );@]@;
@@ -533,16 +554,16 @@ is treated as an ordinary (empty) action.
@[TeX_( " /ifflin@@rule" );@]@;
@[TeX_( " /fldoing@@rule@@actiontrue" );@]@;
@[TeX_( " /flin@@rulefalse" );@]@;
- @[TeX_( " /def/next{/yylexreturnxchar/n}" );@]@;
+ @[TeX_( " /yybreak@@{/yylexreturnxchar/n}" );@]@;
@[TeX_( " /else" );@]@;
- @[TeX_( " /let/next/yylexnext" );@]@;
+ @[TeX_( " /yybreak@@/yylexnext" );@]@;
@[TeX_( " /fi" );@]@;
- @[TeX_( "/fi/next" );@]@;
+ @[TeX_( "/yycontinue" );@]@;
@ @<Finish the line and/or action@>=
@[TeX_( "/ifflsf@@skip@@ws" );@]@;
@[TeX_( " /flinc@@linenum" );@]@;
- @[TeX_( " /let/next/yylexnext" );@]@;
+ @[TeX_( " /yybreak/yylexnext" );@]@;
@[TeX_( "/else" );@]@;
@[TeX_( " /def/flbracelevel{0}" );@]@;
@[TeX_( " /flcontinued@@actionfalse" );@]@;
@@ -551,11 +572,11 @@ is treated as an ordinary (empty) action.
@[TeX_( " /ifflin@@rule" );@]@;
@[TeX_( " /fldoing@@rule@@actiontrue" );@]@;
@[TeX_( " /flin@@rulefalse" );@]@;
- @[TeX_( " /def/next{/yylexreturnxchar/n}" );@]@;
+ @[TeX_( " /yybreak@@{/yylexreturnxchar/n}" );@]@;
@[TeX_( " /else" );@]@;
- @[TeX_( " /let/next/yylexnext" );@]@;
+ @[TeX_( " /yybreak@@/yylexnext" );@]@;
@[TeX_( " /fi" );@]@;
- @[TeX_( "/fi/next" );@]@;
+ @[TeX_( "/yycontinue" );@]@;
@ @<Start section 3@>=
@[TeX_( "/def/flsectnum{3}" );@]@;
@@ -596,26 +617,26 @@ The braces and the possible trailing whitespace will be dealt with by the typese
@ @<Determine if this is extended syntax or return a parenthesis@>=
@[TeX_( "/iffllex@@compat" );@]@;
- @[TeX_( " /def/next{/yyless{1}/flsf@@push/yylexreturnraw(}" );@]@;
+ @[TeX_( " /yybreak{/yyless{1}/flsf@@push/yylexreturnraw(}" );@]@;
@[TeX_( "/else" );@]@;
@[TeX_( " /ifflposix@@compat" );@]@;
- @[TeX_( " /def/next{/yyless{1}/flsf@@push/yylexreturnraw(}" );@]@;
+ @[TeX_( " /yybreak@@{/yyless{1}/flsf@@push/yylexreturnraw(}" );@]@;
@[TeX_( " /else" );@]@;
- @[TeX_( " /def/next{/yypushstate{EXTENDED_COMMENT}}" );@]@;
+ @[TeX_( " /yybreak@@{/yypushstate{EXTENDED_COMMENT}}" );@]@;
@[TeX_( " /fi" );@]@;
- @[TeX_( "/fi/next" );@]@;
+ @[TeX_( "/yycontinue" );@]@;
@ @<Determine if this is a parametric group or return a parenthesis@>=
@[TeX_( "/flsf@@push" );@]@;
@[TeX_( "/iffllex@@compat" );@]@;
- @[TeX_( " /def/next{/yyless{1}}" );@]@;
+ @[TeX_( " /yybreak{/yyless{1}}" );@]@;
@[TeX_( "/else" );@]@;
@[TeX_( " /ifflposix@@compat" );@]@;
- @[TeX_( " /def/next{/yyless{1}}" );@]@;
+ @[TeX_( " /yybreak@@{/yyless{1}}" );@]@;
@[TeX_( " /else" );@]@;
- @[TeX_( " /def/next{/yyBEGIN{GROUP_WITH_PARAMS}}" );@]@;
+ @[TeX_( " /yybreak@@{/yyBEGIN{GROUP_WITH_PARAMS}}" );@]@;
@[TeX_( " /fi" );@]@;
- @[TeX_( "/fi/next" );@]@;
+ @[TeX_( "/yycontinue" );@]@;
@[TeX_( "/yylexreturnraw(" );@]@;
@ @<Patterns for \flex\ lexer@>=
@@ -708,14 +729,14 @@ The braces and the possible trailing whitespace will be dealt with by the typese
@ @<Finish the repeat pattern@>=
@[TeX_( "/yyBEGIN{SECT2}" );@]@;
@[TeX_( "/iffllex@@compat" );@]@;
- @[TeX_( " /def/next{/yylexreturn{END_REPEAT_POSIX}}" );@]@;
+ @[TeX_( " /yybreak{/yylexreturn{END_REPEAT_POSIX}}" );@]@;
@[TeX_( "/else" );@]@;
@[TeX_( " /ifflposix@@compat" );@]@;
- @[TeX_( " /def/next{/yylexreturn{END_REPEAT_POSIX}}" );@]@;
+ @[TeX_( " /yybreak@@{/yylexreturn{END_REPEAT_POSIX}}" );@]@;
@[TeX_( " /else" );@]@;
- @[TeX_( " /def/next{/yylexreturn{END_REPEAT_FLEX}}" );@]@;
+ @[TeX_( " /yybreak@@{/yylexreturn{END_REPEAT_FLEX}}" );@]@;
@[TeX_( " /fi" );@]@;
- @[TeX_( "/fi/next" );@]@;
+ @[TeX_( "/yycontinue" );@]@;
@ @<Patterns for \flex\ lexer@>=
@@ -833,3 +854,19 @@ void define_all_states( void ) {
#include "fil_states.h"
#undef _register_name
+@ @<Catchall rule for the bootstrap lexer@>=
+@G(fs2)
+<*>. {@> @[TeX_( "/yyerrterminate" );@] @=}
+
+@ The drive expects this function to be defined but the bootstrap
+lexer has no need for it. We leave it in to appease the compiler.
+@<Auxilary code for the bootstrap \flex\ lexer@>=
+void define_all_states( void ) {
+ @<Collect state definitions for the bootstrap \flex\ lexer@>@;
+}
+
+@ @<Collect state definitions for the bootstrap \flex\ lexer@>=
+#define _register_name( name ) @[Define_State( #name, name )@]
+ /* The \flexsnstyle{INITIAL} state is generated automatically */
+#undef _register_name
+
diff --git a/support/splint/cweb/splint.w b/support/splint/cweb/splint.w
index e50e090c32..4bf32953ff 100644
--- a/support/splint/cweb/splint.w
+++ b/support/splint/cweb/splint.w
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -13,19 +13,12 @@
%
% You should have received a copy of the GNU General Public License
% along with SPLinT. If not, see <http://www.gnu.org/licenses/>.
-%
-\newwrite\gindex % index entries generated by the various parsers, \prodstyle{...} commands, etc.
-%
+
\input limbo.sty
\input frontmatter.sty
\def\optimization{5}
\input yy.sty
\modenormal
-\input noweb.sty
- \xreflocaltrue
- \readlxrefs % read the reference file if exists before any sections appear
- \newwrite\xrefstream % references for noweb like style of sectioning.
- \immediate\openout\xrefstream=\jobname.xxr
% multi-column output
\input dcols.sty
\topskip=9pt % this is a purely aesthetic choice, also negating the \raggedbottom
@@ -71,9 +64,9 @@
\defreserved{Y}{\.{Y}}
\showlastactiontrue
+\initauxstream
@**Introduction.
-\setupfootnotes
\splint\footnote{I was tempted to call the package {\tt ParLALRgram}
which stands for Parsing {\sc LALR} Grammars or {\tt PinT} for
`Parsing in \TeX' but both sounded too generic.} (Simple Parsing and
@@ -117,9 +110,9 @@ output is some very rudimentary post- and pre-processing.
Our main concern is thus \CWEAVE\ that not only pretty prints the
program but also creates an index, cross-references all the
sections, etc. Getting \CWEAVE\ to pretty print a language other than
-\Cee\ requires some additional attention. A true digital warrior would
+\Cee\ requires some additional effort. A true digital warrior would
probably try to decipher \CWEAVE's output `in the raw' but, alas, my
-WebFu is not that strong. The loophole comes in the form of a rarely
+(C)WebFu is not that strong. The loophole comes in the form of a rarely
(for a good reason) used \CWEB\ command: the verbatim (\.{@@=...@@>})
output. The material to be output by this construct undergoes minimal
processing and is put inside \.{\\vb\{}$\ldots$\.{\}}. All that is
@@ -134,9 +127,9 @@ merely a brief overview of the approach.
Every \CWEB\ document is split into {\em sections}, each divided into
three parts (any one of which can be empty): the \TeX\ part, the middle part, and
-the \Cee\ part (which should more appropriately be called the {\em code
-part\/}). The code part of each\footnote{With the exception of the nameless \.{@@c}
-sections.} section carries a name for cross referencing
+the \Cee\ part (which should more appropriately be called the {\em code\/} or
+the {\em program\/} part). The \Cee\ part of each\footnote{With the exception of the
+nameless \.{@@c} (or \.{@@p}) sections.} section carries a name for cross referencing
purposes. The sections themselves are automatically numbered by \CWEAVE\ and
their code parts may be referenced from other sections, as well
as included in other sections' code parts using \CWEB's cross referencing
@@ -151,7 +144,7 @@ The original \CWEB\ macros (from \.{cwebmac.tex}) used the numbers
generated by \CWEAVE\ to refer to specific sections. This was true
for the table of contents, as well as the index entries. The macros
used by \splint\ adopt a different convention, proposed by N.~Ramsey
-for his literate programming software, \noweb. In the new system
+for his literate programming software \noweb. In the new system
(which will be referred to as the \noweb\ style of cross referencing),
each section is labelled by the page number where it starts and an
alphabetic character that indicates the order of appearance of the
@@ -163,10 +156,13 @@ section.
The top level (\.{@@**}) sections, introducing
major portions of the code have also been given more prominent
-appearance and carry a chapter number in addition to the the \noweb\
-style section number (the latter is used for cross references, as the
-chapter number gives no indication as to where the said chapter is
-located).
+appearance. They display the chapter number using a large typeface
+and omit the marginal section reference. References to such sections
+are typeset as {\it cnnn\/} where {\it nnn\/} represents the chapter
+number. While such references obscure the page number, hopefully one keeps
+the number of chapters, as well as such references, small. This
+modification improves the appearance of the first chapter pages.
+
\CWEB\ also generates an {\em index\/} of all the identifiers (with
some exceptions, such as single letter names) appearing in the
@@ -247,7 +243,7 @@ important application.
@*1 Parsing and parsers.
At an abstract level, a {\em parser@^parser@>\/} is just a routine
-that transforms text. Naturally, not every possible tranformation is
+that transforms text. Naturally, not every possible transformation is
beneficial, so, informally, the value of a parser lies in its ability
to expose some {\em meaning\/} in the text. If valid texts are reduced
to a small finite set (while each text can be arbitrarily long) one
@@ -342,7 +338,7 @@ longer strings.
Computing $m$ and $n$ above now reduces to incrementing an appropriate
variable upon exiting the corresponding function. More important,
-however, is the observation that this parsing algorithm can be
+however, is the observation that this parser specification can be
extracted from the grammar in a very straightforward fashion. To
better illustrate the r\^ole of the grammar in the choice of the
parsing algorithm, consider the following syntax for the same
@@ -364,10 +360,10 @@ astring:
\noindent While the language is unchanged, so the algorithm
above still works, the lookahead tokens are not {\em immediately\/}
apparent upon looking at the productions. Some preprocessing must take
-place before one can decide on the choice of parser states and the
-appropriate lookahead tokens. Such algorithms indeed exist and result
-in what is known as an {\sc LR} parser for the fragment above
-(actually, a simpler {\sc LALR} parser may be built for this
+place before one can decide on the choice of the parser states and the
+appropriate lookahead tokens. Such parser generating algorithms
+indeed exist and will produce what is known as an {\sc LR} parser
+for the fragment above (actually, a simpler {\sc LALR} parser may be built for this
grammar\footnote{Both of these algorithms will use the parser stack
more efficiently, effectively resolving the `call stack depth' issue
mentioned earlier.}). One can see that some grammar types may make
@@ -411,11 +407,12 @@ non_terminal:
@g
@ $\ldots$ if the syntax is correct.
-In case it is a bit off (note the missing colon after \.{whoops}), the parser will give up and
+In case it is a bit off (note the missing colon after \.{whoops} below), the parser will give up and
you will see a different result. The code in the fragment below is easily
recognizable, and some parts of it (all of \Cee\ code, in fact) are
still pretty printed by \CWEAVE. Only the verbatim portion is left
-unprocessed.
+unprocessed. The layout of the original code is reproduced unchanged, including the braces and production separators (i.e.\
+\.{\yl}) normally removed by the parser for presentation purposes.
@<A silly example@>=
@G
whoops
@@ -478,7 +475,7 @@ automatically from the \CWEB\ source file by the
\CWEAVE\ processing stage. All of these definitions can be
overwritten to get the desired output (say, one might want to typeset
\.{ID} in a roman font, as `identifier'; all that needs to be done to
-make this possible is a macro that says \.{\\prettywordpair\{ID\}\{\{\\rm
+make this possible is to provide a macro that says \.{\\prettywordpair\{ID\}\{\{\\rm
identifier\}\}} in an appropriate namespace (usually
\.{\\hostparternamespace})). The file \.{btokenset.sty} input above
contains a number of such definitions.
@@ -567,11 +564,11 @@ the file below.
@*1 On debugging. This concludes a short introduction to the \bison\
grammar pretty printing using this macro collection. It would be
-incomplete, however, without a short reference to debugging\footnote{Here
-we are talking about debugging the output produced by \CWEAVE\ when
+incomplete, however, without a short reference to debugging\footnote{At
+the moment we are discussing debugging the output produced by \CWEAVE\ when
the included \bison\ parser is used, {\it not\/} debugging parsers
written with the help of this software: the latter topic is covered in more
-detail later on}. There is a
+detail later on.}. There is a
fair amount of debugging information that the macros can output,
unfortunately, very little of it is tailored to the {\em use\/} of the
macros in the \bison\ parser. Most of it is designed to help build a
@@ -653,7 +650,7 @@ identifier determines its association with the appropriate set.}.
a collection of parsers, usually derived from a common set of
productions, and sharing a common lexer. As the name suggests, the
parsers in the collection are tried in order until the input is parsed
-successfully or every parser has been tried. This terminology may be the
+successfully or every parser has been tried. This terminology may become a
source of some confusion, since each parsing algorithm used by \bison\
maintains several stacks. We will always refer to them by naming a specific
task the stack is used for (such as the {\em value stack\/} or the
@@ -687,7 +684,7 @@ productions.
\aterm{term} in a narrow sense, an `element' of a grammar. Instead of
a long winded definition, an example, such as \prodstyle{ID} should
suffice. Terms are further classified into {\it terminals\/} (tokens)
-and {\it nonterminals\/} (which can be intuitively thought of as
+and {\it nonterminals\/} (which may be intuitively thought of as
composite terms).
\aterm{token} in short, an element of a set. Usually encoded as an
@@ -734,7 +731,7 @@ some attention, as well. There are a number of excellent programs
written to automate this step in much the same fashion as \bison\
automates the generation of parsers. One such tool, \flex, though
(in the opinion of this author) slightly lacking in the simplicity and
-elegance as compared to \bison, was used to implement the lexer for
+elegance when compared to \bison, was used to implement the lexer for
this software suite. Lexing in \TeX\ will be discussed in considerable
detail later in this manual.
@@ -750,7 +747,7 @@ syntax-directed translation} (which requires an appropriate
abstraction to represent \bison's actions inside \TeX). We shall
begin by discussing the parsing process itself.
-@*1 Arrays, stacks and the parser.
+@*1 Arrays, stacks, and the parser.
Let us briefly examine the programming environment offered by \TeX.
Designed for typesetting, \TeX's remarkable language
provides a layer of macro processing atop of a set of commands that
@@ -826,7 +823,9 @@ implementation). Since stacks pop up and disappear frequently (what
else are stacks to do?), list macros are usually used to store
them. The optimized parser uses a separate \.{\\count} register to
keep track of the top of the stack in the corresponding associative
-array.
+array\footnote{Which means, unfortunately, that making such fully optimized
+parser {\em reentrant\/} would take an extraordinary amount of effort. Hence,
+if reentrancy is a requirement, stacks are better kept inside list macros.}.
Let us now switch our attention
to the code that implements the parser and scanner {\it functions\/}.
@@ -1175,8 +1174,10 @@ token and move on but what if this was a control sequence? After all,
just as easily as \.{\\string} makes a sequence into characters,
\.{\\csname}$\,\ldots\,$\.{\\endcsname} pair will make any sequence of
characters into a control sequence so determining the end the character
-sequence produced by \.{\\string} may prove impossible. Huh~$\ldots$
-
+sequence produced by \.{\\string} may prove impossible.
+$$
+\hbox{Huh~$\ldots$}
+$$
What we need is a backup mechanism: keeping a copy of the
token sequence ahead, one can use \.{\\string} to see whether
the next token is a real
@@ -1233,7 +1234,7 @@ or even {\it tokener}), discussed in the next section.
@*1 Lexing in \TeX. In a typical system that uses a parser to process
text, the parsing pass is usually split into several stages: the raw
input, the lexical analysis (or simply {\it lexing}), and the parsing
-proper. The {\it lexing\/} (also called {\it scanning}, we use these
+proper. The {\it lexing\/} pass (also called {\it scanning}, we use these
terms interchangeably) clumps various sequences of characters into
{\it tokens\/} to facilitate the parsing stage. The reasons for this
particular hierarchy are largely pragmatic and are partially historic
@@ -1242,7 +1243,7 @@ phases, as well, although it usually isn't).
If one recalls a few basic facts from the formal language theory, it
becomes obvious that a lexer, that parses {\it regular\/} languages,
-can (theoretically) be replaced by an {\sc LALR} parser, that parses {\it
+can be (in theory) replaced by an {\sc LALR} parser, that parses {\it
context-free\/} ones (or some subset thereof, which is
still a super set of all regular languages). A common justification given for
creating specialized lexers is efficiency and speed. The
@@ -1266,7 +1267,10 @@ matching input is accepted. The only straightforward way to do this
with a traditional parser is to parse longer and longer inputs again
and again. While this process can be optimized to a certain degree,
the fact that a parser has a {\it stack\/} to maintain limits its
-ability to back up.
+ability to back up\footnote{It should be also mentioned that the fact that
+the lexing pass takes place prior to the parser consuming the resulting tokens
+allows one to process some grammars that are not context free. See, for example
+the {\em parser hack\/} used to process |typedef|s in \Cee.}.
As an aside, the mechanism by which \CWEB\ assembles its `scraps'
into chunks of recognized code is essentially iterative lexing,
@@ -1450,7 +1454,7 @@ altering the grammar mentioned above apply in this case, as well, only
at the `lexical analysis level'. At a minimum, the set of tokens
matched by the scanner would have to be altered.
-A much more satisfying approach involves inserting the hints at the input stage and
+A much more satisfying approach, however, involves inserting the hints at the input stage and
passing this information to the scanner and the parser as part of the token
`values'. The hints themselves can masquerade as characters ignored by the scanner
(white space\footnote{Or even the `intercharacter space', to make the
@@ -1482,7 +1486,8 @@ This is exactly what the scanner produced by the tools in this package
does: along with the main stream of tokens meant for the parser, it
produces two\footnote{There would be no difficulty in splitting either
of these streams into multiple `substreams' by modifying the stream
-extraction macros accordingly.} hidden streams (called the \.{\\yyformat} stream and
+extraction macros accordingly.} hidden streams\namedspot{parser.streams}
+(called the \.{\\yyformat} stream and
the \.{\\yystash} stream) and provides the parser with two
strings (currently only strings of digits are used although arbitrary
sequences of \TeX\ tokens can be used as pointers) with the promise
@@ -1490,10 +1495,13 @@ that {\it all the `hints' between the beginning of the corresponding
stream and the point labeled by the current stream pointer appeared
among the characters up to and, possibly, including the ones matched
as the current token}. The macros to extract the relevant parts of the
-streams (\.{\\yyreadfifo} and its cousins) are provided for the
+streams (\.{\\consumelistupto} and its cousins) are provided for the
convenience of the parser designer.
-The \.{\\yystash} stream collects all the typesetting commands inserted by
+What the parser does with these pointers and the information they provide, is
+up to the parser designer (the parsers for \flex\ and \bison\ syntax
+in this package use somewhat different strategies).
+The \.{\\yystash} stream currently collects all the typesetting commands inserted by
\CWEB\ to be possibly used in displaying the action code in \bison\
productions, for example. Because of this, it may appear in somewhat
unexpected places, introducing spaces where the programmer did not
@@ -1505,10 +1513,10 @@ The interested reader can consult the input routine macros in
\.{yyinput.sty} for the
details of the internal representation of the streams.
-In the interest of full disclosure, let me point out that this simple
+In the interest of full disclosure, it should be pointed out that this simple
technique introduces a significant strain on \TeX's
computational resources: the lowest level macros, the ones that handle
-character input and are thus executed (sometimes multiple times), for
+character input and are thus executed (in some cases multiple times), for
{\it every\/} character in the input stream are rather complicated and
therefore, slow. Whenever the use of such streams is not desired a simpler
input routine can be written to speed up the process (see
@@ -1517,9 +1525,13 @@ input routine can be written to speed up the process (see
Finally, while probably not directly related to the present
discussion, this approach has one more interesting feature: after the
parser is finished, the parser output and the streams exist
-`statically', fully available for any last minute preprocessing or for
+`statically', fully available for any last minute postprocessing or for
debugging purposes, if necessary\footnote{One may think of the parser output
-as an {\it executable abstract syntax tree (AST)}.}. Under most circumstances, the parser
+as an {\it executable abstract syntax tree\/} (\AST\ or \EAST\ if one
+likes cute abbreviations, or even e\AST\ for an extra touch of modernity).
+This parser feature is used to implement the facility that allows easy referencing of
+productions in the section that implements the action code for one. See \.{yyunion.sty}
+and the source of this file (\.{splint.w}) for details.}. Under most circumstances, the parser
output is `executed' and the macros in the output are the ones reading
the various streams using the pointers supplied at the parsing stage
(at least, this is the case for all the parsers supplied with the
@@ -1532,7 +1544,9 @@ how the tables produced by \bison\ get converted into \TeX\ {\it macros\/}
that drive the parser in {\it \TeX}.
The tables that drive the \bison\ input parsers
-are collected in \.{\{b,d,f,g,n\}yytab.tex} and \.{small\_tab.tex}. Each
+are collected in \.{\{b,d,f,g,n\}yytab.tex}, \.{small\_tab.tex} and other similarly named
+files\footnote{Incidentally, one of the names above is not used anymore. See the \.{cweb}
+directory after a successful build to find out which. Aren't footnotes great?!}. Each
one of these files contains the tables that implement a specific parser
used during different stages of processing.
Their exact function is well explained
@@ -1584,30 +1598,34 @@ it after \.{\\classexpand} (such sequences are usually prepared by the
\bison\ from your grammar).
You can give a case a readable label (say, \.{brackets}) and enclose
-this label in \.{\\raw}$\ldots$\.{\\raw}. A word of caution: an `\.{a}'
-inside of \.{\\raw}$\ldots$\.{\\raw} (which is most likely an
-\.{a}$_{11}$ unless you played with the category codes before loading the
-\.{\\switchon} macros) and the one outside it are two different
+this label in \.{\\raw}$\ldots$\.{\\raw}. A word of caution: an
+`\.{a}' inside of \.{\\raw}$\ldots$\.{\\raw} (which is most likely an
+\.{a}$_{11}$ unless you played with the category codes before loading
+the \.{\\switchon} macros) and the one outside it are two different
characters, as one is no longer a letter (category 11) in the eyes of
\TeX\ whereas the other one still is. For this reason one should not
-use characters other than letters in h\.{\{}is\.{,}er\.{\}} state
-{\em names}: the way a state picks an action does not distinguish between,
+use characters other than letters in h\.{\{}is\.{,}er\.{\}} state {\em
+names\/} if such characters can form tokens by themselves:
+the way a state picks an action does not distinguish between,
say, a `\.{(}' in `\.{(letter)}' and a stand alone `\.{(}' and may
pick an action that you did not intend\footnote{One way to mitigate
this is by putting such named states at the end of the switch, {\em
-after\/} the actions labelled by the standalone characters.}.
-This applies even if `\.{(}'
-is not among the characters explicitly inserted in the state macro: if
-an action for a given character is not found in the state macro, the
-\.{\\switchon} macro will insert a current \.{\\default} action
-instead, which most often you would want to be \.{\\yylex} or
-\.{\\yyinput} (i.e.\ skip this token). If a single `\.{(}' or `\.{)}' matches
-the braced group that follows `\.{(letter)}' chaos may ensue (most
-likely \TeX\ will keep reading past the \.{\\end} or \.{\\yyeof} that
-should have terminated the input). Make the names of character
-categories as unique as possible: the \.{\\switchon} is simply a
-string matching mechanism, with the added differentiation between
-characters of different categories.
+after\/} the actions labelled by the standalone characters. There is nothing
+special about non-letter characters, of course. To continue the \.{letter}
+example, placing a state named \.{let} {\em after\/} the \.{letter} one
+will make it essentially invisible to the switch macros for the reasons
+explained before this footnote.}. This applies even if `\.{(}' is not among
+the characters explicitly
+inserted in the state macro: if an action for a given character is not
+found in the state macro, the \.{\\switchon} macro will insert a
+current \.{\\default} action instead, which most often you would want
+to be \.{\\yylex} or \.{\\yyinput} (i.e.\ skip this token). If a
+single `\.{(}' or `\.{)}' matches the braced group that follows
+`\.{(letter)}' chaos may ensue (most likely \TeX\ will keep reading
+past the \.{\\end} or \.{\\yyeof} that should have terminated the
+input). Make the names of character categories as unique as possible:
+the \.{\\switchon} is simply a string matching mechanism, with the
+added differentiation between characters of different categories.
Finally, the construct \.{\\statecomment}{\it
anything\/}\.{\\statecomment} allows you to insert comments in the
@@ -1620,15 +1638,14 @@ makes the debugging information difficult to decipher). The debugging
mode for the lexer implemented with these macros is activated by
\.{\\tracedfatrue}.
-The functionality of the \.{\\switchon} (as well as the \.{\\switchonwithtype}, which
-is capable of some rudimentary type checking) macros (for `historical'
-reasons, one can also use \.{\\action} as a synonym for the latter) has been
-implemented in a number of other macro packages (see \cite[Fi] that
-discusses the well-known and widely used \.{\\CASE} and \.{\\FIND}
-macros). The macros in this collection have the additional property
-that the only assignments that persist after the \.{\\switchon}
-completes are the ones performed by the user code inside the selected
-case.
+The functionality of the \.{\\switchon} (as well as the
+\.{\\switchonwithtype}, which is capable of some rudimentary type
+checking) macros has been implemented in a number of other macro
+packages (see \cite[Fi] that discusses the well-known and widely used
+\.{\\CASE} and \.{\\FIND} macros). The macros in this collection have
+the additional property that the only assignments that persist after
+the \.{\\switchon} completes are the ones performed by the user code
+inside the selected case.
This last property of the switch macros is implemented using another
mechanism that is part of this macro suite: the `subroutine-like'
@@ -1662,7 +1679,10 @@ be able to write parsers of arbitrary sophistication:
value of the $n$-th term of the rule's right hand side, $n>0$. The left
hand side of a production is accessed through \.{\\yyval}. A
convenient shortcut is \.{\\yy0\{{\rm \TeX\space material}\}} which
-will expand (as in \.{\\edef}) the `\TeX\ material' inside the braces. Thus, a simple way
+will expand (as in \.{\\edef}) the `\TeX\ material' inside the braces and store the result
+in \.{\\yyval} (note that this only works if a sequence of \.{0}s, possibly followed or preceeded
+by spaces are the only tokens between \.{\\yy} and the opening braces; see the discussion of
+\.{\\bb} macros below for a description of what happens in other cases). Thus, a simple way
to concatenate the values of the first two production terms is
\.{\\yy0\{\\the\\yy(1)\\the\\yy(2)\}}. The included \bison\
parser can also be used to provide support for `symbolic names',
@@ -1673,8 +1693,9 @@ however.
There is also a \.{\\bb$\,n$} macro, that has no analogue in the
`real' \bison\ parsers, and provides access to the term
-values in the `natural order' (e.g.~\.{\\bb1} is the last term read). Its
-intended use is with the `inline' rules (see the main parser for
+values in the `natural order' (e.g.~\.{\\bb1} is the last term in the part of
+the production preceeding the action). Its intended use is with the `inline'
+rules (see the main parser for
such examples). As of version \.{3.0} \bison\ no longer outputs
|yyrhs| and |yyprhs|, which makes it impossible to produce the
|yyrthree| array necessary for processing such rules in the `left to right'
@@ -1682,13 +1703,41 @@ order. One might also note that the new notation is better suited for
the inline rules since the value that is pushed on the stack is that
of \.{\\bb0}, i.e.~the term implicitly inserted by \bison. Be aware
that there are no \.{\\bb[$\cdot$]} or \.{\\bb($\cdot$)} versions of
-these macros, for obvious reasons. A less obvious feature of this
+these macros, for obvious reasons\footnote{The obvious reason is the mechanism
+used by \.{\\yy[$\cdot$]} and \.{\\yy($\cdot$)} to make them expandable.
+These macros are basically references to the appropriate token registers. Since
+the \.{\\bb} macros were designed for the environment where \.{\\yylen} is unknown,
+establishing such references before the action is executed is not possible. A
+less obvious reason is the author's lazy approach.}. A less obvious feature of this
macro is its `nonexpandable' nature. This means they cannot be used
-inside \.{\\edef}. Thus, the most common use pattern is
-\.{\\bb$\,n$\{\\toks$\,m$\}} with a subsequent expansion of
-\.{\\toks$\,m$}. Making these macros expandable is certainly possible
+inside \.{\\edef} (just like its \.{\\yy$\,n$} counterpart, it makes several
+assignments which will not be executed by \.{\\edef}).
+Thus, the most common use pattern is \.{\\bb$\,n$\{\\toks$\,m$\}} (where $n>0$)
+with a subsequent expansion of \.{\\toks$\,m$}\footnote{Similar to how \.{\\yy$\,n$} macros
+work, whenever $n>0$, this pattern simply puts the contents of the braced group
+that follows in front of a (braced) single expansion of the appropriate
+value on the stack. If, as in the example above, the contents of the
+braced group are \.{\\toks$\,m$}, this effectively stores the value of the braced group in
+the token register. In the case $n=0$ the meaning is different:
+the stack value {\em corresponding to the implicit term\/} becomes the expanded (by \.{\\edef})
+contents of the braced group following \.{\\bb$\,n$}.}.
+Making these macros expandable is certainly possible
but does not seem crucial for the intended limited use pattern.
+Finally, the scripts included with \splint\ include a postprocessor
+(see the appropriate~\.{Makefile} for further details) that allows the
+use of the `native' \bison\ term references (i.e.\ of the form
+\.{\char`\$}$\ldots$) to access the value stack\footnote{Incidentally,
+\bison\ itself uses a preprocessor (\.{M4}) to turn its term references
+into valid \Cee.}. Utilizing the postprocessor allows any syntax for
+term references used by \bison\ to be used inside \.{TeX}$\ldots$ \Cee\ macros.
+In this case a typical
+idiom is \.{\\the\char`\$[term\_name]} to get the value of
+\prodstyle{term_name}. While storing a new value for the term (i.e.\
+modifying the value stack) is also possible, it is not very
+straightforward and thus not recommended. This applies to all forms of
+term references discussed above.
+
Naturally, a parser writer may need a number of other data
abstractions to complete the task. Since these are highly dependent on
the nature of the processing the parser is supposed to provide, we
@@ -1703,7 +1752,8 @@ most importantly, to create `reentrant' parsers that can, e.g.\ call
{\it themselves\/} recursively.
@*1 `Optimization'.
-\namedspot{optimization}By default, the generated parser and scanner keep all of their tables
+\namedspot{optimization}By default, the generated parser and scanner
+keep all of their tables
in separate token registers. Each stack is kept in a single macro (this
description is further complicated by the support for parser {\it
namespaces\/} that exists even for unoptimized parsers but this
@@ -1806,7 +1856,8 @@ appropriate terms in a production. If mathematics pays your bills, use
\let\hostparsernamespace\mainnamespace % to typeset examples in the text
% properly
-@**Index. This section is, perhaps, the most valuable product of
+@**Index. \global\let\secrangedisplay\empty% do not show the current section range anymore
+This section is, perhaps, the most valuable product of
\CWEB's labors. It lists references to definitions (set in {\it
italic}) as well as uses for each \Cee\ identifier used in the
source. Special facilities have been added to extend the indexing to
@@ -1845,7 +1896,7 @@ appeared on the left hand side of a production. A production:
}%
\beginmprod
left_hand_side:
- term.1 term.2 term.3 \{\stashed{|TeX_("/do/something/yy(1)");|}\}
+ term.1 term.2 term.3 \{\stashed{|TeX_("/do/something/with/yy(1)");|}\}
\endmprod
inside the \TeX\ part of a \CWEB\ section will generate several
index entries, as well, including the entries for any
@@ -1865,20 +1916,18 @@ available, thus avoiding referencing the same token twice).
\TeX\ control sequences are listed following the index of all \bison\ and \flex\
entries. The different sections of the index are separated by a {\it dinkus\/}
-(\dinkus). Since it is nearly impossible to determine at what point a
+(\dinkus)@^dinkus (\dinkus)@>. Since it is nearly impossible to determine at what point a
\TeX\ macro is defined (and most of them are defined outside of the
\CWEB\ sources), only their uses are listed (to be more precise, {\it
every\/} appearance of a macro is assumed to be its use). In a few cases, a
`graphic' representation for a control sequence appears in the index (for
-example, {\let\writetexidxentry\writetextxtidxentry
-\def\texnspace{texline}\def\texispace{index}\inlineTeXx{/getfirst}} represents
+example, \texref{/getfirst} represents
{\let\writetexidxentry\writetextxtidxentry
\def\texnspace{other}\def\texispace{other}\inlineTeXx{/getfirst}$\!$}).
The index entries are ordered alphabetically. The
latter may not be entirely obvious in the cases when the `graphical
representation' of the corresponding token manifests a significant
-departure from its string version (such as
-{\let\writetexidxentry\writetextxtidxentry|TeX_("/yy(1)");|}
+departure from its string version (such as \texref{/yy(1)}
instead of {\def\texnspace{other}\def\texispace{other}%
\let\writetexidxentry\writetextxtidxentry
|TeX_("/yy(1)");|$\!$}). Incidentally, for the examples on this page
@@ -1886,11 +1935,8 @@ instead of {\def\texnspace{other}\def\texispace{other}%
the `graphic' as well as `text' versions of the control sequence are
indexed. It is instructive to verify that their location in the index
corresponds to the `spelling' of their visual representation (thus,
-{\let\writetexidxentry\writetextxtidxentry
-\def\texnspace{texline}\def\texispace{index}\inlineTeXx{/getfirst}}
-appears under `p'). One should also be aware that the indexing of some terms has
-been suppressed, since they appear too often.
-\unsetfootnotes % this way the footnote stream is not affected by the extra index pages
+\texref{/getfirst} appears under `p'). One should also be aware that
+the indexing of some terms has been suppressed, since they appear too often.
% TODO: explain the visibility system. Note the anomalous order of \prodstyle{term.1}
% vs.~\prodstyle{term0} due to the dot in \.{term.1}, which is otherwise invisible. Underscore the
% importance of following a consistent naming scheme, including the `stringized' versions
@@ -1899,15 +1945,5 @@ been suppressed, since they appear too often.
@q the lack of control over the generation of \CWEB's index; the correct order @>
@q of index entries depends on the placement of this inclusion @>
@i alphas.hx
-
-\closeout\gindex
-\termindexfalse % do not attach indexing entries to the terms in the index, or the section list
-\def\next{\expandafter\eatone\string}
-\edef\unindexable{{\next\the}{\next\nx}{\next\yy}{\next\yylexnext}{\next\else}{\next\fi}{\next\yyBEGIN}{\next\next}}
-\input gindex.sty
-%\indexverbosetrue
-\let\inx\inxmod
-\let\fin\finmod
-\lxrefseparator % start generating section lists
-%\displaytokenrawtrue % so that the `nonstringified' version of the token is displayed as well
-\def\topofcontents{\null\vskip-3\baselineskip\centerline{C{\sc ONTENTS} (\sc\uppercase\expandafter{\title})}\medskip}
+\makeunindexablex{{\csstring\the}{\csstring\nx}{\csstring\yy}{\csstring\yylexnext}%
+ {\csstring\else}{\csstring\fi}{\csstring\yyBEGIN}{\csstring\next}}
diff --git a/support/splint/cweb/ssffo.w b/support/splint/cweb/ssffo.w
deleted file mode 100644
index 315bffc798..0000000000
--- a/support/splint/cweb/ssffo.w
+++ /dev/null
@@ -1,123 +0,0 @@
-@q Copyright 2012-2020, Alexander Shibakov@>
-@q This file is part of SPLinT@>
-
-@q SPLinT is free software: you can redistribute it and/or modify@>
-@q it under the terms of the GNU General Public License as published by@>
-@q the Free Software Foundation, either version 3 of the License, or@>
-@q (at your option) any later version.@>
-
-@q SPLinT is distributed in the hope that it will be useful,@>
-@q but WITHOUT ANY WARRANTY; without even the implied warranty of@>
-@q MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the@>
-@q GNU General Public License for more details.@>
-
-@q You should have received a copy of the GNU General Public License@>
-@q along with SPLinT. If not, see <http://www.gnu.org/licenses/>.@>
-\input limbo.sty
-\def\optimization{5}
-\input yy.sty
-\modenormal
-\let\oldN\N
-\let\N\textN
-\let\M\textM
-% uncomment the next line to leave the typesetting of tokens in its raw state.
-%\def\hostparsernamespace{[unreacheable]}
-\let\hostparsernamespace\mainnamespace
-\input btokenset.sty
-
-@** A simple scanner for \flex\ options.
-This is a `bare-bones' scanner for a subset of the `extended' \bison\
-grammar that parses some of the `extensions', namely, the
-\flex\ state declarations. It does not use the state mechanism
-itself, and is supposed to be used with the bootstrapping parser, even
-though this is not strictly necessary. It parses state declarations as
-long as they are separated into their own \CWEB\ sections and extracts
-the {\it names\/} of the states. The \flex\ scanner output `driver'
-does the rest after including the produced header file.
-
-If reusing the existing scanner for \bison\ were not a priority a
-proper way to design a scanner like this is to make it a subset of the
-existing scanner code. This way portions of the program would be made
-more reusable and the overall design made more consistent.
-@s TeX_ TeX
-@(ssffo.ll@>=
-@G
- @> @<Lexer definitions@> @=
-%{@> @<Lexer \Cee\ preamble@> @=%}
- @> @<Lexer options@> @=
-%%
- @> @<Regular expressions@> @=
-%%
-@g
-
-@ A couple of handy abbreviations to get started. Note that the
-definition of a letter is more restrictive in this case since we only
-need to grab the states of an existing \bison\ lexer. For a
-bootstrapping scanner like this it is beneficial to fail early while
-scanning something that is not in its attention domain: it results in
-faster bootstrapping and lower chance of accidentally parsing
-something that should not have been. Making the syntax and the grammar
-more restrictive helps to acheive this, as well as makes the overall
-design simpler.
-@<Lexer definitions@>=
-@G(fs1)
-letter [_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]
-id {letter}({letter}|[-0-9])*
-@g
-
-@ @<Lexer \Cee\ preamble@>=
-
-#include <stdint.h>
-#include <stdbool.h>
-
- void define_all_states( void ){}
-
-@ A standard combination of options to match the \TeX\ code that
-drives the scanner.
-@<Lexer options@>=
-@G
-%option bison-bridge
-%option noyywrap nounput noinput reentrant
-%option noyy_top_state
-%option debug
-%option stack
-%option outfile="ssffo.c"
-@g
-
-@ There are not that many regular expressions to list, since the range
-of tokens recognized by this routine is not very wide.
-@<Regular expressions@>=
- @<Scan white space@>@;
- @<Scan identifiers@>@;
-
-@ White space skipping.
-@<Scan white space@>=
-@G(fs2)
-[ \f\n\t\v] {@> @[TeX_( "/yylexnext" );@]@=}
-@g
-
-@ The rest of it are either identifiers or \.{\%}-options. The typesetting of
-the appropriate \bison\ tokens below was arranged by inputting \.{btokenset.sty} and
-relying on the pretty-printing macros for {\it \TeX} to do their job.
-@<Scan identifiers@>=
-@G(fs2)
-{id} {@> @<Return an identifier@> @=}
-"%x" {@> @[TeX_( "/yylexreturnptr{FLEX_STATE_X}" );@] @=}
-"%s" {@> @[TeX_( "/yylexreturnptr{FLEX_STATE_S}" );@] @=}
-. {@> @<React to a bad character@> @=}
-@g
-
-@ @<React to a bad character@>=
- @[TeX_( "/iftracebadchars" );@]@;
- @[TeX_( " /yycomplain{invalid character(s): /the/yytext}" );@]@;
- @[TeX_( "/fi" );@]@;
- @[TeX_( "/yylexreturn{$undefined}" );@]@;
-
-@ The lexer returns standard \.{\\yyunion} types.
-@<Return an identifier@>=
- @[TeX_( "/edef/next{/yylval{{/the/yytextpure}{/the/yytext}" );@]@;
- @[TeX_( " {/the/yyfmark}{/the/yysmark}}}/next" );@]@;
- @[TeX_( "/yylexreturn{ID}" );@]@;
-
-@** Index.
-\def\TeXx{\TeX\ material} \ No newline at end of file
diff --git a/support/splint/doc/ldman.pdf b/support/splint/doc/ldman.pdf
index d1d798816a..9e53467d24 100644
--- a/support/splint/doc/ldman.pdf
+++ b/support/splint/doc/ldman.pdf
Binary files differ
diff --git a/support/splint/doc/splint.pdf b/support/splint/doc/splint.pdf
index 76600ea682..9f031110ac 100644
--- a/support/splint/doc/splint.pdf
+++ b/support/splint/doc/splint.pdf
Binary files differ
diff --git a/support/splint/examples/count/count.sty b/support/splint/examples/count/count.sty
index d9fed05f94..d697096141 100644
--- a/support/splint/examples/count/count.sty
+++ b/support/splint/examples/count/count.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
diff --git a/support/splint/examples/expression/Makefile b/support/splint/examples/expression/Makefile
index 6f306939b6..741e94664c 100644
--- a/support/splint/examples/expression/Makefile
+++ b/support/splint/examples/expression/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2012-2020, Alexander Shibakov
+# Copyright 2012-2022, Alexander Shibakov
# This file is part of SPLinT
#
# SPLinT is free software: you can redistribute it and/or modify
@@ -54,7 +54,7 @@ test.tex ${PARSER}.yy ${LEXER}.ll: expression.x
expression.tex: expression.x
@${CWEAVE} $<
-expression.pdf: expression.tex ${SPLINT_XPTABLES} ${SPLINT_XLTABLES} ${SPLINT_ROOT}cweb/bo.tok ${SPLINT_ROOT}cweb/fo.tok etoks.sty
+expression.pdf: expression.tex ${SPLINT_XTABLES} etoks.sty
@${PDFTEX} $<
test: test.tex ptab.tex ltab.tex
diff --git a/support/splint/examples/expression/etoks.sty b/support/splint/examples/expression/etoks.sty
index 706ad35818..6df6c0d3be 100644
--- a/support/splint/examples/expression/etoks.sty
+++ b/support/splint/examples/expression/etoks.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
diff --git a/support/splint/examples/expression/expression.sty b/support/splint/examples/expression/expression.sty
index ac0d8ba7e5..8fe0970159 100644
--- a/support/splint/examples/expression/expression.sty
+++ b/support/splint/examples/expression/expression.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
diff --git a/support/splint/examples/expression/expression.w b/support/splint/examples/expression/expression.w
index 9e96ea44d0..1f6a2f6b61 100644
--- a/support/splint/examples/expression/expression.w
+++ b/support/splint/examples/expression/expression.w
@@ -1,4 +1,4 @@
-@q Copyright 2012-2020, Alexander Shibakov@>
+@q Copyright 2012-2024, Alexander Shibakov@>
@q This file is part of SPLinT@>
@q SPLinT is free software: you can redistribute it and/or modify@>
@@ -16,9 +16,12 @@
\input limbo.sty
\def\optimization{5}
\input yy.sty
+\input dcols.sty
\modenormal
+\initauxstream
-@** Parser file. This is an example parser for expressions. It takes
+@** Parser file.
+This is an example parser for expressions. It takes
advantage of some of the features of \splint\ generated parsers,
although anything that takes more than a straightforward setup is
omitted.
@@ -140,8 +143,6 @@ as they have to be inserted in a place that is aware of the internal definitions
definitions are used.
@<\.{expression} parser \Cee\ postamble@>=
-#define YYPRINT(file, type, value) @[yyprint (file, type, value)@]
- static void yyprint (FILE *file, int type, YYSTYPE value){}
@ Union of types. Empty as well.
@@ -175,7 +176,7 @@ int [0-9]+
void define_all_states( void ){}
@ @<Lexer options@>=
-@G
+@G(fs1)
%option bison-bridge
%option noyywrap nounput noinput reentrant
%option noyy_top_state
@@ -206,13 +207,14 @@ int [0-9]+
@[TeX_( "/iftracebadchars" );@]@;
@[TeX_( " /yycomplain{invalid character(s): /the/yytext}" );@]@;
@[TeX_( "/fi" );@]@;
- @[TeX_( "/yylexreturn{$undefined}" );@]@;
+ @[TeX_( "/yyerrterminate" );@]@;
@*Test file. The test file includes a handy list of debugging options
that can be activated to see the inner workings of the parser and
scanner routines.
@(test.txx@>=
@G
+\chardef\other=12 % needed for some macros to work
\input expression.sty
\iffalse
@@ -240,7 +242,7 @@ scanner routines.
\bye
@g
-@**Index.
-\immediate\closeout\exampletable
+@**Index.\global\let\secrangedisplay\empty% do not show the current section range anymore
+\global\topskip=9pt
\def\Tex{\TeX\ output}
\def\TeXx{\TeX\ output}
diff --git a/support/splint/examples/ld/Makefile b/support/splint/examples/ld/Makefile
index 24bf4a7a9f..8d876e55c9 100644
--- a/support/splint/examples/ld/Makefile
+++ b/support/splint/examples/ld/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2012-2020, Alexander Shibakov
+# Copyright 2012-2024, Alexander Shibakov
# This file is part of SPLinT
#
# SPLinT is free software: you can redistribute it and/or modify
@@ -22,10 +22,11 @@ PARSER = ldp
LEXER = ldl
MANUAL = ldman
-LD_CORE_PREREQS = ${SPLINT_XTEXSTYLES} ${SPLINT_XPTABLES} ${SPLINT_XLTABLES} ${SPLINT_ROOT}cweb/bo.tok ${SPLINT_ROOT}cweb/fo.tok
-LD_DOC_PREREQS = %.tex %.sty ${PARSER}.tok ldunion.sty ldtexlex.sty ldint.sty ldfrontmatter.sty ${LD_CORE_PREREQS}
-LD_DOC_PREREQS += ptab.tex ltab.tex ld_small_tab.tex ld_small_dfa.tex ltokenset.sty lstokenset.sty
-LD_DOC_PREREQS_XREF = ${LD_DOC_PREREQS} %.scn %.idx
+LD_CORE_PREREQS = ${SPLINT_XTEXSTYLES} ${SPLINT_XTABLES}
+LD_DOC_PREREQS_STATIC = ldunion.sty ldtexlex.sty ldint.sty ltokenset.sty lstokenset.sty
+LD_DOC_PREREQS_GEN = ldptab.tex ldltab.tex ld_small_tab.tex ld_small_dfa.tex ${PARSER}.tok ldsetup.sty
+LD_DOC_PREREQS_XREF = ${LD_CORE_PREREQS} %.sty ${LD_DOC_PREREQS_STATIC} %.tex ${LD_DOC_PREREQS_GEN} %.scn %.idx
+LD_DOC_PREREQS_XREF += ldfrontmatter.sty
include ../../makefile.inc
include ${SPLINT_ROOT}makefile.loc
@@ -35,13 +36,13 @@ include ${SPLINT_ROOT}makefile.loc
ptabout: ${SPLINT_ROOT}cweb/mkeparser.c ${PARSER}.c
${CC} ${BISON_STATE} -DPARSER_FILE=\"../examples/ld/$(lastword $^)\" -DYYPARSE_PARAMETERS= -o $@ $<
-ptab.tex: ptabout
+ldptab.tex: ptabout
$< --optimize-actions --optimize-tables $@
ltabout: ${SPLINT_ROOT}cweb/mkscanner.c ldl_states.h ${LEXER}.c
${CC} -DLEXER_FILE=\"../examples/ld/$(lastword $^)\" -o $@ $<
-ltab.tex: ltabout
+ldltab.tex: ltabout
$< --optimize-actions --optimize-tables $@
${LEXER}.c: ${LEXER}.l
@@ -53,7 +54,8 @@ ${PARSER}.yy : ldgram.x
${LEXER}.ll: ldlex.x
@${CTANGLE} $<
-${MANUAL}.stx: ${MANUAL}.x ldgram.x ldlex.x ldlexo.x ldgramo.x ldnp.x
+${MANUAL}.stx \
+ldsetup.stx: ${MANUAL}.x ldgram.x ldlex.x ldlexo.x ldgramo.x ldnp.x ldexample_l.hx ldexample_t.hx alphas.hx
@${CTANGLE} $<
# term name parser for ld grammar
@@ -101,11 +103,13 @@ ldexample_%.hx: ldexample.hw
alphas.hx:
${MISCCW} --alpha-list --alpha-length=1 $@
-${MANUAL}.tex: ${MANUAL}.x ldgram.x ldlex.x ldlexo.x ldgramo.x ldnp.x ldexample_l.hx ldexample_b.hx alphas.hx
+${MANUAL}.tex: ${MANUAL}.x ldgram.x ldlex.x ldlexo.x ldgramo.x ldnp.x ldexample_l.hx ldexample_t.hx alphas.hx
+ @echo "Preparing the ${MANUAL}.tex file ..."
-${CWEAVE} $<
-${MANUAL}.sty: ${MANUAL}.stx
- ${UNLINE} $< $@
+${MANUAL}.sty \
+ldsetup.sty:%.sty: %.stx
+ ${UNLINE} $< $@
${MANUAL}.gdx: %.gdx: ${LD_DOC_PREREQS_XREF} ${PARSER}.tok
@echo "Making the bison and TeX indices ..."
@@ -116,11 +120,8 @@ ${MANUAL}.gdx: %.gdx: ${LD_DOC_PREREQS_XREF} ${PARSER}.tok
${MANUAL}.gdy: %.gdy: %.gdx
${BINDX} --fine $^ $@
-${MANUAL}.xxr: %.xxr: %.tex
- ${PDFTEX} $*.tex
-
-${MANUAL}.pdf: %.pdf: ${LD_DOC_PREREQS_XREF} %.gdy %.xxr
- ${PDFTEX} $< && touch $*.gdy && touch $*.pdf
+${MANUAL}.pdf: %.pdf: ${LD_DOC_PREREQS_XREF} %.gdy %.aux
+ ${PDFTEX} $*.tex && touch $*.gdy && touch $*.pdf
${PARSER}.tok: ldgram.tex ${MANUAL}.sty ${LD_CORE_PREREQS}
${TEX} ${MODEBOOTSTRAP} \\input $<
@@ -130,15 +131,25 @@ ldl_states.h: ldlex.tex ${MANUAL}.sty ${LD_CORE_PREREQS}
ldgram.tex ldlex.tex: \
%.tex: %.x
- -${CWEAVE} -x $<
+ @echo "Building ldgram.tex and ldlex.tex."
+ -${CWEAVE} -x $*.x
docs: ${MANUAL}.pdf
+install: docs
+ @cp ${LD_DOC_PREREQS_STATIC} ${SPLINT_INSTALL_DIR}/tex/
+ @cp ${LD_DOC_PREREQS_GEN} ${SPLINT_INSTALL_DIR}/cweb/
+
+uninstall:
+ @rm -f $(patsubst %, ${SPLINT_INSTALL_DIR}/tex/%, ${LD_DOC_PREREQS_STATIC})
+ @rm -f $(patsubst %, ${SPLINT_INSTALL_DIR}/cweb/%, ${LD_DOC_PREREQS_GEN})
+
mostlyclean: clean_temp
-rm -f ptabout ltabout ldsmalll_out ldsmallp_out ldnump_out ldnuml_out ${MANUAL}.c
clean: clean_core
- -rm -f ptabout ltabout ldsmalll_out ldsmallp_out ldnump_out ldnuml_out *.stx ldman.sty
+ -rm -f ptabout ltabout ldsmalll_out ldsmallp_out ldnump_out ldnuml_out *.stx \
+ ldman.sty ldsetup.sty
distclean: clean
cd ${SPLINT_ROOT} && ${MAKE} clean
diff --git a/support/splint/examples/ld/ldexample.hw b/support/splint/examples/ld/ldexample.hw
index a5cab97d2a..d9cb732624 100644
--- a/support/splint/examples/ld/ldexample.hw
+++ b/support/splint/examples/ld/ldexample.hw
@@ -4,7 +4,7 @@ MEMORY
{
@> @<Some random portion of \ld\ code@> @=
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
- FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 128K
+ FLASH (rx!w) : ORIGIN = 0x8000000, LENGTH = 128K
ASH (rx) : ORIGIN = 8001000, LENGTH = 128K
@> @<Some random portion of \ld\ code@> @=
CLASH (rx) : ORIGIN = 700000, LENGTH = 128K
@@ -27,6 +27,7 @@ ENTRY(_entry);
SECTIONS
{
@> @<Some random portion of \ld\ code@> @=
+ . = ORIGIN(FLASH);
.isr_vector ALIGN(8) (NOLOAD): AT(.) ALIGN(.) ALIGN_WITH_INPUT SUBALIGN(8) SPECIAL
{
. = ALIGN(4);
@@ -73,5 +74,18 @@ SECTIONS
_ebss = . ;
} >RAM
@> @<Some random portion of \ld\ code@> @=
+ . = ALIGN(0x0001ABCD);
+ _ffbegin = .;
+ OVERLAY : NOCROSSREFS AT ( _ffabs ) {
+ .free_func0
+ {
+ *(.free_func0)
+ . = ALIGN(4);
+ }
+ .free_func1
+ {
+ *(.free_func1)
+ }
+ } >RAM
}
diff --git a/support/splint/examples/ld/ldgram.w b/support/splint/examples/ld/ldgram.w
index 5e7ff73a03..3671ee52ce 100644
--- a/support/splint/examples/ld/ldgram.w
+++ b/support/splint/examples/ld/ldgram.w
@@ -1,4 +1,4 @@
-@q Copyright 2012-2020 Alexander Shibakov@>
+@q Copyright 2012-2022 Alexander Shibakov@>
@q Copyright 2002-2014 Free Software Foundation, Inc.@>
@q This file is part of SPLinT@>
@@ -18,10 +18,12 @@
@** The parser.
\ifbootstrapmode
\def\tokendeffile{ldp.tok}%
- \input ldman.sty
+ \input ldman.sty
+ \def\bstrapparser{dyytab.tex}% only the full or preamble parser would know how to
+ % parse grammar sections that mix \prodstyle{\%token}
+ % declarations with other \bison\ syntax
+ \def\bstraptokens{bo.tok}% token equivalences for the full lexer
\modebootstrap
- \input dcols.sty
- \setupfootnotes
\def\MRI{}
\def\ld{}
\fi
@@ -76,8 +78,6 @@ is supplied by the \TeX\ macros in \.{ldman.sty}.
@ @<Union of grammar parser types@>=
@ @<\ld\ parser \Cee\ postamble@>=
-#define YYPRINT(file, type, value) yyprint (file, type, value)
- static void yyprint (FILE *file, int type, YYSTYPE value){}
@ @<\ld\ parser productions@>=
@<\GNU\ \ld\ script rules@>@;
@@ -129,13 +129,13 @@ by the \ld\ parser are put in a single list.
%left OROR ANDAND '|' '^' '&' EQ NE '<' '>' LE GE LSHIFT RSHIFT '+' '-' '*' '/' '%' '('
@g
-@*1 Grammar rules, an overview.
+@*1 Grammar rules, an overview.
The first natural step in transforming an existing parser into a
`parser stack' for pretty printing is to understand the `anatomy' of
the grammar. Not every grammar is suitable for such a transformation
and in almost every case, some modifications are needed. The
parser and lexer implementation for \ld\ is not terrible although it does
-have some idiosynchasies that could have been eliminated by a careful
+have some idiosynchrasies that could have been eliminated by a careful
grammar redesign. Instead of invasive rewriting of significant
portions of the grammar, the approach taken here merely omits some
rules and partitions the grammar into several subsets, each of which
@@ -143,7 +143,7 @@ is supposed to handle a well defined logical section of an \ld\ script
file.
One example of a trick used by the \ld\ parser that is not appropriate for a
-pretty printing grammar implements a way of handling the choice of the
+pretty printing grammar is the way the original parser handles the choice of the
format of an input file. After a command line option that selects the
input format has been read (or the format has been determined using
some other method), the first token output by the lexer branches the
@@ -219,12 +219,14 @@ defsym_expr:
@ {\it Syntax within an \MRI\ script file}\footnote{As explained at the
beginning of this chapter, the text in {\it italics\/} was taken from
-the original comments by \ld\ parser and lexer programmers.}. The parser for typesetting
+the original comments by the \ld\ parser and lexer programmers.}. The parser for typesetting
is only intended to process \GNU\ \ld\ scripts and does not concern
itself with any additional compatibility modes. For this reason, all
support for \MRI\ style scripts has been omitted. One use for the
section below is a small demonstration of the formatting tools that
change the output of the \bison\ parser.
+%\checktabletrue
+%\tracingliststrue
@<\MRI\ style script rules@>=
@G
@t}\vb{\inline\flatten}{@>
@@ -315,6 +317,8 @@ casesymlist:
@ {\it Parsed as expressions so that commas separate entries.} The
core of the parser consists of productions describing \GNU\ \ld\ linker
scripts. The first rule is common to both \MRI\ and \GNU\ formats.
+\checktablefalse
+\tracinglistsfalse
@<\GNU\ \ld\ script rules@>=
@G
extern_name_list:
@@ -435,7 +439,7 @@ sections:
sec_or_group_p1:
sec_or_group_p1 section {@>@<Add the next section chunk@>@=}
- | sec_or_group_p1 statement_anywhere {@>@<Add the next section chunk@>@=}
+ | sec_or_group_p1 statement_anywhere {@>@<Add the next section statement@>@=}
| {@>@[TeX_( "/yy0{}" );@]@=}
;
@@ -451,10 +455,20 @@ statement_anywhere:
@[TeX_( "/yy0{/nx/ldinsertcweb/the/yy(1){sect}{/nx/ldsections{/the/yy(3)/nx/ldsectionstash/the/yy(4)}}}" );@]
@ @<Add the next section chunk@>=
- @[TeX_( "/getsecond{/yy(2)}/to/tokse/getthird{/yy(2)}/to/toksf" );@]@;
- @[TeX_( "/getfourth{/yy(2)}/to/toksg/getfifth{/yy(2)}/to/toksh" );@]@;
- @[TeXb( "/yytoksempty{/yy(1)}{/yy0{/nx/ldsectionstash{/the/tokse}{/the/toksf}/the/toksh}}" );@]@;
- @[TeXfo( " {/yy0{/the/yy(1)/nx/ldsectionseparator{/the/tokse}{/the/toksf}/the/toksh}}" );@]@;
+ @[TeX_( "/yytoksempty{/yy(2)}{/yy0{/the/yy(1)}}{" );@]@;
+ @[TeX_( " /getsecond{/yy(2)}/to/tokse/getthird{/yy(2)}/to/toksf" );@]@;
+ @[TeX_( " /getfourth{/yy(2)}/to/toksg/getfifth{/yy(2)}/to/toksh" );@]@;
+ @[TeXb( " /yytoksempty{/yy(1)}{/yy0{/nx/ldsectionstash{/the/tokse}{/the/toksf}/the/toksh}}" );@]@;
+ @[TeXa( " {/yy0{/the/yy(1)/nx/ldsectionseparator{/the/tokse}{/the/toksf}/the/toksh}}" );@]@;
+ @[TeXfo( "}" );@]@;
+
+@ @<Add the next section statement@>=
+ @[TeX_( "/yytoksempty{/yy(2)}{/yy0{/the/yy(1)}}{" );@]@;
+ @[TeX_( " /getsecond{/yy(2)}/to/tokse/getthird{/yy(2)}/to/toksf" );@]@;
+ @[TeX_( " /getfourth{/yy(2)}/to/toksg/getfifth{/yy(2)}/to/toksh" );@]@;
+ @[TeXb( " /yytoksempty{/yy(1)}{/yy0{/nx/ldsectionstash{/the/tokse}{/the/toksf}/nx/ldfreestmt{/the/toksh}}}" );@]@;
+ @[TeXa( " {/yy0{/the/yy(1)/nx/ldsectionseparator{/the/tokse}{/the/toksf}/nx/ldfreestmt{/the/toksh}}}" );@]@;
+ @[TeXfo( "}" );@]@;
@ @<Form an \prodstyle{ENTRY} statement@>=
@[TeX_( "/yy0{/nx/ldinsertcweb/the/yy(1){stmt}{/nx/ldstatement{/nx/ldentry{/nx/ldregexp{/the/yy(3)}}}}}" );@]
@@ -631,14 +645,14 @@ length:
| SHORT {}
| BYTE {}
;
-
+@t}\vb{\resetf\inline}{@>
fill_exp:
mustbe_exp {@>@<Carry on@>@=}
;
-
+@t}\vb{\flatten}{@>
fill_opt:
- '=' fill_exp {@>@[TeX_( "/yy0{/noexpand/ldfill{/the/yy(2)}}" );@]@=}
- | {@>@[TeX_( "/yy0{}" );@]@=}
+ {@>@[TeX_( "/yy0{}" );@]@=}
+ | '=' fill_exp {@>@[TeX_( "/yy0{/noexpand/ldfill{/the/yy(2)}}" );@]@=}
;
@t}\vb{\resetf}{@>
@@ -710,9 +724,7 @@ memory_spec_list:
memory_spec:
NAME {}
- attributes_opt ':'
- origin_spec
-@t}\vb{\breakline}{@>
+ attributes_opt ':' origin_spec
opt_comma length_spec {@>@<Declare a named memory region@>@=}
| INCLUDE filename {@>@<Peek at a file@>@=}
memory_spec_list_opt END {@>@<Close the file@>@=}
@@ -759,8 +771,8 @@ attributes_list:
;
attributes_string:
- NAME {@>@[TeX_( "/yy0{/noexpand/ldattributes{/the/yy(1)}}" );@]@=}
- | '!' NAME {@>@[TeX_( "/yy0{/noexpand/ldattributesneg{/the/yy(2)}}" );@]@=}
+ NAME {@>@[TeX_( "/yy0{/noexpand/ldattrstring/the/yy(1)}" );@]@=}
+ | '!' NAME {@>@[TeX_( "/yy0{/noexpand/ldattrstringneg/the/yy(2)}" );@]@=}
;
startup:
@@ -812,7 +824,7 @@ expressions out of simpler chunks and basic building blocks tied
together by algebraic operations.
@<Grammar rules@>=
@G
-exp :
+exp:
'-' exp %prec UNARY {@>@[TeX_( "/yy0{{-/the/yy(2)}}" );@]@=}
| '(' exp ')' {@>@[TeX_( "/yy0{(/the/yy(2))}" );@]@=}
| NEXT '(' exp ')' %prec UNARY {@>@[TeX_( "/yy0{/hbox{/nx/ssf next}(/the/yy(3))}" );@]@=}
@@ -844,28 +856,28 @@ exp :
@<Grammar rules@>=
@G
exp :
- DEFINED '(' NAME ')' {}
- | INT {}
+ DEFINED '(' NAME ')' {@>@[TeX_( "/def/ldfuncname{defined}" );@]@<Apply a function to a name@>@=}
+ | INT {@>@<Carry on@>@=}
| SIZEOF_HEADERS {}
- | ALIGNOF '(' NAME ')' {}
- | SIZEOF '(' NAME ')' {}
- | ADDR '(' NAME ')' {}
- | LOADADDR '(' NAME ')' {}
- | CONSTANT '(' NAME ')' {}
- | ABSOLUTE '(' exp ')' {}
+ | ALIGNOF '(' NAME ')' {@>@[TeX_( "/def/ldfuncname{alignof}" );@]@<Apply a function to a name@>@=}
+ | SIZEOF '(' NAME ')' {@>@[TeX_( "/def/ldfuncname{sizeof}" );@]@<Apply a function to a name@>@=}
+ | ADDR '(' NAME ')' {@>@[TeX_( "/def/ldfuncname{addr}" );@]@<Apply a function to a name@>@=}
+ | LOADADDR '(' NAME ')' {@>@[TeX_( "/def/ldfuncname{loadaddr}" );@]@<Apply a function to a name@>@=}
+ | CONSTANT '(' NAME ')' {@>@[TeX_( "/def/ldfuncname{constant}" );@]@<Apply a function to a name@>@=}
+ | ABSOLUTE '(' exp ')' {@>@[TeX_( "/yy0{/nx/mathop{/hbox{/nx/ssf absolute}}(/the/yy(3))}" );@]@=}
| ALIGN_K '(' exp ')' {@>@[TeX_( "/yy0{/nx/mathop{/hbox{/nx/ssf align}}(/the/yy(3))}" );@]@=}
| ALIGN_K '(' exp ',' exp ')' {}
| DATA_SEGMENT_ALIGN '(' exp ',' exp ')' {}
| DATA_SEGMENT_RELRO_END '(' exp ',' exp ')' {}
| DATA_SEGMENT_END '(' exp ')' {}
| SEGMENT_START '(' NAME ',' exp ')' {}
- | BLOCK '(' exp ')' {}
+ | BLOCK '(' exp ')' {@>@[TeX_( "/yy0{/nx/mathop{/hbox{/nx/ssf block}}(/the/yy(3))}" );@]@=}
| NAME {@>@[TeX_( "/yy0{/nx/ldregexp{/the/yy(1)}}" );@]@=}
| MAX_K '(' exp ',' exp ')' {}
| MIN_K '(' exp ',' exp ')' {}
| ASSERT_K '(' exp ',' NAME ')' {}
- | ORIGIN '(' NAME ')' {}
- | LENGTH '(' NAME ')' {}
+ | ORIGIN '(' NAME ')' {@>@[TeX_( "/def/ldfuncname{origin}" );@]@<Apply a function to a name@>@=}
+ | LENGTH '(' NAME ')' {@>@[TeX_( "/def/ldfuncname{length}" );@]@<Apply a function to a name@>@=}
| LOG2CEIL '(' exp ')' {}
;
@g
@@ -875,6 +887,9 @@ exp :
@[TeXb( "/yy0{/hbox{/nx/ttl do }/xi(/the/yy(1))/hbox{ /nx/ttl where }" );@]@;
@[TeXfo( " {/let/nx/{/nx/bigbracedel/nx/xi(x)=/nx/cases{/the/yy(5)& if /inmath{x=0}/cr/the/yy(3)& if /inmath{x/nx/not=0}}}}" );@]@;
+@ @<Apply a function to a name@>=
+@[TeX_( "/yy0{/nx/mathop{/hbox{/nx/ssf /ldfuncname}}(/nx/ldregexp{/the/yy(3))}}" );@]
+
@ @<Grammar rules@>=
@G
memspec_at_opt:
@@ -966,6 +981,10 @@ section:
@[TeXfo( " {{/the/yy(15)}{/the/yy(16)}{/the/yy(17)}{/the/yy(18)}}}}" );@]@; /*memory specifiers */
@ @<Record an overlay section@>=
+ @[TeXb( "/getfirst{/yy(1)}/to/toksa/getsecond{/yy(1)}/to/toksb" );@]@;
+ @[TeXf( "/yy0{/nx/ldinsertcweb{/the/toksa}{/the/toksb}{osect}{/nx/ldoverlay{/the/yy(3)}{/the/yy(4)}{/the/yy(5)}{/the/yy(6)}" );@]@;
+ @[TeXf( " {/the/yy(10)}" );@]@;/* sections */
+ @[TeXfo( " {{/the/yy(13)}{/the/yy(14)}{/the/yy(15)}{/the/yy(16)}}}}" );@]@; /*memory specifiers, etc.*/
@ @<Grammar rules@>=
@G
@@ -999,8 +1018,8 @@ opt_exp_with_type:
;
opt_exp_without_type:
- exp ':' {}
- | ':' {}
+ exp ':' {@>@[TeX_( "/yy0{/the/yy(1)}" );@]@=}
+ | ':' {@>@[TeX_( "/yy0{}" );@]@=}
;
opt_nocrossrefs:
@@ -1019,12 +1038,12 @@ phdr_opt:
;
overlay_section:
-
+ {@>@[TeX_( "/yy0{}" );@]@=}
| overlay_section
NAME {@>@[TeX_( "/ldlex@@script" );@]@=}
'{' statement_list_opt '}' {@>@[TeX_( "/ldlex@@popstate/ldlex@@expression" );@]@=}
phdr_opt fill_opt {@>@[TeX_( "/ldlex@@popstate" );@]@=}
- opt_comma
+ opt_comma {@>@<Add a section to the overlay@>@=}
;
@g
@@ -1032,6 +1051,15 @@ overlay_section:
@[TeXb( "/yytoksempty{/yy(1)}{/yy0{{/the/yy(3)}}}" );@]@;
@[TeXao( "{/yy0{/the/yy(1)/noexpand/ldor{/the/yy(3)}}}" );@]@;
+@ @<Add a section to the overlay@>=
+ @[TeXb( "/getthird{/yy(2)}/to/toksa/getfourth{/yy(2)}/to/toksb" );@]@;/* \prodstylens{name}{\ldnamespace} pointers */
+ @[TeXf( "/getfifth{/yy(5)}/to/toksc" );@]@;/* \prodstylens{statement\_list\_opt}{\ldnamespace} contents */
+ @[TeXf( "/yytoksempty{/yy(1)}{" );@]@;
+ @[TeXf( " /yy0{/nx/ldoverlaysection{/the/yy(2)}{/the/toksc}{/the/yy(8)}{/the/yy(9)}}" );@]@;
+ @[TeXf( "}{" );@]@;
+ @[TeXf( " /yy0{/the/yy(1)/nx/ldoverlaysection{/the/yy(2)}{/the/toksc}{/the/yy(8)}{/the/yy(9)}}" );@]@;
+ @[TeXfo( "}" );@]@;
+
@ @<Grammar rules@>=
@G
phdrs:
diff --git a/support/splint/examples/ld/ldgramo.w b/support/splint/examples/ld/ldgramo.w
index 46d46f9a1f..a036c858de 100644
--- a/support/splint/examples/ld/ldgramo.w
+++ b/support/splint/examples/ld/ldgramo.w
@@ -1,4 +1,4 @@
-@q Copyright 2020 Alexander Shibakov@>
+@q Copyright 2012-2022 Alexander Shibakov@>
@q Copyright 2002-2015 Free Software Foundation, Inc.@>
@q This file is part of SPLinT@>
@@ -492,17 +492,20 @@ statement_anywhere:
ENTRY '(' NAME ')'
{ lang_add_entry ($3, FALSE); }
| assignment end
- | ASSERT_K {@>@[ldlex_expression ();@>@=} '(' exp ',' NAME ')'
+ | ASSERT_K {@>@[ldlex_expression ();@]@=} '(' exp ',' NAME ')'
{
@O
ldlex_popstate ();
-@o
lang_add_assignment (exp_assert ($4, $6));
+@o
}
;
@g
+@q using a @@[, @@> pair instead of @@[, @@] may lead to some strange spacing artefacts @>
+@q due to the lack of \6; it is instructive to see its effects after replacing the @@] with @@> @>
+@q in the line containing ASSERT_K @>
@ \tracebadcharstrue
The {\setrulecontext{wildcardname}\prodstyle{'*'}} and \prodstyle{'?'} cases are there because the lexer returns them as
separate tokens rather than as \prodstyle{NAME}.
diff --git a/support/splint/examples/ld/ldint.sty b/support/splint/examples/ld/ldint.sty
index 83f3068dc5..a96003a53d 100644
--- a/support/splint/examples/ld/ldint.sty
+++ b/support/splint/examples/ld/ldint.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -203,9 +203,12 @@
}
\def\displayinteger#1#2#3#4#5#6#7#8{%
- {\def\ldintsep{$\,$}\hbox{\rm#7#8\rlap{${}_{#1}$}$\yystringempty{#2}{}{\lddisplayintsuffix{#2}}$}}%
+ {\def\ldintsep{$\,$}\hbox{\ldintfont#7#8\ldrlap{${}_{#1}$}$\yystringempty{#2}{}{\lddisplayintsuffix{#2}}$}}%
}
+\let\ldrlap\rlap
+\let\ldintfont\rm
+
\def\lddisplayintsuffix#1{%
\expandafter\ifx\csname ldspecialsuffixdisplay#1\endcsname\relax
\,\hbox{\tt#1}%
@@ -216,7 +219,7 @@
\def\ldspecialsuffixdisplayK{{}\cdot2^{10}}
-\def\ldspecialsuffixdisplayK{\,\hbox{\rm Kb}}
+%\def\ldspecialsuffixdisplayK{\,\hbox{\rm Kb}}
\def\displayintegerws#1#2#3#4#5#6#7{%
{\def\ldintsep{$\,$}\hbox{\rm#6#7\rlap{${}_{\yystringempty{#1}{}{\csname ldradix#1\endcsname}}$}}}%
diff --git a/support/splint/examples/ld/ldlex.w b/support/splint/examples/ld/ldlex.w
index 2312fd1027..0add0b0294 100644
--- a/support/splint/examples/ld/ldlex.w
+++ b/support/splint/examples/ld/ldlex.w
@@ -1,4 +1,4 @@
-@q Copyright 2012-2020 Alexander Shibakov@>
+@q Copyright 2012-2022 Alexander Shibakov@>
@q Copyright 2002-2014 Free Software Foundation, Inc.@>
@q This file is part of SPLinT@>
@@ -17,10 +17,10 @@
@** The lexer.
\ifbootstrapmode
- \input ldman.sty
- \modebootstrap
- \input dcols.sty
- \setupfootnotes
+ \input limbo.sty
+ \input yystype.sty
+ \input grabstates.sty
+ \immediate\openout\stlist=ldl_states.h
\def\MRI{}
\def\ld{}
\fi
@@ -37,7 +37,7 @@ the \bison\ parser which is part of this distribution.
%{@> @<\ld\ lexer \Cee\ preamble@> @=%}
@> @<\ld\ lexer options@> @=
%%
- @> @<\ld\ token regular expressions@> @=
+ @> @<Regular expressions for \ld\ tokens@> @=
%%
@O
void define_all_states( void ) {
@@ -47,7 +47,7 @@ void define_all_states( void ) {
@g
@ @<\ld\ lexer options@>=
-@G
+@G(fs1)
%option bison-bridge
%option noyywrap nounput noinput reentrant
%option noyy_top_state
@@ -57,10 +57,10 @@ void define_all_states( void ) {
@g
@ @<\ld\ lexer \Cee\ preamble@>=
-#include <stdint.h>
-#include <stdbool.h>
-@ @<Collect state definitions for the \ld\ lexer@>=
+@ The file \.{ldl\_states.h} below contains the names of all the start
+conditions@^start conditions@> (or states) collected by the bootstrap parser.
+@<Collect state definitions for the \ld\ lexer@>=
#define _register_name( name ) @[Define_State( #name, name )@]
#include "ldl_states.h"
#undef _register_name
@@ -94,7 +94,7 @@ same section simplifies the job of the
\locallink{bootstrapstates}bootstrap parser\endlink, as well.
\ifbootstrapmode\immediate\openout\stlist=ldl_states.h\fi
@<\ld\ lexer states@>=
-@G
+@G(fs1)
%s SCRIPT
%s EXPRESSION
%s BOTH
@@ -117,8 +117,9 @@ function. The typesetting parser uses the \.{\\ldcomment} macro for
the same purpose. For the curious, here is a \flex\ style regular
expression defining \Cee\ comments\footnote{Taken from W.~McKeeman's site
at
-\url{http://www.cs.dartmouth.edu/~mckeeman/cs118/assignments/comment.html}
-and adapted to \flex\ syntax.}:
+\url{http://www.cs.dartmouth.edu/~mckeeman/cs118/assignments/comment.html} and
+adapted to \flex\ syntax. Here is the same regular expression pretty printed by
+\splint: \flexrestyle{"/*"("/"`[\^*/]`"*"+[\^*/])*"*"+"/"}}:
$$
\hbox{\.{"/*" ("/"\yl[\^*/]\yl"*"+[\^*/])* "*"+ "/"}}
$$
@@ -193,6 +194,15 @@ possible, however, if \.{\\yylextail} is not used inside actions (in the case of
an `optimized' lexer the restriction is even weaker, namely,
\.{\\yylextail} merely has to be absent in the portion of the action
following \.{\\ldcomment}).
+
+Another remark might be in order. It would seem more appropriate to
+employ \TeX's native grouping mechanism to avoid the side effects
+casued by the assignments performed by the macros (such as
+\.{\\let\\oldyyreturn\\yyreturn}). While this is possible with some
+careful macro writing, a na\:\i ve grouping attempt would interfere
+with the assignments performed by \.{\\yymatch}
+(e.g.~\.{\\yyresetstreams}). Avoiding assignments like these is still
+possible although the effort required is bordering on excessive.
@<Additional macros for the \ld\ lexer/parser@>=
@G(t)
\def\ldcomment#1\yylextail{%
@@ -221,14 +231,24 @@ We would like to simulate the file inclusion by inserting the
appropriate end of file marker for the lexer (a double
\.{\\yyeof}). After the relevant production completes, the marker
has to be cleaned up from the input stream (the lexer is designed to
-leave it intact). The macros below are designed to handle this assignment.
+leave it intact to be able to read the end of file multiple times
+while looking for the longest match).
+
+The macro below is designed to handle this task. The idea is to replace
+the double \.{\\yyeof} at the beginning of the input with an appropriate
+lexer action. The \.{\\yyreadinput} handles the input buffer and inserts the
+tail portion of the current \flex\ action in front of it.
@<Additional macros for the \ld\ lexer/parser@>=
@G(t)
\def\ldcleanyyeof#1\yylextail{%
- \let\oldyyinput\yyinput
- \def\yyinput\yyeof\yyeof{\let\yyinput\oldyyinput#1\yylextail}%
- \yymatch
+ \yyreadinput{\ldcl@@anyyeof{#1\yylextail}}{\romannumeral0\yyr@@@@dinput}%
+}
+
+\def\ldcl@@anyyeof#1#2#3{%
+ #3\ldcl@@anyye@@f{#1}#2%
}
+
+\def\ldcl@@anyye@@f#1#2\yyeof\yyeof{#1}
@g
@*1 Regular expressions.
@@ -237,204 +257,166 @@ describe the {\it tokens\/} of the appropriate language. The variey of
tokens recognized by \ld\ is quite extensive and is described in the
sections that follow.
-Variable names and algebraic operations come first.
-@<\ld\ token regular expressions@>=
+Variable names, constants, and algebraic operations come first.
+@<Regular expressions for \ld\ tokens@>=
@G(fs2)
-<BOTH,SCRIPT,EXPRESSION,VERS_START,VERS_NODE,VERS_SCRIPT>"/*" {@> @[TeX_( "/ldcomment/yylexnext" );@]@=}
-<DEFSYMEXP>"-" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<DEFSYMEXP>"+" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<DEFSYMEXP>{FILENAMECHAR1}{SYMBOLCHARN}* {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=}
-<DEFSYMEXP>"=" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<MRI,EXPRESSION>"$"([0-9A-Fa-f])+ {@> @<Return an absolute hex constant@> @=}
-<MRI,EXPRESSION>([0-9A-Fa-f])+(H|h|X|x|B|b|O|o|D|d) {@> @<Return a constant in a specific radix@>@=}
-<SCRIPT,DEFSYMEXP,MRI,BOTH,EXPRESSION>((("$"|0[xX])([0-9A-Fa-f])+)|(([0-9])+))(M|K|m|k)? {
- @> @<Return a constant with a multiplier@>@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"]" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"[" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"<<=" {@> @[TeX_( "/yylexreturnptr{LSHIFTEQ}" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>">>=" {@> @[TeX_( "/yylexreturnptr{RSHIFTEQ}" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"||" {@> @[TeX_( "/yylexreturnptr{OROR}" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"==" {@> @[TeX_( "/yylexreturnptr{EQ}" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"!=" {@> @[TeX_( "/yylexreturnptr{NE}" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>">=" {@> @[TeX_( "/yylexreturnptr{GE}" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"<=" {@> @[TeX_( "/yylexreturnptr{LE}" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"<<" {@> @[TeX_( "/yylexreturnptr{LSHIFT}" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>">>" {@> @[TeX_( "/yylexreturnptr{RSHIFT}" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"+=" {@> @[TeX_( "/yylexreturnptr{PLUSEQ}" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"-=" {@> @[TeX_( "/yylexreturnptr{MINUSEQ}" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"*=" {@> @[TeX_( "/yylexreturnptr{MULTEQ}" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"/=" {@> @[TeX_( "/yylexreturnptr{DIVEQ}" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"&=" {@> @[TeX_( "/yylexreturnptr{ANDEQ}" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"|=" {@> @[TeX_( "/yylexreturnptr{OREQ}" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"&&" {@> @[TeX_( "/yylexreturnptr{ANDAND}" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>">" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"," {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"&" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"|" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"~" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"!" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"?" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"*" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"+" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"-" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"/" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"%" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"<" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"=" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"}" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"{" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>")" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>"(" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>":" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<BOTH,SCRIPT,EXPRESSION,MRI>";" {@> @[TeX_( "/yylexreturnchar" );@]@=}
+<BOTH,SCRIPT,EXPRESSION,VERS_START,VERS_NODE,VERS_SCRIPT>{
+ "/*" {@> @[TeX_( "/ldcomment/yylexnext" );@]@=}
+}
+
+<DEFSYMEXP>{
+ "-" {@> @[TeX_( "/yylexreturnchar" );@]@=}
+ "+" {@> @[TeX_( "/yylexreturnchar" );@]@=}
+ {FILENAMECHAR1}{SYMBOLCHARN}* {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=}
+ "=" {@> @[TeX_( "/yylexreturnchar" );@]@=}
+}
+
+<MRI,EXPRESSION>{
+ "$"([0-9A-Fa-f])+ {@> @<Return an absolute hex constant@> @=}
+ ([0-9A-Fa-f])+(H|h|X|x|B|b|O|o|D|d) {@> @<Return a constant in a specific radix@>@=}
+}
+
+<SCRIPT,DEFSYMEXP,MRI,BOTH,EXPRESSION>{
+ ((("$"|0[xX])([0-9A-Fa-f])+)|(([0-9])+))(M|K|m|k)? {@> @<Return a constant with a multiplier@>@=}
+}
+
+<BOTH,SCRIPT,EXPRESSION,MRI>{
+ "<<=" {@> @[TeX_( "/yylexreturnptr{LSHIFTEQ}" );@]@=}
+ ">>=" {@> @[TeX_( "/yylexreturnptr{RSHIFTEQ}" );@]@=}
+ "||" {@> @[TeX_( "/yylexreturnptr{OROR}" );@]@=}
+ "==" {@> @[TeX_( "/yylexreturnptr{EQ}" );@]@=}
+ "!=" {@> @[TeX_( "/yylexreturnptr{NE}" );@]@=}
+ ">=" {@> @[TeX_( "/yylexreturnptr{GE}" );@]@=}
+ "<=" {@> @[TeX_( "/yylexreturnptr{LE}" );@]@=}
+ "<<" {@> @[TeX_( "/yylexreturnptr{LSHIFT}" );@]@=}
+ ">>" {@> @[TeX_( "/yylexreturnptr{RSHIFT}" );@]@=}
+ "+=" {@> @[TeX_( "/yylexreturnptr{PLUSEQ}" );@]@=}
+ "-=" {@> @[TeX_( "/yylexreturnptr{MINUSEQ}" );@]@=}
+ "*=" {@> @[TeX_( "/yylexreturnptr{MULTEQ}" );@]@=}
+ "/=" {@> @[TeX_( "/yylexreturnptr{DIVEQ}" );@]@=}
+ "&=" {@> @[TeX_( "/yylexreturnptr{ANDEQ}" );@]@=}
+ "|=" {@> @[TeX_( "/yylexreturnptr{OREQ}" );@]@=}
+ "&&" {@> @[TeX_( "/yylexreturnptr{ANDAND}" );@]@=}
+ [&|~!?*+\-/%=<>{}()\[\]:;,] {@> @[TeX_( "/yylexreturnchar" );@]@=}
+}
@g
@ The bulk of tokens produced by the lexer are the keywords used
inside script files. File name syntax is listed as well, along with
-miscellanea such as whitespace and version symbols.
-@<\ld\ token regular expressions@>=
+the miscellanea like whitespace and version symbols.
+@<Regular expressions for \ld\ tokens@>=
@G(fs2)
-<BOTH,SCRIPT>"MEMORY" {@> @[TeX_( "/yylexreturnptr{MEMORY}" );@]@=}
-<BOTH,SCRIPT>"REGION_ALIAS" {@> @[TeX_( "/yylexreturnptr{REGION_ALIAS}" );@]@=}
-<BOTH,SCRIPT>"LD_FEATURE" {@> @[TeX_( "/yylexreturnptr{LD_FEATURE}" );@]@=}
-<BOTH,SCRIPT,EXPRESSION>"ORIGIN" {@> @[TeX_( "/yylexreturnptr{ORIGIN}" );@]@=}
-<BOTH,SCRIPT>"VERSION" {@> @[TeX_( "/yylexreturnptr{VERSIONK}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"BLOCK" {@> @[TeX_( "/yylexreturnptr{BLOCK}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"BIND" {@> @[TeX_( "/yylexreturnptr{BIND}" );@]@=}
-<BOTH,SCRIPT,EXPRESSION>"LENGTH" {@> @[TeX_( "/yylexreturnptr{LENGTH}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"ALIGN" {@> @[TeX_( "/yylexreturnptr{ALIGN_K}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"DATA_SEGMENT_ALIGN" {@> @[TeX_( "/yylexreturnptr{DATA_SEGMENT_ALIGN}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"DATA_SEGMENT_RELRO_END" {@> @[TeX_( "/yylexreturnptr{DATA_SEGMENT_RELRO_END}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"DATA_SEGMENT_END" {@> @[TeX_( "/yylexreturnptr{DATA_SEGMENT_END}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"ADDR" {@> @[TeX_( "/yylexreturnptr{ADDR}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"LOADADDR" {@> @[TeX_( "/yylexreturnptr{LOADADDR}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"ALIGNOF" {@> @[TeX_( "/yylexreturnptr{ALIGNOF}" );@]@=}
-<EXPRESSION,BOTH>"MAX" {@> @[TeX_( "/yylexreturnptr{MAX_K}" );@]@=}
-<EXPRESSION,BOTH>"MIN" {@> @[TeX_( "/yylexreturnptr{MIN_K}" );@]@=}
-<EXPRESSION,BOTH>"LOG2CEIL" {@> @[TeX_( "/yylexreturnptr{LOG2CEIL}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"ASSERT" {@> @[TeX_( "/yylexreturnptr{ASSERT_K}" );@]@=}
-<BOTH,SCRIPT>"ENTRY" {@> @[TeX_( "/yylexreturnptr{ENTRY}" );@]@=}
-<BOTH,SCRIPT,MRI>"EXTERN" {@> @[TeX_( "/yylexreturnptr{EXTERN}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"NEXT" {@> @[TeX_( "/yylexreturnptr{NEXT}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"sizeof_headers" {@> @[TeX_( "/yylexreturnptr{SIZEOF_HEADERS}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"SIZEOF_HEADERS" {@> @[TeX_( "/yylexreturnptr{SIZEOF_HEADERS}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"SEGMENT_START" {@> @[TeX_( "/yylexreturnptr{SEGMENT_START}" );@]@=}
-<BOTH,SCRIPT>"MAP" {@> @[TeX_( "/yylexreturnptr{MAP}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"SIZEOF" {@> @[TeX_( "/yylexreturnptr{SIZEOF}" );@]@=}
-<BOTH,SCRIPT>"TARGET" {@> @[TeX_( "/yylexreturnptr{TARGET_K}" );@]@=}
-<BOTH,SCRIPT>"SEARCH_DIR" {@> @[TeX_( "/yylexreturnptr{SEARCH_DIR}" );@]@=}
-<BOTH,SCRIPT>"OUTPUT" {@> @[TeX_( "/yylexreturnptr{OUTPUT}" );@]@=}
-<BOTH,SCRIPT>"INPUT" {@> @[TeX_( "/yylexreturnptr{INPUT}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"GROUP" {@> @[TeX_( "/yylexreturnptr{GROUP}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"AS_NEEDED" {@> @[TeX_( "/yylexreturnptr{AS_NEEDED}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"DEFINED" {@> @[TeX_( "/yylexreturnptr{DEFINED}" );@]@=}
-<BOTH,SCRIPT>"CREATE_OBJECT_SYMBOLS" {@> @[TeX_( "/yylexreturnptr{CREATE_OBJECT_SYMBOLS}" );@]@=}
-<BOTH,SCRIPT>"CONSTRUCTORS" {@> @[TeX_( "/yylexreturnptr{CONSTRUCTORS}" );@]@=}
-<BOTH,SCRIPT>"FORCE_COMMON_ALLOCATION" {@> @[TeX_( "/yylexreturnptr{FORCE_COMMON_ALLOCATION}" );@]@=}
-<BOTH,SCRIPT>"INHIBIT_COMMON_ALLOCATION" {@> @[TeX_( "/yylexreturnptr{INHIBIT_COMMON_ALLOCATION}" );@]@=}
-<BOTH,SCRIPT>"SECTIONS" {@> @[TeX_( "/yylexreturnptr{SECTIONS}" );@]@=}
-<BOTH,SCRIPT>"INSERT" {@> @[TeX_( "/yylexreturnptr{INSERT_K}" );@]@=}
-<BOTH,SCRIPT>"AFTER" {@> @[TeX_( "/yylexreturnptr{AFTER}" );@]@=}
-<BOTH,SCRIPT>"BEFORE" {@> @[TeX_( "/yylexreturnptr{BEFORE}" );@]@=}
-<BOTH,SCRIPT>"FILL" {@> @[TeX_( "/yylexreturnptr{FILL}" );@]@=}
-<BOTH,SCRIPT>"STARTUP" {@> @[TeX_( "/yylexreturnptr{STARTUP}" );@]@=}
-<BOTH,SCRIPT>"OUTPUT_FORMAT" {@> @[TeX_( "/yylexreturnptr{OUTPUT_FORMAT}" );@]@=}
-<BOTH,SCRIPT>"OUTPUT_ARCH" {@> @[TeX_( "/yylexreturnptr{OUTPUT_ARCH}" );@]@=}
-<BOTH,SCRIPT>"HLL" {@> @[TeX_( "/yylexreturnptr{HLL}" );@]@=}
-<BOTH,SCRIPT>"SYSLIB" {@> @[TeX_( "/yylexreturnptr{SYSLIB}" );@]@=}
-<BOTH,SCRIPT>"FLOAT" {@> @[TeX_( "/yylexreturnptr{FLOAT}" );@]@=}
-<BOTH,SCRIPT>"QUAD" {@> @[TeX_( "/yylexreturnptr{QUAD}" );@]@=}
-<BOTH,SCRIPT>"SQUAD" {@> @[TeX_( "/yylexreturnptr{SQUAD}" );@]@=}
-<BOTH,SCRIPT>"LONG" {@> @[TeX_( "/yylexreturnptr{LONG}" );@]@=}
-<BOTH,SCRIPT>"SHORT" {@> @[TeX_( "/yylexreturnptr{SHORT}" );@]@=}
-<BOTH,SCRIPT>"BYTE" {@> @[TeX_( "/yylexreturnptr{BYTE}" );@]@=}
-<BOTH,SCRIPT>"NOFLOAT" {@> @[TeX_( "/yylexreturnptr{NOFLOAT}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"NOCROSSREFS" {@> @[TeX_( "/yylexreturnptr{NOCROSSREFS}" );@]@=}
-<BOTH,SCRIPT>"OVERLAY" {@> @[TeX_( "/yylexreturnptr{OVERLAY}" );@]@=}
-<BOTH,SCRIPT>"SORT_BY_NAME" {@> @[TeX_( "/yylexreturnptr{SORT_BY_NAME}" );@]@=}
-<BOTH,SCRIPT>"SORT_BY_ALIGNMENT" {@> @[TeX_( "/yylexreturnptr{SORT_BY_ALIGNMENT}" );@]@=}
-<BOTH,SCRIPT>"SORT" {@> @[TeX_( "/yylexreturnptr{SORT_BY_NAME}" );@]@=}
-<BOTH,SCRIPT>"SORT_BY_INIT_PRIORITY" {@> @[TeX_( "/yylexreturnptr{SORT_BY_INIT_PRIORITY}" );@]@=}
-<BOTH,SCRIPT>"SORT_NONE" {@> @[TeX_( "/yylexreturnptr{SORT_NONE}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"NOLOAD" {@> @[TeX_( "/yylexreturnptr{NOLOAD}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"DSECT" {@> @[TeX_( "/yylexreturnptr{DSECT}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"COPY" {@> @[TeX_( "/yylexreturnptr{COPY}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"INFO" {@> @[TeX_( "/yylexreturnptr{INFO}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"OVERLAY" {@> @[TeX_( "/yylexreturnptr{OVERLAY}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"ONLY_IF_RO" {@> @[TeX_( "/yylexreturnptr{ONLY_IF_RO}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"ONLY_IF_RW" {@> @[TeX_( "/yylexreturnptr{ONLY_IF_RW}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"SPECIAL" {@> @[TeX_( "/yylexreturnptr{SPECIAL}" );@]@=}
-<BOTH,SCRIPT>"o" {@> @[TeX_( "/yylexreturnptr{ORIGIN}" );@]@=}
-<BOTH,SCRIPT>"org" {@> @[TeX_( "/yylexreturnptr{ORIGIN}" );@]@=}
-<BOTH,SCRIPT>"l" {@> @[TeX_( "/yylexreturnptr{LENGTH}" );@]@=}
-<BOTH,SCRIPT>"len" {@> @[TeX_( "/yylexreturnptr{LENGTH}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"INPUT_SECTION_FLAGS" {@> @[TeX_( "/yylexreturnptr{INPUT_SECTION_FLAGS}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"INCLUDE" {@> @[TeX_( "/yylexreturnptr{INCLUDE}" );@]@=}
-<BOTH,SCRIPT>"PHDRS" {@> @[TeX_( "/yylexreturnptr{PHDRS}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"AT" {@> @[TeX_( "/yylexreturnptr{AT}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"ALIGN_WITH_INPUT" {@> @[TeX_( "/yylexreturnptr{ALIGN_WITH_INPUT}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"SUBALIGN" {@> @[TeX_( "/yylexreturnptr{SUBALIGN}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"HIDDEN" {@> @[TeX_( "/yylexreturnptr{HIDDEN}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"PROVIDE" {@> @[TeX_( "/yylexreturnptr{PROVIDE}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"PROVIDE_HIDDEN" {@> @[TeX_( "/yylexreturnptr{PROVIDE_HIDDEN}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"KEEP" {@> @[TeX_( "/yylexreturnptr{KEEP}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"EXCLUDE_FILE" {@> @[TeX_( "/yylexreturnptr{EXCLUDE_FILE}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT>"CONSTANT" {@> @[TeX_( "/yylexreturnptr{CONSTANT}" );@]@=}
-<MRI>"#".*\n? {@> @[TeX_( "/yylexnext" );@]@=}
-<MRI>"\n" {@> @[TeX_( "/yylexreturnptr{NEWLINE}" );@]@=}
-<MRI>"*".* {@> @[TeX_( "/yylexnext" );@]@=}
-<MRI>";".* {@> @[TeX_( "/yylexnext" );@]@=}
-<MRI>"END" {@> @[TeX_( "/yylexreturnptr{ENDWORD}" );@]@=}
-<MRI>"ALIGNMOD" {@> @[TeX_( "/yylexreturnptr{ALIGNMOD}" );@]@=}
-<MRI>"ALIGN" {@> @[TeX_( "/yylexreturnptr{ALIGN_K}" );@]@=}
-<MRI>"CHIP" {@> @[TeX_( "/yylexreturnptr{CHIP}" );@]@=}
-<MRI>"BASE" {@> @[TeX_( "/yylexreturnptr{BASE}" );@]@=}
-<MRI>"ALIAS" {@> @[TeX_( "/yylexreturnptr{ALIAS}" );@]@=}
-<MRI>"TRUNCATE" {@> @[TeX_( "/yylexreturnptr{TRUNCATE}" );@]@=}
-<MRI>"LOAD" {@> @[TeX_( "/yylexreturnptr{LOAD}" );@]@=}
-<MRI>"PUBLIC" {@> @[TeX_( "/yylexreturnptr{PUBLIC}" );@]@=}
-<MRI>"ORDER" {@> @[TeX_( "/yylexreturnptr{ORDER}" );@]@=}
-<MRI>"NAME" {@> @[TeX_( "/yylexreturnptr{NAMEWORD}" );@]@=}
-<MRI>"FORMAT" {@> @[TeX_( "/yylexreturnptr{FORMAT}" );@]@=}
-<MRI>"CASE" {@> @[TeX_( "/yylexreturnptr{CASE}" );@]@=}
-<MRI>"START" {@> @[TeX_( "/yylexreturnptr{START}" );@]@=}
-<MRI>"LIST".* {@> @[TeX_( "/yylexreturnptr{LIST}" );@]@=}
-<MRI>"SECT" {@> @[TeX_( "/yylexreturnptr{SECT}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT,MRI>"ABSOLUTE" {@> @[TeX_( "/yylexreturnptr{ABSOLUTE}" );@]@=}
-<MRI>"end" {@> @[TeX_( "/yylexreturnptr{ENDWORD}" );@]@=}
-<MRI>"alignmod" {@> @[TeX_( "/yylexreturnptr{ALIGNMOD}" );@]@=}
-<MRI>"align" {@> @[TeX_( "/yylexreturnptr{ALIGN_K}" );@]@=}
-<MRI>"chip" {@> @[TeX_( "/yylexreturnptr{CHIP}" );@]@=}
-<MRI>"base" {@> @[TeX_( "/yylexreturnptr{BASE}" );@]@=}
-<MRI>"alias" {@> @[TeX_( "/yylexreturnptr{ALIAS}" );@]@=}
-<MRI>"truncate" {@> @[TeX_( "/yylexreturnptr{TRUNCATE}" );@]@=}
-<MRI>"load" {@> @[TeX_( "/yylexreturnptr{LOAD}" );@]@=}
-<MRI>"public" {@> @[TeX_( "/yylexreturnptr{PUBLIC}" );@]@=}
-<MRI>"order" {@> @[TeX_( "/yylexreturnptr{ORDER}" );@]@=}
-<MRI>"name" {@> @[TeX_( "/yylexreturnptr{NAMEWORD}" );@]@=}
-<MRI>"format" {@> @[TeX_( "/yylexreturnptr{FORMAT}" );@]@=}
-<MRI>"case" {@> @[TeX_( "/yylexreturnptr{CASE}" );@]@=}
-<MRI>"extern" {@> @[TeX_( "/yylexreturnptr{EXTERN}" );@]@=}
-<MRI>"start" {@> @[TeX_( "/yylexreturnptr{START}" );@]@=}
-<MRI>"list".* {@> @[TeX_( "/yylexreturnptr{LIST}" );@]@=}
-<MRI>"sect" {@> @[TeX_( "/yylexreturnptr{SECT}" );@]@=}
-<EXPRESSION,BOTH,SCRIPT,MRI>"absolute" {@> @[TeX_( "/yylexreturnptr{ABSOLUTE}" );@]@=}
-<MRI>{FILENAMECHAR1}{NOCFILENAMECHAR}* {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=}
-<BOTH>{FILENAMECHAR1}{FILENAMECHAR}* {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=}
-<BOTH>"-l"{FILENAMECHAR}+ {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=}
-<EXPRESSION>{FILENAMECHAR1}{NOCFILENAMECHAR}* {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=}
-<EXPRESSION>"-l"{NOCFILENAMECHAR}+ {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=}
+<BOTH,SCRIPT>{
+ "MEMORY" {@> @[TeX_( "/yylexreturnptr{MEMORY}" );@]@=}
+ "REGION_ALIAS" {@> @[TeX_( "/yylexreturnptr{REGION_ALIAS}" );@]@=}
+ "LD_FEATURE" {@> @[TeX_( "/yylexreturnptr{LD_FEATURE}" );@]@=}
+ "VERSION" {@> @[TeX_( "/yylexreturnptr{VERSIONK}" );@]@=}
+ "TARGET" {@> @[TeX_( "/yylexreturnptr{TARGET_K}" );@]@=}
+ "SEARCH_DIR" {@> @[TeX_( "/yylexreturnptr{SEARCH_DIR}" );@]@=}
+ "OUTPUT" {@> @[TeX_( "/yylexreturnptr{OUTPUT}" );@]@=}
+ "INPUT" {@> @[TeX_( "/yylexreturnptr{INPUT}" );@]@=}
+ "ENTRY" {@> @[TeX_( "/yylexreturnptr{ENTRY}" );@]@=}
+ "MAP" {@> @[TeX_( "/yylexreturnptr{MAP}" );@]@=}
+ "CREATE_OBJECT_SYMBOLS" {@> @[TeX_( "/yylexreturnptr{CREATE_OBJECT_SYMBOLS}" );@]@=}
+ "CONSTRUCTORS" {@> @[TeX_( "/yylexreturnptr{CONSTRUCTORS}" );@]@=}
+ "FORCE_COMMON_ALLOCATION" {@> @[TeX_( "/yylexreturnptr{FORCE_COMMON_ALLOCATION}" );@]@=}
+ "INHIBIT_COMMON_ALLOCATION" {@> @[TeX_( "/yylexreturnptr{INHIBIT_COMMON_ALLOCATION}" );@]@=}
+ "SECTIONS" {@> @[TeX_( "/yylexreturnptr{SECTIONS}" );@]@=}
+ "INSERT" {@> @[TeX_( "/yylexreturnptr{INSERT_K}" );@]@=}
+ "AFTER" {@> @[TeX_( "/yylexreturnptr{AFTER}" );@]@=}
+ "BEFORE" {@> @[TeX_( "/yylexreturnptr{BEFORE}" );@]@=}
+ "FILL" {@> @[TeX_( "/yylexreturnptr{FILL}" );@]@=}
+ "STARTUP" {@> @[TeX_( "/yylexreturnptr{STARTUP}" );@]@=}
+ "OUTPUT_FORMAT" {@> @[TeX_( "/yylexreturnptr{OUTPUT_FORMAT}" );@]@=}
+ "OUTPUT_ARCH" {@> @[TeX_( "/yylexreturnptr{OUTPUT_ARCH}" );@]@=}
+ "HLL" {@> @[TeX_( "/yylexreturnptr{HLL}" );@]@=}
+ "SYSLIB" {@> @[TeX_( "/yylexreturnptr{SYSLIB}" );@]@=}
+ "FLOAT" {@> @[TeX_( "/yylexreturnptr{FLOAT}" );@]@=}
+ "QUAD" {@> @[TeX_( "/yylexreturnptr{QUAD}" );@]@=}
+ "SQUAD" {@> @[TeX_( "/yylexreturnptr{SQUAD}" );@]@=}
+ "LONG" {@> @[TeX_( "/yylexreturnptr{LONG}" );@]@=}
+ "SHORT" {@> @[TeX_( "/yylexreturnptr{SHORT}" );@]@=}
+ "BYTE" {@> @[TeX_( "/yylexreturnptr{BYTE}" );@]@=}
+ "NOFLOAT" {@> @[TeX_( "/yylexreturnptr{NOFLOAT}" );@]@=}
+ "OVERLAY" {@> @[TeX_( "/yylexreturnptr{OVERLAY}" );@]@=}
+ "SORT_BY_NAME" {@> @[TeX_( "/yylexreturnptr{SORT_BY_NAME}" );@]@=}
+ "SORT_BY_ALIGNMENT" {@> @[TeX_( "/yylexreturnptr{SORT_BY_ALIGNMENT}" );@]@=}
+ "SORT" {@> @[TeX_( "/yylexreturnptr{SORT_BY_NAME}" );@]@=}
+ "SORT_BY_INIT_PRIORITY" {@> @[TeX_( "/yylexreturnptr{SORT_BY_INIT_PRIORITY}" );@]@=}
+ "SORT_NONE" {@> @[TeX_( "/yylexreturnptr{SORT_NONE}" );@]@=}
+ "EXTERN" {@> @[TeX_( "/yylexreturnptr{EXTERN}" );@]@=}
+ "o"|"org" {@> @[TeX_( "/yylexreturnptr{ORIGIN}" );@]@=}
+ "l"|"len" {@> @[TeX_( "/yylexreturnptr{LENGTH}" );@]@=}
+ "PHDRS" {@> @[TeX_( "/yylexreturnptr{PHDRS}" );@]@=}
+}
+
+<EXPRESSION,BOTH,SCRIPT>{
+ "BLOCK" {@> @[TeX_( "/yylexreturnptr{BLOCK}" );@]@=}
+ "BIND" {@> @[TeX_( "/yylexreturnptr{BIND}" );@]@=}
+ "LENGTH" {@> @[TeX_( "/yylexreturnptr{LENGTH}" );@]@=}
+ "ORIGIN" {@> @[TeX_( "/yylexreturnptr{ORIGIN}" );@]@=}
+ "ALIGN" {@> @[TeX_( "/yylexreturnptr{ALIGN_K}" );@]@=}
+ "DATA_SEGMENT_ALIGN" {@> @[TeX_( "/yylexreturnptr{DATA_SEGMENT_ALIGN}" );@]@=}
+ "DATA_SEGMENT_RELRO_END" {@> @[TeX_( "/yylexreturnptr{DATA_SEGMENT_RELRO_END}" );@]@=}
+ "DATA_SEGMENT_END" {@> @[TeX_( "/yylexreturnptr{DATA_SEGMENT_END}" );@]@=}
+ "ADDR" {@> @[TeX_( "/yylexreturnptr{ADDR}" );@]@=}
+ "LOADADDR" {@> @[TeX_( "/yylexreturnptr{LOADADDR}" );@]@=}
+ "ALIGNOF" {@> @[TeX_( "/yylexreturnptr{ALIGNOF}" );@]@=}
+ "ASSERT" {@> @[TeX_( "/yylexreturnptr{ASSERT_K}" );@]@=}
+ "NEXT" {@> @[TeX_( "/yylexreturnptr{NEXT}" );@]@=}
+ "sizeof_headers" {@> @[TeX_( "/yylexreturnptr{SIZEOF_HEADERS}" );@]@=}
+ "SIZEOF_HEADERS" {@> @[TeX_( "/yylexreturnptr{SIZEOF_HEADERS}" );@]@=}
+ "SEGMENT_START" {@> @[TeX_( "/yylexreturnptr{SEGMENT_START}" );@]@=}
+ "SIZEOF" {@> @[TeX_( "/yylexreturnptr{SIZEOF}" );@]@=}
+ "GROUP" {@> @[TeX_( "/yylexreturnptr{GROUP}" );@]@=}
+ "AS_NEEDED" {@> @[TeX_( "/yylexreturnptr{AS_NEEDED}" );@]@=}
+ "DEFINED" {@> @[TeX_( "/yylexreturnptr{DEFINED}" );@]@=}
+ "NOCROSSREFS" {@> @[TeX_( "/yylexreturnptr{NOCROSSREFS}" );@]@=}
+ "NOLOAD" {@> @[TeX_( "/yylexreturnptr{NOLOAD}" );@]@=}
+ "DSECT" {@> @[TeX_( "/yylexreturnptr{DSECT}" );@]@=}
+ "COPY" {@> @[TeX_( "/yylexreturnptr{COPY}" );@]@=}
+ "INFO" {@> @[TeX_( "/yylexreturnptr{INFO}" );@]@=}
+ "OVERLAY" {@> @[TeX_( "/yylexreturnptr{OVERLAY}" );@]@=}
+ "ONLY_IF_RO" {@> @[TeX_( "/yylexreturnptr{ONLY_IF_RO}" );@]@=}
+ "ONLY_IF_RW" {@> @[TeX_( "/yylexreturnptr{ONLY_IF_RW}" );@]@=}
+ "SPECIAL" {@> @[TeX_( "/yylexreturnptr{SPECIAL}" );@]@=}
+ "INPUT_SECTION_FLAGS" {@> @[TeX_( "/yylexreturnptr{INPUT_SECTION_FLAGS}" );@]@=}
+ "INCLUDE" {@> @[TeX_( "/yylexreturnptr{INCLUDE}" );@]@=}
+ "AT" {@> @[TeX_( "/yylexreturnptr{AT}" );@]@=}
+ "ALIGN_WITH_INPUT" {@> @[TeX_( "/yylexreturnptr{ALIGN_WITH_INPUT}" );@]@=}
+ "SUBALIGN" {@> @[TeX_( "/yylexreturnptr{SUBALIGN}" );@]@=}
+ "HIDDEN" {@> @[TeX_( "/yylexreturnptr{HIDDEN}" );@]@=}
+ "PROVIDE" {@> @[TeX_( "/yylexreturnptr{PROVIDE}" );@]@=}
+ "PROVIDE_HIDDEN" {@> @[TeX_( "/yylexreturnptr{PROVIDE_HIDDEN}" );@]@=}
+ "KEEP" {@> @[TeX_( "/yylexreturnptr{KEEP}" );@]@=}
+ "EXCLUDE_FILE" {@> @[TeX_( "/yylexreturnptr{EXCLUDE_FILE}" );@]@=}
+ "CONSTANT" {@> @[TeX_( "/yylexreturnptr{CONSTANT}" );@]@=}
+ "\n" {@> @[TeX_( "/yylexnext" );@]@=}
+}
+
+<EXPRESSION,BOTH>{
+ "MAX" {@> @[TeX_( "/yylexreturnptr{MAX_K}" );@]@=}
+ "MIN" {@> @[TeX_( "/yylexreturnptr{MIN_K}" );@]@=}
+ "LOG2CEIL" {@> @[TeX_( "/yylexreturnptr{LOG2CEIL}" );@]@=}
+}
+
+<EXPRESSION,BOTH,SCRIPT,MRI>{
+ "ABSOLUTE"|"absolute" {@> @[TeX_( "/yylexreturnptr{ABSOLUTE}" );@]@=}
+ [ \t\r]+ {@> @[TeX_( "/yylexnext" );@]@=}
+}
+
+<BOTH>{
+ {FILENAMECHAR1}{FILENAMECHAR}* {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=}
+ "-l"{FILENAMECHAR}+ {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=}
+}
+
+<EXPRESSION>{
+ {FILENAMECHAR1}{NOCFILENAMECHAR}* {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=}
+ "-l"{NOCFILENAMECHAR}+ {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=}
+}
+
<SCRIPT>{WILDCHAR}* {@> @[@<Skip a possible comment and return a \prodstyle{NAME}@>@]@=}
<EXPRESSION,BOTH,SCRIPT,VERS_NODE>"\""[^\"]*"\"" {@> @[@<Return the \prodstyle{NAME} inside quotes@>@]@=}
-<BOTH,SCRIPT,EXPRESSION>"\n" {@> @[TeX_( "/yylexnext" );@]@=}
-<MRI,BOTH,SCRIPT,EXPRESSION>[ \t\r]+ {@> @[TeX_( "/yylexnext" );@]@=}
-<VERS_NODE,VERS_SCRIPT>[:,;] {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<VERS_NODE>global {@> @[TeX_( "/yylexreturnptr{GLOBAL}" );@]@=}
-<VERS_NODE>local {@> @[TeX_( "/yylexreturnptr{LOCAL}" );@]@=}
-<VERS_NODE>extern {@> @[TeX_( "/yylexreturnptr{EXTERN}" );@]@=}
-<VERS_NODE>{V_IDENTIFIER} {@> @[TeX_( "/yylexreturnval{VERS_IDENTIFIER}" );@]@=}
-<VERS_SCRIPT>{V_TAG} {@> @[TeX_( "/yylexreturnval{VERS_TAG}" );@]@=}
-<VERS_START>"{" {@> @[TeX_( "/yyBEGIN{VERS_SCRIPT}/yylexreturnchar" );@]@=}
@g
@ There is a bit of a trick to returning an absolute hex value. The
@@ -455,23 +437,6 @@ macros are looking for a \.{\$} suffix while the contents of
@[TeX_( "{/the/yyfmark}{/the/yysmark}}}/next" );@]@;
@[TeX_( "/yylexreturn{INT}" );@]@;
-@ @<Additional macros for the \ld\ lexer/parser@>=
-@G(t)
-@=\def\matchcomment@@#1/*#2\yyeof#3#4{%@>@;
- \yystringempty{#1}{#3}{#4}%
-}
-\def\matchcomment#1{%
-@= \expandafter\matchcomment@@\the#1/*\yyeof@>@;
-}
-\def\ldstripquotes@@"#1"\yyeof{#1}
-\def\ldstripquotes#1{%
- \yytext\expandafter\expandafter\expandafter
- {\expandafter\ldstripquotes@@\the\yytext\yyeof}%
- \yytextpure\expandafter\expandafter\expandafter
- {\expandafter\ldstripquotes@@\the\yytextpure\yyeof}%
-}
-@g
-
@ {\it Annoyingly, this pattern can match comments, and we have
longest match issues to consider. So if the first two
characters are a comment opening, put the input back and
@@ -485,31 +450,103 @@ try again.}
@<Return the \prodstyle{NAME} inside quotes@>=
@[TeX_( "/ldstripquotes/yylexreturnsym{NAME}" );@]@;
-@ @<Additional macros for the \ld\ lexer/parser@>=
+@ Some syntax specific to version scripts.
+@<Regular expressions for \ld\ tokens@>=
+@G(fs2)
+<VERS_SCRIPT>{
+ "{" {@> @[TeX_( "/yyBEGIN{VERS_NODE}/versnodenesting=/z@@/yylexreturnchar" );@]@=}
+ "}" {@> @[TeX_( "/yylexreturnchar" );@]@=}
+ {V_TAG} {@> @[TeX_( "/yylexreturnval{VERS_TAG}" );@]@=}
+}
+
+<VERS_NODE>{
+ global {@> @[TeX_( "/yylexreturnptr{GLOBAL}" );@]@=}
+ local {@> @[TeX_( "/yylexreturnptr{LOCAL}" );@]@=}
+ extern {@> @[TeX_( "/yylexreturnptr{EXTERN}" );@]@=}
+ {V_IDENTIFIER} {@> @[TeX_( "/yylexreturnval{VERS_IDENTIFIER}" );@]@=}
+ "{" {@> @[TeX_( "/advance/versnodenesting/@@ne /yylexreturnchar" );@]@=}
+ "}" {@> @<Finish the current group, possibly switch to \flexsnstyle{VERS_SCRIPT}@> @=}
+}
+
+<VERS_NODE,VERS_SCRIPT>[:,;] {@> @[TeX_( "/yylexreturnchar" );@]@=}
+<VERS_START>"{" {@> @[TeX_( "/yyBEGIN{VERS_SCRIPT}/yylexreturnchar" );@]@=}
+
+<VERS_START,VERS_NODE,VERS_SCRIPT>{
+ [\n] {@> @[TeX_( "/yylexnext" );@]@=}
+ #.* {@> @[TeX_( "/yylexnext" );@]@=}
+ [ \t\r]+ {@> @[TeX_( "/yylexnext" );@]@=}
+}
+@g
+
+@ @<Finish the current group, possibly switch to \flexsnstyle{VERS_SCRIPT}@>=
+ @[TeX_( "/advance/versnodenesting/m@@ne" );@]@;
+ @[TeX_( "/ifnum/versnodenesting</z@@" );@]@;
+ @[TeX_( " /yyBEGIN{VERS_SCRIPT}" );@]@;
+ @[TeX_( "/fi" );@]@;
+ @[TeX_( "/yylexreturnchar" );@]@;
+
+@ Some syntax specific to \MRI\ scripts.
+@<Regular expressions for \ld\ tokens@>=
+@G(fs2)
+<MRI>{
+ "#".*\n? {@> @[TeX_( "/yylexnext" );@]@=}
+ "\n" {@> @[TeX_( "/yylexreturnptr{NEWLINE}" );@]@=}
+ "*".* {@> @[TeX_( "/yylexnext" );@]@=}
+ ";".* {@> @[TeX_( "/yylexnext" );@]@=}
+ "END"|"end" {@> @[TeX_( "/yylexreturnptr{ENDWORD}" );@]@=}
+ "ALIGNMOD"|"alignmod" {@> @[TeX_( "/yylexreturnptr{ALIGNMOD}" );@]@=}
+ "ALIGN"|"align" {@> @[TeX_( "/yylexreturnptr{ALIGN_K}" );@]@=}
+ "CHIP"|"chip" {@> @[TeX_( "/yylexreturnptr{CHIP}" );@]@=}
+ "BASE"|"base" {@> @[TeX_( "/yylexreturnptr{BASE}" );@]@=}
+ "ALIAS"|"alias" {@> @[TeX_( "/yylexreturnptr{ALIAS}" );@]@=}
+ "TRUNCATE"|"truncate" {@> @[TeX_( "/yylexreturnptr{TRUNCATE}" );@]@=}
+ "LOAD"|"load" {@> @[TeX_( "/yylexreturnptr{LOAD}" );@]@=}
+ "PUBLIC"|"public" {@> @[TeX_( "/yylexreturnptr{PUBLIC}" );@]@=}
+ "ORDER"|"order" {@> @[TeX_( "/yylexreturnptr{ORDER}" );@]@=}
+ "NAME"|"name" {@> @[TeX_( "/yylexreturnptr{NAMEWORD}" );@]@=}
+ "FORMAT"|"format" {@> @[TeX_( "/yylexreturnptr{FORMAT}" );@]@=}
+ "CASE"|"case" {@> @[TeX_( "/yylexreturnptr{CASE}" );@]@=}
+ "START"|"start" {@> @[TeX_( "/yylexreturnptr{START}" );@]@=}
+ ("LIST"|"list").* {@> @[TeX_( "/yylexreturnptr{LIST}" );@]@=}
+ "SECT"|"sect" {@> @[TeX_( "/yylexreturnptr{SECT}" );@]@=}
+ "EXTERN"|"extern" {@> @[TeX_( "/yylexreturnptr{EXTERN}" );@]@=}
+ {FILENAMECHAR1}{NOCFILENAMECHAR}* {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=}
+}
+@g
+
+@ The macros and the register definitions used to implement the actions above have been collected in this
+section.
+@<Additional macros for the \ld\ lexer/parser@>=
@G(t)
\newcount\versnodenesting
\newcount\includestackptr
+
+\def\matchcomment#1{%
+@= \expandafter\matchcomment@@\the#1/*\yyeof@>@;
+}
+
+@=\def\matchcomment@@#1/*#2\yyeof#3#4{%@>@;
+ \yystringempty{#1}{#3}{#4}%
+}
+
+\def\ldstripquotes#1{%
+ \yytext\expandafter\expandafter\expandafter
+ {\expandafter\ldstripquotes@@\the\yytext\yyeof}%
+ \yytextpure\expandafter\expandafter\expandafter
+ {\expandafter\ldstripquotes@@\the\yytextpure\yyeof}%
+}
+
+\def\ldstripquotes@@"#1"\yyeof{#1}
@g
-@ Some syntax specific to version scripts.
-@<\ld\ token regular expressions@>=
+@ Catchall actions. These react to unexpected characters with (somewhat misleading) error messages. The placement
+of these rules is important, since they may match a token of the same length defined earlier.
+@<Regular expressions for \ld\ tokens@>=
@G(fs2)
-<VERS_SCRIPT>"{" {@> @[TeX_( "/yyBEGIN{VERS_NODE}/versnodenesting=/z@@/yylexreturnchar" );@]@=}
-<VERS_SCRIPT>"}" {@> @[TeX_( "/yylexreturnchar" );@]@=}
-<VERS_NODE>"{" {@> @[TeX_( "/advance/versnodenesting/@@ne /yylexreturnchar" );@]@=}
-<VERS_NODE>"}" {@> @[TeX_( "/advance/versnodenesting/m@@ne" );@]@=
- @> @[TeX_( "/ifnum/versnodenesting</z@@" );@]@=
- @> @[TeX_( " /yyBEGIN{VERS_SCRIPT}" );@]@=
- @> @[TeX_( "/fi" );@]@=
- @> @[TeX_( "/yylexreturnchar" );@]@=}
-<VERS_START,VERS_NODE,VERS_SCRIPT>[\n] {@> @[TeX_( "/yylexnext" );@]@=}
-<VERS_START,VERS_NODE,VERS_SCRIPT>#.* {@> @[TeX_( "/yylexnext" );@]@=}
-<VERS_START,VERS_NODE,VERS_SCRIPT>[ \t\r]+ {@> @[TeX_( "/yylexnext" );@]@=}
+<SCRIPT,MRI,VERS_START,VERS_SCRIPT,VERS_NODE>. {@> @[TeX_( "/yyfatal{bad character `/the/yytext' in script}" );@]@=}
+<EXPRESSION,DEFSYMEXP,BOTH>. {@> @[TeX_( "/yyfatal{bad character `/the/yytext' in expression}" );@]@=}
<<EOF>> {@> @[@<Process the end of (possibly included) file@>@]@=}
-
-<SCRIPT,MRI,VERS_START,VERS_SCRIPT,VERS_NODE>. {@> @[TeX_( "/yyfatal{bad character `/the/yytext' in script}" );@]@=}
-<EXPRESSION,DEFSYMEXP,BOTH>. {@> @[TeX_( "/yyfatal{bad character `/the/yytext' in expression}" );@]@=}
@g
@ @<Process the end of (possibly included) file@>=
diff --git a/support/splint/examples/ld/ldlexo.w b/support/splint/examples/ld/ldlexo.w
index a1c5d62bb0..eb273ac7e8 100644
--- a/support/splint/examples/ld/ldlexo.w
+++ b/support/splint/examples/ld/ldlexo.w
@@ -1,4 +1,4 @@
-@q Copyright 2015-2020 Alexander Shibakov@>
+@q Copyright 2015-2022 Alexander Shibakov@>
@q Copyright 2002-2015 Free Software Foundation, Inc.@>
@q This file is part of SPLinT@>
@@ -26,11 +26,17 @@ are a leftover from the archaic days of the original scanner generator.}
@G
@> @<Original \ld\ macros@> @=
%{@>@<Original \ld\ preamble@> @=%}
-%option nounput
+ @> @<Miscellaneous \ld\ lexer options@> @=
@> @<Ignored options@> @=
%%
@> @<Original \ld\ regular expressions@> @=
%%
+ @> @<Original \ld\ postamble@> @=
+@g
+
+@ @<Miscellaneous \ld\ lexer options@>=
+@G(fs1)
+%option nounput
@g
@ @<Original \ld\ preamble@>=
@@ -134,7 +140,7 @@ States:
}%
\ifbootstrapmode\else\yyskipparsefalse\fi
@<\ld\ states@>=
-@G
+@G(fs1)
%s SCRIPT
%s EXPRESSION
%s BOTH
@@ -145,7 +151,7 @@ States:
%s VERS_NODE
@g
-@ @<\ld\ postamble@>=
+@ @<Original \ld\ postamble@>=
if (parser_input != input_selected)
{
/* The first token of the input determines the initial parser state. */
diff --git a/support/splint/examples/ld/ldman.w b/support/splint/examples/ld/ldman.w
index b6eb733dbd..af55b19111 100644
--- a/support/splint/examples/ld/ldman.w
+++ b/support/splint/examples/ld/ldman.w
@@ -1,5 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
-% Copyright 2002-2014 Free Software Foundation, Inc.
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -15,27 +14,22 @@
% You should have received a copy of the GNU General Public License
% along with SPLinT. If not, see <http://www.gnu.org/licenses/>.
@s TeX_ TeX
-\def\MRI{{\sc MRI}}
\def\optimization{5}
\input ldman.sty
+\input ldsetup.sty
\modenormal
\input ldfrontmatter.sty
-\input noweb.sty
- \xreflocaltrue
- \readlxrefs % read the reference file if exists before any sections appear
- \newwrite\xrefstream % references for noweb like style of sectioning.
- \immediate\openout\xrefstream=\jobname.xxr
% multi-column output
\input dcols.sty
+\topskip=9pt
\let\oldN\N
\let\N\chapterN
\let\M\textM
+\initauxstream
\showlastactiontrue
-\immediate\openout\gindex=\jobname.gdx
@** Introduction.
-\setupfootnotes
This is a manual documenting the development of a parser that can be
used to typeset \ld\ files (linker scripts) with or without the help
of \CWEB. An existing parser for \ld\ has been adopted as a base, with
@@ -50,14 +44,15 @@ limitations).
Nearly every aspect of the design is discussed, including the
supporting \TeX\ macros that make both the parser and this
documentation possible. The \TeX\ macros presented here are collected
-in \.{ldman.sty} which is later included in the \TeX\ file produced by \CWEAVE.
+in \.{ldman.sty} and \.{ldsetup.sty} which are later included in the
+\TeX\ file produced by \CWEAVE.
@<Set up the generic parser machinery@>=
@G(t)
\ifx\optimization\UNDEFINED %/* this trick is based on the premise that \.{\\UNDEFINED} */
\def\optimization{0} %/* is never defined nor created with \.{\\csname$\ldots$\\endcsname} */
\fi
-\let\nx\noexpand %/* convenient */
+\let\nx\noexpand %/* a convenient shortcut*/
\input limbo.sty %/* general setup macros */
\input yycommon.sty %/* general routines for stack and array access */
@@ -69,23 +64,32 @@ in \.{ldman.sty} which is later included in the \TeX\ file produced by \CWEAVE.
\ifnum\optimization>\tw@
\input yyfaststack.sty
-\else
- \let\stashnext\stashnextwithnothing
\fi
\input yystype.sty %/* scanner auxiliary types and functions */
\input yyunion.sty %/* parser data structures */
-\input yxunion.sty %/* extended parser data structures */
-\expandafter\def %/* adjust the \.{\\yyinput} to recognize \.{\\yyendgame} */
- \expandafter\multicharswitch\expandafter
- {\multicharswitch\yyendgame{\yyinput\yyeof\yyeof\endparseinput\removefinalvb}}
+
+\amendswitch %/* adjust the \.{\\yyinput} to recognize \.{\\yyendgame} */
+ \multicharswitch\near\yyeof\by\yyendgame\to\multicharswitch % /* add a new label */
+\replaceaction\multicharswitch\at\yyendgame % /* replace the new empty action */
+ \by{{\yyinput\yyeof\yyeof\endparseinput\removefinalvb}}\to\multicharswitch
+
+\def\MRI{{\sc MRI}} %/* so we can say that \MRI\ script typesetting is not supported$\ldots$ */
+@g
+
+@ Up to this point, the parser initialization process has been non parser specific (although
+sensitive to the namespace chosen). The next command inputs the data structures used
+by the \ld\ parser. The reader should consult the file below for the details on the \AST\ produced
+by the parser and its semantics.
+@<Define the normal mode@>=
+@G(t)
\input ldunion.sty %@>/* \ld\ parser data structures */@+
@g
@*1 Bootstrapping.
To produce a usable parser/scanner duo, several pieces of code must
be generated. The most important of these are the {\it table files\/}
-(\.{ptab.tex} and \.{ltab.tex}) for the parser and the scanner. These
+(\.{ldptab.tex} and \.{ldltab.tex}) for the parser and the scanner. These
consist of the integer tables defining the operation of the parser and
scanner automata, the values of some constants, and the `action switch'.
@@ -101,10 +105,10 @@ parsing our grammar once again, this time with a \bison\ grammar
designed for typesetting \bison\ files. A special {\it
bootstrapping\/} mode is used to extract the appropriate
information. The name `bootstrapping' notwithstanding, the parser and
-lexer used in the bootstrapping phase are not the minimized versions
+lexer used in the bootstrapping phase are not necessarily the minimized versions
used in bootstrapping the \bison\ parser.
-The first component generated during the bootstrapping pass is a list
+One component generated during the bootstrapping pass is a list
of `token equivalences' (or `aliases') to be used by the lexer. Every
token (to be precise, every {\it named token type}) used in
a \bison\ grammar is declared using one of the
@@ -117,50 +121,44 @@ the token names with their numerical values (accomplished by
\.{\\settokens}). If all tokens are named tokens, no token equivalence
list is necessary to set up the interaction between the lexer and the
parser. In this case (the present \ld\ parser is a typical
-example), the token list serves a secondary role: it provides hints
+example), the token list may also serve a secondary role: to provide hints
for the macros that typeset the grammar terms, after the \.{\\tokeneq}
-macro is redefined to serve this purpose.
+macro is redefined for this purpose.
On the other hand, after a declaration such as `\prodstyle{\%token}
\.{CHAR} \.{"char"}' the string \.{"char"} becomes an alias
for the named token \.{CHAR}. Only the string version gets recorded in
the |yytname| array. Establishing the equivalence between the two
-token forms can now only be accomplished by examining the grammar
+token forms now can be accomplished only by examining the grammar
source file and is delegated to the bootstrapping phase parser.
-\leavevmode\namedspot{bootstrapstates}The other responsibility of the bootstrapping parser is to extract
-the information about \flex\ {\it states\/} used by the lexer from the
-appropriate source file. As is the case with token names, this
-information is output in a rather chaotic fashion by the scanner
-generator and is all but useless for our purposes. The original
-bootstrapping macros were designed to handle \flex's \prodstyle{\%x}
-and \prodstyle{\%s} state declarations and produce a \Cee\ file with the
-appropriate definitions. This file can later be included by the
-`driver' routine to produce the appropriate table file for the lexer.
-To round off the bootstrapping mode we only need to establish the
-output streams for the tokens and the states, supply the appropriate file
-names for the two lists, flag the bootstrapping mode for the
-bootstrapping macros and inline typesetting (\.{\\prodstyle} macros)
-and input the appropriate machinery.
-
-This is done by the macros
-below. The bootstrap lexer setup (\.{\\bootstraplexersetup}) consists
-of inputting the token equivalence table for the \bison\ parser
-(i.e.~the parser that processes the \bison\ grammar file) and defining
-a robust token output function which simply ignores the token values
-the lexer is not aware of (it should not be necessary in our case
-since we are using full featured lexer and parser).
+\leavevmode\namedspot{bootstrapstates}Another (perhaps most important)
+goal of the bootstrapping phase is to extract the information about \flex\
+{\it states\/} used by the lexer from the appropriate source file. As
+is the case with token names, this information is output in a rather
+chaotic fashion by the scanner generator and is all but useless for
+our purposes. The bootstrapping macros are designed to
+handle \flex's \prodstyle{\%x} and \prodstyle{\%s} state declarations
+and produce a \Cee\ file with the appropriate definitions. This file
+can later be included by the `driver' routine to generate the
+appropriate table file for the lexer. To round off the bootstrapping
+mode we only need to establish the output streams for the tokens and
+the states, supply the appropriate file names for the two lists, flag
+the bootstrapping mode for the bootstrapping macros and inline
+typesetting (\.{\\prodstyle} macros) and input the appropriate
+machinery.
+
+This is done by the macros below. The bootstrap lexer setup
+(\.{\\bootstraplexersetup}) consists of inputting the token
+equivalence table for the \bison\ parser (i.e.~the parser that
+processes the \bison\ grammar file) and defining a robust token output
+function which simply ignores the token values the lexer is not aware
+of (it should not be necessary in our case since we are using a full
+featured lexer).
@<Define the bootstrapping mode@>=
@G(t)
-\newwrite\tokendefs %/* token list */
-\newwrite\stlist %/* \flex\ state list */
-\newwrite\gindex %/* index entries */
-
\def\modebootstrap{%
- \edef\bstrapparser{dyytab.tex}%
- \bootstrapmodetrue
\def\bootstraplexersetup{%
- \input bo.tok%
\let\yylexreturn\yylexreturnbootstrap /* only return tokens whose value is known */
%\let\yylexreturn\yylexreturnregular /* should also work */
}%
@@ -173,7 +171,7 @@ since we are using full featured lexer and parser).
Every parser/lexer pair (as well as some other macros) operates
within a set of dedicated {\it namespaces\/}. This simply means that the macros
that output token values, switch lexer states and access various
-tables `tack on' the string of characters representing the current
+tables `tack on' a string of characters representing the current
namespace to the `low level' control sequence name that performs the
actual output or access. Say, \.{\\yytname} becomes an alias of
\.{\\yytname[main]} while in the \.{[main]} namespace. When a parser
@@ -208,16 +206,21 @@ grammar describing prologue declarations uses the \.{[prologue]}
namespace.
\aterm{index}the \.{[index]} namespace is used for typesetting the
-index entries and is not necessarily associated with any parser or
-lexer. Somewhat confusingly, the macros that typeset \TeX\ entries, use
-\.{index} (without the brackets) as a pseudonamespace to display \TeX\
-terms in the index (due to the design of these typesetting macros, many
-of them take parameters, which can lead to chaos in the index). These
-two namespaces are not related but due to `hystorical' reasons (and the
-poorly thought out \TeX\ typesetting macro design) the \.{index} name has
-been retained. In addition, \.{index:visual} is used to adjust the sort order
-of \TeX\ terms (similar to the way \.{\\prettywordpairwvis} macro does).
+index entries for the terms that are automatically inserted by the main parser
+(such as an empty right hand side of a production or an inline action).
+\aterm{index:tex{\rm, }index:visual{\rm, and }texline}
+the macros that typeset \TeX\ entries, use
+\.{index:tex} as a pseudonamespace to display \TeX\
+terms in the index (due to the design of these typesetting macros, many
+of them take parameters, which can lead to chaos in the index).
+The \.{index:visual} pseudonamespace is used for ordering the index entries for
+\TeX\ macros (this is how the entry for \.{\\getsecond} (\texref{/getsecond})
+ends up in the {\ssf P} section of the index). Finally, the \TeX\ typesetting macros
+use the \.{texline} pseudonamespace to process the names of \TeX\ command sequences
+in action code. The reason we refer to these as {\it pseudo\/}namespaces is that
+only the token (or term) names are aliased, and not, say, the finite automata names
+in the case of the \TeX\ typesetting.
\aterm{flexre{\rm, }flexone{, \rm and} flextwo}the parsers for
\flex\ input use the \.{[flexre]}, \.{[flexone]}, and~\.{[flextwo]} namespaces for
@@ -259,14 +262,37 @@ initializing the \bison\ parser (accomplished by inputting
\newtoks\ldcmds
\def\modenormal{%
+ \commonstartup
+ \input ldtexlex.sty% /* \TeX\ typesetting specific to \ld */
+ \expandafter\def\csname index domain translation [L]\endcsname{%
+ {\noexpand\ld\ index}% /* used to typeset the table of contents */
+ {ld index}% /* outline entry */
+ {L\sc D INDEX}% /* index header */
+ }%
+ \def\otherlangindexheader{%
+ B{\sc ISON}, F{\sc LEX}, \TeX, {\sc AND} L{\sc D INDICES}%
+ }% /* modify the index header */
+ @>@[@<Initialize \ld\ parsers@>@]
+ @>@[@<Modified name parser for \ld\ grammar@>@]
+}
+@g
+
+@ @<Common startup routine@>=
+@G(t)
+\def\commonstartup{
\def\appendr##1##2{\edef\appnext{##1{\the##1##2}}\appnext}%
\def\appendl##1##2{\edef\appnext{##1{##2\the##1}}\appnext}%
- \input yyinit.sty%
+ \input yyinit.sty %
\input yytexlex.sty% /* \TeX\ typesetting macros */
- \input ldtexlex.sty% /* \TeX\ typesetting specific to \ld */
+ \input gindex.sty % /* indexing macros specific to \flex, \bison, and \ld */
+ \input noweb.sty % /* \noweb\ style references */
+ \xreflocaltrue
+ \let\sectionlistsetup\lxrefseparator
+ \let\inx\inxmod
+ \let\fin\finmod
+ \termindextrue
+ \immediate\openout\gindex=\jobname.gdx
\let\hostparsernamespace\ldnamespace /* the namespace where tokens are looked up for typesetting purposes */
- @>@[@<Initialize \ld\ parsers@>@]
- @>@[@<Modified name parser for \ld\ grammar@>@]
}
@g
@@ -288,53 +314,88 @@ wreaking havoc on the lexer state stack.
@g
@ This is the \ld\ parser invocation routine. It is coded according to
-a straightforward sequence initialize-invoke-execute-or-fall back.
+a straightforward sequence initialize-invoke-execute-or-fall back. The
+\.{\\preparseld} macro is invoked by \.{\\lsectionbegin} (see \.{limbo.sty}).
+It starts by defining the postprocessing and typesetting macro (\.{\\postparseld})
+followed by the parser setup.
@<Define the normal mode@>=
@G(t)
\def\preparseld{%
\let\postparse\postparseld
- \expandafter\hidecs\expandafter{\ldunion}% /* inhibit expansion so that fewer \.{\\noexpand}s are necessary */
+ \hidecslist\ldunion % /* inhibit expansion so that fewer \.{\\noexpand}s are necessary */
\toldparser
+ \displayrawtable % /* do this after the parser namespaces are setup */
\ldparserinit
\yyparse
}
+@g
+@ The postprocessing macro defines a procedure for typesetting the output and saving the
+parsed result to a file. After that, a generic postprocessing macro is executed.
+@<Define the normal mode@>=
+@G(t)
\def\postparseld{%
- \ifsaveparseoutput
- {\newlinechar=`^^J\immediate\write\exampletable{^^J\harmlesscomment
- parsed table: \the\ldcmds^^J^^J\harmlesscomment
- stashed stream:^^J\the\yystash^^J^^J\harmlesscomment
- format stream: ^^J\the\yyformat}%
- }%
- \fi
- \ifchecktable
- \errmessage{parsed table: \the\ldcmds^^J^^J%
- stashed stream: \the\yystash^^J^^J%
- format stream: \the\yyformat}%
- \fi
- \restorecslist{ld-parser:restash}\ldunion % /* mark variables, preprocess stash */
- \setprodtable
- \the\ldcmds
- \restorecslist{ld-display}\ldunion
- \setprodtable /* use the \bison's parser typesetting definitions */
- \restorecs{ld-display}{\anint\bint\hexint} % /* $\ldots$ except for integer typesetting */
- \the\ldcmds
- \par
- \vskip-\baselineskip
- \the\lddisplay
+ \let\saveparsedtable\saveldtable
+ \let\typesetparsedtables\typesetldtables
+ \postparsegeneric{(ld script)}%
+}
+@g
+
+@ The table output and typesetting macros are responsible for the parsed table output
+to a log file and the typographic representation of the result. The table is output
+after expanding its contents. The commands
+\begindemo
+^\hidecslist\cwebstreamchars
+^\restorecslist{ld-parser-debug}\ldunion
+\enddemo
+are meant to inhibit most expansions so that only the list (iterator) macros are expanded.
+The parser for \ld\ does not currently use the list macros to speed up the parsing process
+but the general set up is here in case it is needed in the future. Unfortunately, the same technique
+cannot be applied to the display of the \.{\\yystash} and \.{\\yyformat} streams (that use linked lists
+by default), since there are too many random sequences that can appear in such streams. Therefore,
+to facilitate debugging, one should expand the lists before displaying them (see \.{yyinput.sty} for
+details; lists with iterators are a bit more convenient due to their flexibility).
+@<Define the normal mode@>=
+@G(t)
+\def\saveldtable#1{{%
+ \hidecslist\cwebstreamchars
+ \restorecslist{ld-parser-debug}\ldunion
+ \expandafter\saveoutputcode\expandafter{\the\ldcmds}\exampletable{#1}%
+}}
+
+\def\typesetldtables{%
+ \begingroup
+ \displayparsedoutput\ldcmds
+ \restorecslist{ld-parser:restash}\ldunion % /* mark variables, preprocess stash */
+ \setprodtable
+ \the\ldcmds
+ \restorecslist{ld-display}\ldunion
+ \setprodtable /* use the \bison's parser typesetting definitions */
+ \restorecs{ld-display}{\anint\bint\hexint} % /* $\ldots$ except for integer typesetting */
+ \the\ldcmds
+ \par
+ \vskip-\baselineskip
+ \the\lddisplay
+ \endgroup
}
+@g
+@ The parsing routine defined above is the first macro in the \ld\ parser stack.
+The only remaining procedure on the stack is an error reporting macro in case
+the parsing pass failed.
+@<Define the normal mode@>=
+@G(t)
\fillpstack{l}{%
\preparseld
{\preparsefallback{++}}% /* skip this section if parsing failed, put \.{++} on the screen */
- \relax % /* this \.{\\relax} serves as a `guard' for the braces */
+ \relax % /* this \.{\\relax} `guards' the braces above during \.{\\poppstack} */
}
@g
@ Unless they are being bootstrapped, the \ld\ parser and its
term parser are initialized by the normal mode. The token typesetting
of \ld\ grammar tokens is adjusted at the same time (see the remarks
-above about the mechanism that is responsible for this). Most nonterminals
+above about the mechanism that is responsible for this). Most terminals
(such as keywords, etc.) may be displayed unchanged (provided the
names used by the lexer agree with their appearance in the script file,
see below), while the typeseting of others is modified in
@@ -358,8 +419,8 @@ examining \.{ltokenset.sty}.
@G(t)
\genericparser
name: ld,
- ptables: ptab.tex,
- ltables: ltab.tex,
+ ptables: ldptab.tex,
+ ltables: ldltab.tex,
tokens: {},
asetup: {},
dsetup: {},
@@ -372,12 +433,28 @@ examining \.{ltokenset.sty}.
host: ld;%
@g
-@ The macros are collected in a single file included at the beginning
-of this documentation.
+@ We also need some modifications to the indexing macros in order to typeset \ld\ terms
+and variables separately.
+@<Additional macros for the \ld\ lexer/parser@>=
+@G(t)
+@g
+
+@ The macros are collected in two files included at the beginning
+of this documentation\footnote{An attentive reader may have noticed that the files
+have the extension \.{.stx} instead of the traditional \.{.sty}. The reason for this
+is the postprocessing step that `cleans' the generated files of various \Cee\
+artifacts output by \CWEB\ and turns \.{ldman.stx} and \.{ldsetup.stx} into
+\.{ldman.sty} and \.{ldsetup.sty} included by \.{ldman.tex}$\ldots$}.
@(ldman.stx@>=
@<Set up the generic parser machinery@>@;
@<Begin namespace setup@>@;
@<Define the bootstrapping mode@>@;
+@<Common startup routine@>@;
+
+@ The macros collected in the file below are not specific to this manual but are needed in
+order to use the \ld\ parser generated and are thus put in a separate which can be included
+by other \TeX\ programs that wish to use them.
+@(ldsetup.stx@>=
@<Define the normal mode@>@;
@<Additional macros for the \ld\ lexer/parser@>@;
@@ -404,23 +481,22 @@ MEMORY
need for a `parser stack' as in the case of the \bison\
parser. If one must be able to display still smaller segments of \ld\
code, using `hidden context' tricks (discussed elsewhere) seems to be
-a better approach.
-%
+a better approach.
+%\saveparseoutputtrue\checktabletrue
+%\saveparseoutputfalse\checktablefalse
@<Example \ld\ script@>=
@i ldexample_l.hx
@ @<The same example of an \ld\ script@>=
-@i ldexample_b.hx
+@i ldexample_t.hx
@ @<Some random portion of \ld\ code@>=
@i ldnp.x
@** Appendix. The original code of the \ld\ parser and lexer is reproduced below. It
-is mostly left intact and is typeset by the pretty printing parser for
-\bison\ input. The lexer (\flex) input is reproduced verbatim and is
-left mostly unformatted with the exception of spacing and the embedded
-\Cee\ code.
+is left mostly intact and is typeset by the pretty printing parser for
+\bison\ input. The lexer (\flex) input is given a similar treatment.
The treatment of comments is a bit more invasive. \CWEB\ silently
assumes that the comment refers to the preceding statement or a group
@@ -446,7 +522,7 @@ creators of \ld.%\checktabletrue\saveparseoutputtrue
@q of index entries depends on the placement of this inclusion @>
@i alphas.hx
-@** Index. \checktablefalse\saveparseoutputtrue
+@** Index. \checktablefalse\saveparseoutputtrue \global\let\secrangedisplay\empty
This section lists the variable names and (in some cases)
the keywords used inside the `language sections' of the \CWEB\
source. It takes advantage of the built-in facility of \CWEB\ to supply
@@ -477,15 +553,8 @@ $$
index entries, as well, mimicking \CWEB's behavior for the
{\it inline \Cee\/} (\.{\yl}$\ldots$\.{\yl}). Such entries are labeled
with $^\circ$, to provide a reminder of their origin.
-\unsetfootnotes
-\def\next{\expandafter\eatone\string}
-\edef\unindexable{{\next\the}{\next\nx}{\next\yy}{\next\yylexnext}{\next\else}{\next\fi}{\next\yyBEGIN}{\next\next}}
-\input gindex.sty
-\closeout\gindex
-\termindexfalse
-\let\inx\inxmod
-\let\fin\finmod
+\makeunindexablex{{\csstring\the}{\csstring\nx}{\csstring\yy}{\csstring\yylexnext}%
+ {\csstring\else}{\csstring\fi}{\csstring\yyBEGIN}{\csstring\next}}
\let\oldMRL\MRL
\def\MRL#1{\smash{\oldMRL{#1}}} % a more sophisticated way to handle it woud be to add a \smash whenever we are
% in the [index] namespace but this is simpler and works as well
-\def\topofcontents{\null\vskip-3\baselineskip\centerline{C{\sc ONTENTS} (\sc\uppercase\expandafter{\title})}\medskip}
diff --git a/support/splint/examples/ld/ldnp.w b/support/splint/examples/ld/ldnp.w
index 0a99d864fd..9a7d86f097 100644
--- a/support/splint/examples/ld/ldnp.w
+++ b/support/splint/examples/ld/ldnp.w
@@ -1,4 +1,4 @@
-@q Copyright 2012-2020, Alexander Shibakov@>
+@q Copyright 2012-2022, Alexander Shibakov@>
@q This file is part of SPLinT@>
@q SPLinT is free software: you can redistribute it and/or modify@>
@@ -181,11 +181,6 @@ qualifier:
@[TeX_( "/getsecond{/yy(1)}/to/toksb" );@]@;
@[TeX_( "/yy0{/nx/idstr{/the/toksa}{/the/toksb}}" );@]@;
-@ @<Start with a tag@>=
- @[TeX_( "/getfirst{/yy(2)}/to/toksa" );@]@;
- @[TeX_( "/getsecond{/yy(2)}/to/toksb" );@]@;
- @[TeX_( "/yy0{/nx/idstr{</the/toksa>}{</the/toksb>}}" );@]@;
-
@ @<Start with a quoted string@>=
@[TeX_( "/getfirst{/yy(2)}/to/toksa" );@]@;
@[TeX_( "/getsecond{/yy(2)}/to/toksb" );@]@;
@@ -197,9 +192,6 @@ qualifier:
@ @<Start with a \prodstyle{'.'} string@>=
@[TeX_( "/yy0{/nx/visflag{/nx/termvstring}{}/nx/chstr{.}{.}}" );@]@;
-@ @<Turn a qualifier into an identifier@>=
- @<Start with an identifier@>@;
-
@ @<Attach an identifier@>=
@[TeX_( "/getsecond{/yy(1)}/to/toksa" );@]@;
@[TeX_( "/appendr/toksa{/noexpand/_}" );@]@;
@@ -213,7 +205,6 @@ qualifier:
@ @<Attach qualifier to a name@>=
-
@ @<Attach an integer@>=
@[TeX_( "/yy0{/nx/dotsp/nx/sfxi/the/yy(1)}" );@]@;
@@ -262,14 +253,15 @@ as they have to be inserted in a place that is aware of the internal definitions
definitions are used.
@<Name parser \Cee\ postamble@>=
-#define YYPRINT(file, type, value) @[yyprint (file, type, value)@]
- static void yyprint (FILE *file, int type, YYSTYPE value){}
@ Union of types.
@<Union of parser types@>=
-@*1 The name scanner.
+@*1 The name scanner. The scanner for \ld\ name parser is essentially identical to that for the
+\bison\ and \flex\ name parser\footnote{And is just as much of an overkill. This should serve as a
+cautionary tale of how suboptimal but convenient choices tend to take root.}. The only exception
+is the scanning of suffixes.
%\checktabletrue
@(ld_small_lexer.ll@>=
@G
@@ -277,7 +269,7 @@ definitions are used.
%{@> @<Lexer \Cee\ preamble@> @=%}
@> @<Lexer options@> @=
%%
- @> @<Regular expressions@> @=
+ @> @<Regular expressions for the name parser@> @=
%%
@O
void define_all_states( void ) {
@@ -306,18 +298,16 @@ int [0-9]+
@ Strings and characters in directives/rules.
@<Lexer states@>=
-@G
+@G(fs1)
%x SC_ESCAPED_STRING SC_ESCAPED_CHARACTER
@g
@ @<Lexer \Cee\ preamble@>=
-
#include <stdint.h>
-#include <stdbool.h>
+#include <stdbool.h>@t}\yyskipparsefalse{@>
-@t}\yyskipparsefalse{@>
@ @<Lexer options@>=
-@G
+@G(fs1)
%option bison-bridge
%option noyywrap nounput noinput reentrant
%option noyy_top_state
@@ -326,11 +316,18 @@ int [0-9]+
%option outfile="ld_small_lexer.c"
@g
-@ @<Regular expressions@>=
+@ @<Regular expressions for the name parser@>=
@<Scan white space@>@;
@<Scan identifiers@>@;
-@ White space skipping.
+@ White space is skipped in names\footnote{How it finds its way {\em into\/} a name deserves
+some investigation for which we do not have the space here.}.
+Note that the input routine produced by \splint\ springs into action
+{\em after\/} the input passes through the scanning mechanism of \TeX\ which makes it very unlikely
+that any of the characters below in the definition of `whitespace' could make it to the scanner.
+They are left in, however, in case a custom input routine is used that produces such
+characters\footnote{Although, in this case, some special processing by the scanner
+would likely be required.}.
\traceparserstatestrue
\tracestackstrue
\tracerulestrue
@@ -356,11 +353,9 @@ int [0-9]+
[ \f\n\t\v] {@> @[TeX_( "/yylexnext" );@]@=}
@g
-@ This collection of regular expressions might seem redundant, and in
-its present state, it certainly is. However, if later on the
-typesetting style for some of the keywords would need to be adjusted,
-such changes would be easy to implement, since the template is already
-here.
+@ Suffixes specific to \ld\ name scanner are defined here, along with some other
+lexical elements. Most of these definitions mimic the ones for the \bison\ name
+scanner.
@<Scan identifiers@>=
@G(fs2)
"%"({aletter}|[0-9]|[-_]|"%"|[<>])+ {@> @[TeX_( "/yylexreturnval{PERCENT_IDENTIFIER}" );@]@=}
@@ -392,4 +387,4 @@ trivial scanning problems.
@[TeX_( "/iftracebadchars" );@]@;
@[TeX_( " /yycomplain{invalid character(s): /the/yytext}" );@]@;
@[TeX_( "/fi" );@]@;
- @[TeX_( "/yylexreturn{$undefined}" );@]@;
+ @[TeX_( "/yyerrterminate" );@]@;
diff --git a/support/splint/examples/ld/ldnump.w b/support/splint/examples/ld/ldnump.w
index 813628c68c..4050374c25 100644
--- a/support/splint/examples/ld/ldnump.w
+++ b/support/splint/examples/ld/ldnump.w
@@ -1,4 +1,4 @@
-@q Copyright 2012-2020, Alexander Shibakov@>
+@q Copyright 2012-2022, Alexander Shibakov@>
@q This file is part of SPLinT@>
@q SPLinT is free software: you can redistribute it and/or modify@>
@@ -182,8 +182,6 @@ as they have to be inserted in a place that is aware of the internal definitions
definitions are used.
@<Name parser \Cee\ postamble@>=
-#define YYPRINT(file, type, value) @[yyprint (file, type, value)@]
- static void yyprint (FILE *file, int type, YYSTYPE value){}
@ Union of types.
@@ -222,7 +220,7 @@ int [0-9]+
@ Strings and characters in directives/rules.
@<Lexer states@>=
-@G
+@G(fs1)
%x SC_ESCAPED_STRING SC_ESCAPED_CHARACTER
@g
@@ -232,7 +230,7 @@ int [0-9]+
#include <stdbool.h>
@ \yyskipparsefalse@<Lexer options@>=
-@G
+@G(fs1)
%option bison-bridge
%option noyywrap nounput noinput reentrant
%option noyy_top_state
@@ -303,4 +301,4 @@ here.
@[TeX_( "/iftracebadchars" );@]@;
@[TeX_( " /yycomplain{invalid character(s): /the/yytext}" );@]@;
@[TeX_( "/fi" );@]@;
- @[TeX_( "/yylexreturn{$undefined}" );@]@;
+ @[TeX_( "/yyerrterminate" );@]@;
diff --git a/support/splint/examples/ld/ldtexlex.sty b/support/splint/examples/ld/ldtexlex.sty
index 01b8873540..878811dee6 100644
--- a/support/splint/examples/ld/ldtexlex.sty
+++ b/support/splint/examples/ld/ldtexlex.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -22,7 +22,7 @@
\def\d@fz#1#2{%
\defx#1{#2}{texline}%
- \d@@z#1{#2}{index}%
+ \d@@z#1{#2}{index:tex}%
}
\def\d@@z#1#2#{%
diff --git a/support/splint/examples/ld/ldunion.sty b/support/splint/examples/ld/ldunion.sty
index 710d4e1725..c59cd601e0 100644
--- a/support/splint/examples/ld/ldunion.sty
+++ b/support/splint/examples/ld/ldunion.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -19,9 +19,9 @@
% of TeX tokens; sptr is a pointer to the stash stream, fptr is a pointer to the format stream
\def\yyuniontag{\ldunion}
-\def\parserstrictnamespace{ld-parser-strict}
-\def\parserprototypesnamespace{ld-parser-strict:headers}
-\def\parserdebugnamespace{ld-parser-debug}
+\def\parserstrictnamespace{ld-parser-strict} % expands to an error message
+\def\parserprototypesnamespace{ld-parser-strict:headers} % the parameter strings
+\def\parserdebugnamespace{ld-parser-debug} % control sequences are \let...=\relax for debugging
\def\ldunion{\currentyyunionnamespace}
\def\currentyyunionnamespace{ld-generic}
@@ -34,11 +34,12 @@
% ld commands
+\defp\ldor{} % item separator :: \ldor, is only needed here for debugging (in the ld-parser-debug namespace)
\defp\ldregexp#1{} % name pattern :: \ldregexp{{name}{name11}{fptr}{sptr}}
\defp\ldregop#1{} % name pattern :: \ldregop{name}
\defp\ldspace{} % space separator :: \ldspace
-\defp\ldattributes#1{} % attributes :: \ldattributes{name}
-\defp\ldattributesneg#1{} % complemented attributes :: \ldattributesneg{name}
+\defp\ldattrstring#1#2#3#4{} % attributes string :: \ldattrstring{name}{name11}{fptr}{sptr}
+\defp\ldattrstringneg#1#2#3#4{} % complemented attributes string :: \ldattrstring{name}{name11}{fptr}{sptr}
\defp\ldfilename#1{} % file name :: \ldfilename{name}
\defp\ldcommandseparator#1#2#3#4{} % command separator :: \ldcommandseparator{fptr}{sptr}{prev command}{next command}
\defp\ldassignment#1#2#3{} % assignment :: \ldassignment{lhs}{op}{rhs}
@@ -59,20 +60,38 @@
\defp\ldsectionseparator#1#2{} % section separator :: \ldsectionseparator{fptr}{sptr}
\defp\ldtype#1{} % section type :: \ldtype{type}
\defp\ldstatement#1{} % statement :: \ldstatement{statement}
+\defp\ldfreestmt#1{} % statement in a section :: \ldfreestmt{\ldstatement{statement}}
\defp\ldsecspec#1{} % section spec :: \ldsecspec{section spec}
\defp\ldinsertcweb#1#2#3#4{} % insert accumulated \CWEB\ material :: \ldinsertcweb
% {fptr}{sptr}{command}{parsed segment} : never defined
\defp\ldnamedsection#1#2#3#4#5#6#7{} % named section :: \ldnamedsection{name}
- % {{expression}{type}}{at}
+ % {expression}{type}}{at}
% {{}{}{}:alignment}
% {constraint}{statements}
% {{}{}{}{}:placement}
+\defp\ldoverlay#1#2#3#4#5#6{} % overlay section list :: \ldoverlay{expression}{crossrefs}{at}{subalign}
+ % {sections}
+ % {{memspec}{memspec_at}{phdr}{fill}}
+\defp\ldoverlaysection#1#2#3#4{} % overlay section :: \ldoverlaysection{name}{statements}{phdr}{fill}
\defp\ldsectionstash#1#2{} % sections spec stash :: \ldsectionstash{fptr}{sptr}
-\savecslist{ld-parser-prototypes}\ldunion
+\savecslist{ld-parser-prototypes}\ldunion % these consume parameters and expand to nothing
\input ldint.sty
+\def\ldidxdomain{L}
+
+\let\writeldidxentry\writeidxentry % mix the \ld\ index with the
+\let\writeldidxhentry\writeidxhentry % \bison\ index for now
+
+\def\writeldidxhentry#1{%
+ \indxe\gindex{{\secno}{{}{\hostparsernamespace}}{\ldidxdomain}{\headeridxrank}#1}%
+}
+
+\def\writeldidxentry#1{%
+ \indxe\gindex{{\secno}{{}{\hostparsernamespace}}{\ldidxdomain}{\termidxrank}#1}%
+}
+
\def\bigbracedel{\delimiter"4266308}
\newtoks\lddisplay
@@ -116,6 +135,10 @@
\edef\next{\toksc{\gidxentry{\termttstring}{#2}{}{\ntt #2}}}\next
}
+\def\ldextractattrs#1#2#3#4{%
+ \edef\next{\toksc{{\ntt #2}}}\next
+}
+
\def\ldextractmemname#1#2#3#4{%
{%
\expandafter\let\expandafter\tosmallparser\csname to\stripbrackets\cwebclinknamespace parser\endcsname
@@ -134,7 +157,6 @@
% \separatorswitcheq and \separatorswitchneq in yyunion.sty
\defc\ldcommandseparator{%
- \restorecs{table-render}{\strm}%
\expandafter\ifx\csname ldstashentry[#2]\endcsname\relax
\yyifsamestring{#3}{#4}{}{\appendrnx\lddisplay{\medskip}}%
\else
@@ -197,16 +219,16 @@
\def\ldreg@xp#1#2#3#4{%
\expandafter\ifx\csname ldvarname[#2]\endcsname\relax
{%
- \let\termindex\writeidxentry
+ \let\termindex\writeldidxentry
\let\hostparsernamespace\cwebclinknamespace% process the variable names as in \CWEB
- \edef\next{\toksc{\gidxentry{\termttstring}{#1}{}}}\next\the\toksc
+ \edef\next{\toksc{\gidxentry{\termttstring}{#1}{}}}\next
\hbox{\ntt@#1}%
\expandafter
}\the\toksc
\else
\yyifsamestring{#2}{.}{% special . name
{%
- \let\termindex\writeidxentry
+ \let\termindex\writeldidxentry
\let\hostparsernamespace\cwebclinknamespace% for consistency
\edef\next{\toksc{\gidxentry{\termexception}{.origin&}{.}}}\next
\hbox{\csname\prettynamecs\hostparsernamespace{.origin&}\endcsname{}}%
@@ -214,14 +236,14 @@
}\the\toksc
}{%
{%
- \let\termindex\writeidxentry
+ \let\termindex\writeldidxentry
\let\hostparsernamespace\cwebclinknamespace% process the variable names as in \CWEB
\edef\next{\toksc{\gidxentry{\termhostidstring}{#1}{}}}\next
\hbox{%
\expandafter\let\expandafter\tosmallparser\csname to\stripbrackets\cwebclinknamespace parser\endcsname
\let\optstrextra\optstrextraesc
\nameproc{#2}\with\parsebin
- \it\the\toksa
+ \\{\the\toksa}%
}%
\expandafter
}\the\toksc
@@ -259,27 +281,34 @@
\defc\ldmemoryspec{%
\toksb{\hfil&}%
- \let\termindex\writeidxhentry
+ \let\termindex\writeldidxhentry
\ldextractmemname#1\concat\toksb\toksc
\let\termindex\eatone
\appendrnx\toksb{&}%
- \toksc{}#2\concat\toksb\toksc
- \toksc{}#3\concat\toksb\toksc
+ \toksc{}#2\appendrnx\toksc{&}\concat\toksb\toksc% attributes
+ \toksc{}#3\appendrnx\toksc{&}\concat\toksb\toksc
\toksc{}#4\concat\toksb\toksc
\concat\toksa\toksb
\toksb{\cr}\concat\toksa\toksb
}
-\defc\ldattributes{%
- \ldextractname#1\appendrnx\toksc{&}%
+\defc\ldattrstring{%
+ \appendrnx\toksc{{\ntt@ #2}}%
+}
+
+\defc\ldattrstringneg{%
+ \appendrnx\toksc{\hbox{$\neg$}{\ntt@ #2}}%
+}
+
+\defc\ldspace{%
}
\defc\ldlengthspec{%
- \toksc{#1}%
+ \toksc{$#1$}%
}
\defc\ldoriginspec{%
- \toksc{#1&}%
+ \toksc{#1}%
}
\defc\ldinclude{%
@@ -290,15 +319,7 @@
\concat\toksa\toksc
}
-\defc\ldmemspecseparator{% TODO: remove after testing is complete
- \restorecs{table-render}{\strm}%
- \expandafter\ifx\csname ldstashentry[#2]\endcsname\relax
- \else
- \expandafter\expandafter\expandafter\yystashlocal\expandafter\expandafter\expandafter{\csname ldstashentry[#2]\endcsname}%
- \edef\next{\toksc{&\noexpand\multispan4\toksa{}\the\yystashlocal
- \noexpand\ldmakestashbox{\cdotfill}\noexpand\quad\cr}}\next\concat\toksa\toksc
- \fi
-}
+% TODO: change the code to use linked lists
\defc\ldmemspecseparator{%
\expandafter\ifx\csname ldstashentry[#2]\endcsname\relax
@@ -309,16 +330,6 @@
}
\defc\ldmemspecstash{%
- \restorecs{table-render}{\strm}%
- \expandafter\ifx\csname ldstashentry[#2]\endcsname\relax
- \else
- \expandafter\expandafter\expandafter\yystashlocal\expandafter\expandafter\expandafter{\csname ldstashentry[#2]\endcsname}%
- \edef\next{\toksc{&\noexpand\multispan4\toksa{}\the\yystashlocal
- \noexpand\ldmakestashbox{\cdotfill}\noexpand\quad\cr}}\next\concat\toksa\toksc
- \fi
-}
-
-\defc\ldmemspecstash{%
\expandafter\ifx\csname ldstashentry[#2]\endcsname\relax
\else
\expandafter\expandafter\expandafter\yystashlocal\expandafter\expandafter\expandafter{\csname ldstashentry[#2]\endcsname}%
@@ -370,7 +381,7 @@
\else
\toksb\expandafter{&}% section header
\advance\tempca\m@ne
- \ldextractitem\tempca{#6}% expression
+ \ldextractitem\tempca{#6}% next statement
\advance\tempca\@ne
\yytoksempty\toksc{%
\ldextractfill#7%
@@ -382,7 +393,7 @@
\fi
\fillextractedtrue
}{%
- \toksc\expandafter{\expandafter\qquad\expandafter$\the\toksc{}$}%
+ \toksc\expandafter{\expandafter\qquad\the\toksc{}}%
}%
\concat\toksb\toksc
\appendrnx\toksb{&}%
@@ -407,7 +418,60 @@
\repeat
}
-\def\ldextractitem#1#2{%
+
+% named section :: \ldnamedsection{name}
+ % {{bind?}{expression}{block?}{expression}{type}}{at}
+ % {{}{}{}:alignment}
+ % {constraint}{statements}
+ % {{memspec}{memspec_at}{phdr}{fill}}
+
+\defc\ldoverlay{% overlay sections :: \ldoverlay{expression}{crossrefs}{at}{subalign}
+ % {sections}
+ % {{memspec}{memspec_at}{phdr}{fill}}
+ \yystringempty{#1}{\tokse{}}{\tokse{ $#1$}}%
+ \yystringempty{#2}{\toksf{}}{\toksf{{ \ttl noxrefs}}}%
+ \yystringempty{#3}{\toksg{}\toksc{}}{\toksg{{\ttl at} $#3$}\toksc{ }}%
+ \yystringempty{#4}{\toksh{}}{\toksh\expandafter{\expandafter{\the\tokc\ttl subalign} $#4$}}%
+ \appendr\toksa{&\hskip-1em\noexpand\ttl overlay\the\tokse\the\toksf&&\the\toksg\the\toksh}%
+ \ldwrapoverlay#6%
+ \appendr\toksa{&\the\toksc&\cr}%
+ #5%
+ \ldoverlayfill#6%
+ \yytoksempty\toksd{}{\appendr\toksa{&\the\toksd&&&&&\cr}}% attach the fill at the end
+ \appendr\toksa{&\hskip-1em{\ttl overlay end}&&&&&\cr}%
+}
+
+\defc\ldoverlaysection{% overlay section :: \ldoverlaysection{name}{statements}{phdr}{fill}
+ \ldnamedsection{#1}%
+ {{}{}{}{}{}}{}%
+ {{}{}{}}%
+ {}{#2}%
+ {{}{}{#3}{#4}}%
+}
+
+\def\ldwrapoverlay#1#2#3#4{% puts memspec... in \toksc and fill in \toksd
+ \toksc{}%
+ \yystringempty{#1}{% any > ?
+ }{%
+ \ldextractname#1%
+ \toksd{{\ttl in }}%
+ \concatl\toksd\toksc
+ }%
+ \yystringempty{#2}{% any AT > ?
+ }{%
+ \yytoksempty\toksc{\toksc{{\ttl as }}}{\appendrnx\toksc{ {\ttl as }}}%
+ \toksd=\toksc
+ \ldextractname#2%
+ \concat\toksd\toksc
+ \toksc=\toksd
+ }%
+}
+
+\def\ldoverlayfill#1#2#3#4{%
+ \ld@xtractfill{#4}%
+}
+
+\def\ldextractitem#1#2{% #1 is a counter, #2 is a list separated by \ldor
\yystringempty{#2}{%
\toksc{}%
}{%
@@ -463,18 +527,23 @@
}
\def\ldextractfill#1#2#3#4{%
+ \toksc{}%
\yystringempty{#4}{%
- \toksc{}%
\fillextractedtrue
}{%
\iffillextracted
- \toksc{}%
\else
- \toksc={\qquad{\ttl fill }$#4$}%
+ \ld@xtractfill{#4}%
+ \appendr\toksc{\noexpand\qquad{\noexpand\ttl fill }$\the\toksd$}%
\fi
}%
}
+\def\ld@xtractfill#1{% #1 must be \ldfill{expression}
+\toksf{#1}%
+ \toksd\expandafter{#1}%
+}
+
\def\ldpushpheaders#1#2#3#4{%
\ldextractitem\tempcc{#3}%
\advance\tempcc\@ne
@@ -491,11 +560,10 @@
\toksd{\hbox{\ttl #1}}%
}
-\defc\ldstatement{{#1}} % the braces form the group for a \toks assignment
-
-\let\ldsecspec\ldstatement
+\defc\ldstatement{{\let\ldrlap\relax\let\ldintfont\ntt@$#1$}} % the braces form the group for a \toks assignment
+\defc\ldfreestmt{\toksb\expandafter{#1}\appendr\toksa{&\the\toksb\cr}}
-\defc\ldsectionseparator{\toksc{&\multispan5\cdotfill\quad\cr}\concat\toksa\toksc}
+\defc\ldsecspec{{$#1$}}
\def\ldboxstash#1{%
\ifchecktrim\errmessage{stash contents: \the\toksa}\fi
@@ -506,16 +574,6 @@
\def\ldmakestashbox#1{\cleanstash\stripstash\ldboxstash{#1}}
\defc\ldsectionseparator{%
- \restorecs{table-render}{\strm}%
- \expandafter\ifx\csname ldstashentry[#2]\endcsname\relax
- \else
- \expandafter\expandafter\expandafter\yystashlocal\expandafter\expandafter\expandafter{\csname ldstashentry[#2]\endcsname}%
- \edef\next{\toksc{&\noexpand\multispan5\toksa{}\the\yystashlocal
- \noexpand\ldmakestashbox{\cdotfill}\noexpand\quad\cr}}\next\concat\toksa\toksc
- \fi
-}
-
-\defc\ldsectionseparator{%
\expandafter\ifx\csname ldstashentry[#2]\endcsname\relax
\else
\expandafter\expandafter\expandafter\yystashlocal\expandafter\expandafter\expandafter{\csname ldstashentry[#2]\endcsname}%
@@ -524,17 +582,6 @@
}
\defc\ldsectionstash{%
- \restorecs{table-render}{\strm}%
- \expandafter\ifx\csname ldstashentry[#2]\endcsname\relax
- \else
- \expandafter\expandafter\expandafter\yystashlocal\expandafter\expandafter\expandafter{\csname ldstashentry[#2]\endcsname}%
- \edef\next{\toksc{\sections@header&\noexpand\multispan5\toksa{}\the\yystashlocal
- \noexpand\ldmakestashbox{\cdotfill}\noexpand\quad\cr}}\next\concat\toksa\toksc
- \def\sections@header{}%
- \fi
-}
-
-\defc\ldsectionstash{%
\expandafter\ifx\csname ldstashentry[#2]\endcsname\relax
\else
\expandafter\expandafter\expandafter\yystashlocal\expandafter\expandafter\expandafter{\csname ldstashentry[#2]\endcsname}%
@@ -546,7 +593,12 @@
\restorecs{ld-display}{\ldregexp\ldassignment\ldfill\ldinsertcweb\ldentry}
\toyyunion{ld-parser:sections}
-% preprocessing macros: collecing stash and marking variables
+% preprocessing macros: collecting stash and marking variables
+% currently these macros do not get inside expressions to extract
+% variable names, consequently if the variable is used before it
+% appears in an assignment, it will not be displayed properly
+% (is this even legal in linker scripts?) although the index will
+% show it correctly
\restorecslist{ld-parser-prototypes}\ldunion
\restorecs{ld-parser-strict}{\insertcweb}
@@ -557,7 +609,8 @@
\readstash{#2}%
\setbox0 \vbox{\toksa\expandafter{\the\yystashlocal}\cleanstash\stripstash\the\toksa}%
\ifdim\ht0=\z@
- \expandafter\let\csname ldstashentry[#2]\endcsname\relax
+ \expandafter\let\csname ldstashentry[#2]\endcsname\relax % this is redundant but we may change \relax to
+ % something else later
\else
\expandafter\edef\csname ldstashentry[#2]\endcsname{\the\yystashlocal}%
\fi
@@ -575,6 +628,12 @@
\defc\ldsections{#1} % ld sections :: \ldsections{sections}
+\defc\ldoverlay{% overlay section :: \ldoverlay{expression}{crossrefs}{at}{subalign}
+ % {sections}
+ % {{memspec}{memspec_at}{phdr}{fill}}
+ #3#5%
+} % TODO: add handling of subalign, memmspec, and memspec_at
+
\defc\ldsectionseparator{%
\readstash{#2}%
\setbox0 \vbox{\toksa\expandafter{\the\yystashlocal}\cleanstash\stripstash\the\toksa}%
@@ -606,37 +665,20 @@
} % command separator :: \ldcommandseparator{fptr}{sptr}{prev command}{next command}
\defc\ldstatement{#1}
-
+\defc\ldfreestmt{#1}
+\defc\ldassignment{#1}
+\defc\ldprovide{#1}
+\defc\ldentry{#1}
+\let\ldhidden\ldprovide
+\let\ldprovidehid\ldprovide
\defc\ldnamedsection{\let\ldor\empty#6}
-\defc\ldassignment{%
- {%
- \let\ldregexp\markldname
- #1%
- }{\errmessage{Not an \\ldregexp!}}%
-}
-\defc\ldprovide{%
- {%
- \let\ldregexp\markldname
- #1%
- }{\errmessage{Not an \\ldregexp!}}%
-}
-
-\defc\ldentry{%
- {%
- \let\ldregexp\markldname
- #1%
- }{\errmessage{Not an \\ldregexp!}}%
+\defc\ldregexp{%
+ \ldr@gexprestash#1%
}
-\def\markldname#1{%
- \markldn@me#1%
+\def\ldr@gexprestash#1#2#3#4{
+ \expandafter\def\csname ldvarname[#2]\endcsname{\errmessage{Not an \\ldregexp!, maybe change the parser namespace?}}%
}
-\def\markldn@me#1#2#3#4{%
- \aftergroup\def\expandafter\aftergroup\csname ldvarname[#2]\endcsname
-}
-
-\let\ldhidden\ldprovide
-\let\ldprovidehid\ldprovide
\toyyunion{ld-parser:restash}
diff --git a/support/splint/examples/ld/lstokenset.sty b/support/splint/examples/ld/lstokenset.sty
index 441bad2543..496fe0f2d3 100644
--- a/support/splint/examples/ld/lstokenset.sty
+++ b/support/splint/examples/ld/lstokenset.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
diff --git a/support/splint/examples/ld/ltokenset.sty b/support/splint/examples/ld/ltokenset.sty
index 846dead6c8..f980114823 100644
--- a/support/splint/examples/ld/ltokenset.sty
+++ b/support/splint/examples/ld/ltokenset.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
diff --git a/support/splint/examples/symbols/Makefile b/support/splint/examples/symbols/Makefile
index 964927bc9d..80a6aed0c6 100644
--- a/support/splint/examples/symbols/Makefile
+++ b/support/splint/examples/symbols/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2012-2020, Alexander Shibakov
+# Copyright 2012-2022, Alexander Shibakov
# This file is part of SPLinT
#
# SPLinT is free software: you can redistribute it and/or modify
@@ -18,8 +18,8 @@
# purposes; the main directory (../..) follows a slightly more
# modular organization scheme.
-SYMBOLS_PREREQS = %.tex %.idx ${SPLINT_XTEXSTYLES} ${SPLINT_ROOT}cweb/bo.tok ${SPLINT_ROOT}cweb/fo.tok symtoks.sty
-SYMBOLS_PREREQS += ${SPLINT_XPTABLES} ${SPLINT_XLTABLES} symmap.sty symtricks.sty symfm.sty slimbo.sty
+SYMBOLS_PREREQS = %.tex %.idx ${SPLINT_XTEXSTYLES} ${SPLINT_XTABLES} symtoks.sty
+SYMBOLS_PREREQS += symmap.sty symtricks.sty symfm.sty slimbo.sty
SYMBOLS_PREREQS += ${SPLINT_ROOT}cweb/fil.l ${SPLINT_ROOT}cweb/bg.y ${SPLINT_ROOT}cweb/lo.l
@@ -53,7 +53,7 @@ mostlyclean: clean_temp
distclean: clean
cd ${SPLINT_ROOT} && ${MAKE} clean
-.PRECIOUS: ${SPLINT_ROOT}cweb/fo.tok ${SPLINT_ROOT}cweb/bo.tok ${SPLINT_ROOT}cweb/lo.l \
+.PRECIOUS: ${SPLINT_XOTABLES} ${SPLINT_ROOT}cweb/lo.l \
${SPLINT_ROOT}cweb/fil.l ${SPLINT_ROOT}cweb/dyytab.tex ${SPLINT_ROOT}cweb/gyytab.tex \
${SPLINT_ROOT}cweb/fyytab.tex symbols.gdy
diff --git a/support/splint/examples/symbols/slimbo.sty b/support/splint/examples/symbols/slimbo.sty
index 48da360f55..1dcfe15a84 100644
--- a/support/splint/examples/symbols/slimbo.sty
+++ b/support/splint/examples/symbols/slimbo.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
diff --git a/support/splint/examples/symbols/symbols.w b/support/splint/examples/symbols/symbols.w
index dc58adc0bd..f680b1bffc 100644
--- a/support/splint/examples/symbols/symbols.w
+++ b/support/splint/examples/symbols/symbols.w
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -13,7 +13,6 @@
%
% You should have received a copy of the GNU General Public License
% along with SPLinT. If not, see <http://www.gnu.org/licenses/>.
-\newwrite\gindex
% the namespace choices below are a bit random as this is a demo only
@@ -21,11 +20,6 @@
\def\optimization{5}
\input yy.sty
\modenormal
-\input noweb.sty
- \xreflocaltrue
- \readlxrefs
- \newwrite\xrefstream
- \immediate\openout\xrefstream=\jobname.xxr
\input dcols.sty
\input symmap.sty
\let\parsernamespace\flexnamespace
@@ -70,7 +64,8 @@
\input symfm.sty
\input slimbo.sty
-\setupfootnotes
+\topskip=9pt
+\initauxstream
@** Introduction.
The manual supplied with \splint\ presents an outline of the main
@@ -243,7 +238,7 @@ the value of \.{\\gaglue} set by a copy of one of the productions.
\insertraw{\let\stashnext\stashnextwithspace}%
line_breaking_and_symbols:
GEN\stashed{|stash!=0|}ERIC '(' expression',' \ ss another es')' \
- \insertraw{\let\stashnext\stashnextwithnothingnx}%
+ \insertraw{\let\stashnext\stashnextwithnothing}%
` inline_\stashed{look: $\rightarrow\,$}c \{ \stashed{\X{$\infty$}:See this example to deduce $\ldots$\X\6}\stashed{|b == a - c|} \}
` more_inline_c \{ \stashed{|func(int a, char b);|} \}
%
@@ -285,7 +280,7 @@ symbol_tricks:
\input symtricks.sty
\noindent The stash chunks, inserted by \.{\\stashed\{}{\it random input\/}\.{\}} are invisible to the parser.
As an example, the stash producing the action in the first rule below (|stash!=0|) was
-inserted in the middle of the first term (\prodstyle{GENERIC}). The space (\.{ }) is a special case.
+inserted in the middle of the first term (\prodstyle{GENERIC}). The space (\.{\ }) is a special case.
\medskip
\beginprod
line_breaking_and_symbols:
@@ -305,7 +300,7 @@ Here is the same set of productions with stash producing a space in the middle o
\insertraw{\let\stashnext\stashnextwithspace}%
line_breaking_and_symbols:
GEN\stashed{|stash!=0|}ERIC '(' expression',' \ ss another es')' \
- \insertraw{\let\stashnext\stashnextwithnothingnx}%
+ \insertraw{\let\stashnext\stashnextwithnothing}%
` inline_\stashed{look: $\rightarrow\,$}c \{ \stashed{\X{$\infty$}:See this example to deduce $\ldots$\X\6}\stashed{|b == a - c|} \}
` more_inline_c \{ \stashed{|func(int a, char b);|} \}
%
@@ -316,7 +311,7 @@ line_breaking_and_symbols:
{\it \flexrestyle{\^\\\\[\\"\\'?\\\\]}}. Portions of \flex\ files may be typeset with the help of
\.{\\beginflex}$\ldots$\.{\\endflex} macros. Just as in the case of \bison\ productions, care must be taken to
escape some symbols that have special meaning to \TeX. The ones that {\it must be\/} escaped when used inside
-regular expressions are `\.{\{}', `\.{\}}', `\.{\\}', and~`\.{\%}'. Others, such as `\.{\^}', `\.{\_}', `\.{\$}', `\.{\#}',
+regular expressions are `\.{\{}', `\.{\}}', `\.{\\}', `\.{\ }' (see more below), and~`\.{\%}'. Others, such as `\.{\^}', `\.{\_}', `\.{\$}', `\.{\#}',
and~`\.{\&}' do not require any special treatment (although they continue to perform their special functions
inside \.{\\stashed} blocks). As a note of caution, `$\ldots$\.{\\\\]}' results
in `$\ldots$\flexrestyle{\\]}' and not
@@ -331,6 +326,9 @@ this character is nearly inaccessible in the \TeX\ mode of \CTANGLE, which resul
`\.{\\`}' instead. If the example is not part of a \CWEB\ input (for example it is included from its own \TeX\ file similar to
\.{symtricks.sty} above) then
one can use the `\.{\yl}' character as intended. However, even inside a `pure \TeX\ file' to get `\.{`}', one must still type `\.{\\`}'.
+Finally, it is worth remembering that a space (\.{\ }) would terminate a regular expression (and produce a syntax error) inside
+\.{\\flexrestyle}. This is part of the regular \flex\ syntax and not a \splint\ specific limitation. To make a space character
+a part of a regular expression it must be escaped.
Many of the points made above may become more transparent after examining the source of the example following this sentence.
\medskip
\cdebugtrue
@@ -371,6 +369,20 @@ LEXOPT [porkacne]
M4QSTART "[["
M4QEND "]]"
+@ Lexer specific options can be typeset as well. Any portion specific to \Cee\ can be relegated
+to \CWEB\ as can be seen below. Adjusting the typesetting of various \Cee\ terms works as expected
+(see the source for this example).
+@s scan_state int
+@<Lexer options@>=
+@G(fs1)
+%option bison-bridge
+%option noyywrap noinput reentrant nounput
+%option header-file="lexer.h"
+%option prefix="main_c"
+%option extra-type="@>struct scan_state *@="
+%option stack
+@g
+
@ The first three lines of the previous section successfully parse as section~2 input.
\parseverbosetrue
@<As section 2@>=
@@ -425,7 +437,8 @@ NOT_WS [^[:blank:]\r\n]
@q of index entries depends on the placement of this inclusion @>
@i alphas.hx
-@** Index. Various identifiers in \bison\ productions and \flex\ sections are put in the index, along with
+@** Index. \global\let\secrangedisplay\empty% do not show the current section range anymore
+Various identifiers in \bison\ productions and \flex\ sections are put in the index, along with
the identifiers from the \Cee\ portions of the \CWEB\ input. The
mechanism used to typeset these identifiers is different from the one
employed by the \CWEB's indexing macros. While the \.{\\I} macros in
@@ -434,16 +447,9 @@ only outputs the context in which the identifier was encountered. By
redefining the macros that interpret this context to typeset the
index, several useful effects can be achieved\footnote{One pretty common use is to redefine
macros that take parameters to take none.}.
-\unsetfootnotes
-\input gindex.sty
\def\otherlangindexseparator{% the index is too short
\toksg{}%
\vskip.5\baselineskip
\centerline{B{\sc ISON}, F{\sc LEX, AND} \TeX\ {\sc INDICES}}%
\vskip.5\baselineskip
}
-\closeout\gindex
-\termindexfalse % do not attach indexing entries to the terms in the index, or the section list
-\let\inx\inxmod
-\let\fin\finmod
-\def\topofcontents{\null\vskip-3\baselineskip\centerline{C{\sc ONTENTS} (\sc\uppercase\expandafter{\title})}\medskip}
diff --git a/support/splint/examples/symbols/symfm.sty b/support/splint/examples/symbols/symfm.sty
index 9cfeacbeaa..985d4148d1 100644
--- a/support/splint/examples/symbols/symfm.sty
+++ b/support/splint/examples/symbols/symfm.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
diff --git a/support/splint/examples/symbols/symmap.sty b/support/splint/examples/symbols/symmap.sty
index 450dd9a649..0a4afbc50a 100644
--- a/support/splint/examples/symbols/symmap.sty
+++ b/support/splint/examples/symbols/symmap.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -25,7 +25,7 @@
\restorecslist{symbols}\yyunion
\toksa{}\toksb{}\toksc{}\toksd{}%
%\showthe\newsymswitch
- \the\symstream
+ \the\table
\global\newsymswitch\newsymswitch
\else
\newsymswitch{}% otherwise \yysymswitch is trying to expand the wrong names (\namepair is not present to do \csname ... )
@@ -118,7 +118,6 @@
\ifyyparsefail
\errmessage{could not process symbols}%
\else
- \symstream\table
\tointermediateparser % the parsing is finished, so we have two very long strings:
% o the rules of the hosted parser ([intermediate])
% o the rules of the same parser just parsed
diff --git a/support/splint/examples/symbols/symtoks.sty b/support/splint/examples/symbols/symtoks.sty
index 3ab9b142c7..6c1bcff58d 100644
--- a/support/splint/examples/symbols/symtoks.sty
+++ b/support/splint/examples/symbols/symtoks.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
diff --git a/support/splint/examples/symbols/symtricks.sty b/support/splint/examples/symbols/symtricks.sty
index 04bf5c5ac1..cc29bf7dea 100644
--- a/support/splint/examples/symbols/symtricks.sty
+++ b/support/splint/examples/symbols/symtricks.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
diff --git a/support/splint/examples/types/Makefile b/support/splint/examples/types/Makefile
index 3dd52abeed..b313a18d0f 100644
--- a/support/splint/examples/types/Makefile
+++ b/support/splint/examples/types/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2012-2020, Alexander Shibakov
+# Copyright 2012-2022, Alexander Shibakov
# This file is part of SPLinT
#
# SPLinT is free software: you can redistribute it and/or modify
diff --git a/support/splint/examples/types/basic.sty b/support/splint/examples/types/basic.sty
index ba0decc237..fb9c35ad7f 100644
--- a/support/splint/examples/types/basic.sty
+++ b/support/splint/examples/types/basic.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
diff --git a/support/splint/examples/types/test.sty b/support/splint/examples/types/test.sty
index 018b299c29..3158482b1a 100644
--- a/support/splint/examples/types/test.sty
+++ b/support/splint/examples/types/test.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
diff --git a/support/splint/examples/types/tree.sty b/support/splint/examples/types/tree.sty
index 68171e6a2d..9b004dba2c 100644
--- a/support/splint/examples/types/tree.sty
+++ b/support/splint/examples/types/tree.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
diff --git a/support/splint/examples/xxpression/Makefile b/support/splint/examples/xxpression/Makefile
index 8d8b6877c6..05dbd4fafd 100644
--- a/support/splint/examples/xxpression/Makefile
+++ b/support/splint/examples/xxpression/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2012-2020, Alexander Shibakov
+# Copyright 2012-2022, Alexander Shibakov
# This file is part of SPLinT
#
# SPLinT is free software: you can redistribute it and/or modify
@@ -18,8 +18,7 @@
# purposes; the main directory (../..) contains a slightly more
# modular organization.
-XXPRESSION_PREREQS = %.tex %.scn %.idx %.tok ${SPLINT_XPTABLES} ${SPLINT_XLTABLES}
-XXPRESSION_PREREQS += ${SPLINT_ROOT}cweb/bo.tok ${SPLINT_ROOT}cweb/fo.tok xymmap.sty xtoks.sty
+XXPRESSION_PREREQS = %.tex %.scn %.idx %.tok ${SPLINT_XTABLES} xymmap.sty xtoks.sty
include ../../makefile.inc
include ${SPLINT_ROOT}makefile.loc
@@ -57,8 +56,7 @@ ${PARSER}.yy ${LEXER}.ll: xxpression.x alphas.hx
${UNLINE} test.txx test.tex
${UNLINE} xymbols.txx xymbols.tex
-xymbols.sns: xymbols.tex xxpression.tok ${SPLINT_ROOT}cweb/bo.tok ${SPLINT_ROOT}cweb/fo.tok \
- ${SPLINT_XPTABLES} ${SPLINT_XLTABLES} ptab.tex
+xymbols.sns: xymbols.tex xxpression.tok ${SPLINT_XTABLES} ptab.tex
${PDFTEX} $<
alphas.hx:
diff --git a/support/splint/examples/xxpression/xtoks.sty b/support/splint/examples/xxpression/xtoks.sty
index 60e7dfa7a6..4ffea41f50 100644
--- a/support/splint/examples/xxpression/xtoks.sty
+++ b/support/splint/examples/xxpression/xtoks.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -16,4 +16,3 @@
\prettywordpair{IDENTIFIER}{{$\langle$\rm identifier$\rangle$}}
\prettywordpair{INTEGER}{{\bf int}}
-\prettywordpair{$\ undefined}{{\tt\$undefined}}
diff --git a/support/splint/examples/xxpression/xxpression.sty b/support/splint/examples/xxpression/xxpression.sty
index 1b56c4dce3..7ba9c86535 100644
--- a/support/splint/examples/xxpression/xxpression.sty
+++ b/support/splint/examples/xxpression/xxpression.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
diff --git a/support/splint/examples/xxpression/xxpression.w b/support/splint/examples/xxpression/xxpression.w
index bdf81b004d..7441b90e0d 100644
--- a/support/splint/examples/xxpression/xxpression.w
+++ b/support/splint/examples/xxpression/xxpression.w
@@ -1,4 +1,4 @@
-@q Copyright 2012-2020, Alexander Shibakov@>
+@q Copyright 2012-2024, Alexander Shibakov@>
@q This file is part of SPLinT@>
@q SPLinT is free software: you can redistribute it and/or modify@>
@@ -32,26 +32,25 @@
% end of the definitions). A more elaborate scheme (similar to how the
% typesetting of rules is set up) using several parsers can be used
% instead.
-\newwrite\gindex
\input limbo.sty
-\input dcols.sty
\def\optimization{5}
\newread\testeof
\immediate\openin\testeof=\jobname.tok
\ifeof\testeof % make the local token equivalence table
\let\nx\noexpand
- \csname newwrite\endcsname\tokendefs
\edef\tokendeffile{\jobname.tok} % where to put the token equivalence table
- \edef\bstrapparser{dyytab.tex}
+ \def\bstrapparser{dyytab.tex}
+ \def\bstraptokens{bo.tok}% use token equivalence table to set the values of non-string tokens
+ % this has to be added if a non-bootstrap parser is used to
+ % extract token information (see the comments above)
\def\bootstraplexersetup{%
\let\yylexreturn\yylexreturnregular
\bootstrapmodetrue
- \input bo.tok % use token equivalence table to set the values of non-string tokens
- % this has to be added if a non-bootstrap parser is used to
- % extract token information (see the comments above)
}
\toks0{%
- \input trt1.sty %/* \TeX\ `runtime': temporary register definitions */
+ \let\fin\finmod % this is necessary since the original modifies \output
+ % in a way that conflicts with the scheme in dcols.sty
+ \input trt1.sty % \TeX\ `runtime': temporary register definitions
\input yycommon.sty % general routines for stack and array access
\input yymisc.sty % helper macros (stack manipulation, table processing, value stack pointers)
% parser initialization, optimization
@@ -85,8 +84,9 @@
\fi
\immediate\closein\testeof
\the\toks0
-
-@**Parser file. \setupfootnotes
+\input dcols.sty
+\initauxstream
+@**Parser file.
This is an enhanced parser for expressions. It takes
advantage of the `symbolic term name' mechanism and extends the basic
expression syntax.
@@ -225,8 +225,6 @@ as they have to be inserted in a place that is aware of the internal definitions
definitions are used.
@<Extended \.{expression} parser \Cee\ postamble@>=
-#define YYPRINT(file, type, value) @[yyprint (file, type, value)@]
- static void yyprint (FILE *file, int type, YYSTYPE value){}
@ Union of types. Empty as well.
@@ -261,7 +259,7 @@ int [0-9]+
void define_all_states( void ){}
@ @<Lexer options@>=
-@G
+@G(fs1)
%option bison-bridge
%option noyywrap nounput noinput reentrant
%option noyy_top_state
@@ -309,7 +307,7 @@ int [0-9]+
@[TeX_( "/iftracebadchars" );@]@;
@[TeX_( " /yycomplain{invalid character(s): /the/yytext}" );@]@;
@[TeX_( "/fi" );@]@;
- @[TeX_( "/yylexreturn{$undefined}" );@]@;
+ @[TeX_( "/yyerrterminate" );@]@;
@**Generating symbols. This is the routine that creates symbolic name
assignments for the grammar. The internal mechanics of creating such
@@ -331,6 +329,7 @@ that can be activated to see the inner workings of the parser and
scanner routines.
@(test.txx@>=
@G
+\chardef\other=12 % needed for some macros to work
\input xxpression.sty
\iftrue
@@ -373,13 +372,7 @@ scanner routines.
@q of index entries depends on the placement of this inclusion @>
@i alphas.hx
-@**Index.
-\unsetfootnotes
-\input gindex.sty
-\closeout\gindex
-\termindexfalse % do not attach indexing entries to the terms in the index, or the section list
-\let\inx\inxmod
-\let\fin\finmod
-\immediate\closeout\exampletable
+@**Index.\global\let\secrangedisplay\empty% do not show the current section range anymore
+\global\topskip=9pt
\def\Tex{\TeX\ output}
\def\TeXx{\TeX\ output}
diff --git a/support/splint/examples/xxpression/xymmap.sty b/support/splint/examples/xxpression/xymmap.sty
index d38d23ca9b..e5576ee9cd 100644
--- a/support/splint/examples/xxpression/xymmap.sty
+++ b/support/splint/examples/xxpression/xymmap.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -19,7 +19,7 @@
\def\makesymbols{%
\restorecslist{symbols}\yyunion
\toksa{}\toksb{}\toksc{}\toksd{}%
- \the\symstream
+ \the\table
\global\newsymswitch\newsymswitch
}
@@ -109,7 +109,6 @@
\ifyyparsefail
\errmessage{could not process symbols}%
\else
- \symstream\table
\tointermediateparser % the parsing is finished, so we have two very long strings:
% o the rules of the hosted parser ([intermediate])
% o the rules of the same parser just parsed
diff --git a/support/splint/makefile.inc b/support/splint/makefile.inc
index 787617da1e..e485ea2c83 100644
--- a/support/splint/makefile.inc
+++ b/support/splint/makefile.inc
@@ -1,4 +1,4 @@
-# Copyright 2012-2020, Alexander Shibakov
+# Copyright 2012-2024, Alexander Shibakov
# This file is part of SPLinT
#
# SPLinT is free software: you can redistribute it and/or modify
@@ -18,30 +18,41 @@ SPLINT_ROOT := $(dir $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)
# taken from a stackoverflow answer by Xavier Holt
TEXINPUTS := .:${SPLINT_ROOT}cweb/:${SPLINT_ROOT}tex/:${SPLINT_ROOT}:${TEXINPUTS}
+TEXFONTS := .:${SPLINT_ROOT}tex/fonts:${SPLINT_ROOT}:${TEXFONTS}
+VFFONTS := .:${SPLINT_ROOT}tex/fonts:${SPLINT_ROOT}:${VFFONTS}
+TFMFONTS := .:${SPLINT_ROOT}tex/fonts:${SPLINT_ROOT}:${TFMFONTS}
SPLINT_DRIVER_DIR = ${SPLINT_ROOT}cweb
-SPLINT_TEXSTYLES = flex.sty yyfaststack.sty yyparse.sty yyunion.sty yyinput.sty yystype.sty yy.sty
-SPLINT_TEXSTYLES += yyinit.sty yybootstrap.sty dcols.sty limbo.sty yycommon.sty yymisc.sty yytexlex.sty
-SPLINT_TEXSTYLES += yydebug.sty gindex.sty noweb.sty
-SPLINT_BOOTSTRAP_STYLES = grabstates.sty
-SPLINT_PTABLES = byytab.tex dyytab.tex fyytab.tex gyytab.tex fiptab.tex reptab.tex small_tab.tex
-SPLINT_PTABLES += raptab.tex ddptab.tex
-SPLINT_LTABLES = ltab.tex small_dfa.tex filtab.tex
+SPLINT_TEXSTYLES_BASE = yycommon.sty yymisc.sty trt1.sty xarithm.sty yyfaststack.sty
+SPLINT_TEXSTYLES_BASE_PARSER0 = yyinput.sty flex.sty yyparse.sty yystype.sty yydebug.sty
+SPLINT_TEXSTYLES_BASE_PARSER1 = yyinit.sty yybootstrap.sty yyunion.sty yy.sty
+SPLINT_TEXSTYLES_BASE_TOKENS = yypretty.sty $(patsubst %, %tokenset.sty, b f s fre)
+SPLINT_TEXSTYLES_BASE_DISPLAY = limbo.sty dcols.sty gindex.sty noweb.sty yytexlex.sty
+
+SPLINT_TEXSTYLES = ${SPLINT_TEXSTYLES_BASE} ${SPLINT_TEXSTYLES_BASE_PARSER0} ${SPLINT_TEXSTYLES_BASE_PARSER1}
+SPLINT_TEXSTYLES += ${SPLINT_TEXSTYLES_BASE_TOKENS} ${SPLINT_TEXSTYLES_BASE_DISPLAY}
+
+SPLINT_PTABLES = byytab.tex dyytab.tex fyytab.tex gyytab.tex fiptab.tex reptab.tex raptab.tex ddptab.tex
+SPLINT_PTABLES += small_tab.tex
+SPLINT_LTABLES = ltab.tex filtab.tex small_dfa.tex
+SPLINT_OTABLES = bo.tok fo.tok
SPLINT_XTEXSTYLES = $(patsubst %, ${SPLINT_ROOT}tex/%, ${SPLINT_TEXSTYLES})
-SPLINT_XBOOTSTRAP_STYLES = $(patsubst %, ${SPLINT_ROOT}tex/%, ${SPLINT_BOOTSTRAP_STYLES})
SPLINT_XPTABLES = $(patsubst %, ${SPLINT_ROOT}cweb/%, ${SPLINT_PTABLES})
SPLINT_XLTABLES = $(patsubst %, ${SPLINT_ROOT}cweb/%, ${SPLINT_LTABLES})
+SPLINT_XOTABLES = $(patsubst %, ${SPLINT_ROOT}cweb/%, ${SPLINT_OTABLES})
+SPLINT_XTABLES = ${SPLINT_XPTABLES} ${SPLINT_XLTABLES} ${SPLINT_XOTABLES}
+
+SPLINT_DOC_PREREQS = splint.tex ${SPLINT_PTABLES} ${SPLINT_LTABLES} ${SPLINT_OTABLES} ${SPLINT_XTEXSTYLES}
+SPLINT_DOC_PREREQS += ${SPLINT_ROOT}tex/frontmatter.sty
-SPLINT_DOC_PREREQS = %.tex ${SPLINT_PTABLES} ${SPLINT_LTABLES} ${SPLINT_XTEXSTYLES}
-SPLINT_DOC_PREREQS += ${SPLINT_ROOT}tex/btokenset.sty ${SPLINT_ROOT}tex/ftokenset.sty
-SPLINT_DOC_PREREQS += ${SPLINT_ROOT}tex/stokenset.sty ${SPLINT_ROOT}tex/fretokenset.sty
-SPLINT_DOC_PREREQS += bo.tok fo.tok
-SPLINT_DOC_PREREQS_XREF = ${SPLINT_DOC_PREREQS} %.scn %.idx
+SPLINT_DOC_PREREQS_XREF = ${SPLINT_DOC_PREREQS} splint.scn splint.idx
-PDFTEX = export TEXINPUTS=${TEXINPUTS} && pdftex
-TEX = export TEXINPUTS=${TEXINPUTS} && tex
+EXPORT_TEX_ENVIRON = TEXINPUTS=${TEXINPUTS} TEXFONTS=${TEXFONTS} VFFONTS=${VFFONTS} TFMFONTS=${TFMFONTS}
+
+PDFTEX = export ${EXPORT_TEX_ENVIRON} && pdftex -recorder -file-line-error -synctex=1
+TEX = export ${EXPORT_TEX_ENVIRON} && tex
DVIPS = dvips
PDFVIEW = evince
CWEAVE = cweave -bhp
@@ -56,6 +67,8 @@ UNLINE = ${SPLINT_ROOT}scripts/unline.pl
BINDX = ${SPLINT_ROOT}scripts/bindx.pl
MISCCW = ${SPLINT_ROOT}scripts/misccw.pl
+# remove the default implicit rules
+
%.c: %.w
%.c: %.y
%.pdf: %.tex
@@ -63,8 +76,10 @@ MISCCW = ${SPLINT_ROOT}scripts/misccw.pl
%.o: %.c
%.c: %.l
-%.x: %.w
- ${BRACK} $< $@
+# new implicit rules
+
+%.x %.u %.m: %.w
+ ${BRACK} --bison-link=$*.m $< $*.x $*.u
%.c: %.y
${BISON} $^ -o $@
@@ -91,12 +106,13 @@ ${SPLINT_ROOT}cweb/%:
clean_temp:
-rm -f *.o *.tab.* *.dvi *.pdf *.ps *~ *.log *.rli *.rls *.lpg \
- *.output *.lst *.exl *.ftn *.*pk *.gdx
+ *.output *.lst *.exl *.*pk *.gdx *.fls *.synctex.gz
clean_core: clean_temp
- -rm -f *.c *.h *.tex *.idx *.scn *.toc *.tok *.sns *.gdy *.xxr *.x \
- *.hx *.hy *.yy *.ll *.y *.l
+ -rm -f *.c *.h *.tex *.idx *.scn *.toc *.tok *.sns *.aux *.gdy *.x \
+ *.u *.m *.hx *.hy *.yy *.yx *.ll *.y *.l
# to ensure that interrupted and erroneous builds are cleaned up
-.DELETE_ON_ERROR:
+.DELETE_ON_ERROR:
+ -rm -f *.gdx *.gdy *.aux *.tok
diff --git a/support/splint/extras/texmf/macros/protcode.tex b/support/splint/other/texmf/macros/protcode.tex
index 57f735a973..57f735a973 100644
--- a/support/splint/extras/texmf/macros/protcode.tex
+++ b/support/splint/other/texmf/macros/protcode.tex
diff --git a/support/splint/scripts/bindx.pl b/support/splint/scripts/bindx.pl
index beb9719bf8..871612058e 100755
--- a/support/splint/scripts/bindx.pl
+++ b/support/splint/scripts/bindx.pl
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-# Copyright 2012-2020, Alexander Shibakov
+# Copyright 2012-2022, Alexander Shibakov
# This file is part of SPLinT
#
# SPLinT is free software: you can redistribute it and/or modify
@@ -126,8 +126,8 @@ while (<FILE>) {
\{([^\{\}]+)\} # domain
\{([0-9]+)\} # rank
\{([^\{\}]*)\} # type1
- \{([^\{\}\s]+)\s*\} # type2
- \{((\{[^\{\}]+\})+)\} # key
+ \{([^\{\}]+)\s*\} # type2
+ \{((\{[^\{\}]+\})+|\\vend.*\\vend\s*)\} # key
\{((\{[^\{\}]+\})*)\} # visual key
(\%.*)*\n/x ) {
# ordinary index entry
@@ -135,8 +135,19 @@ while (<FILE>) {
($section, $pageno, $nspace, $junk0, $domain, $rank, $type1, $type2, $key, $junk1, $vkey) =
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11 );
- $key =~ s/\{([0-9]+)\}/pack "c1", $1/eg;
$term = $key;
+ $key =~ s/\{([0-9]+)\}/pack "c1", $1/eg;
+
+ if ( $term =~ /\\vend/ ) {
+
+ # only process the key if it is not raw
+
+ } else {
+
+ $term = $key;
+
+ }
+
$vkey =~ s/\{([0-9]+)\}/pack "c1", $1/eg;
if ( $vkey ne "" ) {
@@ -206,7 +217,16 @@ foreach $domain (sort keys %index ) {
$term = $index{$domain}{$key}{term};
$term_printable = $term;
- $term =~ s/(.)/"\{".(unpack "c1", $1)."\}"/eg;
+
+ if ( $term =~ /\\vend/ ) {
+
+ $term =~ s/\\vend(.*)\\vend/$1/eg; # unwrap the entry
+
+ } else {
+
+ $term =~ s/(.)/"\{".(unpack "c1", $1)."\}"/eg;
+
+ }
if ( alpha_jump( $key, $last_alpha ) > 0 ) {
$last_alpha = substr $key, 0, 1;
diff --git a/support/splint/scripts/brack.pl b/support/splint/scripts/brack.pl
index 887c6324f0..8db199ad77 100755
--- a/support/splint/scripts/brack.pl
+++ b/support/splint/scripts/brack.pl
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-# Copyright 2012-2020, Alexander Shibakov
+# Copyright 2012-2024, Alexander Shibakov
# This file is part of SPLinT
#
# SPLinT is free software: you can redistribute it and/or modify
@@ -22,11 +22,14 @@
# only one style of comments is accepted: /* ... */. note that these are not
# output
+use strict;
use Getopt::Long;
use Pod::Usage;
my $man = 0;
my $help = 0;
+my $replace_only = '';
+my $binterwork = '';
my $elang_start = "\@t}\\lsectionbegin{\%s}\\vb{\@>\n";
my $elang_finish = "\@t}\\vb{\\yyendgame}\\vb{}\\endparse\\postparse{\@>\n";
@@ -35,21 +38,133 @@ my $elang_finish = "\@t}\\vb{\\yyendgame}\\vb{}\\endparse\\postparse{\@>\n";
GetOptions ("help|?" => \$help,
man => \$man,
"startol=s" => \$elang_start, # the string that starts an `other language' region
- "finishol=s" => \$elang_finish # the string that ends an `other language' region
+ "finishol=s" => \$elang_finish, # the string that ends an `other language' region
+ "bison-link=s" => \$binterwork, # whether to produce .z files to allow `$?' notation in \TeX]
+ "replace-only" => \$replace_only, # make reverse substitutions only
) or pod2usage(2);
pod2usage(-exitval => 0, -verbose => 1) if $help;
pod2usage(-exitval => 0, -verbose => 2) if $man;
+my %tex_replacements = ();
+
+if ( $replace_only ) {
+ open FILE, "$ARGV[0]" or die "Cannot open input file $ARGV[0]\n";
+ open FILEOUT, ">$ARGV[1]" or die "Cannot open output file $ARGV[1]\n";
+ open BLINK_IW, "$binterwork" or die "Cannot open link file $binterwork\n";
+
+ while ( <BLINK_IW> ) {
+ $_ =~ m/^(BZ\d+ZB_\d+)=(.*)$/;
+ my ( $key, $value ) = ( $1, $2 );
+ $tex_replacements{$key} = $value;
+ }
+
+ close BLINK_IW;
+
+ while ( <FILE> ) {
+ $_ =~ s/(BZ\d+ZB_\d+)/$tex_replacements{$1}/g;
+ print FILEOUT $_;
+ }
+
+ close FILE;
+ close FILEOUT;
+
+ exit 0;
+}
+
open FILE, "$ARGV[0]" or die "Cannot open input file $ARGV[0]\n";
open FILEOUT, ">$ARGV[1]" or die "Cannot open output file $ARGV[1]\n";
-$state = 0;
-$paused_state = 0;
-while (<FILE>) {
+if ( $binterwork ) {
+ open BLINK_IW, ">$binterwork" or die "Cannot open link file $binterwork\n";
+ open BLINK, ">$ARGV[2]" or die "Cannot open diff file $ARGV[2]\n";
+}
- $inline = $_;
+sub output_all {
+ my $wline = shift;
+ my $bline = shift || [];
+ my @bline = @{$bline};
+ if ( not @bline ) {
+ @bline = @{$wline};
+ }
+
+ printf FILEOUT @{$wline};
+
+ if ( $binterwork ) {
+ printf BLINK @bline;
+ }
+}
+
+my $state = 0;
+my $paused_state = 0;
+
+sub replace_tex {
+ my $prefix = shift;
+ my $tex_string = shift;
+ my $suffix = shift;
+ $prefix =~ s/TeX(a|b|ao|f|fo)_/TeX$1/;
+ $tex_string =~ s{\$\[?(\d+)\]?}{/yy($1)}xg;
+ $tex_string =~ s/\$\[?([a-zA-Z_.][a-zA-Z0-9_.]*)\]?/\/yy\]$1\[/xg;
+
+ return $prefix.$tex_string.$suffix;
+}
+
+sub replace_c {
+ my $prefix = shift;
+ my $c_string = shift;
+ my $suffix = shift;
+ my $marker = shift;
+ my $counter = shift;
+ my @matches = ();
+ my $match_count = 0;
+
+ $$counter++;
+
+ $marker .= "_".$$counter;
+ $prefix =~ s/TeX(a|b|ao|f|fo)_/TeX$1/;
+ $match_count =
+ ($c_string =~ s/
+ \$(
+ \d+|
+ [a-zA-Z0-9_.]+|
+ \[[a-zA-Z0-9_.]+\]
+ )
+ /replace_yy($1, \@matches)/xeg);
+
+ if ( $match_count ) {
+ $tex_replacements{$marker} =
+ "TeX__(\"".$c_string."\",".(join ',', @matches).");";
+ return $marker; # replacement for .c file
+ } else {
+ return $prefix.$c_string.$suffix;
+ }
+}
+
+sub replace_yy{
+ my $match = shift;
+ my $matches = shift;
+ $match =~ s/[\[\]\(\)]//g;
+ $match = "[$match]" if $match !~ m/^\d/;
+ push @{$matches}, "BZ(\$$match,\$1), BZ((yyvsp[0]), \$$match), BZZ((yyvsp[0]),\$1)";
+ return "/yg{\%ld}{\%ld}{\%ld}";
+}
+
+my $line_count = 0;
+
+while (<FILE>) {
+
+ my $inline = $_;
+ my $inline_z = $inline;
+ my ( $string, $string_z, $comment );
+ $line_count++;
+
+ if ( $binterwork && $inline =~ m/TeX(_|a_|b_|ao_|f_|fo_)\b/ ) {
+ my $marker = "BZ$line_count"."ZB";
+ my $counter = 0;
+ $inline_z =~ s/(TeX(_|a_|b_|ao_|f_|fo_)?\b\s*\([^"]*")(([^"]|\\")*)("[^"\)]*\);)/replace_c($1, $3, $5, $marker, \$counter)/eg;
+ $inline =~ s/(TeX(_|a_|b_|ao_|f_|fo_)?\b\s*\([^"]*")(([^"]|\\")*)("[^"\)]*\);)/replace_tex($1, $3, $5)/eg;
+ }
if ( $inline =~ m/^\@G(.*)$/ ) { # @G detected, this line is part of the `other language' region
@@ -58,104 +173,102 @@ while (<FILE>) {
if ( $inline =~ m/^\(([^)]*)\).*/ ) { # language specifier present
$inline = $1;
} else {
- $inline = "b";
+ $inline = "";
}
- printf FILEOUT "\@q Start generic language section\@>\n" . $elang_start, "$inline"; # a parser switcher
+ output_all( ["\@q Start generic language section\@>\n" . $elang_start, "$inline"] ); # a parser switcher
} elsif ( $inline =~ m/^\@[\scp\*0-9].*$/ ) { # @`other' detected, so `other language' region is over
if ($state == 1) {
- printf FILEOUT "\@q%s\@>\n" . $elang_finish, "End of generic language section"; # a parser switcher
+ output_all( ["\@q%s\@>\n" . $elang_finish, "End of generic language section"] ); # a parser switcher
}
$state = 0;
- printf FILEOUT "%s", "$inline";
+ output_all( ["%s", "$inline"] );
} elsif ( $inline =~ m/^\s*\@[=t].*$/ ) { # @= detected, just copy the line
- printf FILEOUT "%s", "$inline";
+ output_all( ["%s", "$inline"] );
} elsif ( $inline =~ m/^\@g(.*)$/ ) { # explicit end of other languge region detected
$inline = $1;
if ($state == 1) {
- printf FILEOUT "\@q%s\@>\n" . $elang_finish, "End of generic language section"; # a parser switcher
+ output_all( ["\@q%s\@>\n" . $elang_finish, "End of generic language section"] ); # a parser switcher
}
$state = 0;
} elsif ( $inline =~ m/^\@O(.*)$/ ) { # @O detected, so `other language' region is paused
- $inline = $1; $paused_state = $state; $state = 0;
+ $paused_state = $state; $state = 0;
- if ( not $inline ) { $inline = "End generic language section"; }
- printf FILEOUT "\@q%s\@>\n", "$inline";
+ $inline = $1 || "End generic language section";
+ output_all( ["\@q%s\@>\n", "$inline"] );
} elsif ( $inline =~ m/^\@o(.*)$/ ) { # @o detected, so `other language' region is resumed
- $inline = $1; $state = $paused_state; $paused_state = 0;
+ $state = $paused_state; $paused_state = 0;
- if ( not $inline ) { $inline = "End generic language section"; }
- printf FILEOUT "\@q%s\@>\n", "$inline";
+ $inline = $1 || "End generic language section";
+ output_all( ["\@q%s\@>\n", "$inline"] );
} elsif ( $state != 0 ) {
if ( $inline =~ m/\/\*.*\*\/\s*$/ ) { # the line contains a comment at the end
- $inline =~ m/^(.*\S|)\s*(\/\*.*\*\/)\s*$/;
+ $inline =~ m/^(.*\S|)\s*(\/\*.*\*\/)\s*$/; # this is not very robust ...
$string = $1; $comment = $2;
+ $inline_z =~ m/^(.*\S|)\s*(\/\*.*\*\/)\s*$/; # this is not very robust ...
+ $string_z = $1;
} else {
-
- $inline =~ m/^(.*)$/;
- $string = $1; $comment = "";
-
- }
-
- if ( $string ) {
-
- printf FILEOUT "\@=%s\@>\@t}\\vb{\\n}{\@>\@;", "$string";
-
- } else {
-
- printf FILEOUT "\@=%s\@>\@t}\\vb{\\n}{\@>\@;", " "; # to keep \CWEB\ happy
-
- }
-
- if ( $comment ) {
-
- printf FILEOUT "%s", "$comment";
+ $string = $inline; $comment = "";
+ $string_z = $inline_z;
+
}
- printf FILEOUT "%s", "\n";
+ $string =~ s/\n//;
+ $string_z =~ s/\n//;
+ output_all( ["\@=%s\@>\@t}\\vb{\\n}{\@>\@;", ( $string || " " )],
+ ["\@=%s\@>\@t}\\vb{\\n}{\@>\@;", ( $string_z || " " )] );
+ output_all( ["%s", "$comment"] ) if $comment;
+ output_all( ["%s", "\n"] );
} else {
- printf FILEOUT "%s", "$inline";
+ output_all( ["%s", "$inline"], ["%s", "$inline_z"] );
}
}
+foreach my $key ( keys %tex_replacements ) {
+ print BLINK_IW "$key=$tex_replacements{$key}\n";
+}
+
__END__
=head1 BRACK
-brack.pl - Preprocess a CWEB file to allow language extensions
+brack.pl - Postprocess a CWEB file to allow language extensions
=head1 SYNOPSIS
-brack.pl [options] input_file output_file
-
+brack.pl [options] --bison-link=<subst file> <input file> <B<CWEAVE>output file> <B<CTANGLE>output file>
+ or
+brack.pl --replace-only --bison-link=<subst file> <B<CTANGLE>output file> <output file>
Options:
--help|-h|-? brief help message
--man|-m full documentation
--startol|-s string to begin a language region
--finishol|-f string to end a language region
+ --bison-link|-b file to write future substitutions to
+ --replace-only|-r replace the result of postprocessing using the subst file
=head1 OPTIONS
@@ -177,6 +290,14 @@ The string to print at the beginning of an other language region
The string to print at the end of an other language region
+=item B<--bison-link>=I<file name>
+
+The file to write future substitutions to
+
+=item B<--replace-only>
+
+Carry out the replacements using the substitution file and quit
+
=back
=head1 DESCRIPTION
@@ -197,4 +318,10 @@ To put the comment inside the verbatim blocks, one may surround it by [@>@=] and
to the spacing, see next). Note the space at the end of the closing construct: this
is necessary to pacify B<CWEAVE>.
+In order to use the `native' bison term references inside TeX code, the
+ brack.pl --bison-link=<subst file> <input file> <B<CWEAVE>output file> <B<CTANGLE>output file>
+form must be used first to create the substitutions file as well as two B<CWEB> files.
+Then B<CTANGLE> is run on the <B<CTANGLE>output file> and finally
+ brack.pl --replace-only --bison-link=<subst file> <B<CTANGLE>output file> <output file>
+to finish the creation of a file suitable for producing a parsing automaton.
=cut
diff --git a/support/splint/scripts/cslist.pl b/support/splint/scripts/cslist.pl
index 9c187517ac..2954e23e03 100755
--- a/support/splint/scripts/cslist.pl
+++ b/support/splint/scripts/cslist.pl
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-# Copyright 2012-2020, Alexander Shibakov
+# Copyright 2012-2022, Alexander Shibakov
# This file is part of SPLinT
#
# SPLinT is free software: you can redistribute it and/or modify
diff --git a/support/splint/scripts/misccw.pl b/support/splint/scripts/misccw.pl
index b536904df4..a0c53b19c9 100755
--- a/support/splint/scripts/misccw.pl
+++ b/support/splint/scripts/misccw.pl
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-# Copyright 2012-2020, Alexander Shibakov
+# Copyright 2012-2022, Alexander Shibakov
# This file is part of SPLinT
#
# SPLinT is free software: you can redistribute it and/or modify
diff --git a/support/splint/scripts/unline.pl b/support/splint/scripts/unline.pl
index 36a1b524f5..f335dcac87 100755
--- a/support/splint/scripts/unline.pl
+++ b/support/splint/scripts/unline.pl
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-# Copyright 2012-2020, Alexander Shibakov
+# Copyright 2012-2022, Alexander Shibakov
# This file is part of SPLinT
#
# SPLinT is free software: you can redistribute it and/or modify
@@ -23,6 +23,7 @@
use Getopt::Long;
use Pod::Usage;
+use strict;
my $man = 0;
my $help = 0;
@@ -38,10 +39,11 @@ pod2usage(-exitval => 0, -verbose => 2) if $man;
open FILE, "$ARGV[0]" or die "Cannot open input file $ARGV[0]\n";
open FILEOUT, ">$ARGV[1]" or die "Cannot open output file $ARGV[1]\n";
+my $prev_space = 1;
while (<FILE>) {
- $inline = $_;
+ my $inline = $_;
s/^(\#line.*)\n$//g;
@@ -51,14 +53,13 @@ while (<FILE>) {
}
- printf FILEOUT "%s", "$_";
-
-# if ( m/^.*\S.*\n$/ ) {
-
-# printf FILEOUT "%s", "$_";
-
-# }
-
+ if ( m/^.*\S.*\n$/ ) {
+ printf FILEOUT "%s", "$_";
+ $prev_space = '';
+ } else { # squash multiple blank lines together
+ printf FILEOUT "\n" if not $prev_space;
+ $prev_space = 1;
+ }
}
__END__
diff --git a/support/splint/tex/btokenset.sty b/support/splint/tex/btokenset.sty
index 72d3b3394f..3455787d12 100644
--- a/support/splint/tex/btokenset.sty
+++ b/support/splint/tex/btokenset.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -21,14 +21,14 @@
\prettywordpair{PERCENT_NONDETERMINISTIC_PARSER}{{$\langle$nondet. parser$\rangle$}}
\prettywordpairwvis{semi}{{\tt;}}{;}
\prettywordpair{TAG}{{{\tt<}{\it tag\/}{\tt>}}}
-\prettywordpair{$\ undefined}{{\tt\$undefined}}
\prettywordpair{<tag>}{{{\tt<}{\it tag\/}{\tt>}}}
\prettywordpairwvis{FLEX_OPTION}{{$\langle$\bf option$\rangle_{\rm f}$}}{option_f}
-\prettywordpairwvis{FLEX_STATE_X}{{$\langle$\bf state-x$\rangle_{\rm f}$}}{state-x}
-\prettywordpairwvis{FLEX_STATE_S}{{$\langle$\bf state-s$\rangle_{\rm f}$}}{state-s}
+\prettywordpairwvis{XSCDECL}{{$\langle$\bf state-x$\rangle_{\rm f}$}}{state-x}
+\prettywordpairwvis{SCDECL}{{$\langle$\bf state-s$\rangle_{\rm f}$}}{state-s}
\prettywordpair{ID}{{\cyr\lqq{\rm identifier}\rqq}}
\prettywordpair{ID_COLON}{{\cyr\lqq{\rm identifier: }\rqq}}
\prettywordpairwvis{NUL}{{$\Lambda$}}{Lambda}
\prettywordpair{INT}{{\bf int}}
\prettywordpair{CHAR}{{\bf char}}
\prettywordpair{STRING}{{\cyr\lqq{\tt string}\rqq}}
+\prettywordpair{bogus_inline}{{\ntt\char`\$@$n$}} % a term used in `inline action' explanation
diff --git a/support/splint/tex/dcols.sty b/support/splint/tex/dcols.sty
index 71176efd14..44fa97355f 100644
--- a/support/splint/tex/dcols.sty
+++ b/support/splint/tex/dcols.sty
@@ -1,4 +1,4 @@
-% Copyright 2004-2020, Alexander Shibakov
+% Copyright 2004-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -48,9 +48,6 @@
\newbox\migrantbox
{\setbox\migrantbox=\box\migrantbox}
-\newtoks\fromword
-\newtoks\toword
-
\newcount\remaindergaps % the number of gaps between columns after the
% first `footnote column'
\newcount\remaindernonfoots % the number of columns without footnotes
@@ -60,7 +57,7 @@
\newif\iflastpageup
\maxdeadcycles=600 % this should be approximately half the \pageheight in points
- % to handle the case when \enddoublecolumns is called before the
+ % to handle the case when \enddoublecols is called before the
% last doublecolumn page is full
% setup the page length and the column count
@@ -108,7 +105,35 @@
\pagewidth=\hsize
\pageheight=\vsize
-%
+% some debugging tools (rather primitive)
+
+\def\onpage#1#2{%
+ {%
+ \yystringempty{#1}{#2}%
+ {%
+ \ifnum#1=\pageno\relax
+ \showboxbreadth=1000
+ \showboxdepth=1000
+ #2%
+ \fi
+ }%
+ }%
+}
+
+\def\onpageg#1#2{% make global assignments possible
+ \yystringempty{#1}{#2}%
+ {%
+ \ifnum#1=\pageno\relax
+ \showboxbreadth=1000
+ \showboxdepth=1000
+ #2%
+ \fi
+ }%
+}
+
+\ifx\testpageno\UNDEFINED
+ \def\testpageno{-\@M}
+\fi
\def\footnote#1{%
\edef\@sf{\spacefactor\the\spacefactor}\setfnmark
@@ -232,7 +257,11 @@
\dsskip\smallskipamount
-\def\begindoublecols{\begingroup\normalbottom\parindent=0pt
+\def\begindoublecols{%
+ \begingroup
+ %\normalbottom
+ \r@ggedbottomfalse % \normalbottom changes \topskip which we do not want
+ \parindent=0pt
\count\footins=\@m \multiply\count\footins by\fnotesspan
\skip\footins=\fnotesspan\realfootins
\remaindergaps=\noofcolumns
@@ -265,6 +294,7 @@
\fi
%
\output={
+ \settopmark % save the \topmark if this is the top of the page
\ifvoid\partialpage
\else % this is a border case: too much material has been contributed, this routine will be called twice
% so output the full page now
@@ -287,23 +317,25 @@
\lastpageupfalse % not the final page yet
\holdinginserts=\@ne
\let\thepage\pagesofar
- \output={\multcolumnout}
\hsize=\columnwidth
+ \output={\multcolumnout}
+ \mco@computevsize
+ \ifvoid\migrantbox
+ \else
+ \insert\footins{\box\migrantbox}%
+ \fi
+}
+
+\def\mco@computevsize{%
\global\vsize=\pageheight%
\global\advance\vsize by-\ht\partialpage%
\global\divide\vsize\baselineskip
\global\multiply\vsize\baselineskip
\global\multiply\vsize\noofcolumns%
-%\message{starting with vsize at \the\vsize, with pp at \the\ht\partialpage}
\global\advance\vsize by-\noofcolumns\topskip
\global\advance\vsize by\topskip
\global\advance\vsize by\noofcolumns\baselineskip
\global\advance\vsize by-\baselineskip
-%\message{vsize set at \the\vsize}
- \ifvoid\migrantbox
- \else
- \insert\footins{\box\migrantbox}%
- \fi
}
\newif\ifpenultimatepage
@@ -376,6 +408,7 @@
}
\def\multcolumnout{%
+ \settopmark % save the \topmark if this is the top of the page
\splittopskip=\topskip
\splitmaxdepth=\maxdepth
\dimen\z@=\pageheight
@@ -386,16 +419,23 @@
% quickly enough resulting in an infinite \deadcycles loop
\normaloutput{\unvbox\partialpage}\lheader\rheader
\unvbox\@cclv \penalty\lastpenalty
+ \mco@computevsize
+ \else
+ \multcolumnout@split
\fi
+}
+
+\newtoks\fromword % save the marks
+\newtoks\toword
+
+\def\multcolumnout@split{% proceed with splitting and balancing the columns
+ % normalize the max column height of the collected material first
\divide\dimen\z@\baselineskip \multiply\dimen\z@\baselineskip
-%\message{aiming for d0: \the\dimen0}
\dimen\@ne=\pagegoal % we claculate the maximum allowable height of the
% middle column next
\advance\dimen\@ne by-\vsize
\advance\dimen\@ne by \fnotesspan\dimen\z@
\divide\dimen\@ne by\fnotesspan
-%\message{d1: \the\dimen1, d0: \the\dimen0, pageheight: \the\pageheight }%
-%\message{(vsize: \the\vsize, pagegoal: \the\pagegoal\space ppage: \the\ht\partialpage)^^J^^J}%
%
\balanceallcolumns
%
@@ -403,22 +443,23 @@
\global\fromword=\expandafter{\firstmark}
\global\toword=\expandafter{\botmark}
\iflastpageup
+ \onpage{\testpageno}{\message{outputting last page...}}%
\ifnum\outputpenalty<-9999 % this break was forced (most likely by the \break in \enddouble...)
\ifvoid\footins
\else
\ifdim\dp\footins=\z@ \else
{\setbox\footins=\box\footins}% this was a correcion box after which no new real footnotes
- \fi % were cotributed
+ \fi % were contributed
\fi
% a correction (\hbox{}) was added by the \enddouble... command;
% this correction will affect \box\footins (since it will appear
% as a box in \foothhbox, a box that is not a footnote);
% this correction will be translated into an appropriate
% adjustment to \box\footins (since the output routine thinks
- % it is a footnote); however, it does throw off the footnote count in \foothhbox
+ % it is a footnote); however, it does throw the footnote count in \foothhbox
% off by one; kill it here; the footnotes will be inserted from the footins box
\setbox\z@=\vbox{\pagesofar}%
- \unvbox\z@ \penalty\lastpenalty
+ \unvbox\z@ \penalty\lastpenalty %?
% since we could not touch \foothhbox above (to keep the footnote height calculations correct),
% the \footins box is messed up; fix it
{\setbox\footins=\box\footins}%
@@ -432,13 +473,13 @@
\global\outputnowfalse
\global\holdinginserts=\@ne
\fi
- \else % this is not the last page, preform normal multicolumn output
+ \else % this is not the last page, perform normal multicolumn output
\normaloutput\page\lheader\rheader
%
\global\vsize=\longvsize
\global\outputnowfalse
\global\holdinginserts=\@ne
- \ifpenultimatepage % page broken at a penalty inserted by \enddoublecolumns
+ \ifpenultimatepage % page broken at a penalty inserted by \enddoublecols
\global\p@nultimatepagetrue % the next penalty should be removed
\fi
\fi
@@ -450,11 +491,11 @@
\global\outputnowtrue
\global\holdinginserts=\z@
\fi
- \unvbox\@cclv
+ \unvbox\@cclv\relax
\ifnum\outputpenalty=\@M % 10000 the break was not at a penalty item
\else
\ifp@nultimatepage % we already split the page at this penalty
- \global\p@nultimatepagefalse % let \enddoublecolumns insert the penalty
+ \global\p@nultimatepagefalse % let \enddoublecols insert the penalty
\else
\penalty\outputpenalty
\fi
@@ -474,13 +515,55 @@
}
}
+% since the output routine is executed several times for every physical page of output
+% we have to make sure that the \topmark value is saved only once;
+% the mechanism below relies on \normaloutput being the only physical means of outputting the page
+% (more precisely, the only macro that contains the \shipout command and expands \savetopmark)
+
+\newtoks\savedtopmark % keep track of the last mark
+
+\def\settopmark{% this has to be done at the beginning of every \output routine
+ % it would have been a lot easier if there was an \everyoutput type command available
+ \yytoksempty\savedtopmark{\global\savedtopmark\expandafter{\topmark}}{}%
+ \yytoksempty\savedtopmark{\global\savedtopmark{{0}{0}{0}}}{}% make sure the saved topmark is not empty from now on
+}
+
\def\normaloutput#1#2#3{\ifodd\pageno\hoffset=\pageshift\fi
- \shipout\vbox{
- \vbox to\fullpageheight{
- \iftitle\global\titlefalse
- \else\hbox to\pagewidth{\vbox to10pt{}\ifodd\pageno #3\else#2\fi}\fi
- \vfill#1}} % parameter #1 is the page itself
- \global\advance\pageno by1}
+ % this is a convenient (although not very refined) way to ivestigate spacing problems
+ \onpageg{\testpageno}{\tracingoutput=1\relax}%
+ \shipout\vbox{
+ \vbox to\fullpageheight{
+ \iftitle\global\titlefalse
+ \else\hbox to\pagewidth{\vbox to10pt{}\ifodd\pageno #3\else#2\fi}\fi
+ \vfill
+ #1
+ }
+ }% parameter #1 is the page itself
+ \ifnum\outputpenalty=-'10000000000 % this is the \end ...
+ \everyendofjob
+ \fi
+ \global\advance\pageno by1
+ \global\savedtopmark{}% reset the last mark (the only place where this is done)
+}
+
+\def\topsecno{\expandafter\takeone\the\savedtopmark} % the last section on the
+ % previous page
+
+% we change the original output routine from cwebmac.tex to handle the topmark saving
+% mechanism introduced here
+
+% a word of caution about the change below: if dcols.sty is not loaded immediately after
+% cwebmac.tex (or at least before the first page is discarded) the output routine below
+% must be further adjusted to
+% \global\output{\settopmark\normaloutput\page\lheader\rheader}
+% so that any `watsit' nodes on the first page (like \write, \open, etc) have a chance to
+% execute; one possible (although not perfect) way of automating this choice is to detect
+% the horizontal mode here and change the output routine accordingly.
+
+\output{\setbox0=\page % the first page is garbage
+ \openout\cont=\contentsfile
+ \write\cont{\catcode `\noexpand\@=11\relax} % \makeatletter
+ \global\output{\settopmark\normaloutput\page\lheader\rheader}} % make sure the \topmark is nonempty; AS
\let\page\pagebody % this is a cwebmac command but it has to be executed here, after the \pagebody macro is changed
@@ -515,18 +598,20 @@
}
\def\b@lanceallcolumns{
+ \onpage{\testpageno}{\message{normalized (after partial page) max column ht(dimen0): \the\dimen0}}%
\advance\count\@cclv\@ne
\whichcolumn{\count\@cclv}%
\ifinfoots % if the footnotes go under these columns ...
\dimen\tw@=\ht\z@
-%\message{set d2(=ht0): \the\dimen2, d0: \the\dimen0; vs. ph: \the\pageheight}%
+ \onpage{\testpageno}{\message{total height of remaining collected material, in footnotes(dimen2): \the\dimen2}}%
\advance\dimen\tw@ by -\remaindernonfoots\dimen\z@
\advance\dimen\tw@ by -\remaindergaps\baselineskip
\advance\dimen\tw@ by \remaindergaps\topskip
\divide\dimen\tw@ by \fnotesspan
-%\message{set d2: \the\dimen2}%
+ \onpage{\testpageno}{\message{set footnote column ht(dimen2): \the\dimen2}}%
\let\next=\b@l@nceallcolumns
\else % otherwise, split off the columns ...
+ \onpage{\testpageno}{\message{total height of remaining collected material, pre footnotes(ht0): \the\ht0}}%
\ifnum\dimen\z@<\topskip
\setbox\@ne=\vsplit\z@ to \topskip
\else
@@ -543,32 +628,38 @@
\newcount\tcthr
\def\b@l@nceallcolumns{% splitting off the columns after the footnotes start
- \count\@cclv=\fnotesstart
- \setbox3=\copy\z@
- \setbox5=\vbox{}%
- \b@l@nc@allcolumns
+ \count\@cclv=\fnotesstart
+ \setbox3=\copy\z@
+ \setbox5=\vbox{}%
+ \b@l@nc@allcolumns
}
\def\b@l@nc@allcolumns{
+ % box3 contains a copy of the collected material after the pre footnote columns have been split off
\whichcolumn{\count\@cclv}%
\iflastcolumn
-%\message{box3 height: \the\ht3, box3 depth: \the\dp3, d0: \the\dimen0, d2: \the\dimen2}%
\ifnum\ht3>\dimen\ifinfoots \tw@ \else \z@ \fi
+ \onpage{\testpageno}{\message{last \ifinfoots (footnote) \fi column too high: \the\ht3 %
+ \space vs. allowable height(dimen\ifinfoots 2\else 0\fi): \the\dimen\ifinfoots \tw@ \else \z@ \fi}}%
\advance\dimen\tw@ by \@ne pt
\let\next=\b@l@nceallcolumns
\else
\ifinfoots
\else
\ifnum\dimen\z@<\topskip
+ \onpage{\testpageno}{\message{d0<ts--->}}%
\setbox3=\vsplit3 to \topskip
\else
+ \onpage{\testpageno}{\message{d0>=ts--->}}%
\setbox3=\vsplit3 to \dimen\z@
\fi
\fi
-%\message{**box3 height: \the\ht3, d0: \the\dimen0, bs: \the\baselineskip, ts: \the\topskip}%
+ \onpage{\testpageno}{\message{last \ifinfoots footnote \fi column height(ht3): \the\ht3 %
+ \space topskip: \the\topskip, }}%
+ \onpage{\testpageno}{\message{max column height(dimen0): \the\dimen0}}%
\wd3=\hsize
\setbox\tw@=\vbox{\box3 \unvbox5 \unvbox\tw@}%
- %%% \box2 is laterchanged globally
+ %%% \box2 is later changed globally
\vbadness=\tcthr
\let\next=\relax
\fi
@@ -617,16 +708,20 @@
}
\def\footblock{%
+ \onpage{\testpageno}{\message{building footnote columns...}}%
\hbox to \fnoteboxwidth{\f@otblock}%
\count\@cclv=\fnotesstart
\advance\count\@cclv by\fnotesspan
\advance\count\@cclv\m@ne
\whichcolumn{\count\@cclv}%
+ \onpage{\testpageno}{\message{column \the\count\@cclv\space to process...}}%
\iflastcolumn
\let\next=\relax
+ \onpage{\testpageno}{\message{done...}}%
\else
\hfil
\let\next=\p@gesofar
+ \onpage{\testpageno}{\message{process columns after the footnotes...}}%
\fi
\next
}
@@ -634,7 +729,7 @@
\def\f@otblock{%
\whichcolumn{\count\@cclv}%
\ifinfoots
- \iffirstfootcol
+ \iffirstfootcol % put all the footnotes after the first column
\setbox\z@=\rlap{\vbox{
\ifvoid\footins
\else
@@ -659,14 +754,20 @@
\wd\z@=\hsize
\box\z@
\else
+% \onpage{\testpageno}{\showboxbreadth=100 \showboxdepth=100 \showbox\currentcolumn}%
\hfil\setbox\z@=\vbox{
\getnextcolumn\unvbox\currentcolumn\kern-\dimen3
\vskip\adjskip
\hrule width\z@ height \dimen5 depth\z@
}%
- \ifnum\ht\z@>\baselineskip
+ \onpage{\testpageno}{\message{topskip: \the\topskip, adjskip: \the\adjskip, bottom rule: wd=0pt, ht=\the\dimen5, dp=0pt}}%
+ \onpage{\testpageno}{\message{splittopskip: \the\splittopskip}}%
+ \onpage{\testpageno}{\message{last box height (preadjustment): \the\ht0 }}%
+ \ifnum\ht\z@<\topskip%>\baselineskip is another option
+ \else
\setbox\z@=\vbox to \dimen\iflastpageup 6 \else \z@ \fi{\unvbox\z@}%
\fi
+ \onpage{\testpageno}{\message{last box height: \the\ht0 }}%
\wd\z@=\hsize
\box\z@
\fi
@@ -716,7 +817,198 @@
\fi
}
-% footnote counting macros
+% footnote accounting macros using aux stream
+
+\yyuniondeclare\fnoteunion{aux:global:fnotes}
+
+\defp\addfnlabel{}
+\defp\addpgendlabel#1{}
+\defp\setfniteration#1{}
+
+\toyyunion{aux:global:fnotes:neutral}
+
+\defc\addfnlabel{\expandafter\fnstream\expandafter{\the\fnstream*}}
+\defc\addpgendlabel#1{\expandafter\fnstream\expandafter{\the\fnstream|}}
+\defc\setfniteration#1{\fniteration=#1 }
+
+\toyyunion{aux:global:fnotes}
+
+\def\yyuniontag{\auxunionctl}
+\defp\fnoteunionctl{}% sequence to activate/deactivate/take other action for
+ % fnote set of macros
+
+\defc\fnoteunionctl{%
+ \restorecslist{aux:global:fnotes}\fnoteunion
+}
+\savecs{aux:global:activate}\fnoteunionctl
+
+\defc\fnoteunionctl{%
+ \restorecslist{aux:global:fnotes:neutral}\fnoteunion
+}
+\savecs{aux:global:deactivate}\fnoteunionctl
+
+\defc\fnoteunionctl{% this command should not make any page material contributions
+ \message{footnotes...}%
+ \fnstream{}%
+ \restorecslist{aux:global:deactivate}\auxunionctl
+ \auxunionctl % ignore all other sets
+ \restorecslist{aux:global:fnotes}\fnoteunion
+ \restorecs{aux:global:fnotes:neutral}\setfniteration
+ \input\jobname.aux
+ \edef\next{\the\fnstream}%
+ \checkfnprefixx{\savedfnstream}{\the\fnstream}%
+ {\message{Footnotes are stable ...}}%
+ {\message{Footnotes may be set incorrectly ...}}%
+}
+\savecs{aux:global:preend}\fnoteunionctl
+
+\defc\fnoteunionctl{% this command should not make any page material contributions
+ \message{footnotes...}%
+ \let\footthenotes\markbottomofpage
+ \edef\savedfnstream{\the\fnstream}%
+ \advance\fniteration by\@ne
+ \toksa\expandafter{\fnoteunion}%
+ \immediate\write\auxstream{\harmlesscomment\the\toksa}%
+ \immediate\write\auxstream{\noexpand\setfniteration{\the\fniteration}}%
+}
+\savecs{aux:global:prestart}\fnoteunionctl
+
+% end footnote accounting macros
+
+% text crossreferencing setup using the aux stream
+
+\yyuniondeclare\textrefunion{aux:global:textrefs}
+
+\defp\refanchor#1#2\end{}
+
+\toyyunion{aux:global:textrefs:neutral}
+
+\defc\refanchor#1#2\end{%
+ \expandafter\def\csname ref: #1\endcsname{#2}%
+}%
+
+\toyyunion{aux:global:textrefs}
+
+\def\yyuniontag{\auxunionctl}
+\defp\textrefunionctl{}% sequence to activate/deactivate/take other action for
+ % fnote set of macros
+
+\defc\textrefunionctl{%
+ \restorecslist{aux:global:textrefs}\textrefunion
+}
+\savecs{aux:global:activate}\textrefunionctl
+
+\defc\textrefunionctl{%
+ \restorecslist{aux:global:textrefs:neutral}\textrefunion
+}
+\savecs{aux:global:deactivate}\textrefunionctl
+
+\defc\textrefunionctl{% this command should not make any page material contributions
+ \message{text references...}%
+}
+\savecs{aux:global:preend}\textrefunionctl
+
+\defc\textrefunionctl{% this command should not make any page material contributions
+ \message{text references...}%
+ \toksa\expandafter{\textrefunion}%
+ \immediate\write\auxstream{\harmlesscomment\the\toksa}%
+}
+\savecs{aux:global:prestart}\textrefunionctl
+
+% end text cross referencing macros
+
+% macros for adding and using counters for referencing
+
+\def\volatile@counters{1(0){\errmessage{invalid counter!}}}
+\def\delayed@counters{1(0){\errmessage{invalid counter!}}}
+
+\def\addvcounter#1#2{% #1 is the name of the counter
+ % #2 is the access sequence
+ \counterattach\volatile@counters{#2}{#1}%
+}
+
+\def\adddcounter#1#2{% #1 is the name of the counter
+ % #2 is the access sequence
+ \counterattach\delayed@counters{#2}{#1}%
+}
+
+\def\counterattach#1#2{%
+ \expandafter\c@unterattach#1\end{#1}{#2}%
+}
+
+\def\c@unterattach#1(#2\end#3#4#5{% #1 is the counter top index
+ % #2 is the counter array
+ % #3 is the name of the counter array
+ % #4 is the access sequence of the new counter
+ % #5 is the name of the counter
+ \expandafter\def\expandafter#3\expandafter{\number\xincrement{#1}(#2(#1){#4}}% add the counter to the array
+ \expandafter\def\csname ct:\expandafter\eatone\string#3[#5]\endcsname{#1}% save counter index
+ \expandafter\def\csname get ct:\expandafter\eatone\string#3[#5]\endcsname##1(#1)##2##3\end{##2}%
+}
+
+\def\getcountervalue#1#2#3{% #1 is the name
+ % #2 is the name of the array
+ % #3 is the array instance
+ \csname get ct:\expandafter\eatone\string#2[#1]\endcsname#3\end
+}
+
+\addvcounter{section}{\secno}
+\adddcounter{page}{\the\pageno}
+
+\def\fulllabel#1{%
+ {%
+ \edef\next{\toksa{\volatile@counters}}\next % immediate references
+ \toksb\expandafter{\delayed@counters}% references to be processed at the page output stage
+ \edef\next{\write\auxstream{%
+ \string\refanchor{#1}\the\toksa\string\delayed\the\toksb\end}}\next
+ }%
+}
+
+\def\extractref#1{%
+ \ifx#1\relax
+ \yybreak{\ignoreref}%
+ \else
+ \yybreak{\expandafter\extractr@f#1}%
+ \yycontinue
+}%
+
+\def\ignoreref#1\end#2\end{{ref \bf ??}}
+
+\def\extractr@f#1\delayed#2\end#3#4\end{%
+ % #1 is the volatile counters
+ % #2 is the delayed counters
+ % #3 is text for the link
+ % #4 is the reference constructor (like \solrefcompose)
+ #4{#1}{#2}{#3}%
+}
+
+% end crossreferencing setup macros
+
+% helper macros to check if footnotes have been correctly placed
+\def\checkfnprefix#1#2{%
+ \expandafter\ch@ckfnprefix\romannumeral-0\yyprefixmatch{#1}{#2}%
+}
+
+\def\ch@ckfnprefix#1#2#3{% #1 is the common prefix, #2 and #3 are remainders
+ \yystringempty{#2}{%
+ \yyifrepeatedchar|{#3}{\yyfirstoftwo}{\yysecondoftwo}%
+ }{%
+ \yysecondoftwo
+ }
+}
+
+\def\checkfnprefixx#1#2{%
+ \expandafter\ch@ckfnprefixx\expandafter{#1}{#2}%
+}
+
+\def\ch@ckfnprefixx#1#2{%
+ \expandafter\ch@ckfnpr@fixx\expandafter{#2}{#1}%
+}
+
+\def\ch@ckfnpr@fixx#1#2{%
+ \checkfnprefix{#2}{#1}%
+}
+% end footnote prefix checking helper macros
\let\footthenotes\empty
@@ -742,78 +1034,14 @@
\vbox to \ht\z@{\box\@ne\vss}\box\z@
\fi}}
-\def\addfnlabel{\expandafter\fnstream\expandafter{\the\fnstream*}}
-\def\addpgendlabel{\expandafter\fnstream\expandafter{\the\fnstream|}}
-
-% the commands above will be exectuted when the .ftn file is loaded below
-
\newtoks\fnstream % locations of footnotes
\fnstream={}
-
-% before processing the footnotes one by one we have to open an
-% auxiliary file (we have to read it in whole because it will be
-% rewritten as the document is being typeset); this opening has to be
-% done carefully for the file might not be there yet; check for it first.
-% as a side note, one should not use the same stream number (at least the
-% one allocated by a \new... command) for both the input and the output
-% streams, since one might accidentally close a different stream that
-% happened to have the same index but allocated by a \new... command as a
-% stream of a different type.
-
-\newread\tryfnlabels % to check if the file exists
-\newwrite\fnlabels
\newcount\localfn % footnote count
-\newcount\fniteration
-
-\def\setupfootnotes{% this macro should be used at the beginning of the file, after a box (preferably)
- \let\footthenotes\markbottomofpage
- \openin\tryfnlabels=\jobname.ftn\relax
- \ifeof\tryfnlabels
- \closein\tryfnlabels\relax
- \fniteration\z@
- \else
- \closein\tryfnlabels\relax
- \input \jobname.ftn\relax
- \fi
- \edef\savedfnstream{\the\fnstream}%
- % now we open the same file for writing ...
- \openout\fnlabels=\jobname.ftn\relax
- \advance\fniteration\@ne
- \write\fnlabels{\noexpand\fniteration\the\fniteration\space}%
-}
+\newcount\fniteration % current footnote calculation iteration count
+\fniteration\z@
\def\markbottomofpage{%
- \write\fnlabels{\noexpand\addpgendlabel}%
-}
-
-\def\unsetfootnotes{%
- \def\footthenotes{%
- \write\fnlabels{\noexpand\endinput}%
- \closeout\fnlabels
- \global\let\footthenotes\checkfootnotestream%
- % it is tempting to say \input \jobname.ftn
- % at this point to use in the test below but this is not
- % going to work: the \closeout will get invoked during the
- % \shipout, which happens after the page is set and these
- % macros are expanded.
- % note that using another `stream' sequence for this purpose
- % would not work either, since a footnote at the bottom of the
- % page might `fire' but would be put on the next page by
- % the epage builder.
- }%
-}
-
-\def\checkfootnotestream{% this needs at least one extra page to work correctly ...
- \fnstream{}%
- \input\jobname.ftn
- \edef\next{\the\fnstream}%
- \ifx\next\savedfnstream
- \message{Footnotes are stable ...}%
- \else % this test is too strict, a better way would be to check that
- % \next is a prefix in \savedfnstream and the remaining characters are all `|'
- \message{Footnotes may be set incorrectly ...}%
- \fi
- \global\let\footthenotes\empty
+ \write\auxstream{\noexpand\addpgendlabel{\the\pageno}\harmlesscomment\space bottom of page \the\pageno}%
}
\def\setfnmark{{%
@@ -826,13 +1054,14 @@
\fi
\fi
\removewhitespace\kern2pt\fnmark\localfn
- \write\fnlabels{\noexpand\addfnlabel}%
+ \write\auxstream{\noexpand\addfnlabel}%
}}
\def\getfntok{\loop\splitfnstream\if|\nexttok\global\localfn=\z@ \repeat}
-\def\splitfnstream{\edef\tempdefone{\the\fnstream}%
- \ifx\tempdefone\empty
+\def\splitfnstream{%
+ \edef\tempdefone{\the\fnstream}%
+ \ifx\tempdefone\empty % no footnote tokens left, although we are expecting one
\def\nexttok{?}\message{You may have to reposition the footnotes ...}%
\else
\expandafter\splitfnstre@m\tempdefone\end
@@ -840,4 +1069,3 @@
}
\def\splitfnstre@m#1#2\end{\def\nexttok{#1}\global\fnstream={#2}}
-
diff --git a/support/splint/tex/flex.sty b/support/splint/tex/flex.sty
index 59e23785b3..3008bfcb38 100644
--- a/support/splint/tex/flex.sty
+++ b/support/splint/tex/flex.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -40,8 +40,6 @@
}
\newif\ifyylessused
-\newtoks\yylesslastformat
-\newtoks\yylesslaststash
\newcount\yylesslastfmark
\newcount\yylesslastsmark
\newcount\yylesslastchar
@@ -55,8 +53,6 @@
\advance\yycurrentstate\YYATBOL % yy_current_state += YY_AT_BOL();
% save the format and stash streams for \yyless
\ifyylessused
- \yylesslastformat\yyformat
- \yylesslaststash\yystash
\yylesslastfmark\yyfmark
\yylesslastsmark\yysmark
\yylesslastchar\yytextlastchar
@@ -67,23 +63,38 @@
\newif\ifyytextbackup
\newif\iftraceflexbuffers
-\def\yymatch{%
- \ifyytextbackup
- \xskiptofi\yyreinput
- \else
- \xskiptofi\yyinput
- \fi
-}
-
-\def\yyreinput{\expandafter\yyresetstreams\expandafter\yyinput\the\yytext@seen}
+% an implementation of \yymatch with a low level command \yyreadinput
+% that allows for a general input routine to be used at the beginning of the input
+% buffer (see an example of using \yyreadinput in \ldcleanyyeof macro in ldlex.w)
\def\yyresetstreams{%
- \iftraceflexbuffers\ferrmessage{will rescan: <\the\yytext@seen> (stash: \the\yystashseen)}\fi
+ \iftraceflexbuffers\ferrmessage{will rescan: <\the\yytext@seen>}\fi
\yytextseen{}\yytext@seen{}\yytextseenpure{}%
- \yyformatseen{}\yystashseen{}%
\yytextbackupfalse
}
+\def\yyreadinput#1#2{%
+ \expandafter\yyre@dinput\expandafter{#2}{#1}%
+}
+
+\def\yyre@dinput#1#2{%
+ #2#1%
+}
+
+\def\yyr@@dinput{%
+ \ifyytextbackup
+ \yybreak{\expandafter{\the\yytext@seen}{\yyresetstreams}}%
+ \else
+ \yybreak{{}{}}%
+ \yycontinue
+}
+
+\def\yyr@@dinp@t#1#2{%
+ #2\yyinput#1%
+}
+
+\def\yymatch{\yyreadinput{\yyr@@dinp@t}{\romannumeral0\yyr@@dinput}}
+
% \yym@tch is the return point from the low-level input routine
\def\yym@tch{% do {
@@ -93,20 +104,17 @@
\ifyyflexdebug\ferrmessage{match action: \the\yyact\space(yytext: \the\yytext@:^^Jyytextseen: \the\yytext@seen>\the\yybyte)}\fi
\ifnum\yyact=\z@ % if ( yy_accept[yy_current_state] ) {
\else %
- \ifyyflexdebug\ferrmessage{yym@tch: stash seen: \the\yystashseen^^Jsmark: \the\yysmarklast}\fi
+ \ifyyflexdebug\ferrmessage{yym@tch: smark: \the\yysmarklast}\fi
\yyg@yylastacceptingstate=\yycurrentstate % yyg->yy_last_accepting_state = yy_current_state;
\concat\yytext\yytextseen % yyg->yy_last_accepting_cpos = yy_cp;
\concat\yytext@\yytext@seen % ... ...
\concat\yytextpure\yytextseenpure % ... ...
- \concat\yyformat\yyformatseen % ... ...
- \concat\yystash\yystashseen % ... ...
\yytextlastchar=\yytextseenlastchar %
\yyfmark=\yyfmarklast % ... ...
\yysmark=\yysmarklast % ... ...
\yyfmark@accept=\yyfmark
\yysmark@accept=\yysmark
\yytextseen={}\yytext@seen={}\yytextseenpure{}%
- \yyformatseen{}\yystashseen{}%
\fi % }
\yyllwhile
}
@@ -136,19 +144,17 @@
\yycurrentstate=\fgetelemof{yybase}\at\yycurrentstate\relax
\advance\yycurrentstate\yyc %
\yycurrentstate=\fgetelemof{yynxt}\at\yycurrentstate\relax
- \ifyyflexdebug\ferrmessage{yysubtext: (\the\yysubtext),^^Jyysbyte: (\the\yysbyte),^^Jyybyte: (\the\yybyte)}\fi
+ \ifyyflexdebug\ferrmessage{yysubtext: (\the\yysubtext),^^Jyybyte: (\the\yybyte)}\fi
% yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
\concat\yytextseen\yybyte % ++yy_cp;
\concat\yytext@seen\yysubtext \yysubtext{}% % ...
\concat\yytext@seen\yybyte % ...
\concat\yytextseenpure\yybytepure % ...
- \concat\yyformatseen\yyfbyte \yyfbyte{}% % ...
- \concat\yystashseen\yysbyte \yysbyte{}% % ...
\yytextseenlastchar=\yycp@ %
\yyfmarklast=\formatmarker % ...
\yysmarklast=\stashmarker % ...
\yyact=\fgetelemof{yybase}\at\yycurrentstate\relax % ... reusing \yyact ( yy_act = yy_base[yy_current_state] )
- \ifyyflexdebug\ferrmessage{matching the rest: <\the\yytext@seen>^^J(stash: \the\yystash:^^J\the\yystashseen)}\fi
+ \ifyyflexdebug\ferrmessage{matching the rest: <\the\yytext@seen>}\fi
\ifnum\yyact=\YYBASEMAXENTRY\relax % } while ( yy_base[yy_current_state] != max( yy_base ) );
\ifyyflexdebug\ferrmessage{looking for the action}\fi
\yybreak\yyfindaction % ... if ( yy_base[yy_current_state] == max( yy_base ) ) goto yy_find_action;
@@ -177,21 +183,17 @@
\concat\yytext\yytextseen
\concat\yytext@\yytext@seen
\concat\yytextpure\yytextseenpure
- \concat\yyformat\yyformatseen
- \concat\yystash\yystashseen
\yytextlastchar=\yytextseenlastchar
\yyfmark=\yyfmarklast % == \formatmarker
\yysmark=\yysmarklast % == \stashmarker
\yytextseen{}\yytext@seen{}\yytextseenpure{}%
- \yyformatseen{}\yystashseen{}%
%
\fi % }
\YYDOBEFOREACTION % YY_DO_BEFORE_ACTION;
\ifyyflexdebug
\ferrmessage{action: \the\yyact,^^J%
- state: \the\yycurrentstate\space(\the\yytext@:\the\yytext@seen)^^J%
- stash: \the\yystash:\the\yystashseen^^J%
- yysbyte: \the\yysbyte}%
+ state: \the\yycurrentstate\space(\the\yytext@:\the\yytext@seen)%
+ }%
\fi
\doaction
}
@@ -322,7 +324,6 @@
\stashmarker=\yysmark@accept
\yyfmarklast=\formatmarker
\yysmarklast=\stashmarker
- \yyformatseen{}\yystashseen{}%
\let\yyreturn\yygetpreviousstatef@r
\yyinput
}
@@ -368,8 +369,6 @@
\yybyte{}\yybytepure{}%
\yyfmarklast=\formatmarker
\yysmarklast=\stashmarker
- \concat\yyformatseen\yyfbyte \yyfbyte{}%
- \concat\yystashseen\yysbyte \yysbyte{}%
\else %
\ifyyflexdebug
\ferrmessage{possible accepting state.: \the\yycurrentstatelocal:%
@@ -393,10 +392,6 @@
\yysmark@accept=\yysmark
\yyfmarklast=\formatmarker
\yysmarklast=\stashmarker
- \concat\yyformat\yyformatseen
- \concat\yystash\yystashseen
- \yyformatseen\yyfbyte\yyfbyte{}%
- \yystashseen\yysbyte\yysbyte{}%
\fi
\yygpswhile
}
@@ -465,8 +460,6 @@
\concat\yytextpure\yybytepure
\yybyte{}\yybytepure{}%
\yytextseen{}\yytext@seen{}\yytextseenpure{}%
- \concat\yyformat\yyformatseen\yyformatseen{}%
- \concat\yystash\yystashseen\yystashseen{}%
\yytextlastchar=\yytextseenlastchar
\yyfmark=\yyfmarklast
\yysmark=\yysmarklast
@@ -577,40 +570,25 @@
\def\yylexreturnval#1{% return value (yytext) only
\yychar\csname token\parsernamespace #1\endcsname\relax
- \yylval\expandafter{\expandafter{\the\yytext}}%
- \yylval\expandafter\expandafter\expandafter{\expandafter\the\expandafter\yylval\expandafter{\the\yytextpure}}%
- % the above is an equivalent of
- % \edef\next{\yylval{{\the\yytext}{\the\yytextpure}}}\next
- % but does not `pollute' the definition of \next
+ {\edef\next{\yylval{{\the\yytext}{\the\yytextpure}}}\expandafter}\next
\yytext{}\yytext@{}\yytextpure{}\let\yylextail\yyparsetail
}
\def\yylexreturnptr#1{% return stream pointers only
- \yylval\expandafter{\expandafter{\the\yyfmark}}%
- \yylval\expandafter\expandafter\expandafter{\expandafter\the\expandafter\yylval\expandafter{\the\yysmark}}%
- % the above is an equivalent of
- % \edef\next{\yylval{{\the\yyfmark}{\the\yysmark}}}\next
- % but does not `pollute' the definition of \next
+ {\edef\next{\yylval{{\the\yyfmark}{\the\yysmark}}}\expandafter}\next
\yylexreturn{#1}%
}
+\def\yylexreturntext{\yylexreturnptr{\the\yytextpure}}
+
\def\yylexreturnsym#1{% return the value (yytext) followed by the pointers
\yychar\csname token\parsernamespace #1\endcsname\relax
- \yylval\expandafter{\expandafter{\the\yytext}}%
- \yylval\expandafter\expandafter\expandafter{\expandafter\the\expandafter\yylval\expandafter{\the\yytextpure}}%
- \yylval\expandafter\expandafter\expandafter{\expandafter\the\expandafter\yylval\expandafter{\the\yyfmark}}%
- \yylval\expandafter\expandafter\expandafter{\expandafter\the\expandafter\yylval\expandafter{\the\yysmark}}%
- % the above is an equivalent of
- % \edef\next{\yylval{{\the\yytext}{\the\yytextpure}{\the\yyfmark}{\the\yysmark}}}\next
- % but does not `pollute' the definition of \next
+ {\edef\next{\yylval{{\the\yytext}{\the\yytextpure}{\the\yyfmark}{\the\yysmark}}}\expandafter}\next
\yytext{}\yytext@{}\yytextpure{}\let\yylextail\yyparsetail
}
-\def\yylexreturntext{\yylexreturnptr{\the\yytextpure}}
-
\def\yylexreturnraw#1{% return the character, pointers as the value
- \yylval\expandafter{\expandafter{\the\yyfmark}}%
- \yylval\expandafter\expandafter\expandafter{\expandafter\the\expandafter\yylval\expandafter{\the\yysmark}}%
+ {\edef\next{\yylval{{\the\yyfmark}{\the\yysmark}}}\expandafter}\next
\yychar`#1\relax
\yytext{}\yytext@{}\yytextpure{}\let\yylextail\yyparsetail
}
@@ -620,8 +598,7 @@
}
\def\yylexreturnxchar#1{% return the numeric value, pointers as the value
- \yylval\expandafter{\expandafter{\the\yyfmark}}%
- \yylval\expandafter\expandafter\expandafter{\expandafter\the\expandafter\yylval\expandafter{\the\yysmark}}%
+ {\edef\next{\yylval{{\the\yyfmark}{\the\yysmark}}}\expandafter}\next
\yychar#1\relax
\yytext{}\yytext@{}\yytextpure{}\let\yylextail\yyparsetail
}
@@ -629,10 +606,16 @@
\def\yylexnext{\yytext{}\yytext@{}\yytextpure{}} % use this with a trivial \yylexcontinue
\let\yylexnext\empty
-\def\yyterminate{\yychar\YYEOF\yylval{}\yytext{}\yytext@{}\yytextpure{}\let\yylextail\yyparsetail}
-
-\def\yyerrterminate{\yylexreturn{$undefined}} %$
+\def\yyterminate{\yychar\z@\yylval{}\yytext{}\yytext@{}\yytextpure{}\let\yylextail\yyparsetail}
+\def\yyerrterminate{%
+ \expandafter\ifx\csname token\parsernamespace $undefined\endcsname\relax
+ \yybreak{\yylexreturn{"invalid token"}}%
+ \else
+ \yybreak{\yylexreturn{$undefined}}%$
+ \yycontinue
+}
+
\def\yyfatal#1{\yycomplain{#1}\yyerrterminate}
\def\yywarn#1{\yycomplain{#1}\yylexnext}
@@ -654,23 +637,14 @@
}
\def\yyless@backup{%
- \yyformat\yylesslastformat
- \yystash\yylesslaststash
- \yysbyte{}\yyfbyte{}%
\formatmarker\yylesslastfmark
\stashmarker\yylesslastsmark
}
-\def\yyless@updatestreams{%
- \concat\yyformat\yyfbyte\yyfbyte{}%
- \concat\yystash\yysbyte\yysbyte{}%
-}
-
\def\yyskipnchars#1{%
\ifnum\yycp@=\YYENDOFBUFFERCHAR % read \yyeof
\yycomplain{yyless buffer overflow: #1 characters too many}%
\else
- \yyless@updatestreams
\ifnum#1=\@ne % skipped the required number of tokens
\yybreak@\yyl@ss
\else
@@ -683,8 +657,6 @@
\def\yyl@ss#1\yyeof{%
\yyfmark=\formatmarker
\yysmark=\stashmarker
- \yylesslaststash\yystash
- \yylesslastformat\yyformat
\unput{#1}%
\let\yyreturn\oldyyreturn
}
diff --git a/support/splint/tex/fonts/idssbx10.vpl b/support/splint/tex/fonts/idssbx10.vpl
new file mode 100644
index 0000000000..62d6291a24
--- /dev/null
+++ b/support/splint/tex/fonts/idssbx10.vpl
@@ -0,0 +1,911 @@
+(FAMILY CMSSBX)
+(FACE O 352)
+(CODINGSCHEME TEX TEXT)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM O 36132640510)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.366669)
+ (STRETCH R 0.183334)
+ (SHRINK R 0.122223)
+ (XHEIGHT R 0.458333)
+ (QUAD R 1.100006)
+ (EXTRASPACE R 0.122223)
+ )
+(LIGTABLE
+ (LABEL O 40)
+ (KRN C l R -0.255557)
+ (KRN C L R -0.293057)
+ (STOP)
+ (LABEL C f)
+ (LIG C i O 14)
+ (LIG C f O 13)
+ (LIG C l O 15)
+ (KRN O 47 R 0.07639)
+ (KRN O 77 R 0.07639)
+ (KRN O 41 R 0.07639)
+ (KRN O 51 R 0.07639)
+ (KRN O 135 R 0.07639)
+ (STOP)
+ (LABEL O 13)
+ (LIG C i O 16)
+ (LIG C l O 17)
+ (KRN O 47 R 0.07639)
+ (KRN O 77 R 0.07639)
+ (KRN O 41 R 0.07639)
+ (KRN O 51 R 0.07639)
+ (KRN O 135 R 0.07639)
+ (STOP)
+ (LABEL O 140)
+ (LIG O 140 O 134)
+ (STOP)
+ (LABEL O 47)
+ (LIG O 47 O 42)
+ (KRN O 77 R 0.122223)
+ (KRN O 41 R 0.122223)
+ (STOP)
+ (LABEL O 55)
+ (LIG O 55 O 173)
+ (STOP)
+ (LABEL O 173)
+ (LIG O 55 O 174)
+ (STOP)
+ (LABEL O 41)
+ (LIG O 140 O 74)
+ (STOP)
+ (LABEL O 77)
+ (LIG O 140 O 76)
+ (STOP)
+ (LABEL C k)
+ (LABEL C w)
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C o R -0.030556)
+ (KRN C c R -0.030556)
+ (STOP)
+ (LABEL C P)
+ (KRN C A R -0.091667)
+ (LABEL C y)
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN O 56 R -0.091667)
+ (KRN O 54 R -0.091667)
+ (STOP)
+ (LABEL C F)
+ (LABEL C V)
+ (LABEL C W)
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C u R -0.030556)
+ (KRN C r R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C A R -0.091667)
+ (LABEL C K)
+ (LABEL C X)
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ (STOP)
+ (LABEL C T)
+ (KRN C y R -0.091667)
+ (LABEL C Y)
+ (KRN C e R -0.091667)
+ (KRN C o R -0.091667)
+ (KRN C r R -0.091667)
+ (KRN C a R -0.091667)
+ (KRN C A R -0.091667)
+ (KRN C u R -0.091667)
+ (STOP)
+ (LABEL C D)
+ (LABEL C O)
+ (KRN C X R -0.030556)
+ (KRN C W R -0.030556)
+ (KRN C A R -0.030556)
+ (KRN C V R -0.030556)
+ (KRN C Y R -0.030556)
+ (STOP)
+ (LABEL C b)
+ (LABEL C o)
+ (LABEL C p)
+ (KRN C e R 0.030556)
+ (KRN C o R 0.030556)
+ (KRN C x R -0.030556)
+ (KRN C d R 0.030556)
+ (KRN C c R 0.030556)
+ (KRN C q R 0.030556)
+ (LABEL C a)
+ (KRN C r R -0.030556)
+ (LABEL C t)
+ (KRN C y R -0.030556)
+ (LABEL C u)
+ (KRN C w R -0.030556)
+ (STOP)
+ (LABEL C A)
+ (KRN C t R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C O R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C U R -0.030556)
+ (KRN C Q R -0.030556)
+ (LABEL C L)
+ (KRN C T R -0.091667)
+ (KRN C Y R -0.091667)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ (STOP)
+ (LABEL C g)
+ (KRN C j R 0.030556)
+ (STOP)
+ (LABEL C I)
+ (KRN C I R 0.030556)
+ (STOP)
+ )
+(CHARACTER O 0
+ (CHARWD R 0.580559)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 1
+ (CHARWD R 0.916672)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 2
+ (CHARWD R 0.85556)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 3
+ (CHARWD R 0.672226)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 4
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 5
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 6
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 7
+ (CHARWD R 0.85556)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 10
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 11
+ (CHARWD R 0.85556)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 12
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 13
+ (CHARWD R 0.64167)
+ (CHARHT R 0.694445)
+ (CHARIC R 0.07639)
+ (COMMENT
+ (LIG C i O 16)
+ (LIG C l O 17)
+ (KRN O 47 R 0.07639)
+ (KRN O 77 R 0.07639)
+ (KRN O 41 R 0.07639)
+ (KRN O 51 R 0.07639)
+ (KRN O 135 R 0.07639)
+ )
+ )
+(CHARACTER O 14
+ (CHARWD R 0.586115)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 15
+ (CHARWD R 0.586115)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 16
+ (CHARWD R 0.891672)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 17
+ (CHARWD R 0.891672)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 20
+ (CHARWD R 0.255557)
+ (CHARHT R 0.458333)
+ )
+(CHARACTER O 21
+ (CHARWD R 0.286113)
+ (CHARHT R 0.458333)
+ (CHARDP R 0.194445)
+ )
+(CHARACTER O 22
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 23
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 24
+ (CHARWD R 0.550003)
+ (CHARHT R 0.635417)
+ )
+(CHARACTER O 25
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 26
+ (CHARWD R 0.550003)
+ (CHARHT R 0.637776)
+ )
+(CHARACTER O 27
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 30
+ (CHARWD R 0.488892)
+ (CHARDP R 0.170138)
+ )
+(CHARACTER O 31
+ (CHARWD R 0.56528)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 32
+ (CHARWD R 0.794449)
+ (CHARHT R 0.458333)
+ )
+(CHARACTER O 33
+ (CHARWD R 0.85556)
+ (CHARHT R 0.458333)
+ )
+(CHARACTER O 34
+ (CHARWD R 0.550003)
+ (CHARHT R 0.555555)
+ (CHARDP R 0.097223)
+ )
+(CHARACTER O 35
+ (CHARWD R 0.9472275)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 36
+ (CHARWD R 1.06945)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 37
+ (CHARWD R 0.85556)
+ (CHARHT R 0.743055)
+ (CHARDP R 0.048612)
+ )
+(CHARACTER O 40
+ (CHARWD R 0.255557)
+ (CHARHT R 0.458333)
+ (COMMENT
+ (KRN C l R -0.255557)
+ (KRN C L R -0.293057)
+ )
+ )
+(CHARACTER O 41
+ (CHARWD R 0.366669)
+ (CHARHT R 0.694445)
+ (COMMENT
+ (LIG O 140 O 74)
+ )
+ )
+(CHARACTER O 42
+ (CHARWD R 0.558336)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 43
+ (CHARWD R 0.916672)
+ (CHARHT R 0.694445)
+ (CHARDP R 0.194443)
+ )
+(CHARACTER O 44
+ (CHARWD R 0.550003)
+ (CHARHT R 0.75)
+ (CHARDP R 0.055555)
+ )
+(CHARACTER O 45
+ (CHARWD R 1.029119)
+ (CHARHT R 0.75)
+ (CHARDP R 0.055555)
+ )
+(CHARACTER O 46
+ (CHARWD R 0.830561)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 47
+ (CHARWD R 0.305557)
+ (CHARHT R 0.694445)
+ (COMMENT
+ (LIG O 47 O 42)
+ (KRN O 77 R 0.122223)
+ (KRN O 41 R 0.122223)
+ )
+ )
+(CHARACTER O 50
+ (CHARWD R 0.42778)
+ (CHARHT R 0.75)
+ (CHARDP R 0.25)
+ )
+(CHARACTER O 51
+ (CHARWD R 0.42778)
+ (CHARHT R 0.75)
+ (CHARDP R 0.25)
+ )
+(CHARACTER O 52
+ (CHARWD R 0.550003)
+ (CHARHT R 0.75)
+ )
+(CHARACTER O 53
+ (CHARWD R 0.85556)
+ (CHARHT R 0.616669)
+ (CHARDP R 0.116669)
+ )
+(CHARACTER O 54
+ (CHARWD R 0.305557)
+ (CHARHT R 0.130556)
+ (CHARDP R 0.105556)
+ )
+(CHARACTER O 55
+ (CHARWD R 0.366669)
+ (CHARHT R 0.458333)
+ (COMMENT
+ (LIG O 55 O 173)
+ )
+ )
+(CHARACTER O 56
+ (CHARWD R 0.305557)
+ (CHARHT R 0.130556)
+ )
+(CHARACTER O 57
+ (CHARWD R 0.550003)
+ (CHARHT R 0.75)
+ (CHARDP R 0.25)
+ )
+(CHARACTER C 0
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C 1
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C 2
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C 3
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C 4
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C 5
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C 6
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C 7
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C 8
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C 9
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 72
+ (CHARWD R 0.305557)
+ (CHARHT R 0.458333)
+ )
+(CHARACTER O 73
+ (CHARWD R 0.305557)
+ (CHARHT R 0.458333)
+ (CHARDP R 0.105556)
+ )
+(CHARACTER O 74
+ (CHARWD R 0.366669)
+ (CHARHT R 0.5)
+ (CHARDP R 0.194445)
+ )
+(CHARACTER O 75
+ (CHARWD R 0.85556)
+ (CHARHT R 0.40625)
+ (CHARDP R -0.09375)
+ )
+(CHARACTER O 76
+ (CHARWD R 0.519447)
+ (CHARHT R 0.5)
+ (CHARDP R 0.194445)
+ )
+(CHARACTER O 77
+ (CHARWD R 0.519447)
+ (CHARHT R 0.694445)
+ (COMMENT
+ (LIG O 140 O 76)
+ )
+ )
+(CHARACTER O 100
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C A
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694445)
+ (COMMENT
+ (KRN C t R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C O R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C U R -0.030556)
+ (KRN C Q R -0.030556)
+ (KRN C T R -0.091667)
+ (KRN C Y R -0.091667)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ )
+ )
+(CHARACTER C B
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C C
+ (CHARWD R 0.702782)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C D
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694445)
+ (COMMENT
+ (KRN C X R -0.030556)
+ (KRN C W R -0.030556)
+ (KRN C A R -0.030556)
+ (KRN C V R -0.030556)
+ (KRN C Y R -0.030556)
+ )
+ )
+(CHARACTER C E
+ (CHARWD R 0.64167)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C F
+ (CHARWD R 0.6111145)
+ (CHARHT R 0.694445)
+ (COMMENT
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C u R -0.030556)
+ (KRN C r R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C A R -0.091667)
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ )
+(CHARACTER C G
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C H
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C I
+ (CHARWD R 0.330557)
+ (CHARHT R 0.694445)
+ (COMMENT
+ (KRN C I R 0.030556)
+ )
+ )
+(CHARACTER C J
+ (CHARWD R 0.519447)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C K
+ (CHARWD R 0.763893)
+ (CHARHT R 0.694445)
+ (COMMENT
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ )
+(CHARACTER C L
+ (CHARWD R 0.580559)
+ (CHARHT R 0.694445)
+ (COMMENT
+ (KRN C T R -0.091667)
+ (KRN C Y R -0.091667)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ )
+ )
+(CHARACTER C M
+ (CHARWD R 0.977783)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C N
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C O
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694445)
+ (COMMENT
+ (KRN C X R -0.030556)
+ (KRN C W R -0.030556)
+ (KRN C A R -0.030556)
+ (KRN C V R -0.030556)
+ (KRN C Y R -0.030556)
+ )
+ )
+(CHARACTER C P
+ (CHARWD R 0.702782)
+ (CHARHT R 0.694445)
+ (COMMENT
+ (KRN C A R -0.091667)
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN O 56 R -0.091667)
+ (KRN O 54 R -0.091667)
+ )
+ )
+(CHARACTER C Q
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694445)
+ (CHARDP R 0.105556)
+ )
+(CHARACTER C R
+ (CHARWD R 0.702782)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C S
+ (CHARWD R 0.6111145)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C T
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694445)
+ (COMMENT
+ (KRN C y R -0.091667)
+ (KRN C e R -0.091667)
+ (KRN C o R -0.091667)
+ (KRN C r R -0.091667)
+ (KRN C a R -0.091667)
+ (KRN C A R -0.091667)
+ (KRN C u R -0.091667)
+ )
+ )
+(CHARACTER C U
+ (CHARWD R 0.763893)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C V
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694445)
+ (CHARIC R 0.015279)
+ (COMMENT
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C u R -0.030556)
+ (KRN C r R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C A R -0.091667)
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ )
+(CHARACTER C W
+ (CHARWD R 1.038895)
+ (CHARHT R 0.694445)
+ (CHARIC R 0.015279)
+ (COMMENT
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C u R -0.030556)
+ (KRN C r R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C A R -0.091667)
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ )
+(CHARACTER C X
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694445)
+ (COMMENT
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ )
+(CHARACTER C Y
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694445)
+ (CHARIC R 0.027499)
+ (COMMENT
+ (KRN C e R -0.091667)
+ (KRN C o R -0.091667)
+ (KRN C r R -0.091667)
+ (KRN C a R -0.091667)
+ (KRN C A R -0.091667)
+ (KRN C u R -0.091667)
+ )
+ )
+(CHARACTER C Z
+ (CHARWD R 0.672226)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 133
+ (CHARWD R 0.343058)
+ (CHARHT R 0.75)
+ (CHARDP R 0.25)
+ )
+(CHARACTER O 134
+ (CHARWD R 0.558336)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 135
+ (CHARWD R 0.343058)
+ (CHARHT R 0.75)
+ (CHARDP R 0.25)
+ )
+(CHARACTER O 136
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 137
+ (CHARWD R 0.305557)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 140
+ (CHARWD R 0.305557)
+ (CHARHT R 0.694445)
+ (COMMENT
+ (LIG O 140 O 134)
+ )
+ )
+(CHARACTER C a
+ (CHARWD R 0.525003)
+ (CHARHT R 0.458333)
+ (COMMENT
+ (KRN C r R -0.030556)
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ )
+(CHARACTER C b
+ (CHARWD R 0.561114)
+ (CHARHT R 0.694445)
+ (COMMENT
+ (KRN C e R 0.030556)
+ (KRN C o R 0.030556)
+ (KRN C x R -0.030556)
+ (KRN C d R 0.030556)
+ (KRN C c R 0.030556)
+ (KRN C q R 0.030556)
+ (KRN C r R -0.030556)
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ )
+(CHARACTER C c
+ (CHARWD R 0.488892)
+ (CHARHT R 0.458333)
+ )
+(CHARACTER C d
+ (CHARWD R 0.561114)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C e
+ (CHARWD R 0.511114)
+ (CHARHT R 0.458333)
+ )
+(CHARACTER C f
+ (CHARWD R 0.336113)
+ (CHARHT R 0.694445)
+ (CHARIC R 0.07639)
+ (COMMENT
+ (LIG C i O 14)
+ (LIG C f O 13)
+ (LIG C l O 15)
+ (KRN O 47 R 0.07639)
+ (KRN O 77 R 0.07639)
+ (KRN O 41 R 0.07639)
+ (KRN O 51 R 0.07639)
+ (KRN O 135 R 0.07639)
+ )
+ )
+(CHARACTER C g
+ (CHARWD R 0.550003)
+ (CHARHT R 0.458333)
+ (CHARDP R 0.194445)
+ (CHARIC R 0.015279)
+ (COMMENT
+ (KRN C j R 0.030556)
+ )
+ )
+(CHARACTER C h
+ (CHARWD R 0.561114)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C i
+ (CHARWD R 0.255557)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C j
+ (CHARWD R 0.286113)
+ (CHARHT R 0.694445)
+ (CHARDP R 0.194445)
+ )
+(CHARACTER C k
+ (CHARWD R 0.530559)
+ (CHARHT R 0.694445)
+ (COMMENT
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C o R -0.030556)
+ (KRN C c R -0.030556)
+ )
+ )
+(CHARACTER C l
+ (CHARWD R 0.255557)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER C m
+ (CHARWD R 0.866672)
+ (CHARHT R 0.458333)
+ )
+(CHARACTER C n
+ (CHARWD R 0.561114)
+ (CHARHT R 0.458333)
+ )
+(CHARACTER C o
+ (CHARWD R 0.550003)
+ (CHARHT R 0.458333)
+ (COMMENT
+ (KRN C e R 0.030556)
+ (KRN C o R 0.030556)
+ (KRN C x R -0.030556)
+ (KRN C d R 0.030556)
+ (KRN C c R 0.030556)
+ (KRN C q R 0.030556)
+ (KRN C r R -0.030556)
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ )
+(CHARACTER C p
+ (CHARWD R 0.561114)
+ (CHARHT R 0.458333)
+ (CHARDP R 0.194445)
+ (COMMENT
+ (KRN C e R 0.030556)
+ (KRN C o R 0.030556)
+ (KRN C x R -0.030556)
+ (KRN C d R 0.030556)
+ (KRN C c R 0.030556)
+ (KRN C q R 0.030556)
+ (KRN C r R -0.030556)
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ )
+(CHARACTER C q
+ (CHARWD R 0.561114)
+ (CHARHT R 0.458333)
+ (CHARDP R 0.194445)
+ )
+(CHARACTER C r
+ (CHARWD R 0.372225)
+ (CHARHT R 0.458333)
+ (CHARIC R 0.015279)
+ )
+(CHARACTER C s
+ (CHARWD R 0.421669)
+ (CHARHT R 0.458333)
+ )
+(CHARACTER C t
+ (CHARWD R 0.404169)
+ (CHARHT R 0.589289)
+ (COMMENT
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ )
+(CHARACTER C u
+ (CHARWD R 0.561114)
+ (CHARHT R 0.458333)
+ (COMMENT
+ (KRN C w R -0.030556)
+ )
+ )
+(CHARACTER C v
+ (CHARWD R 0.500003)
+ (CHARHT R 0.458333)
+ (CHARIC R 0.015279)
+ )
+(CHARACTER C w
+ (CHARWD R 0.744449)
+ (CHARHT R 0.458333)
+ (CHARIC R 0.015279)
+ (COMMENT
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C o R -0.030556)
+ (KRN C c R -0.030556)
+ )
+ )
+(CHARACTER C x
+ (CHARWD R 0.500003)
+ (CHARHT R 0.458333)
+ )
+(CHARACTER C y
+ (CHARWD R 0.500003)
+ (CHARHT R 0.458333)
+ (CHARDP R 0.194445)
+ (CHARIC R 0.015279)
+ (COMMENT
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN O 56 R -0.091667)
+ (KRN O 54 R -0.091667)
+ )
+ )
+(CHARACTER C z
+ (CHARWD R 0.476392)
+ (CHARHT R 0.458333)
+ )
+(CHARACTER O 173
+ (CHARWD R 0.550003)
+ (CHARHT R 0.458333)
+ (CHARIC R 0.030556)
+ (COMMENT
+ (LIG O 55 O 174)
+ )
+ )
+(CHARACTER O 174
+ (CHARWD R 1.100006)
+ (CHARHT R 0.458333)
+ (CHARIC R 0.030556)
+ )
+(CHARACTER O 175
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 176
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694445)
+ )
+(CHARACTER O 177
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694445)
+ )
diff --git a/support/splint/tex/fonts/idssbx12.vpl b/support/splint/tex/fonts/idssbx12.vpl
new file mode 100644
index 0000000000..5d613d3827
--- /dev/null
+++ b/support/splint/tex/fonts/idssbx12.vpl
@@ -0,0 +1,908 @@
+(DESIGNSIZE R 12.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM O 11763521146)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.366669)
+ (STRETCH R 0.183334)
+ (SHRINK R 0.122223)
+ (XHEIGHT R 0.458332)
+ (QUAD R 1.100006)
+ (EXTRASPACE R 0.122223)
+ )
+(LIGTABLE
+ (LABEL O 40)
+ (KRN C l R -0.255557)
+ (KRN C L R -0.2930565)
+ (STOP)
+ (LABEL C f)
+ (LIG C i O 14)
+ (LIG C f O 13)
+ (LIG C l O 15)
+ (KRN O 47 R 0.076389)
+ (KRN O 77 R 0.076389)
+ (KRN O 41 R 0.076389)
+ (KRN O 51 R 0.076389)
+ (KRN O 135 R 0.076389)
+ (STOP)
+ (LABEL O 13)
+ (LIG C i O 16)
+ (LIG C l O 17)
+ (KRN O 47 R 0.076389)
+ (KRN O 77 R 0.076389)
+ (KRN O 41 R 0.076389)
+ (KRN O 51 R 0.076389)
+ (KRN O 135 R 0.076389)
+ (STOP)
+ (LABEL O 140)
+ (LIG O 140 O 134)
+ (STOP)
+ (LABEL O 47)
+ (LIG O 47 O 42)
+ (KRN O 77 R 0.122223)
+ (KRN O 41 R 0.122223)
+ (STOP)
+ (LABEL O 55)
+ (LIG O 55 O 173)
+ (STOP)
+ (LABEL O 173)
+ (LIG O 55 O 174)
+ (STOP)
+ (LABEL O 41)
+ (LIG O 140 O 74)
+ (STOP)
+ (LABEL O 77)
+ (LIG O 140 O 76)
+ (STOP)
+ (LABEL C k)
+ (LABEL C w)
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C o R -0.030556)
+ (KRN C c R -0.030556)
+ (STOP)
+ (LABEL C P)
+ (KRN C A R -0.091667)
+ (LABEL C y)
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN O 56 R -0.091667)
+ (KRN O 54 R -0.091667)
+ (STOP)
+ (LABEL C F)
+ (LABEL C V)
+ (LABEL C W)
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C u R -0.030556)
+ (KRN C r R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C A R -0.091667)
+ (LABEL C K)
+ (LABEL C X)
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ (STOP)
+ (LABEL C T)
+ (KRN C y R -0.091667)
+ (LABEL C Y)
+ (KRN C e R -0.091667)
+ (KRN C o R -0.091667)
+ (KRN C r R -0.091667)
+ (KRN C a R -0.091667)
+ (KRN C A R -0.091667)
+ (KRN C u R -0.091667)
+ (STOP)
+ (LABEL C D)
+ (LABEL C O)
+ (KRN C X R -0.030556)
+ (KRN C W R -0.030556)
+ (KRN C A R -0.030556)
+ (KRN C V R -0.030556)
+ (KRN C Y R -0.030556)
+ (STOP)
+ (LABEL C b)
+ (LABEL C o)
+ (LABEL C p)
+ (KRN C e R 0.030556)
+ (KRN C o R 0.030556)
+ (KRN C x R -0.030556)
+ (KRN C d R 0.030556)
+ (KRN C c R 0.030556)
+ (KRN C q R 0.030556)
+ (LABEL C a)
+ (KRN C r R -0.030556)
+ (LABEL C t)
+ (KRN C y R -0.030556)
+ (LABEL C u)
+ (KRN C w R -0.030556)
+ (STOP)
+ (LABEL C A)
+ (KRN C t R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C O R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C U R -0.030556)
+ (KRN C Q R -0.030556)
+ (LABEL C L)
+ (KRN C T R -0.091667)
+ (KRN C Y R -0.091667)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ (STOP)
+ (LABEL C g)
+ (KRN C j R 0.030556)
+ (STOP)
+ (LABEL C I)
+ (KRN C I R 0.030556)
+ (STOP)
+ )
+(CHARACTER O 0
+ (CHARWD R 0.580559)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 1
+ (CHARWD R 0.916672)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 2
+ (CHARWD R 0.85556)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 3
+ (CHARWD R 0.672226)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 4
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 5
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 6
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 7
+ (CHARWD R 0.85556)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 10
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 11
+ (CHARWD R 0.85556)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 12
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 13
+ (CHARWD R 0.64167)
+ (CHARHT R 0.694443)
+ (CHARIC R 0.076389)
+ (COMMENT
+ (LIG C i O 16)
+ (LIG C l O 17)
+ (KRN O 47 R 0.076389)
+ (KRN O 77 R 0.076389)
+ (KRN O 41 R 0.076389)
+ (KRN O 51 R 0.076389)
+ (KRN O 135 R 0.076389)
+ )
+ )
+(CHARACTER O 14
+ (CHARWD R 0.586114)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 15
+ (CHARWD R 0.586114)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 16
+ (CHARWD R 0.891671)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 17
+ (CHARWD R 0.891671)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 20
+ (CHARWD R 0.255557)
+ (CHARHT R 0.458332)
+ )
+(CHARACTER O 21
+ (CHARWD R 0.286113)
+ (CHARHT R 0.458332)
+ (CHARDP R 0.194444)
+ )
+(CHARACTER O 22
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 23
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 24
+ (CHARWD R 0.550003)
+ (CHARHT R 0.635415)
+ )
+(CHARACTER O 25
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 26
+ (CHARWD R 0.550003)
+ (CHARHT R 0.637775)
+ )
+(CHARACTER O 27
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 30
+ (CHARWD R 0.488892)
+ (CHARDP R 0.170138)
+ )
+(CHARACTER O 31
+ (CHARWD R 0.565278)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 32
+ (CHARWD R 0.794449)
+ (CHARHT R 0.458332)
+ )
+(CHARACTER O 33
+ (CHARWD R 0.85556)
+ (CHARHT R 0.458332)
+ )
+(CHARACTER O 34
+ (CHARWD R 0.550003)
+ (CHARHT R 0.555554)
+ (CHARDP R 0.097222)
+ )
+(CHARACTER O 35
+ (CHARWD R 0.9472275)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 36
+ (CHARWD R 1.06945)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 37
+ (CHARWD R 0.85556)
+ (CHARHT R 0.743053)
+ (CHARDP R 0.048611)
+ )
+(CHARACTER O 40
+ (CHARWD R 0.255557)
+ (CHARHT R 0.458332)
+ (COMMENT
+ (KRN C l R -0.255557)
+ (KRN C L R -0.2930565)
+ )
+ )
+(CHARACTER O 41
+ (CHARWD R 0.366669)
+ (CHARHT R 0.694443)
+ (COMMENT
+ (LIG O 140 O 74)
+ )
+ )
+(CHARACTER O 42
+ (CHARWD R 0.558335)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 43
+ (CHARWD R 0.916672)
+ (CHARHT R 0.694443)
+ (CHARDP R 0.194443)
+ )
+(CHARACTER O 44
+ (CHARWD R 0.550003)
+ (CHARHT R 0.749999)
+ (CHARDP R 0.055556)
+ )
+(CHARACTER O 45
+ (CHARWD R 1.029117)
+ (CHARHT R 0.749999)
+ (CHARDP R 0.055556)
+ )
+(CHARACTER O 46
+ (CHARWD R 0.83056)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 47
+ (CHARWD R 0.305557)
+ (CHARHT R 0.694443)
+ (COMMENT
+ (LIG O 47 O 42)
+ (KRN O 77 R 0.122223)
+ (KRN O 41 R 0.122223)
+ )
+ )
+(CHARACTER O 50
+ (CHARWD R 0.42778)
+ (CHARHT R 0.749999)
+ (CHARDP R 0.249997)
+ )
+(CHARACTER O 51
+ (CHARWD R 0.42778)
+ (CHARHT R 0.749999)
+ (CHARDP R 0.249997)
+ )
+(CHARACTER O 52
+ (CHARWD R 0.550003)
+ (CHARHT R 0.749999)
+ )
+(CHARACTER O 53
+ (CHARWD R 0.85556)
+ (CHARHT R 0.616669)
+ (CHARDP R 0.116669)
+ )
+(CHARACTER O 54
+ (CHARWD R 0.305557)
+ (CHARHT R 0.130555)
+ (CHARDP R 0.105556)
+ )
+(CHARACTER O 55
+ (CHARWD R 0.366669)
+ (CHARHT R 0.458332)
+ (COMMENT
+ (LIG O 55 O 173)
+ )
+ )
+(CHARACTER O 56
+ (CHARWD R 0.305557)
+ (CHARHT R 0.130555)
+ )
+(CHARACTER O 57
+ (CHARWD R 0.550003)
+ (CHARHT R 0.749999)
+ (CHARDP R 0.249997)
+ )
+(CHARACTER C 0
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C 1
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C 2
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C 3
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C 4
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C 5
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C 6
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C 7
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C 8
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C 9
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 72
+ (CHARWD R 0.305557)
+ (CHARHT R 0.458332)
+ )
+(CHARACTER O 73
+ (CHARWD R 0.305557)
+ (CHARHT R 0.458332)
+ (CHARDP R 0.105556)
+ )
+(CHARACTER O 74
+ (CHARWD R 0.366669)
+ (CHARHT R 0.499999)
+ (CHARDP R 0.194444)
+ )
+(CHARACTER O 75
+ (CHARWD R 0.85556)
+ (CHARHT R 0.40625)
+ (CHARDP R -0.09375)
+ )
+(CHARACTER O 76
+ (CHARWD R 0.519447)
+ (CHARHT R 0.499999)
+ (CHARDP R 0.194444)
+ )
+(CHARACTER O 77
+ (CHARWD R 0.519447)
+ (CHARHT R 0.694443)
+ (COMMENT
+ (LIG O 140 O 76)
+ )
+ )
+(CHARACTER O 100
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C A
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694443)
+ (COMMENT
+ (KRN C t R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C O R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C U R -0.030556)
+ (KRN C Q R -0.030556)
+ (KRN C T R -0.091667)
+ (KRN C Y R -0.091667)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ )
+ )
+(CHARACTER C B
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C C
+ (CHARWD R 0.702782)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C D
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694443)
+ (COMMENT
+ (KRN C X R -0.030556)
+ (KRN C W R -0.030556)
+ (KRN C A R -0.030556)
+ (KRN C V R -0.030556)
+ (KRN C Y R -0.030556)
+ )
+ )
+(CHARACTER C E
+ (CHARWD R 0.64167)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C F
+ (CHARWD R 0.6111145)
+ (CHARHT R 0.694443)
+ (COMMENT
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C u R -0.030556)
+ (KRN C r R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C A R -0.091667)
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ )
+(CHARACTER C G
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C H
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C I
+ (CHARWD R 0.330556)
+ (CHARHT R 0.694443)
+ (COMMENT
+ (KRN C I R 0.030556)
+ )
+ )
+(CHARACTER C J
+ (CHARWD R 0.519447)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C K
+ (CHARWD R 0.763893)
+ (CHARHT R 0.694443)
+ (COMMENT
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ )
+(CHARACTER C L
+ (CHARWD R 0.580559)
+ (CHARHT R 0.694443)
+ (COMMENT
+ (KRN C T R -0.091667)
+ (KRN C Y R -0.091667)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ )
+ )
+(CHARACTER C M
+ (CHARWD R 0.977783)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C N
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C O
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694443)
+ (COMMENT
+ (KRN C X R -0.030556)
+ (KRN C W R -0.030556)
+ (KRN C A R -0.030556)
+ (KRN C V R -0.030556)
+ (KRN C Y R -0.030556)
+ )
+ )
+(CHARACTER C P
+ (CHARWD R 0.702782)
+ (CHARHT R 0.694443)
+ (COMMENT
+ (KRN C A R -0.091667)
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN O 56 R -0.091667)
+ (KRN O 54 R -0.091667)
+ )
+ )
+(CHARACTER C Q
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694443)
+ (CHARDP R 0.105556)
+ )
+(CHARACTER C R
+ (CHARWD R 0.702782)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C S
+ (CHARWD R 0.6111145)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C T
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694443)
+ (COMMENT
+ (KRN C y R -0.091667)
+ (KRN C e R -0.091667)
+ (KRN C o R -0.091667)
+ (KRN C r R -0.091667)
+ (KRN C a R -0.091667)
+ (KRN C A R -0.091667)
+ (KRN C u R -0.091667)
+ )
+ )
+(CHARACTER C U
+ (CHARWD R 0.763893)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C V
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694443)
+ (CHARIC R 0.015278)
+ (COMMENT
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C u R -0.030556)
+ (KRN C r R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C A R -0.091667)
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ )
+(CHARACTER C W
+ (CHARWD R 1.038895)
+ (CHARHT R 0.694443)
+ (CHARIC R 0.015278)
+ (COMMENT
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C u R -0.030556)
+ (KRN C r R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C A R -0.091667)
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ )
+(CHARACTER C X
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694443)
+ (COMMENT
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ )
+(CHARACTER C Y
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694443)
+ (CHARIC R 0.0275)
+ (COMMENT
+ (KRN C e R -0.091667)
+ (KRN C o R -0.091667)
+ (KRN C r R -0.091667)
+ (KRN C a R -0.091667)
+ (KRN C A R -0.091667)
+ (KRN C u R -0.091667)
+ )
+ )
+(CHARACTER C Z
+ (CHARWD R 0.672226)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 133
+ (CHARWD R 0.343057)
+ (CHARHT R 0.749999)
+ (CHARDP R 0.249997)
+ )
+(CHARACTER O 134
+ (CHARWD R 0.558335)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 135
+ (CHARWD R 0.343057)
+ (CHARHT R 0.749999)
+ (CHARDP R 0.249997)
+ )
+(CHARACTER O 136
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 137
+ (CHARWD R 0.305557)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 140
+ (CHARWD R 0.305557)
+ (CHARHT R 0.694443)
+ (COMMENT
+ (LIG O 140 O 134)
+ )
+ )
+(CHARACTER C a
+ (CHARWD R 0.5250025)
+ (CHARHT R 0.458332)
+ (COMMENT
+ (KRN C r R -0.030556)
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ )
+(CHARACTER C b
+ (CHARWD R 0.561114)
+ (CHARHT R 0.694443)
+ (COMMENT
+ (KRN C e R 0.030556)
+ (KRN C o R 0.030556)
+ (KRN C x R -0.030556)
+ (KRN C d R 0.030556)
+ (KRN C c R 0.030556)
+ (KRN C q R 0.030556)
+ (KRN C r R -0.030556)
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ )
+(CHARACTER C c
+ (CHARWD R 0.488892)
+ (CHARHT R 0.458332)
+ )
+(CHARACTER C d
+ (CHARWD R 0.561114)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C e
+ (CHARWD R 0.511113)
+ (CHARHT R 0.458332)
+ )
+(CHARACTER C f
+ (CHARWD R 0.336113)
+ (CHARHT R 0.694443)
+ (CHARIC R 0.076389)
+ (COMMENT
+ (LIG C i O 14)
+ (LIG C f O 13)
+ (LIG C l O 15)
+ (KRN O 47 R 0.076389)
+ (KRN O 77 R 0.076389)
+ (KRN O 41 R 0.076389)
+ (KRN O 51 R 0.076389)
+ (KRN O 135 R 0.076389)
+ )
+ )
+(CHARACTER C g
+ (CHARWD R 0.550003)
+ (CHARHT R 0.458332)
+ (CHARDP R 0.194444)
+ (CHARIC R 0.015278)
+ (COMMENT
+ (KRN C j R 0.030556)
+ )
+ )
+(CHARACTER C h
+ (CHARWD R 0.561114)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C i
+ (CHARWD R 0.255557)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C j
+ (CHARWD R 0.286113)
+ (CHARHT R 0.694443)
+ (CHARDP R 0.194444)
+ )
+(CHARACTER C k
+ (CHARWD R 0.530559)
+ (CHARHT R 0.694443)
+ (COMMENT
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C o R -0.030556)
+ (KRN C c R -0.030556)
+ )
+ )
+(CHARACTER C l
+ (CHARWD R 0.255557)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER C m
+ (CHARWD R 0.866672)
+ (CHARHT R 0.458332)
+ )
+(CHARACTER C n
+ (CHARWD R 0.561114)
+ (CHARHT R 0.458332)
+ )
+(CHARACTER C o
+ (CHARWD R 0.550003)
+ (CHARHT R 0.458332)
+ (COMMENT
+ (KRN C e R 0.030556)
+ (KRN C o R 0.030556)
+ (KRN C x R -0.030556)
+ (KRN C d R 0.030556)
+ (KRN C c R 0.030556)
+ (KRN C q R 0.030556)
+ (KRN C r R -0.030556)
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ )
+(CHARACTER C p
+ (CHARWD R 0.561114)
+ (CHARHT R 0.458332)
+ (CHARDP R 0.194444)
+ (COMMENT
+ (KRN C e R 0.030556)
+ (KRN C o R 0.030556)
+ (KRN C x R -0.030556)
+ (KRN C d R 0.030556)
+ (KRN C c R 0.030556)
+ (KRN C q R 0.030556)
+ (KRN C r R -0.030556)
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ )
+(CHARACTER C q
+ (CHARWD R 0.561114)
+ (CHARHT R 0.458332)
+ (CHARDP R 0.194444)
+ )
+(CHARACTER C r
+ (CHARWD R 0.372224)
+ (CHARHT R 0.458332)
+ (CHARIC R 0.015278)
+ )
+(CHARACTER C s
+ (CHARWD R 0.421669)
+ (CHARHT R 0.458332)
+ )
+(CHARACTER C t
+ (CHARWD R 0.404168)
+ (CHARHT R 0.589287)
+ (COMMENT
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ )
+(CHARACTER C u
+ (CHARWD R 0.561114)
+ (CHARHT R 0.458332)
+ (COMMENT
+ (KRN C w R -0.030556)
+ )
+ )
+(CHARACTER C v
+ (CHARWD R 0.500003)
+ (CHARHT R 0.458332)
+ (CHARIC R 0.015278)
+ )
+(CHARACTER C w
+ (CHARWD R 0.744449)
+ (CHARHT R 0.458332)
+ (CHARIC R 0.015278)
+ (COMMENT
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C o R -0.030556)
+ (KRN C c R -0.030556)
+ )
+ )
+(CHARACTER C x
+ (CHARWD R 0.500003)
+ (CHARHT R 0.458332)
+ )
+(CHARACTER C y
+ (CHARWD R 0.500003)
+ (CHARHT R 0.458332)
+ (CHARDP R 0.194444)
+ (CHARIC R 0.015278)
+ (COMMENT
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN O 56 R -0.091667)
+ (KRN O 54 R -0.091667)
+ )
+ )
+(CHARACTER C z
+ (CHARWD R 0.476391)
+ (CHARHT R 0.458332)
+ )
+(CHARACTER O 173
+ (CHARWD R 0.550003)
+ (CHARHT R 0.458332)
+ (CHARIC R 0.030556)
+ (COMMENT
+ (LIG O 55 O 174)
+ )
+ )
+(CHARACTER O 174
+ (CHARWD R 1.100006)
+ (CHARHT R 0.458332)
+ (CHARIC R 0.030556)
+ )
+(CHARACTER O 175
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 176
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694443)
+ )
+(CHARACTER O 177
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694443)
+ )
diff --git a/support/splint/tex/fonts/idssbx5.vpl b/support/splint/tex/fonts/idssbx5.vpl
new file mode 100644
index 0000000000..0d5b82cb96
--- /dev/null
+++ b/support/splint/tex/fonts/idssbx5.vpl
@@ -0,0 +1,908 @@
+(DESIGNSIZE R 5.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM O 15363216213)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.366669)
+ (STRETCH R 0.183334)
+ (SHRINK R 0.122223)
+ (XHEIGHT R 0.458334)
+ (QUAD R 1.100006)
+ (EXTRASPACE R 0.122223)
+ )
+(LIGTABLE
+ (LABEL O 40)
+ (KRN C l R -0.255557)
+ (KRN C L R -0.29306)
+ (STOP)
+ (LABEL C f)
+ (LIG C i O 14)
+ (LIG C f O 13)
+ (LIG C l O 15)
+ (KRN O 47 R 0.076388)
+ (KRN O 77 R 0.076388)
+ (KRN O 41 R 0.076388)
+ (KRN O 51 R 0.076388)
+ (KRN O 135 R 0.076388)
+ (STOP)
+ (LABEL O 13)
+ (LIG C i O 16)
+ (LIG C l O 17)
+ (KRN O 47 R 0.076388)
+ (KRN O 77 R 0.076388)
+ (KRN O 41 R 0.076388)
+ (KRN O 51 R 0.076388)
+ (KRN O 135 R 0.076388)
+ (STOP)
+ (LABEL O 140)
+ (LIG O 140 O 134)
+ (STOP)
+ (LABEL O 47)
+ (LIG O 47 O 42)
+ (KRN O 77 R 0.122223)
+ (KRN O 41 R 0.122223)
+ (STOP)
+ (LABEL O 55)
+ (LIG O 55 O 173)
+ (STOP)
+ (LABEL O 173)
+ (LIG O 55 O 174)
+ (STOP)
+ (LABEL O 41)
+ (LIG O 140 O 74)
+ (STOP)
+ (LABEL O 77)
+ (LIG O 140 O 76)
+ (STOP)
+ (LABEL C k)
+ (LABEL C w)
+ (KRN C e R -0.030558)
+ (KRN C a R -0.030558)
+ (KRN C o R -0.030558)
+ (KRN C c R -0.030558)
+ (STOP)
+ (LABEL C P)
+ (KRN C A R -0.091669)
+ (LABEL C y)
+ (KRN C o R -0.030558)
+ (KRN C e R -0.030558)
+ (KRN C a R -0.030558)
+ (KRN O 56 R -0.091669)
+ (KRN O 54 R -0.091669)
+ (STOP)
+ (LABEL C F)
+ (LABEL C V)
+ (LABEL C W)
+ (KRN C o R -0.030558)
+ (KRN C e R -0.030558)
+ (KRN C u R -0.030558)
+ (KRN C r R -0.030558)
+ (KRN C a R -0.030558)
+ (KRN C A R -0.091669)
+ (LABEL C K)
+ (LABEL C X)
+ (KRN C O R -0.030558)
+ (KRN C C R -0.030558)
+ (KRN C G R -0.030558)
+ (KRN C Q R -0.030558)
+ (STOP)
+ (LABEL C T)
+ (KRN C y R -0.091669)
+ (LABEL C Y)
+ (KRN C e R -0.091669)
+ (KRN C o R -0.091669)
+ (KRN C r R -0.091669)
+ (KRN C a R -0.091669)
+ (KRN C A R -0.091669)
+ (KRN C u R -0.091669)
+ (STOP)
+ (LABEL C D)
+ (LABEL C O)
+ (KRN C X R -0.030558)
+ (KRN C W R -0.030558)
+ (KRN C A R -0.030558)
+ (KRN C V R -0.030558)
+ (KRN C Y R -0.030558)
+ (STOP)
+ (LABEL C b)
+ (LABEL C o)
+ (LABEL C p)
+ (KRN C e R 0.030558)
+ (KRN C o R 0.030558)
+ (KRN C x R -0.030558)
+ (KRN C d R 0.030558)
+ (KRN C c R 0.030558)
+ (KRN C q R 0.030558)
+ (LABEL C a)
+ (KRN C r R -0.030558)
+ (LABEL C t)
+ (KRN C y R -0.030558)
+ (LABEL C u)
+ (KRN C w R -0.030558)
+ (STOP)
+ (LABEL C A)
+ (KRN C t R -0.030558)
+ (KRN C C R -0.030558)
+ (KRN C O R -0.030558)
+ (KRN C G R -0.030558)
+ (KRN C U R -0.030558)
+ (KRN C Q R -0.030558)
+ (LABEL C L)
+ (KRN C T R -0.091669)
+ (KRN C Y R -0.091669)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ (STOP)
+ (LABEL C g)
+ (KRN C j R 0.030558)
+ (STOP)
+ (LABEL C I)
+ (KRN C I R 0.030558)
+ (STOP)
+ )
+(CHARACTER O 0
+ (CHARWD R 0.580561)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 1
+ (CHARWD R 0.916672)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 2
+ (CHARWD R 0.85556)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 3
+ (CHARWD R 0.672229)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 4
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 5
+ (CHARWD R 0.794452)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 6
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 7
+ (CHARWD R 0.85556)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 10
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 11
+ (CHARWD R 0.85556)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 12
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 13
+ (CHARWD R 0.641672)
+ (CHARHT R 0.694446)
+ (CHARIC R 0.076388)
+ (COMMENT
+ (LIG C i O 16)
+ (LIG C l O 17)
+ (KRN O 47 R 0.076388)
+ (KRN O 77 R 0.076388)
+ (KRN O 41 R 0.076388)
+ (KRN O 51 R 0.076388)
+ (KRN O 135 R 0.076388)
+ )
+ )
+(CHARACTER O 14
+ (CHARWD R 0.586115)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 15
+ (CHARWD R 0.586115)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 16
+ (CHARWD R 0.891672)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 17
+ (CHARWD R 0.891672)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 20
+ (CHARWD R 0.255557)
+ (CHARHT R 0.458334)
+ )
+(CHARACTER O 21
+ (CHARWD R 0.286115)
+ (CHARHT R 0.458334)
+ (CHARDP R 0.194446)
+ )
+(CHARACTER O 22
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 23
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 24
+ (CHARWD R 0.550003)
+ (CHARHT R 0.635419)
+ )
+(CHARACTER O 25
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 26
+ (CHARWD R 0.550003)
+ (CHARHT R 0.637777)
+ )
+(CHARACTER O 27
+ (CHARWD R 0.73334)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 30
+ (CHARWD R 0.488892)
+ (CHARDP R 0.170141)
+ )
+(CHARACTER O 31
+ (CHARWD R 0.565283)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 32
+ (CHARWD R 0.794449)
+ (CHARHT R 0.458334)
+ )
+(CHARACTER O 33
+ (CHARWD R 0.85556)
+ (CHARHT R 0.458334)
+ )
+(CHARACTER O 34
+ (CHARWD R 0.550003)
+ (CHARHT R 0.555557)
+ (CHARDP R 0.097223)
+ )
+(CHARACTER O 35
+ (CHARWD R 0.947229)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 36
+ (CHARWD R 1.069452)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 37
+ (CHARWD R 0.85556)
+ (CHARHT R 0.743057)
+ (CHARDP R 0.048612)
+ )
+(CHARACTER O 40
+ (CHARWD R 0.255557)
+ (CHARHT R 0.458334)
+ (COMMENT
+ (KRN C l R -0.255557)
+ (KRN C L R -0.29306)
+ )
+ )
+(CHARACTER O 41
+ (CHARWD R 0.366669)
+ (CHARHT R 0.694446)
+ (COMMENT
+ (LIG O 140 O 74)
+ )
+ )
+(CHARACTER O 42
+ (CHARWD R 0.558334)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 43
+ (CHARWD R 0.916672)
+ (CHARHT R 0.694446)
+ (CHARDP R 0.194446)
+ )
+(CHARACTER O 44
+ (CHARWD R 0.550003)
+ (CHARHT R 0.75)
+ (CHARDP R 0.055554)
+ )
+(CHARACTER O 45
+ (CHARWD R 1.029117)
+ (CHARHT R 0.75)
+ (CHARDP R 0.055554)
+ )
+(CHARACTER O 46
+ (CHARWD R 0.830561)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 47
+ (CHARWD R 0.305557)
+ (CHARHT R 0.694446)
+ (COMMENT
+ (LIG O 47 O 42)
+ (KRN O 77 R 0.122223)
+ (KRN O 41 R 0.122223)
+ )
+ )
+(CHARACTER O 50
+ (CHARWD R 0.42778)
+ (CHARHT R 0.75)
+ (CHARDP R 0.25)
+ )
+(CHARACTER O 51
+ (CHARWD R 0.42778)
+ (CHARHT R 0.75)
+ (CHARDP R 0.25)
+ )
+(CHARACTER O 52
+ (CHARWD R 0.550003)
+ (CHARHT R 0.75)
+ )
+(CHARACTER O 53
+ (CHARWD R 0.85556)
+ (CHARHT R 0.616669)
+ (CHARDP R 0.116669)
+ )
+(CHARACTER O 54
+ (CHARWD R 0.305557)
+ (CHARHT R 0.130554)
+ (CHARDP R 0.105555)
+ )
+(CHARACTER O 55
+ (CHARWD R 0.366669)
+ (CHARHT R 0.458334)
+ (COMMENT
+ (LIG O 55 O 173)
+ )
+ )
+(CHARACTER O 56
+ (CHARWD R 0.305557)
+ (CHARHT R 0.130554)
+ )
+(CHARACTER O 57
+ (CHARWD R 0.550003)
+ (CHARHT R 0.75)
+ (CHARDP R 0.25)
+ )
+(CHARACTER C 0
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C 1
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C 2
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C 3
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C 4
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C 5
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C 6
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C 7
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C 8
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C 9
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 72
+ (CHARWD R 0.305557)
+ (CHARHT R 0.458334)
+ )
+(CHARACTER O 73
+ (CHARWD R 0.305557)
+ (CHARHT R 0.458334)
+ (CHARDP R 0.105555)
+ )
+(CHARACTER O 74
+ (CHARWD R 0.366669)
+ (CHARHT R 0.5)
+ (CHARDP R 0.194446)
+ )
+(CHARACTER O 75
+ (CHARWD R 0.85556)
+ (CHARHT R 0.406253)
+ (CHARDP R -0.093747)
+ )
+(CHARACTER O 76
+ (CHARWD R 0.519449)
+ (CHARHT R 0.5)
+ (CHARDP R 0.194446)
+ )
+(CHARACTER O 77
+ (CHARWD R 0.519449)
+ (CHARHT R 0.694446)
+ (COMMENT
+ (LIG O 140 O 76)
+ )
+ )
+(CHARACTER O 100
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C A
+ (CHARWD R 0.73334)
+ (CHARHT R 0.694446)
+ (COMMENT
+ (KRN C t R -0.030558)
+ (KRN C C R -0.030558)
+ (KRN C O R -0.030558)
+ (KRN C G R -0.030558)
+ (KRN C U R -0.030558)
+ (KRN C Q R -0.030558)
+ (KRN C T R -0.091669)
+ (KRN C Y R -0.091669)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ )
+ )
+(CHARACTER C B
+ (CHARWD R 0.73334)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C C
+ (CHARWD R 0.702784)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C D
+ (CHARWD R 0.794452)
+ (CHARHT R 0.694446)
+ (COMMENT
+ (KRN C X R -0.030558)
+ (KRN C W R -0.030558)
+ (KRN C A R -0.030558)
+ (KRN C V R -0.030558)
+ (KRN C Y R -0.030558)
+ )
+ )
+(CHARACTER C E
+ (CHARWD R 0.641672)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C F
+ (CHARWD R 0.611117)
+ (CHARHT R 0.694446)
+ (COMMENT
+ (KRN C o R -0.030558)
+ (KRN C e R -0.030558)
+ (KRN C u R -0.030558)
+ (KRN C r R -0.030558)
+ (KRN C a R -0.030558)
+ (KRN C A R -0.091669)
+ (KRN C O R -0.030558)
+ (KRN C C R -0.030558)
+ (KRN C G R -0.030558)
+ (KRN C Q R -0.030558)
+ )
+ )
+(CHARACTER C G
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C H
+ (CHARWD R 0.794452)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C I
+ (CHARWD R 0.330561)
+ (CHARHT R 0.694446)
+ (COMMENT
+ (KRN C I R 0.030558)
+ )
+ )
+(CHARACTER C J
+ (CHARWD R 0.519449)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C K
+ (CHARWD R 0.763898)
+ (CHARHT R 0.694446)
+ (COMMENT
+ (KRN C O R -0.030558)
+ (KRN C C R -0.030558)
+ (KRN C G R -0.030558)
+ (KRN C Q R -0.030558)
+ )
+ )
+(CHARACTER C L
+ (CHARWD R 0.580561)
+ (CHARHT R 0.694446)
+ (COMMENT
+ (KRN C T R -0.091669)
+ (KRN C Y R -0.091669)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ )
+ )
+(CHARACTER C M
+ (CHARWD R 0.977786)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C N
+ (CHARWD R 0.794452)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C O
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694446)
+ (COMMENT
+ (KRN C X R -0.030558)
+ (KRN C W R -0.030558)
+ (KRN C A R -0.030558)
+ (KRN C V R -0.030558)
+ (KRN C Y R -0.030558)
+ )
+ )
+(CHARACTER C P
+ (CHARWD R 0.702784)
+ (CHARHT R 0.694446)
+ (COMMENT
+ (KRN C A R -0.091669)
+ (KRN C o R -0.030558)
+ (KRN C e R -0.030558)
+ (KRN C a R -0.030558)
+ (KRN O 56 R -0.091669)
+ (KRN O 54 R -0.091669)
+ )
+ )
+(CHARACTER C Q
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694446)
+ (CHARDP R 0.105555)
+ )
+(CHARACTER C R
+ (CHARWD R 0.702784)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C S
+ (CHARWD R 0.6111145)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C T
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694446)
+ (COMMENT
+ (KRN C y R -0.091669)
+ (KRN C e R -0.091669)
+ (KRN C o R -0.091669)
+ (KRN C r R -0.091669)
+ (KRN C a R -0.091669)
+ (KRN C A R -0.091669)
+ (KRN C u R -0.091669)
+ )
+ )
+(CHARACTER C U
+ (CHARWD R 0.763898)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C V
+ (CHARWD R 0.73334)
+ (CHARHT R 0.694446)
+ (CHARIC R 0.015277)
+ (COMMENT
+ (KRN C o R -0.030558)
+ (KRN C e R -0.030558)
+ (KRN C u R -0.030558)
+ (KRN C r R -0.030558)
+ (KRN C a R -0.030558)
+ (KRN C A R -0.091669)
+ (KRN C O R -0.030558)
+ (KRN C C R -0.030558)
+ (KRN C G R -0.030558)
+ (KRN C Q R -0.030558)
+ )
+ )
+(CHARACTER C W
+ (CHARWD R 1.0388975)
+ (CHARHT R 0.694446)
+ (CHARIC R 0.015277)
+ (COMMENT
+ (KRN C o R -0.030558)
+ (KRN C e R -0.030558)
+ (KRN C u R -0.030558)
+ (KRN C r R -0.030558)
+ (KRN C a R -0.030558)
+ (KRN C A R -0.091669)
+ (KRN C O R -0.030558)
+ (KRN C C R -0.030558)
+ (KRN C G R -0.030558)
+ (KRN C Q R -0.030558)
+ )
+ )
+(CHARACTER C X
+ (CHARWD R 0.73334)
+ (CHARHT R 0.694446)
+ (COMMENT
+ (KRN C O R -0.030558)
+ (KRN C C R -0.030558)
+ (KRN C G R -0.030558)
+ (KRN C Q R -0.030558)
+ )
+ )
+(CHARACTER C Y
+ (CHARWD R 0.73334)
+ (CHARHT R 0.694446)
+ (CHARIC R 0.027499)
+ (COMMENT
+ (KRN C e R -0.091669)
+ (KRN C o R -0.091669)
+ (KRN C r R -0.091669)
+ (KRN C a R -0.091669)
+ (KRN C A R -0.091669)
+ (KRN C u R -0.091669)
+ )
+ )
+(CHARACTER C Z
+ (CHARWD R 0.672226)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 133
+ (CHARWD R 0.3430605)
+ (CHARHT R 0.75)
+ (CHARDP R 0.25)
+ )
+(CHARACTER O 134
+ (CHARWD R 0.558334)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 135
+ (CHARWD R 0.3430605)
+ (CHARHT R 0.75)
+ (CHARDP R 0.25)
+ )
+(CHARACTER O 136
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 137
+ (CHARWD R 0.305557)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 140
+ (CHARWD R 0.305557)
+ (CHARHT R 0.694446)
+ (COMMENT
+ (LIG O 140 O 134)
+ )
+ )
+(CHARACTER C a
+ (CHARWD R 0.525003)
+ (CHARHT R 0.458334)
+ (COMMENT
+ (KRN C r R -0.030558)
+ (KRN C y R -0.030558)
+ (KRN C w R -0.030558)
+ )
+ )
+(CHARACTER C b
+ (CHARWD R 0.561114)
+ (CHARHT R 0.694446)
+ (COMMENT
+ (KRN C e R 0.030558)
+ (KRN C o R 0.030558)
+ (KRN C x R -0.030558)
+ (KRN C d R 0.030558)
+ (KRN C c R 0.030558)
+ (KRN C q R 0.030558)
+ (KRN C r R -0.030558)
+ (KRN C y R -0.030558)
+ (KRN C w R -0.030558)
+ )
+ )
+(CHARACTER C c
+ (CHARWD R 0.488892)
+ (CHARHT R 0.458334)
+ )
+(CHARACTER C d
+ (CHARWD R 0.561114)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C e
+ (CHARWD R 0.511114)
+ (CHARHT R 0.458334)
+ )
+(CHARACTER C f
+ (CHARWD R 0.336115)
+ (CHARHT R 0.694446)
+ (CHARIC R 0.076388)
+ (COMMENT
+ (LIG C i O 14)
+ (LIG C f O 13)
+ (LIG C l O 15)
+ (KRN O 47 R 0.076388)
+ (KRN O 77 R 0.076388)
+ (KRN O 41 R 0.076388)
+ (KRN O 51 R 0.076388)
+ (KRN O 135 R 0.076388)
+ )
+ )
+(CHARACTER C g
+ (CHARWD R 0.550003)
+ (CHARHT R 0.458334)
+ (CHARDP R 0.194446)
+ (CHARIC R 0.015277)
+ (COMMENT
+ (KRN C j R 0.030558)
+ )
+ )
+(CHARACTER C h
+ (CHARWD R 0.561114)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C i
+ (CHARWD R 0.255557)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C j
+ (CHARWD R 0.286115)
+ (CHARHT R 0.694446)
+ (CHARDP R 0.194446)
+ )
+(CHARACTER C k
+ (CHARWD R 0.5305605)
+ (CHARHT R 0.694446)
+ (COMMENT
+ (KRN C e R -0.030558)
+ (KRN C a R -0.030558)
+ (KRN C o R -0.030558)
+ (KRN C c R -0.030558)
+ )
+ )
+(CHARACTER C l
+ (CHARWD R 0.255557)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER C m
+ (CHARWD R 0.866672)
+ (CHARHT R 0.458334)
+ )
+(CHARACTER C n
+ (CHARWD R 0.561114)
+ (CHARHT R 0.458334)
+ )
+(CHARACTER C o
+ (CHARWD R 0.550003)
+ (CHARHT R 0.458334)
+ (COMMENT
+ (KRN C e R 0.030558)
+ (KRN C o R 0.030558)
+ (KRN C x R -0.030558)
+ (KRN C d R 0.030558)
+ (KRN C c R 0.030558)
+ (KRN C q R 0.030558)
+ (KRN C r R -0.030558)
+ (KRN C y R -0.030558)
+ (KRN C w R -0.030558)
+ )
+ )
+(CHARACTER C p
+ (CHARWD R 0.561114)
+ (CHARHT R 0.458334)
+ (CHARDP R 0.194446)
+ (COMMENT
+ (KRN C e R 0.030558)
+ (KRN C o R 0.030558)
+ (KRN C x R -0.030558)
+ (KRN C d R 0.030558)
+ (KRN C c R 0.030558)
+ (KRN C q R 0.030558)
+ (KRN C r R -0.030558)
+ (KRN C y R -0.030558)
+ (KRN C w R -0.030558)
+ )
+ )
+(CHARACTER C q
+ (CHARWD R 0.561114)
+ (CHARHT R 0.458334)
+ (CHARDP R 0.194446)
+ )
+(CHARACTER C r
+ (CHARWD R 0.372226)
+ (CHARHT R 0.458334)
+ (CHARIC R 0.015277)
+ )
+(CHARACTER C s
+ (CHARWD R 0.421671)
+ (CHARHT R 0.458334)
+ )
+(CHARACTER C t
+ (CHARWD R 0.404169)
+ (CHARHT R 0.589292)
+ (COMMENT
+ (KRN C y R -0.030558)
+ (KRN C w R -0.030558)
+ )
+ )
+(CHARACTER C u
+ (CHARWD R 0.561114)
+ (CHARHT R 0.458334)
+ (COMMENT
+ (KRN C w R -0.030558)
+ )
+ )
+(CHARACTER C v
+ (CHARWD R 0.500003)
+ (CHARHT R 0.458334)
+ (CHARIC R 0.015277)
+ )
+(CHARACTER C w
+ (CHARWD R 0.744449)
+ (CHARHT R 0.458334)
+ (CHARIC R 0.015277)
+ (COMMENT
+ (KRN C e R -0.030558)
+ (KRN C a R -0.030558)
+ (KRN C o R -0.030558)
+ (KRN C c R -0.030558)
+ )
+ )
+(CHARACTER C x
+ (CHARWD R 0.500003)
+ (CHARHT R 0.458334)
+ )
+(CHARACTER C y
+ (CHARWD R 0.500003)
+ (CHARHT R 0.458334)
+ (CHARDP R 0.194446)
+ (CHARIC R 0.015277)
+ (COMMENT
+ (KRN C o R -0.030558)
+ (KRN C e R -0.030558)
+ (KRN C a R -0.030558)
+ (KRN O 56 R -0.091669)
+ (KRN O 54 R -0.091669)
+ )
+ )
+(CHARACTER C z
+ (CHARWD R 0.476392)
+ (CHARHT R 0.458334)
+ )
+(CHARACTER O 173
+ (CHARWD R 0.550003)
+ (CHARHT R 0.458334)
+ (CHARIC R 0.030558)
+ (COMMENT
+ (LIG O 55 O 174)
+ )
+ )
+(CHARACTER O 174
+ (CHARWD R 1.100006)
+ (CHARHT R 0.458334)
+ (CHARIC R 0.030558)
+ )
+(CHARACTER O 175
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 176
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694446)
+ )
+(CHARACTER O 177
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694446)
+ )
diff --git a/support/splint/tex/fonts/idssbx6.tfm b/support/splint/tex/fonts/idssbx6.tfm
new file mode 100644
index 0000000000..d2f8ef2795
--- /dev/null
+++ b/support/splint/tex/fonts/idssbx6.tfm
Binary files differ
diff --git a/support/splint/tex/fonts/idssbx6.vf b/support/splint/tex/fonts/idssbx6.vf
new file mode 100644
index 0000000000..17abea3d67
--- /dev/null
+++ b/support/splint/tex/fonts/idssbx6.vf
Binary files differ
diff --git a/support/splint/tex/fonts/idssbx6.vpl b/support/splint/tex/fonts/idssbx6.vpl
new file mode 100644
index 0000000000..b58987efb8
--- /dev/null
+++ b/support/splint/tex/fonts/idssbx6.vpl
@@ -0,0 +1,1310 @@
+(VTITLE )
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 6.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM O 12577076133)
+(SEVENBITSAFEFLAG TRUE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.366669)
+ (STRETCH R 0.183334)
+ (SHRINK R 0.122223)
+ (XHEIGHT R 0.458339)
+ (QUAD R 1.100006)
+ (EXTRASPACE R 0.122223)
+ )
+(MAPFONT D 0
+ (FONTNAME cmssbx6)
+ (FONTCHECKSUM O 14127301331)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 6.0)
+ )
+(MAPFONT D 1
+ (FONTNAME cmtt6)
+ (FONTCHECKSUM O 33705443200)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 6.0)
+ )
+(LIGTABLE
+ (LABEL O 40)
+ (KRN C l R -0.255554)
+ (KRN C L R -0.293057)
+ (STOP)
+ (LABEL C f)
+ (LIG C i O 14)
+ (LIG C f O 13)
+ (LIG C l O 15)
+ (KRN O 47 R 0.07639)
+ (KRN O 77 R 0.07639)
+ (KRN O 41 R 0.07639)
+ (KRN O 51 R 0.07639)
+ (KRN O 135 R 0.07639)
+ (STOP)
+ (LABEL O 13)
+ (LIG C i O 16)
+ (LIG C l O 17)
+ (KRN O 47 R 0.07639)
+ (KRN O 77 R 0.07639)
+ (KRN O 41 R 0.07639)
+ (KRN O 51 R 0.07639)
+ (KRN O 135 R 0.07639)
+ (STOP)
+ (LABEL O 140)
+ (LIG O 140 O 134)
+ (STOP)
+ (LABEL O 47)
+ (LIG O 47 O 42)
+ (KRN O 77 R 0.122223)
+ (KRN O 41 R 0.122223)
+ (STOP)
+ (LABEL O 55)
+ (LIG O 55 O 173)
+ (STOP)
+ (LABEL O 173)
+ (LIG O 55 O 174)
+ (STOP)
+ (LABEL O 41)
+ (LIG O 140 O 74)
+ (STOP)
+ (LABEL O 77)
+ (LIG O 140 O 76)
+ (STOP)
+ (LABEL C k)
+ (LABEL C w)
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C o R -0.030556)
+ (KRN C c R -0.030556)
+ (STOP)
+ (LABEL C P)
+ (KRN C A R -0.091667)
+ (LABEL C y)
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN O 56 R -0.091667)
+ (KRN O 54 R -0.091667)
+ (STOP)
+ (LABEL C F)
+ (LABEL C V)
+ (LABEL C W)
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C u R -0.030556)
+ (KRN C r R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C A R -0.091667)
+ (LABEL C K)
+ (LABEL C X)
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ (STOP)
+ (LABEL C T)
+ (KRN C y R -0.091667)
+ (LABEL C Y)
+ (KRN C e R -0.091667)
+ (KRN C o R -0.091667)
+ (KRN C r R -0.091667)
+ (KRN C a R -0.091667)
+ (KRN C A R -0.091667)
+ (KRN C u R -0.091667)
+ (STOP)
+ (LABEL C D)
+ (LABEL C O)
+ (KRN C X R -0.030556)
+ (KRN C W R -0.030556)
+ (KRN C A R -0.030556)
+ (KRN C V R -0.030556)
+ (KRN C Y R -0.030556)
+ (STOP)
+ (LABEL C b)
+ (LABEL C o)
+ (LABEL C p)
+ (KRN C e R 0.030556)
+ (KRN C o R 0.030556)
+ (KRN C x R -0.030556)
+ (KRN C d R 0.030556)
+ (KRN C c R 0.030556)
+ (KRN C q R 0.030556)
+ (LABEL C a)
+ (KRN C r R -0.030556)
+ (LABEL C t)
+ (KRN C y R -0.030556)
+ (LABEL C u)
+ (KRN C w R -0.030556)
+ (STOP)
+ (LABEL C A)
+ (KRN C t R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C O R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C U R -0.030556)
+ (KRN C Q R -0.030556)
+ (LABEL C L)
+ (KRN C T R -0.091667)
+ (KRN C Y R -0.091667)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ (STOP)
+ (LABEL C g)
+ (KRN C j R 0.030556)
+ (STOP)
+ (LABEL C I)
+ (KRN C I R 0.030556)
+ (STOP)
+ )
+(CHARACTER O 0
+ (CHARWD R 0.580559)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 0)
+ )
+ )
+(CHARACTER O 1
+ (CHARWD R 0.916672)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 1)
+ )
+ )
+(CHARACTER O 2
+ (CHARWD R 0.85556)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 2)
+ )
+ )
+(CHARACTER O 3
+ (CHARWD R 0.672226)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 3)
+ )
+ )
+(CHARACTER O 4
+ (CHARWD R 0.733337)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 4)
+ )
+ )
+(CHARACTER O 5
+ (CHARWD R 0.794449)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 5)
+ )
+ )
+(CHARACTER O 6
+ (CHARWD R 0.794449)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 6)
+ )
+ )
+(CHARACTER O 7
+ (CHARWD R 0.85556)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 7)
+ )
+ )
+(CHARACTER O 10
+ (CHARWD R 0.794449)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 10)
+ )
+ )
+(CHARACTER O 11
+ (CHARWD R 0.85556)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 11)
+ )
+ )
+(CHARACTER O 12
+ (CHARWD R 0.794449)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 12)
+ )
+ )
+(CHARACTER O 13
+ (CHARWD R 0.64167)
+ (CHARHT R 0.69445)
+ (CHARIC R 0.07639)
+ (COMMENT
+ (LIG C i O 16)
+ (LIG C l O 17)
+ (KRN O 47 R 0.07639)
+ (KRN O 77 R 0.07639)
+ (KRN O 41 R 0.07639)
+ (KRN O 51 R 0.07639)
+ (KRN O 135 R 0.07639)
+ )
+ (MAP
+ (SETCHAR O 13)
+ )
+ )
+(CHARACTER O 14
+ (CHARWD R 0.586113)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 14)
+ )
+ )
+(CHARACTER O 15
+ (CHARWD R 0.586113)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 15)
+ )
+ )
+(CHARACTER O 16
+ (CHARWD R 0.89167)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 16)
+ )
+ )
+(CHARACTER O 17
+ (CHARWD R 0.89167)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 17)
+ )
+ )
+(CHARACTER O 20
+ (CHARWD R 0.255554)
+ (CHARHT R 0.458339)
+ (MAP
+ (SETCHAR O 20)
+ )
+ )
+(CHARACTER O 21
+ (CHARWD R 0.28611)
+ (CHARHT R 0.458339)
+ (CHARDP R 0.194446)
+ (MAP
+ (SETCHAR O 21)
+ )
+ )
+(CHARACTER O 22
+ (CHARWD R 0.550003)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 22)
+ )
+ )
+(CHARACTER O 23
+ (CHARWD R 0.550003)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 23)
+ )
+ )
+(CHARACTER O 24
+ (CHARWD R 0.550003)
+ (CHARHT R 0.635422)
+ (MAP
+ (SETCHAR O 24)
+ )
+ )
+(CHARACTER O 25
+ (CHARWD R 0.550003)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 25)
+ )
+ )
+(CHARACTER O 26
+ (CHARWD R 0.550003)
+ (CHARHT R 0.637784)
+ (MAP
+ (SETCHAR O 26)
+ )
+ )
+(CHARACTER O 27
+ (CHARWD R 0.733337)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 27)
+ )
+ )
+(CHARACTER O 30
+ (CHARWD R 0.488892)
+ (CHARDP R 0.17014)
+ (MAP
+ (SETCHAR O 30)
+ )
+ )
+(CHARACTER O 31
+ (CHARWD R 0.565282)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 31)
+ )
+ )
+(CHARACTER O 32
+ (CHARWD R 0.794449)
+ (CHARHT R 0.458339)
+ (MAP
+ (SETCHAR O 32)
+ )
+ )
+(CHARACTER O 33
+ (CHARWD R 0.85556)
+ (CHARHT R 0.458339)
+ (MAP
+ (SETCHAR O 33)
+ )
+ )
+(CHARACTER O 34
+ (CHARWD R 0.550003)
+ (CHARHT R 0.555562)
+ (CHARDP R 0.097224)
+ (MAP
+ (SETCHAR O 34)
+ )
+ )
+(CHARACTER O 35
+ (CHARWD R 0.9472275)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 35)
+ )
+ )
+(CHARACTER O 36
+ (CHARWD R 1.06945)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 36)
+ )
+ )
+(CHARACTER O 37
+ (CHARWD R 0.85556)
+ (CHARHT R 0.743062)
+ (CHARDP R 0.048612)
+ (MAP
+ (SETCHAR O 37)
+ )
+ )
+(CHARACTER O 40
+ (CHARWD R 0.255554)
+ (CHARHT R 0.458339)
+ (COMMENT
+ (KRN C l R -0.255554)
+ (KRN C L R -0.293057)
+ )
+ (MAP
+ (SETCHAR O 40)
+ )
+ )
+(CHARACTER O 41
+ (CHARWD R 0.366669)
+ (CHARHT R 0.69445)
+ (COMMENT
+ (LIG O 140 O 74)
+ )
+ (MAP
+ (SETCHAR O 41)
+ )
+ )
+(CHARACTER O 42
+ (CHARWD R 0.558337)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 42)
+ )
+ )
+(CHARACTER O 43
+ (CHARWD R 0.916672)
+ (CHARHT R 0.69445)
+ (CHARDP R 0.194443)
+ (MAP
+ (SETCHAR O 43)
+ )
+ )
+(CHARACTER O 44
+ (CHARWD R 0.550003)
+ (CHARHT R 0.750008)
+ (CHARDP R 0.055557)
+ (MAP
+ (SETCHAR O 44)
+ )
+ )
+(CHARACTER O 45
+ (CHARWD R 1.029124)
+ (CHARHT R 0.750008)
+ (CHARDP R 0.055557)
+ (MAP
+ (SETCHAR O 45)
+ )
+ )
+(CHARACTER O 46
+ (CHARWD R 0.830559)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 46)
+ )
+ )
+(CHARACTER O 47
+ (CHARWD R 0.305557)
+ (CHARHT R 0.69445)
+ (COMMENT
+ (LIG O 47 O 42)
+ (KRN O 77 R 0.122223)
+ (KRN O 41 R 0.122223)
+ )
+ (MAP
+ (SETCHAR O 47)
+ )
+ )
+(CHARACTER O 50
+ (CHARWD R 0.42778)
+ (CHARHT R 0.750008)
+ (CHARDP R 0.25)
+ (MAP
+ (SETCHAR O 50)
+ )
+ )
+(CHARACTER O 51
+ (CHARWD R 0.42778)
+ (CHARHT R 0.750008)
+ (CHARDP R 0.25)
+ (MAP
+ (SETCHAR O 51)
+ )
+ )
+(CHARACTER O 52
+ (CHARWD R 0.550003)
+ (CHARHT R 0.750008)
+ (MAP
+ (SETCHAR O 52)
+ )
+ )
+(CHARACTER O 53
+ (CHARWD R 0.85556)
+ (CHARHT R 0.616672)
+ (CHARDP R 0.116666)
+ (MAP
+ (SETCHAR O 53)
+ )
+ )
+(CHARACTER O 54
+ (CHARWD R 0.305557)
+ (CHARHT R 0.130557)
+ (CHARDP R 0.105557)
+ (MAP
+ (SETCHAR O 54)
+ )
+ )
+(CHARACTER O 55
+ (CHARWD R 0.366669)
+ (CHARHT R 0.458339)
+ (COMMENT
+ (LIG O 55 O 173)
+ )
+ (MAP
+ (SETCHAR O 55)
+ )
+ )
+(CHARACTER O 56
+ (CHARWD R 0.305557)
+ (CHARHT R 0.130557)
+ (MAP
+ (SETCHAR O 56)
+ )
+ )
+(CHARACTER O 57
+ (CHARWD R 0.550003)
+ (CHARHT R 0.750008)
+ (CHARDP R 0.25)
+ (MAP
+ (SETCHAR O 57)
+ )
+ )
+(CHARACTER C 0
+ (CHARWD R 0.550003)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C 0)
+ )
+ )
+(CHARACTER C 1
+ (CHARWD R 0.550003)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C 1)
+ )
+ )
+(CHARACTER C 2
+ (CHARWD R 0.550003)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C 2)
+ )
+ )
+(CHARACTER C 3
+ (CHARWD R 0.550003)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C 3)
+ )
+ )
+(CHARACTER C 4
+ (CHARWD R 0.550003)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C 4)
+ )
+ )
+(CHARACTER C 5
+ (CHARWD R 0.550003)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C 5)
+ )
+ )
+(CHARACTER C 6
+ (CHARWD R 0.550003)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C 6)
+ )
+ )
+(CHARACTER C 7
+ (CHARWD R 0.550003)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C 7)
+ )
+ )
+(CHARACTER C 8
+ (CHARWD R 0.550003)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C 8)
+ )
+ )
+(CHARACTER C 9
+ (CHARWD R 0.550003)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C 9)
+ )
+ )
+(CHARACTER O 72
+ (CHARWD R 0.305557)
+ (CHARHT R 0.458339)
+ (MAP
+ (SETCHAR O 72)
+ )
+ )
+(CHARACTER O 73
+ (CHARWD R 0.305557)
+ (CHARHT R 0.458339)
+ (CHARDP R 0.105557)
+ (MAP
+ (SETCHAR O 73)
+ )
+ )
+(CHARACTER O 74
+ (CHARWD R 0.366669)
+ (CHARHT R 0.500005)
+ (CHARDP R 0.194446)
+ (MAP
+ (SETCHAR O 74)
+ )
+ )
+(CHARACTER O 75
+ (CHARWD R 0.85556)
+ (CHARHT R 0.406255)
+ (CHARDP R -0.09375)
+ (MAP
+ (SETCHAR O 75)
+ )
+ )
+(CHARACTER O 76
+ (CHARWD R 0.519447)
+ (CHARHT R 0.500005)
+ (CHARDP R 0.194446)
+ (MAP
+ (SETCHAR O 76)
+ )
+ )
+(CHARACTER O 77
+ (CHARWD R 0.519447)
+ (CHARHT R 0.69445)
+ (COMMENT
+ (LIG O 140 O 76)
+ )
+ (MAP
+ (SETCHAR O 77)
+ )
+ )
+(CHARACTER O 100
+ (CHARWD R 0.733337)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 100)
+ )
+ )
+(CHARACTER C A
+ (CHARWD R 0.733337)
+ (CHARHT R 0.69445)
+ (COMMENT
+ (KRN C t R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C O R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C U R -0.030556)
+ (KRN C Q R -0.030556)
+ (KRN C T R -0.091667)
+ (KRN C Y R -0.091667)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ )
+ (MAP
+ (SETCHAR C A)
+ )
+ )
+(CHARACTER C B
+ (CHARWD R 0.733337)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C B)
+ )
+ )
+(CHARACTER C C
+ (CHARWD R 0.702782)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C C)
+ )
+ )
+(CHARACTER C D
+ (CHARWD R 0.794449)
+ (CHARHT R 0.69445)
+ (COMMENT
+ (KRN C X R -0.030556)
+ (KRN C W R -0.030556)
+ (KRN C A R -0.030556)
+ (KRN C V R -0.030556)
+ (KRN C Y R -0.030556)
+ )
+ (MAP
+ (SETCHAR C D)
+ )
+ )
+(CHARACTER C E
+ (CHARWD R 0.64167)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C E)
+ )
+ )
+(CHARACTER C F
+ (CHARWD R 0.6111145)
+ (CHARHT R 0.69445)
+ (COMMENT
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C u R -0.030556)
+ (KRN C r R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C A R -0.091667)
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ (MAP
+ (SETCHAR C F)
+ )
+ )
+(CHARACTER C G
+ (CHARWD R 0.733337)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C G)
+ )
+ )
+(CHARACTER C H
+ (CHARWD R 0.794449)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C H)
+ )
+ )
+(CHARACTER C I
+ (CHARWD R 0.330559)
+ (CHARHT R 0.69445)
+ (COMMENT
+ (KRN C I R 0.030556)
+ )
+ (MAP
+ (SETCHAR C I)
+ )
+ )
+(CHARACTER C J
+ (CHARWD R 0.519447)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C J)
+ )
+ )
+(CHARACTER C K
+ (CHARWD R 0.763893)
+ (CHARHT R 0.69445)
+ (COMMENT
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ (MAP
+ (SETCHAR C K)
+ )
+ )
+(CHARACTER C L
+ (CHARWD R 0.580559)
+ (CHARHT R 0.69445)
+ (COMMENT
+ (KRN C T R -0.091667)
+ (KRN C Y R -0.091667)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ )
+ (MAP
+ (SETCHAR C L)
+ )
+ )
+(CHARACTER C M
+ (CHARWD R 0.977783)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C M)
+ )
+ )
+(CHARACTER C N
+ (CHARWD R 0.794449)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C N)
+ )
+ )
+(CHARACTER C O
+ (CHARWD R 0.794449)
+ (CHARHT R 0.69445)
+ (COMMENT
+ (KRN C X R -0.030556)
+ (KRN C W R -0.030556)
+ (KRN C A R -0.030556)
+ (KRN C V R -0.030556)
+ (KRN C Y R -0.030556)
+ )
+ (MAP
+ (SETCHAR C O)
+ )
+ )
+(CHARACTER C P
+ (CHARWD R 0.702782)
+ (CHARHT R 0.69445)
+ (COMMENT
+ (KRN C A R -0.091667)
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN O 56 R -0.091667)
+ (KRN O 54 R -0.091667)
+ )
+ (MAP
+ (SETCHAR C P)
+ )
+ )
+(CHARACTER C Q
+ (CHARWD R 0.794449)
+ (CHARHT R 0.69445)
+ (CHARDP R 0.105557)
+ (MAP
+ (SETCHAR C Q)
+ )
+ )
+(CHARACTER C R
+ (CHARWD R 0.702782)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C R)
+ )
+ )
+(CHARACTER C S
+ (CHARWD R 0.6111145)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C S)
+ )
+ )
+(CHARACTER C T
+ (CHARWD R 0.733337)
+ (CHARHT R 0.69445)
+ (COMMENT
+ (KRN C y R -0.091667)
+ (KRN C e R -0.091667)
+ (KRN C o R -0.091667)
+ (KRN C r R -0.091667)
+ (KRN C a R -0.091667)
+ (KRN C A R -0.091667)
+ (KRN C u R -0.091667)
+ )
+ (MAP
+ (SETCHAR C T)
+ )
+ )
+(CHARACTER C U
+ (CHARWD R 0.763893)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C U)
+ )
+ )
+(CHARACTER C V
+ (CHARWD R 0.733337)
+ (CHARHT R 0.69445)
+ (CHARIC R 0.015279)
+ (COMMENT
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C u R -0.030556)
+ (KRN C r R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C A R -0.091667)
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ (MAP
+ (SETCHAR C V)
+ )
+ )
+(CHARACTER C W
+ (CHARWD R 1.038895)
+ (CHARHT R 0.69445)
+ (CHARIC R 0.015279)
+ (COMMENT
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C u R -0.030556)
+ (KRN C r R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C A R -0.091667)
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ (MAP
+ (SETCHAR C W)
+ )
+ )
+(CHARACTER C X
+ (CHARWD R 0.733337)
+ (CHARHT R 0.69445)
+ (COMMENT
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ (MAP
+ (SETCHAR C X)
+ )
+ )
+(CHARACTER C Y
+ (CHARWD R 0.733337)
+ (CHARHT R 0.69445)
+ (CHARIC R 0.027499)
+ (COMMENT
+ (KRN C e R -0.091667)
+ (KRN C o R -0.091667)
+ (KRN C r R -0.091667)
+ (KRN C a R -0.091667)
+ (KRN C A R -0.091667)
+ (KRN C u R -0.091667)
+ )
+ (MAP
+ (SETCHAR C Y)
+ )
+ )
+(CHARACTER C Z
+ (CHARWD R 0.672226)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C Z)
+ )
+ )
+(CHARACTER O 133
+ (CHARWD R 0.343059)
+ (CHARHT R 0.750008)
+ (CHARDP R 0.25)
+ (MAP
+ (SETCHAR O 133)
+ )
+ )
+(CHARACTER O 134
+ (CHARWD R 0.558337)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 134)
+ )
+ )
+(CHARACTER O 135
+ (CHARWD R 0.343059)
+ (CHARHT R 0.750008)
+ (CHARDP R 0.25)
+ (MAP
+ (SETCHAR O 135)
+ )
+ )
+(CHARACTER O 136
+ (CHARWD R 0.550003)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 136)
+ )
+ )
+(CHARACTER O 137
+ (CHARWD R 0.574997)
+ (CHARDP R 0.095136)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR O 137)
+ )
+ )
+(CHARACTER O 140
+ (CHARWD R 0.305557)
+ (CHARHT R 0.69445)
+ (COMMENT
+ (LIG O 140 O 134)
+ )
+ (MAP
+ (SETCHAR O 140)
+ )
+ )
+(CHARACTER C a
+ (CHARWD R 0.525002)
+ (CHARHT R 0.458339)
+ (COMMENT
+ (KRN C r R -0.030556)
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ (MAP
+ (SETCHAR C a)
+ )
+ )
+(CHARACTER C b
+ (CHARWD R 0.561111)
+ (CHARHT R 0.69445)
+ (COMMENT
+ (KRN C e R 0.030556)
+ (KRN C o R 0.030556)
+ (KRN C x R -0.030556)
+ (KRN C d R 0.030556)
+ (KRN C c R 0.030556)
+ (KRN C q R 0.030556)
+ (KRN C r R -0.030556)
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ (MAP
+ (SETCHAR C b)
+ )
+ )
+(CHARACTER C c
+ (CHARWD R 0.488892)
+ (CHARHT R 0.458339)
+ (MAP
+ (SETCHAR C c)
+ )
+ )
+(CHARACTER C d
+ (CHARWD R 0.561111)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C d)
+ )
+ )
+(CHARACTER C e
+ (CHARWD R 0.511116)
+ (CHARHT R 0.458339)
+ (MAP
+ (SETCHAR C e)
+ )
+ )
+(CHARACTER C f
+ (CHARWD R 0.336113)
+ (CHARHT R 0.69445)
+ (CHARIC R 0.07639)
+ (COMMENT
+ (LIG C i O 14)
+ (LIG C f O 13)
+ (LIG C l O 15)
+ (KRN O 47 R 0.07639)
+ (KRN O 77 R 0.07639)
+ (KRN O 41 R 0.07639)
+ (KRN O 51 R 0.07639)
+ (KRN O 135 R 0.07639)
+ )
+ (MAP
+ (SETCHAR C f)
+ )
+ )
+(CHARACTER C g
+ (CHARWD R 0.550003)
+ (CHARHT R 0.458339)
+ (CHARDP R 0.194446)
+ (CHARIC R 0.015279)
+ (COMMENT
+ (KRN C j R 0.030556)
+ )
+ (MAP
+ (SETCHAR C g)
+ )
+ )
+(CHARACTER C h
+ (CHARWD R 0.561111)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C h)
+ )
+ )
+(CHARACTER C i
+ (CHARWD R 0.255554)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C i)
+ )
+ )
+(CHARACTER C j
+ (CHARWD R 0.28611)
+ (CHARHT R 0.69445)
+ (CHARDP R 0.194446)
+ (MAP
+ (SETCHAR C j)
+ )
+ )
+(CHARACTER C k
+ (CHARWD R 0.530556)
+ (CHARHT R 0.69445)
+ (COMMENT
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C o R -0.030556)
+ (KRN C c R -0.030556)
+ )
+ (MAP
+ (SETCHAR C k)
+ )
+ )
+(CHARACTER C l
+ (CHARWD R 0.255554)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR C l)
+ )
+ )
+(CHARACTER C m
+ (CHARWD R 0.866669)
+ (CHARHT R 0.458339)
+ (MAP
+ (SETCHAR C m)
+ )
+ )
+(CHARACTER C n
+ (CHARWD R 0.561111)
+ (CHARHT R 0.458339)
+ (MAP
+ (SETCHAR C n)
+ )
+ )
+(CHARACTER C o
+ (CHARWD R 0.550003)
+ (CHARHT R 0.458339)
+ (COMMENT
+ (KRN C e R 0.030556)
+ (KRN C o R 0.030556)
+ (KRN C x R -0.030556)
+ (KRN C d R 0.030556)
+ (KRN C c R 0.030556)
+ (KRN C q R 0.030556)
+ (KRN C r R -0.030556)
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ (MAP
+ (SETCHAR C o)
+ )
+ )
+(CHARACTER C p
+ (CHARWD R 0.561111)
+ (CHARHT R 0.458339)
+ (CHARDP R 0.194446)
+ (COMMENT
+ (KRN C e R 0.030556)
+ (KRN C o R 0.030556)
+ (KRN C x R -0.030556)
+ (KRN C d R 0.030556)
+ (KRN C c R 0.030556)
+ (KRN C q R 0.030556)
+ (KRN C r R -0.030556)
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ (MAP
+ (SETCHAR C p)
+ )
+ )
+(CHARACTER C q
+ (CHARWD R 0.561111)
+ (CHARHT R 0.458339)
+ (CHARDP R 0.194446)
+ (MAP
+ (SETCHAR C q)
+ )
+ )
+(CHARACTER C r
+ (CHARWD R 0.372223)
+ (CHARHT R 0.458339)
+ (CHARIC R 0.015279)
+ (MAP
+ (SETCHAR C r)
+ )
+ )
+(CHARACTER C s
+ (CHARWD R 0.421669)
+ (CHARHT R 0.458339)
+ (MAP
+ (SETCHAR C s)
+ )
+ )
+(CHARACTER C t
+ (CHARWD R 0.40417)
+ (CHARHT R 0.589294)
+ (COMMENT
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ (MAP
+ (SETCHAR C t)
+ )
+ )
+(CHARACTER C u
+ (CHARWD R 0.561111)
+ (CHARHT R 0.458339)
+ (COMMENT
+ (KRN C w R -0.030556)
+ )
+ (MAP
+ (SETCHAR C u)
+ )
+ )
+(CHARACTER C v
+ (CHARWD R 0.5)
+ (CHARHT R 0.458339)
+ (CHARIC R 0.015279)
+ (MAP
+ (SETCHAR C v)
+ )
+ )
+(CHARACTER C w
+ (CHARWD R 0.744446)
+ (CHARHT R 0.458339)
+ (CHARIC R 0.015279)
+ (COMMENT
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C o R -0.030556)
+ (KRN C c R -0.030556)
+ )
+ (MAP
+ (SETCHAR C w)
+ )
+ )
+(CHARACTER C x
+ (CHARWD R 0.5)
+ (CHARHT R 0.458339)
+ (MAP
+ (SETCHAR C x)
+ )
+ )
+(CHARACTER C y
+ (CHARWD R 0.5)
+ (CHARHT R 0.458339)
+ (CHARDP R 0.194446)
+ (CHARIC R 0.015279)
+ (COMMENT
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN O 56 R -0.091667)
+ (KRN O 54 R -0.091667)
+ )
+ (MAP
+ (SETCHAR C y)
+ )
+ )
+(CHARACTER C z
+ (CHARWD R 0.47639)
+ (CHARHT R 0.458339)
+ (MAP
+ (SETCHAR C z)
+ )
+ )
+(CHARACTER O 173
+ (CHARWD R 0.550003)
+ (CHARHT R 0.458339)
+ (CHARIC R 0.030556)
+ (COMMENT
+ (LIG O 55 O 174)
+ )
+ (MAP
+ (SETCHAR O 173)
+ )
+ )
+(CHARACTER O 174
+ (CHARWD R 1.100006)
+ (CHARHT R 0.458339)
+ (CHARIC R 0.030556)
+ (MAP
+ (SETCHAR O 174)
+ )
+ )
+(CHARACTER O 175
+ (CHARWD R 0.550003)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 175)
+ )
+ )
+(CHARACTER O 176
+ (CHARWD R 0.550003)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 176)
+ )
+ )
+(CHARACTER O 177
+ (CHARWD R 0.550003)
+ (CHARHT R 0.69445)
+ (MAP
+ (SETCHAR O 177)
+ )
+ )
diff --git a/support/splint/tex/fonts/idssbx7.tfm b/support/splint/tex/fonts/idssbx7.tfm
new file mode 100644
index 0000000000..25bb930eff
--- /dev/null
+++ b/support/splint/tex/fonts/idssbx7.tfm
Binary files differ
diff --git a/support/splint/tex/fonts/idssbx7.vf b/support/splint/tex/fonts/idssbx7.vf
new file mode 100644
index 0000000000..4c920e9b26
--- /dev/null
+++ b/support/splint/tex/fonts/idssbx7.vf
Binary files differ
diff --git a/support/splint/tex/fonts/idssbx7.vpl b/support/splint/tex/fonts/idssbx7.vpl
new file mode 100644
index 0000000000..db652d489d
--- /dev/null
+++ b/support/splint/tex/fonts/idssbx7.vpl
@@ -0,0 +1,913 @@
+(MAPFONT D 0 (FONTNAME cmssbx7))
+(MAPFONT D 1 (FONTNAME cmtt7))
+(DESIGNSIZE R 7.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.366669)
+ (STRETCH R 0.183334)
+ (SHRINK R 0.122223)
+ (XHEIGHT R 0.45833)
+ (QUAD R 1.100006)
+ (EXTRASPACE R 0.122223)
+ )
+(LIGTABLE
+ (LABEL O 40)
+ (KRN C l R -0.255556)
+ (KRN C L R -0.293058)
+ (STOP)
+ (LABEL C f)
+ (LIG C i O 14)
+ (LIG C f O 13)
+ (LIG C l O 15)
+ (KRN O 47 R 0.07639)
+ (KRN O 77 R 0.07639)
+ (KRN O 41 R 0.07639)
+ (KRN O 51 R 0.07639)
+ (KRN O 135 R 0.07639)
+ (STOP)
+ (LABEL O 13)
+ (LIG C i O 16)
+ (LIG C l O 17)
+ (KRN O 47 R 0.07639)
+ (KRN O 77 R 0.07639)
+ (KRN O 41 R 0.07639)
+ (KRN O 51 R 0.07639)
+ (KRN O 135 R 0.07639)
+ (STOP)
+ (LABEL O 140)
+ (LIG O 140 O 134)
+ (STOP)
+ (LABEL O 47)
+ (LIG O 47 O 42)
+ (KRN O 77 R 0.122223)
+ (KRN O 41 R 0.122223)
+ (STOP)
+ (LABEL O 55)
+ (LIG O 55 O 173)
+ (STOP)
+ (LABEL O 173)
+ (LIG O 55 O 174)
+ (STOP)
+ (LABEL O 41)
+ (LIG O 140 O 74)
+ (STOP)
+ (LABEL O 77)
+ (LIG O 140 O 76)
+ (STOP)
+ (LABEL C k)
+ (LABEL C w)
+ (KRN C e R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN C o R -0.030557)
+ (KRN C c R -0.030557)
+ (STOP)
+ (LABEL C P)
+ (KRN C A R -0.091668)
+ (LABEL C y)
+ (KRN C o R -0.030557)
+ (KRN C e R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN O 56 R -0.091668)
+ (KRN O 54 R -0.091668)
+ (STOP)
+ (LABEL C F)
+ (LABEL C V)
+ (LABEL C W)
+ (KRN C o R -0.030557)
+ (KRN C e R -0.030557)
+ (KRN C u R -0.030557)
+ (KRN C r R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN C A R -0.091668)
+ (LABEL C K)
+ (LABEL C X)
+ (KRN C O R -0.030557)
+ (KRN C C R -0.030557)
+ (KRN C G R -0.030557)
+ (KRN C Q R -0.030557)
+ (STOP)
+ (LABEL C T)
+ (KRN C y R -0.091668)
+ (LABEL C Y)
+ (KRN C e R -0.091668)
+ (KRN C o R -0.091668)
+ (KRN C r R -0.091668)
+ (KRN C a R -0.091668)
+ (KRN C A R -0.091668)
+ (KRN C u R -0.091668)
+ (STOP)
+ (LABEL C D)
+ (LABEL C O)
+ (KRN C X R -0.030557)
+ (KRN C W R -0.030557)
+ (KRN C A R -0.030557)
+ (KRN C V R -0.030557)
+ (KRN C Y R -0.030557)
+ (STOP)
+ (LABEL C b)
+ (LABEL C o)
+ (LABEL C p)
+ (KRN C e R 0.030557)
+ (KRN C o R 0.030557)
+ (KRN C x R -0.030557)
+ (KRN C d R 0.030557)
+ (KRN C c R 0.030557)
+ (KRN C q R 0.030557)
+ (LABEL C a)
+ (KRN C r R -0.030557)
+ (LABEL C t)
+ (KRN C y R -0.030557)
+ (LABEL C u)
+ (KRN C w R -0.030557)
+ (STOP)
+ (LABEL C A)
+ (KRN C t R -0.030557)
+ (KRN C C R -0.030557)
+ (KRN C O R -0.030557)
+ (KRN C G R -0.030557)
+ (KRN C U R -0.030557)
+ (KRN C Q R -0.030557)
+ (LABEL C L)
+ (KRN C T R -0.091668)
+ (KRN C Y R -0.091668)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ (STOP)
+ (LABEL C g)
+ (KRN C j R 0.030557)
+ (STOP)
+ (LABEL C I)
+ (KRN C I R 0.030557)
+ (STOP)
+ )
+(CHARACTER O 0
+ (CHARWD R 0.58056)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 1
+ (CHARWD R 0.916672)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 2
+ (CHARWD R 0.85556)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 3
+ (CHARWD R 0.672228)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 4
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 5
+ (CHARWD R 0.794451)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 6
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 7
+ (CHARWD R 0.85556)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 10
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 11
+ (CHARWD R 0.85556)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 12
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 13
+ (CHARWD R 0.641671)
+ (CHARHT R 0.694441)
+ (CHARIC R 0.07639)
+ (COMMENT
+ (LIG C i O 16)
+ (LIG C l O 17)
+ (KRN O 47 R 0.07639)
+ (KRN O 77 R 0.07639)
+ (KRN O 41 R 0.07639)
+ (KRN O 51 R 0.07639)
+ (KRN O 135 R 0.07639)
+ )
+ )
+(CHARACTER O 14
+ (CHARWD R 0.586114)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 15
+ (CHARWD R 0.586114)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 16
+ (CHARWD R 0.891671)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 17
+ (CHARWD R 0.891671)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 20
+ (CHARWD R 0.255556)
+ (CHARHT R 0.45833)
+ )
+(CHARACTER O 21
+ (CHARWD R 0.286113)
+ (CHARHT R 0.45833)
+ (CHARDP R 0.194443)
+ )
+(CHARACTER O 22
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 23
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 24
+ (CHARWD R 0.550003)
+ (CHARHT R 0.635413)
+ )
+(CHARACTER O 25
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 26
+ (CHARWD R 0.550003)
+ (CHARHT R 0.6377735)
+ )
+(CHARACTER O 27
+ (CHARWD R 0.733339)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 30
+ (CHARWD R 0.488892)
+ (CHARDP R 0.170137)
+ )
+(CHARACTER O 31
+ (CHARWD R 0.565279)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 32
+ (CHARWD R 0.794449)
+ (CHARHT R 0.45833)
+ )
+(CHARACTER O 33
+ (CHARWD R 0.85556)
+ (CHARHT R 0.45833)
+ )
+(CHARACTER O 34
+ (CHARWD R 0.550003)
+ (CHARHT R 0.5555525)
+ (CHARDP R 0.097222)
+ )
+(CHARACTER O 35
+ (CHARWD R 0.947228)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 36
+ (CHARWD R 1.069451)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 37
+ (CHARWD R 0.85556)
+ (CHARHT R 0.743051)
+ (CHARDP R 0.04861)
+ )
+(CHARACTER O 40
+ (CHARWD R 0.255556)
+ (CHARHT R 0.45833)
+ (COMMENT
+ (KRN C l R -0.255556)
+ (KRN C L R -0.293058)
+ )
+ )
+(CHARACTER O 41
+ (CHARWD R 0.366669)
+ (CHARHT R 0.694441)
+ (COMMENT
+ (LIG O 140 O 74)
+ )
+ )
+(CHARACTER O 42
+ (CHARWD R 0.558334)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 43
+ (CHARWD R 0.916672)
+ (CHARHT R 0.694441)
+ (CHARDP R 0.194441)
+ )
+(CHARACTER O 44
+ (CHARWD R 0.550003)
+ (CHARHT R 0.749998)
+ (CHARDP R 0.055557)
+ )
+(CHARACTER O 45
+ (CHARWD R 1.029116)
+ (CHARHT R 0.749998)
+ (CHARDP R 0.055557)
+ )
+(CHARACTER O 46
+ (CHARWD R 0.83056)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 47
+ (CHARWD R 0.305557)
+ (CHARHT R 0.694441)
+ (COMMENT
+ (LIG O 47 O 42)
+ (KRN O 77 R 0.122223)
+ (KRN O 41 R 0.122223)
+ )
+ )
+(CHARACTER O 50
+ (CHARWD R 0.42778)
+ (CHARHT R 0.749998)
+ (CHARDP R 0.249995)
+ )
+(CHARACTER O 51
+ (CHARWD R 0.42778)
+ (CHARHT R 0.749998)
+ (CHARDP R 0.249995)
+ )
+(CHARACTER O 52
+ (CHARWD R 0.550003)
+ (CHARHT R 0.749998)
+ )
+(CHARACTER O 53
+ (CHARWD R 0.85556)
+ (CHARHT R 0.616669)
+ (CHARDP R 0.116669)
+ )
+(CHARACTER O 54
+ (CHARWD R 0.305557)
+ (CHARHT R 0.130554)
+ (CHARDP R 0.105556)
+ )
+(CHARACTER O 55
+ (CHARWD R 0.366669)
+ (CHARHT R 0.45833)
+ (COMMENT
+ (LIG O 55 O 173)
+ )
+ )
+(CHARACTER O 56
+ (CHARWD R 0.305557)
+ (CHARHT R 0.130554)
+ )
+(CHARACTER O 57
+ (CHARWD R 0.550003)
+ (CHARHT R 0.749998)
+ (CHARDP R 0.249995)
+ )
+(CHARACTER C 0
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C 1
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C 2
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C 3
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C 4
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C 5
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C 6
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C 7
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C 8
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C 9
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 72
+ (CHARWD R 0.305557)
+ (CHARHT R 0.45833)
+ )
+(CHARACTER O 73
+ (CHARWD R 0.305557)
+ (CHARHT R 0.45833)
+ (CHARDP R 0.105556)
+ )
+(CHARACTER O 74
+ (CHARWD R 0.366669)
+ (CHARHT R 0.499998)
+ (CHARDP R 0.194443)
+ )
+(CHARACTER O 75
+ (CHARWD R 0.85556)
+ (CHARHT R 0.40625)
+ (CHARDP R -0.09375)
+ )
+(CHARACTER O 76
+ (CHARWD R 0.519448)
+ (CHARHT R 0.499998)
+ (CHARDP R 0.194443)
+ )
+(CHARACTER O 77
+ (CHARWD R 0.519448)
+ (CHARHT R 0.694441)
+ (COMMENT
+ (LIG O 140 O 76)
+ )
+ )
+(CHARACTER O 100
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C A
+ (CHARWD R 0.733339)
+ (CHARHT R 0.694441)
+ (COMMENT
+ (KRN C t R -0.030557)
+ (KRN C C R -0.030557)
+ (KRN C O R -0.030557)
+ (KRN C G R -0.030557)
+ (KRN C U R -0.030557)
+ (KRN C Q R -0.030557)
+ (KRN C T R -0.091668)
+ (KRN C Y R -0.091668)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ )
+ )
+(CHARACTER C B
+ (CHARWD R 0.733339)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C C
+ (CHARWD R 0.702783)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C D
+ (CHARWD R 0.794451)
+ (CHARHT R 0.694441)
+ (COMMENT
+ (KRN C X R -0.030557)
+ (KRN C W R -0.030557)
+ (KRN C A R -0.030557)
+ (KRN C V R -0.030557)
+ (KRN C Y R -0.030557)
+ )
+ )
+(CHARACTER C E
+ (CHARWD R 0.641671)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C F
+ (CHARWD R 0.611116)
+ (CHARHT R 0.694441)
+ (COMMENT
+ (KRN C o R -0.030557)
+ (KRN C e R -0.030557)
+ (KRN C u R -0.030557)
+ (KRN C r R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN C A R -0.091668)
+ (KRN C O R -0.030557)
+ (KRN C C R -0.030557)
+ (KRN C G R -0.030557)
+ (KRN C Q R -0.030557)
+ )
+ )
+(CHARACTER C G
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C H
+ (CHARWD R 0.794451)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C I
+ (CHARWD R 0.330558)
+ (CHARHT R 0.694441)
+ (COMMENT
+ (KRN C I R 0.030557)
+ )
+ )
+(CHARACTER C J
+ (CHARWD R 0.519448)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C K
+ (CHARWD R 0.763896)
+ (CHARHT R 0.694441)
+ (COMMENT
+ (KRN C O R -0.030557)
+ (KRN C C R -0.030557)
+ (KRN C G R -0.030557)
+ (KRN C Q R -0.030557)
+ )
+ )
+(CHARACTER C L
+ (CHARWD R 0.58056)
+ (CHARHT R 0.694441)
+ (COMMENT
+ (KRN C T R -0.091668)
+ (KRN C Y R -0.091668)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ )
+ )
+(CHARACTER C M
+ (CHARWD R 0.977785)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C N
+ (CHARWD R 0.794451)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C O
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694441)
+ (COMMENT
+ (KRN C X R -0.030557)
+ (KRN C W R -0.030557)
+ (KRN C A R -0.030557)
+ (KRN C V R -0.030557)
+ (KRN C Y R -0.030557)
+ )
+ )
+(CHARACTER C P
+ (CHARWD R 0.702783)
+ (CHARHT R 0.694441)
+ (COMMENT
+ (KRN C A R -0.091668)
+ (KRN C o R -0.030557)
+ (KRN C e R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN O 56 R -0.091668)
+ (KRN O 54 R -0.091668)
+ )
+ )
+(CHARACTER C Q
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694441)
+ (CHARDP R 0.105556)
+ )
+(CHARACTER C R
+ (CHARWD R 0.702783)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C S
+ (CHARWD R 0.6111145)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C T
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694441)
+ (COMMENT
+ (KRN C y R -0.091668)
+ (KRN C e R -0.091668)
+ (KRN C o R -0.091668)
+ (KRN C r R -0.091668)
+ (KRN C a R -0.091668)
+ (KRN C A R -0.091668)
+ (KRN C u R -0.091668)
+ )
+ )
+(CHARACTER C U
+ (CHARWD R 0.763896)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C V
+ (CHARWD R 0.733339)
+ (CHARHT R 0.694441)
+ (CHARIC R 0.015279)
+ (COMMENT
+ (KRN C o R -0.030557)
+ (KRN C e R -0.030557)
+ (KRN C u R -0.030557)
+ (KRN C r R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN C A R -0.091668)
+ (KRN C O R -0.030557)
+ (KRN C C R -0.030557)
+ (KRN C G R -0.030557)
+ (KRN C Q R -0.030557)
+ )
+ )
+(CHARACTER C W
+ (CHARWD R 1.038897)
+ (CHARHT R 0.694441)
+ (CHARIC R 0.015279)
+ (COMMENT
+ (KRN C o R -0.030557)
+ (KRN C e R -0.030557)
+ (KRN C u R -0.030557)
+ (KRN C r R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN C A R -0.091668)
+ (KRN C O R -0.030557)
+ (KRN C C R -0.030557)
+ (KRN C G R -0.030557)
+ (KRN C Q R -0.030557)
+ )
+ )
+(CHARACTER C X
+ (CHARWD R 0.733339)
+ (CHARHT R 0.694441)
+ (COMMENT
+ (KRN C O R -0.030557)
+ (KRN C C R -0.030557)
+ (KRN C G R -0.030557)
+ (KRN C Q R -0.030557)
+ )
+ )
+(CHARACTER C Y
+ (CHARWD R 0.733339)
+ (CHARHT R 0.694441)
+ (CHARIC R 0.027501)
+ (COMMENT
+ (KRN C e R -0.091668)
+ (KRN C o R -0.091668)
+ (KRN C r R -0.091668)
+ (KRN C a R -0.091668)
+ (KRN C A R -0.091668)
+ (KRN C u R -0.091668)
+ )
+ )
+(CHARACTER C Z
+ (CHARWD R 0.672226)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 133
+ (CHARWD R 0.343059)
+ (CHARHT R 0.749998)
+ (CHARDP R 0.249995)
+ )
+(CHARACTER O 134
+ (CHARWD R 0.558334)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 135
+ (CHARWD R 0.343059)
+ (CHARHT R 0.749998)
+ (CHARDP R 0.249995)
+ )
+(CHARACTER O 136
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 137
+ (CHARWD R 0.5464325)
+ (CHARDP R 0.098109)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR O 0137)
+ )
+ )
+(CHARACTER O 140
+ (CHARWD R 0.305557)
+ (CHARHT R 0.694441)
+ (COMMENT
+ (LIG O 140 O 134)
+ )
+ )
+(CHARACTER C a
+ (CHARWD R 0.5250025)
+ (CHARHT R 0.45833)
+ (COMMENT
+ (KRN C r R -0.030557)
+ (KRN C y R -0.030557)
+ (KRN C w R -0.030557)
+ )
+ )
+(CHARACTER C b
+ (CHARWD R 0.561113)
+ (CHARHT R 0.694441)
+ (COMMENT
+ (KRN C e R 0.030557)
+ (KRN C o R 0.030557)
+ (KRN C x R -0.030557)
+ (KRN C d R 0.030557)
+ (KRN C c R 0.030557)
+ (KRN C q R 0.030557)
+ (KRN C r R -0.030557)
+ (KRN C y R -0.030557)
+ (KRN C w R -0.030557)
+ )
+ )
+(CHARACTER C c
+ (CHARWD R 0.488892)
+ (CHARHT R 0.45833)
+ )
+(CHARACTER C d
+ (CHARWD R 0.561113)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C e
+ (CHARWD R 0.511115)
+ (CHARHT R 0.45833)
+ )
+(CHARACTER C f
+ (CHARWD R 0.336114)
+ (CHARHT R 0.694441)
+ (CHARIC R 0.07639)
+ (COMMENT
+ (LIG C i O 14)
+ (LIG C f O 13)
+ (LIG C l O 15)
+ (KRN O 47 R 0.07639)
+ (KRN O 77 R 0.07639)
+ (KRN O 41 R 0.07639)
+ (KRN O 51 R 0.07639)
+ (KRN O 135 R 0.07639)
+ )
+ )
+(CHARACTER C g
+ (CHARWD R 0.550003)
+ (CHARHT R 0.45833)
+ (CHARDP R 0.194443)
+ (CHARIC R 0.015279)
+ (COMMENT
+ (KRN C j R 0.030557)
+ )
+ )
+(CHARACTER C h
+ (CHARWD R 0.561113)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C i
+ (CHARWD R 0.255556)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C j
+ (CHARWD R 0.286113)
+ (CHARHT R 0.694441)
+ (CHARDP R 0.194443)
+ )
+(CHARACTER C k
+ (CHARWD R 0.530559)
+ (CHARHT R 0.694441)
+ (COMMENT
+ (KRN C e R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN C o R -0.030557)
+ (KRN C c R -0.030557)
+ )
+ )
+(CHARACTER C l
+ (CHARWD R 0.255556)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER C m
+ (CHARWD R 0.866671)
+ (CHARHT R 0.45833)
+ )
+(CHARACTER C n
+ (CHARWD R 0.561113)
+ (CHARHT R 0.45833)
+ )
+(CHARACTER C o
+ (CHARWD R 0.550003)
+ (CHARHT R 0.45833)
+ (COMMENT
+ (KRN C e R 0.030557)
+ (KRN C o R 0.030557)
+ (KRN C x R -0.030557)
+ (KRN C d R 0.030557)
+ (KRN C c R 0.030557)
+ (KRN C q R 0.030557)
+ (KRN C r R -0.030557)
+ (KRN C y R -0.030557)
+ (KRN C w R -0.030557)
+ )
+ )
+(CHARACTER C p
+ (CHARWD R 0.561113)
+ (CHARHT R 0.45833)
+ (CHARDP R 0.194443)
+ (COMMENT
+ (KRN C e R 0.030557)
+ (KRN C o R 0.030557)
+ (KRN C x R -0.030557)
+ (KRN C d R 0.030557)
+ (KRN C c R 0.030557)
+ (KRN C q R 0.030557)
+ (KRN C r R -0.030557)
+ (KRN C y R -0.030557)
+ (KRN C w R -0.030557)
+ )
+ )
+(CHARACTER C q
+ (CHARWD R 0.561113)
+ (CHARHT R 0.45833)
+ (CHARDP R 0.194443)
+ )
+(CHARACTER C r
+ (CHARWD R 0.372225)
+ (CHARHT R 0.45833)
+ (CHARIC R 0.015279)
+ )
+(CHARACTER C s
+ (CHARWD R 0.42167)
+ (CHARHT R 0.45833)
+ )
+(CHARACTER C t
+ (CHARWD R 0.404168)
+ (CHARHT R 0.589286)
+ (COMMENT
+ (KRN C y R -0.030557)
+ (KRN C w R -0.030557)
+ )
+ )
+(CHARACTER C u
+ (CHARWD R 0.561113)
+ (CHARHT R 0.45833)
+ (COMMENT
+ (KRN C w R -0.030557)
+ )
+ )
+(CHARACTER C v
+ (CHARWD R 0.500002)
+ (CHARHT R 0.45833)
+ (CHARIC R 0.015279)
+ )
+(CHARACTER C w
+ (CHARWD R 0.744448)
+ (CHARHT R 0.45833)
+ (CHARIC R 0.015279)
+ (COMMENT
+ (KRN C e R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN C o R -0.030557)
+ (KRN C c R -0.030557)
+ )
+ )
+(CHARACTER C x
+ (CHARWD R 0.500002)
+ (CHARHT R 0.45833)
+ )
+(CHARACTER C y
+ (CHARWD R 0.500002)
+ (CHARHT R 0.45833)
+ (CHARDP R 0.194443)
+ (CHARIC R 0.015279)
+ (COMMENT
+ (KRN C o R -0.030557)
+ (KRN C e R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN O 56 R -0.091668)
+ (KRN O 54 R -0.091668)
+ )
+ )
+(CHARACTER C z
+ (CHARWD R 0.47639)
+ (CHARHT R 0.45833)
+ )
+(CHARACTER O 173
+ (CHARWD R 0.550003)
+ (CHARHT R 0.45833)
+ (CHARIC R 0.030557)
+ (COMMENT
+ (LIG O 55 O 174)
+ )
+ )
+(CHARACTER O 174
+ (CHARWD R 1.100006)
+ (CHARHT R 0.45833)
+ (CHARIC R 0.030557)
+ )
+(CHARACTER O 175
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 176
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694441)
+ )
+(CHARACTER O 177
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694441)
+ )
diff --git a/support/splint/tex/fonts/idssbx8.tfm b/support/splint/tex/fonts/idssbx8.tfm
new file mode 100644
index 0000000000..4cea679434
--- /dev/null
+++ b/support/splint/tex/fonts/idssbx8.tfm
Binary files differ
diff --git a/support/splint/tex/fonts/idssbx8.vf b/support/splint/tex/fonts/idssbx8.vf
new file mode 100644
index 0000000000..b7b988e26d
--- /dev/null
+++ b/support/splint/tex/fonts/idssbx8.vf
Binary files differ
diff --git a/support/splint/tex/fonts/idssbx8.vpl b/support/splint/tex/fonts/idssbx8.vpl
new file mode 100644
index 0000000000..57db1d6090
--- /dev/null
+++ b/support/splint/tex/fonts/idssbx8.vpl
@@ -0,0 +1,1310 @@
+(VTITLE )
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 8.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM O 4723356700)
+(SEVENBITSAFEFLAG TRUE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.366669)
+ (STRETCH R 0.183334)
+ (SHRINK R 0.122223)
+ (XHEIGHT R 0.458336)
+ (QUAD R 1.100006)
+ (EXTRASPACE R 0.122223)
+ )
+(MAPFONT D 0
+ (FONTNAME cmssbx8)
+ (FONTCHECKSUM O 1731613541)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 8.0)
+ )
+(MAPFONT D 1
+ (FONTNAME cmtt8)
+ (FONTCHECKSUM O 33720745163)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 8.0)
+ )
+(LIGTABLE
+ (LABEL O 40)
+ (KRN C l R -0.255558)
+ (KRN C L R -0.293058)
+ (STOP)
+ (LABEL C f)
+ (LIG C i O 14)
+ (LIG C f O 13)
+ (LIG C l O 15)
+ (KRN O 47 R 0.076389)
+ (KRN O 77 R 0.076389)
+ (KRN O 41 R 0.076389)
+ (KRN O 51 R 0.076389)
+ (KRN O 135 R 0.076389)
+ (STOP)
+ (LABEL O 13)
+ (LIG C i O 16)
+ (LIG C l O 17)
+ (KRN O 47 R 0.076389)
+ (KRN O 77 R 0.076389)
+ (KRN O 41 R 0.076389)
+ (KRN O 51 R 0.076389)
+ (KRN O 135 R 0.076389)
+ (STOP)
+ (LABEL O 140)
+ (LIG O 140 O 134)
+ (STOP)
+ (LABEL O 47)
+ (LIG O 47 O 42)
+ (KRN O 77 R 0.122223)
+ (KRN O 41 R 0.122223)
+ (STOP)
+ (LABEL O 55)
+ (LIG O 55 O 173)
+ (STOP)
+ (LABEL O 173)
+ (LIG O 55 O 174)
+ (STOP)
+ (LABEL O 41)
+ (LIG O 140 O 74)
+ (STOP)
+ (LABEL O 77)
+ (LIG O 140 O 76)
+ (STOP)
+ (LABEL C k)
+ (LABEL C w)
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C o R -0.030556)
+ (KRN C c R -0.030556)
+ (STOP)
+ (LABEL C P)
+ (KRN C A R -0.091667)
+ (LABEL C y)
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN O 56 R -0.091667)
+ (KRN O 54 R -0.091667)
+ (STOP)
+ (LABEL C F)
+ (LABEL C V)
+ (LABEL C W)
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C u R -0.030556)
+ (KRN C r R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C A R -0.091667)
+ (LABEL C K)
+ (LABEL C X)
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ (STOP)
+ (LABEL C T)
+ (KRN C y R -0.091667)
+ (LABEL C Y)
+ (KRN C e R -0.091667)
+ (KRN C o R -0.091667)
+ (KRN C r R -0.091667)
+ (KRN C a R -0.091667)
+ (KRN C A R -0.091667)
+ (KRN C u R -0.091667)
+ (STOP)
+ (LABEL C D)
+ (LABEL C O)
+ (KRN C X R -0.030556)
+ (KRN C W R -0.030556)
+ (KRN C A R -0.030556)
+ (KRN C V R -0.030556)
+ (KRN C Y R -0.030556)
+ (STOP)
+ (LABEL C b)
+ (LABEL C o)
+ (LABEL C p)
+ (KRN C e R 0.030556)
+ (KRN C o R 0.030556)
+ (KRN C x R -0.030556)
+ (KRN C d R 0.030556)
+ (KRN C c R 0.030556)
+ (KRN C q R 0.030556)
+ (LABEL C a)
+ (KRN C r R -0.030556)
+ (LABEL C t)
+ (KRN C y R -0.030556)
+ (LABEL C u)
+ (KRN C w R -0.030556)
+ (STOP)
+ (LABEL C A)
+ (KRN C t R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C O R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C U R -0.030556)
+ (KRN C Q R -0.030556)
+ (LABEL C L)
+ (KRN C T R -0.091667)
+ (KRN C Y R -0.091667)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ (STOP)
+ (LABEL C g)
+ (KRN C j R 0.030556)
+ (STOP)
+ (LABEL C I)
+ (KRN C I R 0.030556)
+ (STOP)
+ )
+(CHARACTER O 0
+ (CHARWD R 0.580559)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 0)
+ )
+ )
+(CHARACTER O 1
+ (CHARWD R 0.916672)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 1)
+ )
+ )
+(CHARACTER O 2
+ (CHARWD R 0.85556)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 2)
+ )
+ )
+(CHARACTER O 3
+ (CHARWD R 0.672226)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 3)
+ )
+ )
+(CHARACTER O 4
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 4)
+ )
+ )
+(CHARACTER O 5
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 5)
+ )
+ )
+(CHARACTER O 6
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 6)
+ )
+ )
+(CHARACTER O 7
+ (CHARWD R 0.85556)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 7)
+ )
+ )
+(CHARACTER O 10
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 10)
+ )
+ )
+(CHARACTER O 11
+ (CHARWD R 0.85556)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 11)
+ )
+ )
+(CHARACTER O 12
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 12)
+ )
+ )
+(CHARACTER O 13
+ (CHARWD R 0.64167)
+ (CHARHT R 0.694447)
+ (CHARIC R 0.076389)
+ (COMMENT
+ (LIG C i O 16)
+ (LIG C l O 17)
+ (KRN O 47 R 0.076389)
+ (KRN O 77 R 0.076389)
+ (KRN O 41 R 0.076389)
+ (KRN O 51 R 0.076389)
+ (KRN O 135 R 0.076389)
+ )
+ (MAP
+ (SETCHAR O 13)
+ )
+ )
+(CHARACTER O 14
+ (CHARWD R 0.586115)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 14)
+ )
+ )
+(CHARACTER O 15
+ (CHARWD R 0.586115)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 15)
+ )
+ )
+(CHARACTER O 16
+ (CHARWD R 0.891672)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 16)
+ )
+ )
+(CHARACTER O 17
+ (CHARWD R 0.891672)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 17)
+ )
+ )
+(CHARACTER O 20
+ (CHARWD R 0.255558)
+ (CHARHT R 0.458336)
+ (MAP
+ (SETCHAR O 20)
+ )
+ )
+(CHARACTER O 21
+ (CHARWD R 0.286114)
+ (CHARHT R 0.458336)
+ (CHARDP R 0.194445)
+ (MAP
+ (SETCHAR O 21)
+ )
+ )
+(CHARACTER O 22
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 22)
+ )
+ )
+(CHARACTER O 23
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 23)
+ )
+ )
+(CHARACTER O 24
+ (CHARWD R 0.550003)
+ (CHARHT R 0.63542)
+ (MAP
+ (SETCHAR O 24)
+ )
+ )
+(CHARACTER O 25
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 25)
+ )
+ )
+(CHARACTER O 26
+ (CHARWD R 0.550003)
+ (CHARHT R 0.637777)
+ (MAP
+ (SETCHAR O 26)
+ )
+ )
+(CHARACTER O 27
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 27)
+ )
+ )
+(CHARACTER O 30
+ (CHARWD R 0.488892)
+ (CHARDP R 0.170139)
+ (MAP
+ (SETCHAR O 30)
+ )
+ )
+(CHARACTER O 31
+ (CHARWD R 0.565281)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 31)
+ )
+ )
+(CHARACTER O 32
+ (CHARWD R 0.794449)
+ (CHARHT R 0.458336)
+ (MAP
+ (SETCHAR O 32)
+ )
+ )
+(CHARACTER O 33
+ (CHARWD R 0.85556)
+ (CHARHT R 0.458336)
+ (MAP
+ (SETCHAR O 33)
+ )
+ )
+(CHARACTER O 34
+ (CHARWD R 0.550003)
+ (CHARHT R 0.555559)
+ (CHARDP R 0.097223)
+ (MAP
+ (SETCHAR O 34)
+ )
+ )
+(CHARACTER O 35
+ (CHARWD R 0.9472275)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 35)
+ )
+ )
+(CHARACTER O 36
+ (CHARWD R 1.06945)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 36)
+ )
+ )
+(CHARACTER O 37
+ (CHARWD R 0.85556)
+ (CHARHT R 0.743057)
+ (CHARDP R 0.048611)
+ (MAP
+ (SETCHAR O 37)
+ )
+ )
+(CHARACTER O 40
+ (CHARWD R 0.255558)
+ (CHARHT R 0.458336)
+ (COMMENT
+ (KRN C l R -0.255558)
+ (KRN C L R -0.293058)
+ )
+ (MAP
+ (SETCHAR O 40)
+ )
+ )
+(CHARACTER O 41
+ (CHARWD R 0.366669)
+ (CHARHT R 0.694447)
+ (COMMENT
+ (LIG O 140 O 74)
+ )
+ (MAP
+ (SETCHAR O 41)
+ )
+ )
+(CHARACTER O 42
+ (CHARWD R 0.558336)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 42)
+ )
+ )
+(CHARACTER O 43
+ (CHARWD R 0.916672)
+ (CHARHT R 0.694447)
+ (CHARDP R 0.194443)
+ (MAP
+ (SETCHAR O 43)
+ )
+ )
+(CHARACTER O 44
+ (CHARWD R 0.550003)
+ (CHARHT R 0.750004)
+ (CHARDP R 0.055557)
+ (MAP
+ (SETCHAR O 44)
+ )
+ )
+(CHARACTER O 45
+ (CHARWD R 1.029121)
+ (CHARHT R 0.750004)
+ (CHARDP R 0.055557)
+ (MAP
+ (SETCHAR O 45)
+ )
+ )
+(CHARACTER O 46
+ (CHARWD R 0.830561)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 46)
+ )
+ )
+(CHARACTER O 47
+ (CHARWD R 0.305557)
+ (CHARHT R 0.694447)
+ (COMMENT
+ (LIG O 47 O 42)
+ (KRN O 77 R 0.122223)
+ (KRN O 41 R 0.122223)
+ )
+ (MAP
+ (SETCHAR O 47)
+ )
+ )
+(CHARACTER O 50
+ (CHARWD R 0.42778)
+ (CHARHT R 0.750004)
+ (CHARDP R 0.25)
+ (MAP
+ (SETCHAR O 50)
+ )
+ )
+(CHARACTER O 51
+ (CHARWD R 0.42778)
+ (CHARHT R 0.750004)
+ (CHARDP R 0.25)
+ (MAP
+ (SETCHAR O 51)
+ )
+ )
+(CHARACTER O 52
+ (CHARWD R 0.550003)
+ (CHARHT R 0.750004)
+ (MAP
+ (SETCHAR O 52)
+ )
+ )
+(CHARACTER O 53
+ (CHARWD R 0.85556)
+ (CHARHT R 0.616671)
+ (CHARDP R 0.116667)
+ (MAP
+ (SETCHAR O 53)
+ )
+ )
+(CHARACTER O 54
+ (CHARWD R 0.305557)
+ (CHARHT R 0.130556)
+ (CHARDP R 0.1055565)
+ (MAP
+ (SETCHAR O 54)
+ )
+ )
+(CHARACTER O 55
+ (CHARWD R 0.366669)
+ (CHARHT R 0.458336)
+ (COMMENT
+ (LIG O 55 O 173)
+ )
+ (MAP
+ (SETCHAR O 55)
+ )
+ )
+(CHARACTER O 56
+ (CHARWD R 0.305557)
+ (CHARHT R 0.130556)
+ (MAP
+ (SETCHAR O 56)
+ )
+ )
+(CHARACTER O 57
+ (CHARWD R 0.550003)
+ (CHARHT R 0.750004)
+ (CHARDP R 0.25)
+ (MAP
+ (SETCHAR O 57)
+ )
+ )
+(CHARACTER C 0
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C 0)
+ )
+ )
+(CHARACTER C 1
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C 1)
+ )
+ )
+(CHARACTER C 2
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C 2)
+ )
+ )
+(CHARACTER C 3
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C 3)
+ )
+ )
+(CHARACTER C 4
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C 4)
+ )
+ )
+(CHARACTER C 5
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C 5)
+ )
+ )
+(CHARACTER C 6
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C 6)
+ )
+ )
+(CHARACTER C 7
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C 7)
+ )
+ )
+(CHARACTER C 8
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C 8)
+ )
+ )
+(CHARACTER C 9
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C 9)
+ )
+ )
+(CHARACTER O 72
+ (CHARWD R 0.305557)
+ (CHARHT R 0.458336)
+ (MAP
+ (SETCHAR O 72)
+ )
+ )
+(CHARACTER O 73
+ (CHARWD R 0.305557)
+ (CHARHT R 0.458336)
+ (CHARDP R 0.1055565)
+ (MAP
+ (SETCHAR O 73)
+ )
+ )
+(CHARACTER O 74
+ (CHARWD R 0.366669)
+ (CHARHT R 0.500002)
+ (CHARDP R 0.194445)
+ (MAP
+ (SETCHAR O 74)
+ )
+ )
+(CHARACTER O 75
+ (CHARWD R 0.85556)
+ (CHARHT R 0.406254)
+ (CHARDP R -0.09375)
+ (MAP
+ (SETCHAR O 75)
+ )
+ )
+(CHARACTER O 76
+ (CHARWD R 0.519447)
+ (CHARHT R 0.500002)
+ (CHARDP R 0.194445)
+ (MAP
+ (SETCHAR O 76)
+ )
+ )
+(CHARACTER O 77
+ (CHARWD R 0.519447)
+ (CHARHT R 0.694447)
+ (COMMENT
+ (LIG O 140 O 76)
+ )
+ (MAP
+ (SETCHAR O 77)
+ )
+ )
+(CHARACTER O 100
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 100)
+ )
+ )
+(CHARACTER C A
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694447)
+ (COMMENT
+ (KRN C t R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C O R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C U R -0.030556)
+ (KRN C Q R -0.030556)
+ (KRN C T R -0.091667)
+ (KRN C Y R -0.091667)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ )
+ (MAP
+ (SETCHAR C A)
+ )
+ )
+(CHARACTER C B
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C B)
+ )
+ )
+(CHARACTER C C
+ (CHARWD R 0.702782)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C C)
+ )
+ )
+(CHARACTER C D
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694447)
+ (COMMENT
+ (KRN C X R -0.030556)
+ (KRN C W R -0.030556)
+ (KRN C A R -0.030556)
+ (KRN C V R -0.030556)
+ (KRN C Y R -0.030556)
+ )
+ (MAP
+ (SETCHAR C D)
+ )
+ )
+(CHARACTER C E
+ (CHARWD R 0.64167)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C E)
+ )
+ )
+(CHARACTER C F
+ (CHARWD R 0.6111145)
+ (CHARHT R 0.694447)
+ (COMMENT
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C u R -0.030556)
+ (KRN C r R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C A R -0.091667)
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ (MAP
+ (SETCHAR C F)
+ )
+ )
+(CHARACTER C G
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C G)
+ )
+ )
+(CHARACTER C H
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C H)
+ )
+ )
+(CHARACTER C I
+ (CHARWD R 0.330557)
+ (CHARHT R 0.694447)
+ (COMMENT
+ (KRN C I R 0.030556)
+ )
+ (MAP
+ (SETCHAR C I)
+ )
+ )
+(CHARACTER C J
+ (CHARWD R 0.519447)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C J)
+ )
+ )
+(CHARACTER C K
+ (CHARWD R 0.763893)
+ (CHARHT R 0.694447)
+ (COMMENT
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ (MAP
+ (SETCHAR C K)
+ )
+ )
+(CHARACTER C L
+ (CHARWD R 0.580559)
+ (CHARHT R 0.694447)
+ (COMMENT
+ (KRN C T R -0.091667)
+ (KRN C Y R -0.091667)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ )
+ (MAP
+ (SETCHAR C L)
+ )
+ )
+(CHARACTER C M
+ (CHARWD R 0.977783)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C M)
+ )
+ )
+(CHARACTER C N
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C N)
+ )
+ )
+(CHARACTER C O
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694447)
+ (COMMENT
+ (KRN C X R -0.030556)
+ (KRN C W R -0.030556)
+ (KRN C A R -0.030556)
+ (KRN C V R -0.030556)
+ (KRN C Y R -0.030556)
+ )
+ (MAP
+ (SETCHAR C O)
+ )
+ )
+(CHARACTER C P
+ (CHARWD R 0.702782)
+ (CHARHT R 0.694447)
+ (COMMENT
+ (KRN C A R -0.091667)
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN O 56 R -0.091667)
+ (KRN O 54 R -0.091667)
+ )
+ (MAP
+ (SETCHAR C P)
+ )
+ )
+(CHARACTER C Q
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694447)
+ (CHARDP R 0.1055565)
+ (MAP
+ (SETCHAR C Q)
+ )
+ )
+(CHARACTER C R
+ (CHARWD R 0.702782)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C R)
+ )
+ )
+(CHARACTER C S
+ (CHARWD R 0.6111145)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C S)
+ )
+ )
+(CHARACTER C T
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694447)
+ (COMMENT
+ (KRN C y R -0.091667)
+ (KRN C e R -0.091667)
+ (KRN C o R -0.091667)
+ (KRN C r R -0.091667)
+ (KRN C a R -0.091667)
+ (KRN C A R -0.091667)
+ (KRN C u R -0.091667)
+ )
+ (MAP
+ (SETCHAR C T)
+ )
+ )
+(CHARACTER C U
+ (CHARWD R 0.763893)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C U)
+ )
+ )
+(CHARACTER C V
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694447)
+ (CHARIC R 0.015278)
+ (COMMENT
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C u R -0.030556)
+ (KRN C r R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C A R -0.091667)
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ (MAP
+ (SETCHAR C V)
+ )
+ )
+(CHARACTER C W
+ (CHARWD R 1.038895)
+ (CHARHT R 0.694447)
+ (CHARIC R 0.015278)
+ (COMMENT
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C u R -0.030556)
+ (KRN C r R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C A R -0.091667)
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ (MAP
+ (SETCHAR C W)
+ )
+ )
+(CHARACTER C X
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694447)
+ (COMMENT
+ (KRN C O R -0.030556)
+ (KRN C C R -0.030556)
+ (KRN C G R -0.030556)
+ (KRN C Q R -0.030556)
+ )
+ (MAP
+ (SETCHAR C X)
+ )
+ )
+(CHARACTER C Y
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694447)
+ (CHARIC R 0.0275)
+ (COMMENT
+ (KRN C e R -0.091667)
+ (KRN C o R -0.091667)
+ (KRN C r R -0.091667)
+ (KRN C a R -0.091667)
+ (KRN C A R -0.091667)
+ (KRN C u R -0.091667)
+ )
+ (MAP
+ (SETCHAR C Y)
+ )
+ )
+(CHARACTER C Z
+ (CHARWD R 0.672226)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C Z)
+ )
+ )
+(CHARACTER O 133
+ (CHARWD R 0.343058)
+ (CHARHT R 0.750004)
+ (CHARDP R 0.25)
+ (MAP
+ (SETCHAR O 133)
+ )
+ )
+(CHARACTER O 134
+ (CHARWD R 0.558336)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 134)
+ )
+ )
+(CHARACTER O 135
+ (CHARWD R 0.343058)
+ (CHARHT R 0.750004)
+ (CHARDP R 0.25)
+ (MAP
+ (SETCHAR O 135)
+ )
+ )
+(CHARACTER O 136
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 136)
+ )
+ )
+(CHARACTER O 137
+ (CHARWD R 0.531258)
+ (CHARDP R 0.098606)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR O 137)
+ )
+ )
+(CHARACTER O 140
+ (CHARWD R 0.305557)
+ (CHARHT R 0.694447)
+ (COMMENT
+ (LIG O 140 O 134)
+ )
+ (MAP
+ (SETCHAR O 140)
+ )
+ )
+(CHARACTER C a
+ (CHARWD R 0.525003)
+ (CHARHT R 0.458336)
+ (COMMENT
+ (KRN C r R -0.030556)
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ (MAP
+ (SETCHAR C a)
+ )
+ )
+(CHARACTER C b
+ (CHARWD R 0.561115)
+ (CHARHT R 0.694447)
+ (COMMENT
+ (KRN C e R 0.030556)
+ (KRN C o R 0.030556)
+ (KRN C x R -0.030556)
+ (KRN C d R 0.030556)
+ (KRN C c R 0.030556)
+ (KRN C q R 0.030556)
+ (KRN C r R -0.030556)
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ (MAP
+ (SETCHAR C b)
+ )
+ )
+(CHARACTER C c
+ (CHARWD R 0.488892)
+ (CHARHT R 0.458336)
+ (MAP
+ (SETCHAR C c)
+ )
+ )
+(CHARACTER C d
+ (CHARWD R 0.561115)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C d)
+ )
+ )
+(CHARACTER C e
+ (CHARWD R 0.511114)
+ (CHARHT R 0.458336)
+ (MAP
+ (SETCHAR C e)
+ )
+ )
+(CHARACTER C f
+ (CHARWD R 0.336113)
+ (CHARHT R 0.694447)
+ (CHARIC R 0.076389)
+ (COMMENT
+ (LIG C i O 14)
+ (LIG C f O 13)
+ (LIG C l O 15)
+ (KRN O 47 R 0.076389)
+ (KRN O 77 R 0.076389)
+ (KRN O 41 R 0.076389)
+ (KRN O 51 R 0.076389)
+ (KRN O 135 R 0.076389)
+ )
+ (MAP
+ (SETCHAR C f)
+ )
+ )
+(CHARACTER C g
+ (CHARWD R 0.550003)
+ (CHARHT R 0.458336)
+ (CHARDP R 0.194445)
+ (CHARIC R 0.015278)
+ (COMMENT
+ (KRN C j R 0.030556)
+ )
+ (MAP
+ (SETCHAR C g)
+ )
+ )
+(CHARACTER C h
+ (CHARWD R 0.561115)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C h)
+ )
+ )
+(CHARACTER C i
+ (CHARWD R 0.255558)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C i)
+ )
+ )
+(CHARACTER C j
+ (CHARWD R 0.286114)
+ (CHARHT R 0.694447)
+ (CHARDP R 0.194445)
+ (MAP
+ (SETCHAR C j)
+ )
+ )
+(CHARACTER C k
+ (CHARWD R 0.53056)
+ (CHARHT R 0.694447)
+ (COMMENT
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C o R -0.030556)
+ (KRN C c R -0.030556)
+ )
+ (MAP
+ (SETCHAR C k)
+ )
+ )
+(CHARACTER C l
+ (CHARWD R 0.255558)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR C l)
+ )
+ )
+(CHARACTER C m
+ (CHARWD R 0.8666725)
+ (CHARHT R 0.458336)
+ (MAP
+ (SETCHAR C m)
+ )
+ )
+(CHARACTER C n
+ (CHARWD R 0.561115)
+ (CHARHT R 0.458336)
+ (MAP
+ (SETCHAR C n)
+ )
+ )
+(CHARACTER C o
+ (CHARWD R 0.550003)
+ (CHARHT R 0.458336)
+ (COMMENT
+ (KRN C e R 0.030556)
+ (KRN C o R 0.030556)
+ (KRN C x R -0.030556)
+ (KRN C d R 0.030556)
+ (KRN C c R 0.030556)
+ (KRN C q R 0.030556)
+ (KRN C r R -0.030556)
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ (MAP
+ (SETCHAR C o)
+ )
+ )
+(CHARACTER C p
+ (CHARWD R 0.561115)
+ (CHARHT R 0.458336)
+ (CHARDP R 0.194445)
+ (COMMENT
+ (KRN C e R 0.030556)
+ (KRN C o R 0.030556)
+ (KRN C x R -0.030556)
+ (KRN C d R 0.030556)
+ (KRN C c R 0.030556)
+ (KRN C q R 0.030556)
+ (KRN C r R -0.030556)
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ (MAP
+ (SETCHAR C p)
+ )
+ )
+(CHARACTER C q
+ (CHARWD R 0.561115)
+ (CHARHT R 0.458336)
+ (CHARDP R 0.194445)
+ (MAP
+ (SETCHAR C q)
+ )
+ )
+(CHARACTER C r
+ (CHARWD R 0.372225)
+ (CHARHT R 0.458336)
+ (CHARIC R 0.015278)
+ (MAP
+ (SETCHAR C r)
+ )
+ )
+(CHARACTER C s
+ (CHARWD R 0.421669)
+ (CHARHT R 0.458336)
+ (MAP
+ (SETCHAR C s)
+ )
+ )
+(CHARACTER C t
+ (CHARWD R 0.404169)
+ (CHARHT R 0.589293)
+ (COMMENT
+ (KRN C y R -0.030556)
+ (KRN C w R -0.030556)
+ )
+ (MAP
+ (SETCHAR C t)
+ )
+ )
+(CHARACTER C u
+ (CHARWD R 0.561115)
+ (CHARHT R 0.458336)
+ (COMMENT
+ (KRN C w R -0.030556)
+ )
+ (MAP
+ (SETCHAR C u)
+ )
+ )
+(CHARACTER C v
+ (CHARWD R 0.500004)
+ (CHARHT R 0.458336)
+ (CHARIC R 0.015278)
+ (MAP
+ (SETCHAR C v)
+ )
+ )
+(CHARACTER C w
+ (CHARWD R 0.74445)
+ (CHARHT R 0.458336)
+ (CHARIC R 0.015278)
+ (COMMENT
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN C o R -0.030556)
+ (KRN C c R -0.030556)
+ )
+ (MAP
+ (SETCHAR C w)
+ )
+ )
+(CHARACTER C x
+ (CHARWD R 0.500004)
+ (CHARHT R 0.458336)
+ (MAP
+ (SETCHAR C x)
+ )
+ )
+(CHARACTER C y
+ (CHARWD R 0.500004)
+ (CHARHT R 0.458336)
+ (CHARDP R 0.194445)
+ (CHARIC R 0.015278)
+ (COMMENT
+ (KRN C o R -0.030556)
+ (KRN C e R -0.030556)
+ (KRN C a R -0.030556)
+ (KRN O 56 R -0.091667)
+ (KRN O 54 R -0.091667)
+ )
+ (MAP
+ (SETCHAR C y)
+ )
+ )
+(CHARACTER C z
+ (CHARWD R 0.476391)
+ (CHARHT R 0.458336)
+ (MAP
+ (SETCHAR C z)
+ )
+ )
+(CHARACTER O 173
+ (CHARWD R 0.550003)
+ (CHARHT R 0.458336)
+ (CHARIC R 0.030556)
+ (COMMENT
+ (LIG O 55 O 174)
+ )
+ (MAP
+ (SETCHAR O 173)
+ )
+ )
+(CHARACTER O 174
+ (CHARWD R 1.100006)
+ (CHARHT R 0.458336)
+ (CHARIC R 0.030556)
+ (MAP
+ (SETCHAR O 174)
+ )
+ )
+(CHARACTER O 175
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 175)
+ )
+ )
+(CHARACTER O 176
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 176)
+ )
+ )
+(CHARACTER O 177
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694447)
+ (MAP
+ (SETCHAR O 177)
+ )
+ )
diff --git a/support/splint/tex/fonts/idssbx9.tfm b/support/splint/tex/fonts/idssbx9.tfm
new file mode 100644
index 0000000000..115613ee9e
--- /dev/null
+++ b/support/splint/tex/fonts/idssbx9.tfm
Binary files differ
diff --git a/support/splint/tex/fonts/idssbx9.vf b/support/splint/tex/fonts/idssbx9.vf
new file mode 100644
index 0000000000..6400d32378
--- /dev/null
+++ b/support/splint/tex/fonts/idssbx9.vf
Binary files differ
diff --git a/support/splint/tex/fonts/idssbx9.vpl b/support/splint/tex/fonts/idssbx9.vpl
new file mode 100644
index 0000000000..6aed8d41c9
--- /dev/null
+++ b/support/splint/tex/fonts/idssbx9.vpl
@@ -0,0 +1,1310 @@
+(VTITLE )
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 9.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM O 12247465251)
+(SEVENBITSAFEFLAG TRUE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.366669)
+ (STRETCH R 0.183334)
+ (SHRINK R 0.122223)
+ (XHEIGHT R 0.45833)
+ (QUAD R 1.100006)
+ (EXTRASPACE R 0.122223)
+ )
+(MAPFONT D 0
+ (FONTNAME cmssbx9)
+ (FONTCHECKSUM O 37341233162)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 9.0)
+ )
+(MAPFONT D 1
+ (FONTNAME cmtt9)
+ (FONTCHECKSUM O 33751047000)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 9.0)
+ )
+(LIGTABLE
+ (LABEL O 40)
+ (KRN C l R -0.255556)
+ (KRN C L R -0.293058)
+ (STOP)
+ (LABEL C f)
+ (LIG C i O 14)
+ (LIG C f O 13)
+ (LIG C l O 15)
+ (KRN O 47 R 0.076389)
+ (KRN O 77 R 0.076389)
+ (KRN O 41 R 0.076389)
+ (KRN O 51 R 0.076389)
+ (KRN O 135 R 0.076389)
+ (STOP)
+ (LABEL O 13)
+ (LIG C i O 16)
+ (LIG C l O 17)
+ (KRN O 47 R 0.076389)
+ (KRN O 77 R 0.076389)
+ (KRN O 41 R 0.076389)
+ (KRN O 51 R 0.076389)
+ (KRN O 135 R 0.076389)
+ (STOP)
+ (LABEL O 140)
+ (LIG O 140 O 134)
+ (STOP)
+ (LABEL O 47)
+ (LIG O 47 O 42)
+ (KRN O 77 R 0.122223)
+ (KRN O 41 R 0.122223)
+ (STOP)
+ (LABEL O 55)
+ (LIG O 55 O 173)
+ (STOP)
+ (LABEL O 173)
+ (LIG O 55 O 174)
+ (STOP)
+ (LABEL O 41)
+ (LIG O 140 O 74)
+ (STOP)
+ (LABEL O 77)
+ (LIG O 140 O 76)
+ (STOP)
+ (LABEL C k)
+ (LABEL C w)
+ (KRN C e R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN C o R -0.030557)
+ (KRN C c R -0.030557)
+ (STOP)
+ (LABEL C P)
+ (KRN C A R -0.091668)
+ (LABEL C y)
+ (KRN C o R -0.030557)
+ (KRN C e R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN O 56 R -0.091668)
+ (KRN O 54 R -0.091668)
+ (STOP)
+ (LABEL C F)
+ (LABEL C V)
+ (LABEL C W)
+ (KRN C o R -0.030557)
+ (KRN C e R -0.030557)
+ (KRN C u R -0.030557)
+ (KRN C r R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN C A R -0.091668)
+ (LABEL C K)
+ (LABEL C X)
+ (KRN C O R -0.030557)
+ (KRN C C R -0.030557)
+ (KRN C G R -0.030557)
+ (KRN C Q R -0.030557)
+ (STOP)
+ (LABEL C T)
+ (KRN C y R -0.091668)
+ (LABEL C Y)
+ (KRN C e R -0.091668)
+ (KRN C o R -0.091668)
+ (KRN C r R -0.091668)
+ (KRN C a R -0.091668)
+ (KRN C A R -0.091668)
+ (KRN C u R -0.091668)
+ (STOP)
+ (LABEL C D)
+ (LABEL C O)
+ (KRN C X R -0.030557)
+ (KRN C W R -0.030557)
+ (KRN C A R -0.030557)
+ (KRN C V R -0.030557)
+ (KRN C Y R -0.030557)
+ (STOP)
+ (LABEL C b)
+ (LABEL C o)
+ (LABEL C p)
+ (KRN C e R 0.030557)
+ (KRN C o R 0.030557)
+ (KRN C x R -0.030557)
+ (KRN C d R 0.030557)
+ (KRN C c R 0.030557)
+ (KRN C q R 0.030557)
+ (LABEL C a)
+ (KRN C r R -0.030557)
+ (LABEL C t)
+ (KRN C y R -0.030557)
+ (LABEL C u)
+ (KRN C w R -0.030557)
+ (STOP)
+ (LABEL C A)
+ (KRN C t R -0.030557)
+ (KRN C C R -0.030557)
+ (KRN C O R -0.030557)
+ (KRN C G R -0.030557)
+ (KRN C U R -0.030557)
+ (KRN C Q R -0.030557)
+ (LABEL C L)
+ (KRN C T R -0.091668)
+ (KRN C Y R -0.091668)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ (STOP)
+ (LABEL C g)
+ (KRN C j R 0.030557)
+ (STOP)
+ (LABEL C I)
+ (KRN C I R 0.030557)
+ (STOP)
+ )
+(CHARACTER O 0
+ (CHARWD R 0.58056)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 0)
+ )
+ )
+(CHARACTER O 1
+ (CHARWD R 0.916672)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 1)
+ )
+ )
+(CHARACTER O 2
+ (CHARWD R 0.85556)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 2)
+ )
+ )
+(CHARACTER O 3
+ (CHARWD R 0.672228)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 3)
+ )
+ )
+(CHARACTER O 4
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 4)
+ )
+ )
+(CHARACTER O 5
+ (CHARWD R 0.794451)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 5)
+ )
+ )
+(CHARACTER O 6
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 6)
+ )
+ )
+(CHARACTER O 7
+ (CHARWD R 0.85556)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 7)
+ )
+ )
+(CHARACTER O 10
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 10)
+ )
+ )
+(CHARACTER O 11
+ (CHARWD R 0.85556)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 11)
+ )
+ )
+(CHARACTER O 12
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 12)
+ )
+ )
+(CHARACTER O 13
+ (CHARWD R 0.641671)
+ (CHARHT R 0.694439)
+ (CHARIC R 0.076389)
+ (COMMENT
+ (LIG C i O 16)
+ (LIG C l O 17)
+ (KRN O 47 R 0.076389)
+ (KRN O 77 R 0.076389)
+ (KRN O 41 R 0.076389)
+ (KRN O 51 R 0.076389)
+ (KRN O 135 R 0.076389)
+ )
+ (MAP
+ (SETCHAR O 13)
+ )
+ )
+(CHARACTER O 14
+ (CHARWD R 0.586114)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 14)
+ )
+ )
+(CHARACTER O 15
+ (CHARWD R 0.586114)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 15)
+ )
+ )
+(CHARACTER O 16
+ (CHARWD R 0.891671)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 16)
+ )
+ )
+(CHARACTER O 17
+ (CHARWD R 0.891671)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 17)
+ )
+ )
+(CHARACTER O 20
+ (CHARWD R 0.255556)
+ (CHARHT R 0.45833)
+ (MAP
+ (SETCHAR O 20)
+ )
+ )
+(CHARACTER O 21
+ (CHARWD R 0.286113)
+ (CHARHT R 0.45833)
+ (CHARDP R 0.194443)
+ (MAP
+ (SETCHAR O 21)
+ )
+ )
+(CHARACTER O 22
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 22)
+ )
+ )
+(CHARACTER O 23
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 23)
+ )
+ )
+(CHARACTER O 24
+ (CHARWD R 0.550003)
+ (CHARHT R 0.635411)
+ (MAP
+ (SETCHAR O 24)
+ )
+ )
+(CHARACTER O 25
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 25)
+ )
+ )
+(CHARACTER O 26
+ (CHARWD R 0.550003)
+ (CHARHT R 0.63777)
+ (MAP
+ (SETCHAR O 26)
+ )
+ )
+(CHARACTER O 27
+ (CHARWD R 0.733339)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 27)
+ )
+ )
+(CHARACTER O 30
+ (CHARWD R 0.488892)
+ (CHARDP R 0.170137)
+ (MAP
+ (SETCHAR O 30)
+ )
+ )
+(CHARACTER O 31
+ (CHARWD R 0.565279)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 31)
+ )
+ )
+(CHARACTER O 32
+ (CHARWD R 0.794449)
+ (CHARHT R 0.45833)
+ (MAP
+ (SETCHAR O 32)
+ )
+ )
+(CHARACTER O 33
+ (CHARWD R 0.85556)
+ (CHARHT R 0.45833)
+ (MAP
+ (SETCHAR O 33)
+ )
+ )
+(CHARACTER O 34
+ (CHARWD R 0.550003)
+ (CHARHT R 0.5555525)
+ (CHARDP R 0.097222)
+ (MAP
+ (SETCHAR O 34)
+ )
+ )
+(CHARACTER O 35
+ (CHARWD R 0.947228)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 35)
+ )
+ )
+(CHARACTER O 36
+ (CHARWD R 1.069451)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 36)
+ )
+ )
+(CHARACTER O 37
+ (CHARWD R 0.85556)
+ (CHARHT R 0.743051)
+ (CHARDP R 0.048611)
+ (MAP
+ (SETCHAR O 37)
+ )
+ )
+(CHARACTER O 40
+ (CHARWD R 0.255556)
+ (CHARHT R 0.45833)
+ (COMMENT
+ (KRN C l R -0.255556)
+ (KRN C L R -0.293058)
+ )
+ (MAP
+ (SETCHAR O 40)
+ )
+ )
+(CHARACTER O 41
+ (CHARWD R 0.366669)
+ (CHARHT R 0.694439)
+ (COMMENT
+ (LIG O 140 O 74)
+ )
+ (MAP
+ (SETCHAR O 41)
+ )
+ )
+(CHARACTER O 42
+ (CHARWD R 0.558334)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 42)
+ )
+ )
+(CHARACTER O 43
+ (CHARWD R 0.916672)
+ (CHARHT R 0.694439)
+ (CHARDP R 0.194441)
+ (MAP
+ (SETCHAR O 43)
+ )
+ )
+(CHARACTER O 44
+ (CHARWD R 0.550003)
+ (CHARHT R 0.749995)
+ (CHARDP R 0.055555)
+ (MAP
+ (SETCHAR O 44)
+ )
+ )
+(CHARACTER O 45
+ (CHARWD R 1.029114)
+ (CHARHT R 0.749995)
+ (CHARDP R 0.055555)
+ (MAP
+ (SETCHAR O 45)
+ )
+ )
+(CHARACTER O 46
+ (CHARWD R 0.83056)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 46)
+ )
+ )
+(CHARACTER O 47
+ (CHARWD R 0.305557)
+ (CHARHT R 0.694439)
+ (COMMENT
+ (LIG O 47 O 42)
+ (KRN O 77 R 0.122223)
+ (KRN O 41 R 0.122223)
+ )
+ (MAP
+ (SETCHAR O 47)
+ )
+ )
+(CHARACTER O 50
+ (CHARWD R 0.42778)
+ (CHARHT R 0.749995)
+ (CHARDP R 0.249996)
+ (MAP
+ (SETCHAR O 50)
+ )
+ )
+(CHARACTER O 51
+ (CHARWD R 0.42778)
+ (CHARHT R 0.749995)
+ (CHARDP R 0.249996)
+ (MAP
+ (SETCHAR O 51)
+ )
+ )
+(CHARACTER O 52
+ (CHARWD R 0.550003)
+ (CHARHT R 0.749995)
+ (MAP
+ (SETCHAR O 52)
+ )
+ )
+(CHARACTER O 53
+ (CHARWD R 0.85556)
+ (CHARHT R 0.616667)
+ (CHARDP R 0.116671)
+ (MAP
+ (SETCHAR O 53)
+ )
+ )
+(CHARACTER O 54
+ (CHARWD R 0.305557)
+ (CHARHT R 0.130554)
+ (CHARDP R 0.105556)
+ (MAP
+ (SETCHAR O 54)
+ )
+ )
+(CHARACTER O 55
+ (CHARWD R 0.366669)
+ (CHARHT R 0.45833)
+ (COMMENT
+ (LIG O 55 O 173)
+ )
+ (MAP
+ (SETCHAR O 55)
+ )
+ )
+(CHARACTER O 56
+ (CHARWD R 0.305557)
+ (CHARHT R 0.130554)
+ (MAP
+ (SETCHAR O 56)
+ )
+ )
+(CHARACTER O 57
+ (CHARWD R 0.550003)
+ (CHARHT R 0.749995)
+ (CHARDP R 0.249996)
+ (MAP
+ (SETCHAR O 57)
+ )
+ )
+(CHARACTER C 0
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C 0)
+ )
+ )
+(CHARACTER C 1
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C 1)
+ )
+ )
+(CHARACTER C 2
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C 2)
+ )
+ )
+(CHARACTER C 3
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C 3)
+ )
+ )
+(CHARACTER C 4
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C 4)
+ )
+ )
+(CHARACTER C 5
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C 5)
+ )
+ )
+(CHARACTER C 6
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C 6)
+ )
+ )
+(CHARACTER C 7
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C 7)
+ )
+ )
+(CHARACTER C 8
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C 8)
+ )
+ )
+(CHARACTER C 9
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C 9)
+ )
+ )
+(CHARACTER O 72
+ (CHARWD R 0.305557)
+ (CHARHT R 0.45833)
+ (MAP
+ (SETCHAR O 72)
+ )
+ )
+(CHARACTER O 73
+ (CHARWD R 0.305557)
+ (CHARHT R 0.45833)
+ (CHARDP R 0.105556)
+ (MAP
+ (SETCHAR O 73)
+ )
+ )
+(CHARACTER O 74
+ (CHARWD R 0.366669)
+ (CHARHT R 0.499996)
+ (CHARDP R 0.194443)
+ (MAP
+ (SETCHAR O 74)
+ )
+ )
+(CHARACTER O 75
+ (CHARWD R 0.85556)
+ (CHARHT R 0.406248)
+ (CHARDP R -0.093748)
+ (MAP
+ (SETCHAR O 75)
+ )
+ )
+(CHARACTER O 76
+ (CHARWD R 0.519448)
+ (CHARHT R 0.499996)
+ (CHARDP R 0.194443)
+ (MAP
+ (SETCHAR O 76)
+ )
+ )
+(CHARACTER O 77
+ (CHARWD R 0.519448)
+ (CHARHT R 0.694439)
+ (COMMENT
+ (LIG O 140 O 76)
+ )
+ (MAP
+ (SETCHAR O 77)
+ )
+ )
+(CHARACTER O 100
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 100)
+ )
+ )
+(CHARACTER C A
+ (CHARWD R 0.733339)
+ (CHARHT R 0.694439)
+ (COMMENT
+ (KRN C t R -0.030557)
+ (KRN C C R -0.030557)
+ (KRN C O R -0.030557)
+ (KRN C G R -0.030557)
+ (KRN C U R -0.030557)
+ (KRN C Q R -0.030557)
+ (KRN C T R -0.091668)
+ (KRN C Y R -0.091668)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ )
+ (MAP
+ (SETCHAR C A)
+ )
+ )
+(CHARACTER C B
+ (CHARWD R 0.733339)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C B)
+ )
+ )
+(CHARACTER C C
+ (CHARWD R 0.702783)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C C)
+ )
+ )
+(CHARACTER C D
+ (CHARWD R 0.794451)
+ (CHARHT R 0.694439)
+ (COMMENT
+ (KRN C X R -0.030557)
+ (KRN C W R -0.030557)
+ (KRN C A R -0.030557)
+ (KRN C V R -0.030557)
+ (KRN C Y R -0.030557)
+ )
+ (MAP
+ (SETCHAR C D)
+ )
+ )
+(CHARACTER C E
+ (CHARWD R 0.641671)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C E)
+ )
+ )
+(CHARACTER C F
+ (CHARWD R 0.611116)
+ (CHARHT R 0.694439)
+ (COMMENT
+ (KRN C o R -0.030557)
+ (KRN C e R -0.030557)
+ (KRN C u R -0.030557)
+ (KRN C r R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN C A R -0.091668)
+ (KRN C O R -0.030557)
+ (KRN C C R -0.030557)
+ (KRN C G R -0.030557)
+ (KRN C Q R -0.030557)
+ )
+ (MAP
+ (SETCHAR C F)
+ )
+ )
+(CHARACTER C G
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C G)
+ )
+ )
+(CHARACTER C H
+ (CHARWD R 0.794451)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C H)
+ )
+ )
+(CHARACTER C I
+ (CHARWD R 0.330558)
+ (CHARHT R 0.694439)
+ (COMMENT
+ (KRN C I R 0.030557)
+ )
+ (MAP
+ (SETCHAR C I)
+ )
+ )
+(CHARACTER C J
+ (CHARWD R 0.519448)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C J)
+ )
+ )
+(CHARACTER C K
+ (CHARWD R 0.763896)
+ (CHARHT R 0.694439)
+ (COMMENT
+ (KRN C O R -0.030557)
+ (KRN C C R -0.030557)
+ (KRN C G R -0.030557)
+ (KRN C Q R -0.030557)
+ )
+ (MAP
+ (SETCHAR C K)
+ )
+ )
+(CHARACTER C L
+ (CHARWD R 0.58056)
+ (CHARHT R 0.694439)
+ (COMMENT
+ (KRN C T R -0.091668)
+ (KRN C Y R -0.091668)
+ (KRN C V R -0.122223)
+ (KRN C W R -0.122223)
+ )
+ (MAP
+ (SETCHAR C L)
+ )
+ )
+(CHARACTER C M
+ (CHARWD R 0.977785)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C M)
+ )
+ )
+(CHARACTER C N
+ (CHARWD R 0.794451)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C N)
+ )
+ )
+(CHARACTER C O
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694439)
+ (COMMENT
+ (KRN C X R -0.030557)
+ (KRN C W R -0.030557)
+ (KRN C A R -0.030557)
+ (KRN C V R -0.030557)
+ (KRN C Y R -0.030557)
+ )
+ (MAP
+ (SETCHAR C O)
+ )
+ )
+(CHARACTER C P
+ (CHARWD R 0.702783)
+ (CHARHT R 0.694439)
+ (COMMENT
+ (KRN C A R -0.091668)
+ (KRN C o R -0.030557)
+ (KRN C e R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN O 56 R -0.091668)
+ (KRN O 54 R -0.091668)
+ )
+ (MAP
+ (SETCHAR C P)
+ )
+ )
+(CHARACTER C Q
+ (CHARWD R 0.794449)
+ (CHARHT R 0.694439)
+ (CHARDP R 0.105556)
+ (MAP
+ (SETCHAR C Q)
+ )
+ )
+(CHARACTER C R
+ (CHARWD R 0.702783)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C R)
+ )
+ )
+(CHARACTER C S
+ (CHARWD R 0.6111145)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C S)
+ )
+ )
+(CHARACTER C T
+ (CHARWD R 0.733337)
+ (CHARHT R 0.694439)
+ (COMMENT
+ (KRN C y R -0.091668)
+ (KRN C e R -0.091668)
+ (KRN C o R -0.091668)
+ (KRN C r R -0.091668)
+ (KRN C a R -0.091668)
+ (KRN C A R -0.091668)
+ (KRN C u R -0.091668)
+ )
+ (MAP
+ (SETCHAR C T)
+ )
+ )
+(CHARACTER C U
+ (CHARWD R 0.763896)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C U)
+ )
+ )
+(CHARACTER C V
+ (CHARWD R 0.733339)
+ (CHARHT R 0.694439)
+ (CHARIC R 0.015278)
+ (COMMENT
+ (KRN C o R -0.030557)
+ (KRN C e R -0.030557)
+ (KRN C u R -0.030557)
+ (KRN C r R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN C A R -0.091668)
+ (KRN C O R -0.030557)
+ (KRN C C R -0.030557)
+ (KRN C G R -0.030557)
+ (KRN C Q R -0.030557)
+ )
+ (MAP
+ (SETCHAR C V)
+ )
+ )
+(CHARACTER C W
+ (CHARWD R 1.038897)
+ (CHARHT R 0.694439)
+ (CHARIC R 0.015278)
+ (COMMENT
+ (KRN C o R -0.030557)
+ (KRN C e R -0.030557)
+ (KRN C u R -0.030557)
+ (KRN C r R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN C A R -0.091668)
+ (KRN C O R -0.030557)
+ (KRN C C R -0.030557)
+ (KRN C G R -0.030557)
+ (KRN C Q R -0.030557)
+ )
+ (MAP
+ (SETCHAR C W)
+ )
+ )
+(CHARACTER C X
+ (CHARWD R 0.733339)
+ (CHARHT R 0.694439)
+ (COMMENT
+ (KRN C O R -0.030557)
+ (KRN C C R -0.030557)
+ (KRN C G R -0.030557)
+ (KRN C Q R -0.030557)
+ )
+ (MAP
+ (SETCHAR C X)
+ )
+ )
+(CHARACTER C Y
+ (CHARWD R 0.733339)
+ (CHARHT R 0.694439)
+ (CHARIC R 0.0275)
+ (COMMENT
+ (KRN C e R -0.091668)
+ (KRN C o R -0.091668)
+ (KRN C r R -0.091668)
+ (KRN C a R -0.091668)
+ (KRN C A R -0.091668)
+ (KRN C u R -0.091668)
+ )
+ (MAP
+ (SETCHAR C Y)
+ )
+ )
+(CHARACTER C Z
+ (CHARWD R 0.672226)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C Z)
+ )
+ )
+(CHARACTER O 133
+ (CHARWD R 0.343059)
+ (CHARHT R 0.749995)
+ (CHARDP R 0.249996)
+ (MAP
+ (SETCHAR O 133)
+ )
+ )
+(CHARACTER O 134
+ (CHARWD R 0.558334)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 134)
+ )
+ )
+(CHARACTER O 135
+ (CHARWD R 0.343059)
+ (CHARHT R 0.749995)
+ (CHARDP R 0.249996)
+ (MAP
+ (SETCHAR O 135)
+ )
+ )
+(CHARACTER O 136
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 136)
+ )
+ )
+(CHARACTER O 137
+ (CHARWD R 0.524994)
+ (CHARDP R 0.097453)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR O 137)
+ )
+ )
+(CHARACTER O 140
+ (CHARWD R 0.305557)
+ (CHARHT R 0.694439)
+ (COMMENT
+ (LIG O 140 O 134)
+ )
+ (MAP
+ (SETCHAR O 140)
+ )
+ )
+(CHARACTER C a
+ (CHARWD R 0.5250025)
+ (CHARHT R 0.45833)
+ (COMMENT
+ (KRN C r R -0.030557)
+ (KRN C y R -0.030557)
+ (KRN C w R -0.030557)
+ )
+ (MAP
+ (SETCHAR C a)
+ )
+ )
+(CHARACTER C b
+ (CHARWD R 0.561113)
+ (CHARHT R 0.694439)
+ (COMMENT
+ (KRN C e R 0.030557)
+ (KRN C o R 0.030557)
+ (KRN C x R -0.030557)
+ (KRN C d R 0.030557)
+ (KRN C c R 0.030557)
+ (KRN C q R 0.030557)
+ (KRN C r R -0.030557)
+ (KRN C y R -0.030557)
+ (KRN C w R -0.030557)
+ )
+ (MAP
+ (SETCHAR C b)
+ )
+ )
+(CHARACTER C c
+ (CHARWD R 0.488892)
+ (CHARHT R 0.45833)
+ (MAP
+ (SETCHAR C c)
+ )
+ )
+(CHARACTER C d
+ (CHARWD R 0.561113)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C d)
+ )
+ )
+(CHARACTER C e
+ (CHARWD R 0.511113)
+ (CHARHT R 0.45833)
+ (MAP
+ (SETCHAR C e)
+ )
+ )
+(CHARACTER C f
+ (CHARWD R 0.336114)
+ (CHARHT R 0.694439)
+ (CHARIC R 0.076389)
+ (COMMENT
+ (LIG C i O 14)
+ (LIG C f O 13)
+ (LIG C l O 15)
+ (KRN O 47 R 0.076389)
+ (KRN O 77 R 0.076389)
+ (KRN O 41 R 0.076389)
+ (KRN O 51 R 0.076389)
+ (KRN O 135 R 0.076389)
+ )
+ (MAP
+ (SETCHAR C f)
+ )
+ )
+(CHARACTER C g
+ (CHARWD R 0.550003)
+ (CHARHT R 0.45833)
+ (CHARDP R 0.194443)
+ (CHARIC R 0.015278)
+ (COMMENT
+ (KRN C j R 0.030557)
+ )
+ (MAP
+ (SETCHAR C g)
+ )
+ )
+(CHARACTER C h
+ (CHARWD R 0.561113)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C h)
+ )
+ )
+(CHARACTER C i
+ (CHARWD R 0.255556)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C i)
+ )
+ )
+(CHARACTER C j
+ (CHARWD R 0.286113)
+ (CHARHT R 0.694439)
+ (CHARDP R 0.194443)
+ (MAP
+ (SETCHAR C j)
+ )
+ )
+(CHARACTER C k
+ (CHARWD R 0.530559)
+ (CHARHT R 0.694439)
+ (COMMENT
+ (KRN C e R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN C o R -0.030557)
+ (KRN C c R -0.030557)
+ )
+ (MAP
+ (SETCHAR C k)
+ )
+ )
+(CHARACTER C l
+ (CHARWD R 0.255556)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR C l)
+ )
+ )
+(CHARACTER C m
+ (CHARWD R 0.866671)
+ (CHARHT R 0.45833)
+ (MAP
+ (SETCHAR C m)
+ )
+ )
+(CHARACTER C n
+ (CHARWD R 0.561113)
+ (CHARHT R 0.45833)
+ (MAP
+ (SETCHAR C n)
+ )
+ )
+(CHARACTER C o
+ (CHARWD R 0.550003)
+ (CHARHT R 0.45833)
+ (COMMENT
+ (KRN C e R 0.030557)
+ (KRN C o R 0.030557)
+ (KRN C x R -0.030557)
+ (KRN C d R 0.030557)
+ (KRN C c R 0.030557)
+ (KRN C q R 0.030557)
+ (KRN C r R -0.030557)
+ (KRN C y R -0.030557)
+ (KRN C w R -0.030557)
+ )
+ (MAP
+ (SETCHAR C o)
+ )
+ )
+(CHARACTER C p
+ (CHARWD R 0.561113)
+ (CHARHT R 0.45833)
+ (CHARDP R 0.194443)
+ (COMMENT
+ (KRN C e R 0.030557)
+ (KRN C o R 0.030557)
+ (KRN C x R -0.030557)
+ (KRN C d R 0.030557)
+ (KRN C c R 0.030557)
+ (KRN C q R 0.030557)
+ (KRN C r R -0.030557)
+ (KRN C y R -0.030557)
+ (KRN C w R -0.030557)
+ )
+ (MAP
+ (SETCHAR C p)
+ )
+ )
+(CHARACTER C q
+ (CHARWD R 0.561113)
+ (CHARHT R 0.45833)
+ (CHARDP R 0.194443)
+ (MAP
+ (SETCHAR C q)
+ )
+ )
+(CHARACTER C r
+ (CHARWD R 0.372225)
+ (CHARHT R 0.45833)
+ (CHARIC R 0.015278)
+ (MAP
+ (SETCHAR C r)
+ )
+ )
+(CHARACTER C s
+ (CHARWD R 0.42167)
+ (CHARHT R 0.45833)
+ (MAP
+ (SETCHAR C s)
+ )
+ )
+(CHARACTER C t
+ (CHARWD R 0.404168)
+ (CHARHT R 0.589284)
+ (COMMENT
+ (KRN C y R -0.030557)
+ (KRN C w R -0.030557)
+ )
+ (MAP
+ (SETCHAR C t)
+ )
+ )
+(CHARACTER C u
+ (CHARWD R 0.561113)
+ (CHARHT R 0.45833)
+ (COMMENT
+ (KRN C w R -0.030557)
+ )
+ (MAP
+ (SETCHAR C u)
+ )
+ )
+(CHARACTER C v
+ (CHARWD R 0.500002)
+ (CHARHT R 0.45833)
+ (CHARIC R 0.015278)
+ (MAP
+ (SETCHAR C v)
+ )
+ )
+(CHARACTER C w
+ (CHARWD R 0.744448)
+ (CHARHT R 0.45833)
+ (CHARIC R 0.015278)
+ (COMMENT
+ (KRN C e R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN C o R -0.030557)
+ (KRN C c R -0.030557)
+ )
+ (MAP
+ (SETCHAR C w)
+ )
+ )
+(CHARACTER C x
+ (CHARWD R 0.500002)
+ (CHARHT R 0.45833)
+ (MAP
+ (SETCHAR C x)
+ )
+ )
+(CHARACTER C y
+ (CHARWD R 0.500002)
+ (CHARHT R 0.45833)
+ (CHARDP R 0.194443)
+ (CHARIC R 0.015278)
+ (COMMENT
+ (KRN C o R -0.030557)
+ (KRN C e R -0.030557)
+ (KRN C a R -0.030557)
+ (KRN O 56 R -0.091668)
+ (KRN O 54 R -0.091668)
+ )
+ (MAP
+ (SETCHAR C y)
+ )
+ )
+(CHARACTER C z
+ (CHARWD R 0.476391)
+ (CHARHT R 0.45833)
+ (MAP
+ (SETCHAR C z)
+ )
+ )
+(CHARACTER O 173
+ (CHARWD R 0.550003)
+ (CHARHT R 0.45833)
+ (CHARIC R 0.030557)
+ (COMMENT
+ (LIG O 55 O 174)
+ )
+ (MAP
+ (SETCHAR O 173)
+ )
+ )
+(CHARACTER O 174
+ (CHARWD R 1.100006)
+ (CHARHT R 0.45833)
+ (CHARIC R 0.030557)
+ (MAP
+ (SETCHAR O 174)
+ )
+ )
+(CHARACTER O 175
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 175)
+ )
+ )
+(CHARACTER O 176
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 176)
+ )
+ )
+(CHARACTER O 177
+ (CHARWD R 0.550003)
+ (CHARHT R 0.694439)
+ (MAP
+ (SETCHAR O 177)
+ )
+ )
diff --git a/support/splint/tex/fretokenset.sty b/support/splint/tex/fretokenset.sty
index 6dfba7ea58..258ef932da 100644
--- a/support/splint/tex/fretokenset.sty
+++ b/support/splint/tex/fretokenset.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
diff --git a/support/splint/tex/ftokenset.sty b/support/splint/tex/ftokenset.sty
index 9eb5fbd70d..efcef1e95e 100644
--- a/support/splint/tex/ftokenset.sty
+++ b/support/splint/tex/ftokenset.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -15,6 +15,7 @@
% along with SPLinT. If not, see <http://www.gnu.org/licenses/>.
% typesetting tokens in \flex's grammar
+\prettywordpair{SECT2PROLOG}{{$\hbox{SECT}_2\, \hbox{PROLOG}$}}
\prettywordpairwvis{CHAR}{{\bf char}}{char}
\prettywordpairwvis{NUMBER}{{\bf num}}{num}
diff --git a/support/splint/tex/gindex.sty b/support/splint/tex/gindex.sty
index 9d8ed2d334..2a449d343b 100644
--- a/support/splint/tex/gindex.sty
+++ b/support/splint/tex/gindex.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -18,19 +18,7 @@
% set up the list of unindexable terms
-\ifx\unindexable\UNDEFINED
- \def\unindexable{{$\TeXx$}{$\TeXa$}{$\TeXb$}{$\TeXf$}{$\TeXao$}{$\TeXfo$}}%
-\else
- \expandafter\def\expandafter\unindexable\expandafter
- {\unindexable{$\TeXx$}{$\TeXa$}{$\TeXb$}{$\TeXf$}{$\TeXao$}{$\TeXfo$}}%
-\fi
-
-\def\TeXx{\hbox{\let\_\UL\tt\TeX\_}}
-\def\TeXa{\hbox{\tt\TeX\rm(a)}}
-\def\TeXb{\hbox{\tt\TeX\rm(b)}}
-\def\TeXf{\hbox{\tt\TeX\rm(f)}}
-\def\TeXao{\hbox{\tt\TeX\rm(ao)}}
-\def\TeXfo{\hbox{\tt\TeX\rm(fo)}}
+\newwrite\gindex
% macros to determine if the current term is indexable
@@ -66,9 +54,21 @@
\def\s@t@nd@xable#1\end{\aftergroup\yyfirstoftwo}
+\def\makeunindexable#1{%
+ \expandafter\m@keunindexable\expandafter{\unindexable}{#1}%
+}
+
+\def\m@keunindexable#1#2{%
+ \def\unindexable{#1#2}%
+}
+
+\def\makeunindexablex#1{%
+ {\edef\unindexable{#1}\expandafter}\expandafter\makeunindexable\expandafter{\unindexable}%
+}
+
% \Cee\ index entry (produced by \CWEAVE\ and typeset directly from the file)
-\def\I#1, #2.{%
+\def\Ii#1, #2.{%
\makeoneindexentry{#1}{#1}{#2}{\setxreflistplain}{\filterxrefsplain}%
}
@@ -124,7 +124,17 @@
#3{#2}%
\par
}{%
- \toksg{#1}%
+ \checkforthree#1\end{%
+ \toksg{#1}%
+ }{%
+ \the\toksg\toksg{}% set the index section header
+ \let\defypreamble\empty
+ \let\defypostamble\defypostambleshowcs
+ \hangindent\inxhangindent\noindent\strut\ninercs#1:%
+ \hskip0pt plus2em\penalty1000\hskip0pt plus-2em\relax\kern\inxaiskip
+ #3{#2}%
+ \par
+ }%
}%
}
@@ -146,6 +156,11 @@
\yystringempty{#2}{\yyfirstoftwo}{\yysecondoftwo}%
}
+\def\checkforthree#1#2#3\end{%
+ \yystringempty{#3}{\yyfirstoftwo}{\yysecondoftwo}%
+}
+% if the term is unindexable, only collect the definitions (i.e. references enclosed in \[ and \])
+
\def\filterdefs#1#2{%
#1{}{}, #2, \[]{}% the last empty braces are not necessary but this way
% both \f@lterdefs and \f@lterdefsplain can be defined
@@ -331,6 +346,13 @@
\def\idxentry{{\def\_{\char`\_}\hbox{\tt$\langle$\the\toksa$\rangle_{\rm f}$}}}%
}%
+\def\termfsscstring#1{% flex sate names
+ \numberstocharsandspaces#1\end
+ \let\optstrextra\optstrextraesc
+ \expandafter\nameproc\expandafter{\the\toksa}\with\parsebin
+ \def\idxentry{{\def\_{\char`\_}\hbox{\flexsnstyle{\the\toksa}}}}%
+}%
+
\def\termstring#1{%
\numberstocharsandspaces#1\end
\let\optstrextra\optstrextraesc
@@ -366,6 +388,55 @@
}%
}%
+\def\termtrivial#1{% trivial index entry for debugging purposes
+ % can also be used as a starting point for other index processors
+ \def\idxentry{%
+ {\rm index entry goes here}%
+ }%
+}%
+
+% the raw/direct macros below should be used sparingly because they potentially introduce
+% style inconsistencies while outputting index terms; a special scheme can be designed to counter
+% that ... or one can just be careful; in addition, \termdirect relies on the exact number of expansions
+% (2) undergone by the entry's contents;
+% of the two options, \termraw is probably preferable as it does not pass any volatile information
+% (such as expandable sequences) in the index entries and thus allows much more elaborate and
+% safe setup of index terms; the only advantage of the \termdirect variation is the lack of global
+% assignments (the \termraw changes the \indexterms array); indices by their nature are global
+% so this should be a secondary consideration in the majority of cases.
+
+\def\termdirect#1{%
+ \def\idxentry{%
+ {\t@rmdirect#1}%
+ }%
+}%
+
+\def\t@rmdirect#1\end\toksa#2\eatone{#2}
+
+\let\vend\relax % the delimeter to let the indexing script know that this is a raw entry
+
+% here is an example of the \termdirect macros in action:
+%
+% the entry setup below is a bit elaborate since parts of the entry must be passed in a safe way
+% in case it contains dangerous characters like _
+% \toksa{\noexpand\tt{\noexpand\rm(}#1{\noexpand\rm)}\noexpand\charstocharsx#2\end}%
+% the \noexpand's above are necessary to block the final expansion by \write
+% the assignment below would also work; note the '0 ' which is required to stop the expansion
+% of \romannumeral which is part of \charstonumberse; in this case \vend can be left undefined
+% \toksa{\end0 \noexpand\noexpand\noexpand\vend(#1)#2\noexpand\noexpand\noexpand\vend\eatone}%
+
+% the setup above works with the following indexing command
+%\ridxentry{\termdirect}{\the\toksa}{#2}%
+
+\def\termraw#1{% raw entry, shows terms saved in a global array, #1 is the index into the array
+ \numberstocharsandspaces#1\end
+ \def\idxentry{%
+ {\let\parsernamespace\empty\getmidstackcs\indexterms{\the\toksa}}%
+ }%
+}%
+
+\setnulstack{indexterms} % the array for the terms processed by \termraw
+
\expandafter\def\csname acharswitch:index\endcsname{% correct reserved \TeX\ characters a la CWEB verbatim
%$\%\\ % unaffected
%\#\ % these never appear
@@ -403,12 +474,23 @@
\def\indexseparator#1#2{%
\vskip.3\baselineskip
- \centerline{\csname index domain translation [#1]\endcsname}%
+ \centerline{%
+ \toksa\expandafter\expandafter\expandafter
+ {\expandafter\yyfirstofthree\romannumeral0\csname index domain translation [#1]\endcsname}%
+ \toksb\expandafter\expandafter\expandafter
+ {\expandafter\yysecondofthree\romannumeral0\csname index domain translation [#1]\endcsname}%
+ \toksc\expandafter\expandafter\expandafter
+ {\expandafter\yythirdofthree\romannumeral0\csname index domain translation [#1]\endcsname}%
+ \the\toksc
+ \edef\next{\write\cont{%\noexpand\noexpand\noexpand\eatone{\noexpand\meaning\noexpand\ZZ}%
+ \noexpand\noexpand\noexpand\YY{\the\toksa}{2}{\secno}% write to contents file
+ {\noexpand\the\pageno}{\the\toksb}}}\next % \YY{title}{depth}{sec}{page}{ss}
+ }%
\vskip.3\baselineskip
}
-\expandafter\def\csname index domain translation [F]\endcsname{{\sc FLEX INDEX}}
-\expandafter\def\csname index domain translation [T]\endcsname{{\sc\TeX\ INDEX}}
+\expandafter\def\csname index domain translation [F]\endcsname{{\noexpand\flex\ index}{flex index}{F{\sc LEX INDEX}}}
+\expandafter\def\csname index domain translation [T]\endcsname{{\noexpand\TeX\ index}{TeX index}{\TeX\ {\sc INDEX}}}
\def\indexsection#1{%
\vskip.3\baselineskip
@@ -429,11 +511,21 @@
\def\otherlangindexseparator{%
\enddoublecols
\vskip.8\baselineskip
- \centerline{B{\sc ISON}, F{\sc LEX, AND} \TeX\ {\sc INDICES}}%
+ \centerline{\otherlangindexheader
+ \edef\next{\write\cont{%\noexpand\noexpand\noexpand\eatone{\noexpand\meaning\noexpand\ZZ}%
+ \noexpand\noexpand\noexpand\YY{\noexpand\noexpand\noexpand\bison\ index}{2}{\secno}% write to contents file
+ {\noexpand\the\pageno}{bison Index}}}\next % \ZZ{title}{depth}{sec}{page}{ss}
+ }%
\vskip.5\baselineskip
\begindoublecols
}
+\def\otherlangindexheader{%
+ B{\sc ISON}, F{\sc LEX, AND} \TeX\ {\sc INDICES}%
+}
+
+%\def\otherlangindexseparator{}
+
% general index entries (generated by bindx.pl)
\def\GI#1#2#3#4.{% raw index entries (standard format, with no page references)
@@ -485,13 +577,32 @@
\def\inxaiskip{.5em}
\def\inxicgap{5pt}
+\ifx\unindexable\UNDEFINED
+ \def\unindexable{{$\TeXx$}{$\TeXa$}{$\TeXb$}{$\TeXf$}{$\TeXao$}{$\TeXfo$}{$\BZ$}}%
+\else
+ \expandafter\def\expandafter\unindexable\expandafter
+ {\unindexable{$\TeXx$}{$\TeXa$}{$\TeXb$}{$\TeXf$}{$\TeXao$}{$\TeXfo$}{$\BZ$}}%
+\fi
+
+\def\idxsafe{% redefine some control sequences to behave safely in the index
+ \def\TeXx{\hbox{\let\_\UL\tt\TeX\_}}
+ \def\TeXa{\hbox{\tt\TeX\rm(a)}}
+ \def\TeXb{\hbox{\tt\TeX\rm(b)}}
+ \def\TeXf{\hbox{\tt\TeX\rm(f)}}
+ \def\TeXao{\hbox{\tt\TeX\rm(ao)}}
+ \def\TeXfo{\hbox{\tt\TeX\rm(fo)}}
+ \def\BZ{\hbox{\tt BZ}}
+}
+
\def\inxmod{% new indexing macro
- \write\cont{} % ensure that the contents file isn't empty
- \write\cont{\catcode `\noexpand\@=12\relax} % \makeatother
- \closeout\cont % the contents information has been fully gathered
+ \closeout\exampletable
+ \termindexfalse
+ \idxsafe
+ \closeout\gindex
\message{Index:}
\medskip
\eightpoint\raggedright
+ \emergencystretch=.1em % for especially tight cases
\fnotesstart=2
\fnotesspan=1
\noofcolumns=3
@@ -504,10 +615,14 @@
\expandafter\let\expandafter\acharswitch\csname acharswitch:index\endcsname
\let\texlexer\texlexerindex
\let\*=\lapstar
+ \let\I\Ii % make \CWEAVE\ generated entries typeset in our style
\begindoublecols
\readindex
- \otherlangindexseparator
\readgindex
+ \write\cont{}% ensure that the contents file isn't empty
+ \write\cont{\catcode `\noexpand\@=12\relax}% \makeatother
+ \closeout\cont % the contents information has been fully gathered
+ \enddoublecols
}
\newread\trygindex
@@ -517,6 +632,7 @@
\ifeof\trygindex
\else
\closein\trygindex
+ \otherlangindexseparator
\input \jobname.gdy
\fi
}
diff --git a/support/splint/tex/grabstates.sty b/support/splint/tex/grabstates.sty
index 1024d99432..7fa259fe7a 100644
--- a/support/splint/tex/grabstates.sty
+++ b/support/splint/tex/grabstates.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -39,16 +39,17 @@
\genericparser
name: grabstates,
- ptables: cweb/byytab.tex,
- ltables: cweb/lstab.tex,
+ ptables: cweb/ddptab.tex, % \flex\ secion 1 parser
+ ltables: cweb/ssfstab.tex, % small scanner for \flex\ options
tokens: {},
asetup: \let\setflexstates\relax,
dsetup: {},
rsetup: {},
- optimization: \optimizeall;%
+ optimization: {};%
\let\parsernamespace\grabstatesnamespace
\let\yylexreturn\yylexreturnregular
+\def\yyBEGIN#1{\yyerrterminate}
% stage two parsing macros
@@ -65,17 +66,12 @@
\yybreak{}%
\else % Stage three, process the parsed table
\yybreak{%
- \restorecslist{bootstrap}\yyunion % TODO: this will not work in fs1 sections
+ \restorecslist{bootstrap-flex}\yyflunion %
\the\table\relax
}%
\yycontinue
}
-\fillpstack{b}{%
- \preparsegrabstates
- \relax
-}
-
\fillpstack{fs1}{%
\preparsegrabstates
\relax
diff --git a/support/splint/tex/hext.sty b/support/splint/tex/hext.sty
index 433d53ac5c..998ace8394 100644
--- a/support/splint/tex/hext.sty
+++ b/support/splint/tex/hext.sty
@@ -1,3 +1,19 @@
+% Copyright 2012-2022, Alexander Shibakov
+% This file is part of SPLinT
+%
+% SPLinT 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.
+%
+% SPLinT 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 SPLinT. If not, see <http://www.gnu.org/licenses/>.
+
% macros to typeset hex values in customized form (useful when typesetting embedded code)
% the line translator: take a sequence of tokens and translate it into another sequence
diff --git a/support/splint/tex/limbo.sty b/support/splint/tex/limbo.sty
index c810cd55da..91ec2c973f 100644
--- a/support/splint/tex/limbo.sty
+++ b/support/splint/tex/limbo.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -164,6 +164,11 @@
\font\sevenfrak=eufm7
\font\sixfrak=eufm6
+\font\nineidss=idssbx9
+\font\eightidss=idssbx8
+\font\sevenidss=idssbx7
+\font\sixidss=idssbx6
+
\font\hv=phvr
\font\dings=pzdr
@@ -230,7 +235,7 @@
\def\ssfb{\fam\ssfam\tenssb}%
\def\ssfbn{\fam\ssbnfam\tenssb}%
\textfont\ssbnfam=\tenssn\scriptfont\ssfam=\sevenssn
- \textfont\ttfam=\tentt
+ \textfont\ttfam=\tentt\scriptfont\ttfam=\seventt
\fam\ttfam\tentt \ttglue=.5em plus.25em minus.15em
\def\Bbb{\fam\msbmfam\tenmsbm}%
\textfont\msbmfam=\tenmsbm\scriptfont\msbmfam=\sevenmsbm \scriptscriptfont\msbmfam=\fivemsbm
@@ -243,6 +248,7 @@
\let\mc=\ninerm
\let\cyr=\tencyr
\let\big=\tenbig
+ \let\idss=\eightidss
\setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width0pt}%
\let\sscmd\sevenpoint
\normalbaselines\rm}
@@ -280,7 +286,7 @@
%no room for another font family
\def\ssfbn{\fam\ssbnfam\ninessn}%
\textfont\ssbnfam=\ninessn\scriptfont\ssbnfam=\sixssn
- \textfont\ttfam=\ninett
+ \textfont\ttfam=\ninett\scriptfont\ttfam=\sixtt
\fam\ttfam\ninett \ttglue=.5em plus.25em minus.15em
\def\Bbb{\fam\msbmfam\ninemsbm}%
\textfont\msbmfam=\ninemsbm\scriptfont\msbmfam=\sixmsbm \scriptscriptfont\msbmfam=\fivemsbm
@@ -293,6 +299,7 @@
\let\mc=\eightrm
\let\cyr=\ninecyr
\let\big=\ninebig
+ \let\idss=\sevenidss
\setbox\strutbox=\hbox{\vrule height8pt depth3pt width0pt}%
\let\sscmd\sixpoint
\normalbaselines\rm}
@@ -340,6 +347,7 @@
\let\mc=\sevenrm
\let\cyr=\eightcyr
\let\big=\eightbig
+ \let\idss=\sixidss
\setbox\strutbox=\hbox{\vrule height7pt depth2pt width0pt}%
\let\sscmd\sixpoint
\normalbaselines\rm}
@@ -381,6 +389,7 @@
\let\sci=\sixit
\let\mc=\sixrm
\let\big=\sevenbig
+ \let\idss=\sixidss
\setbox\strutbox=\hbox{\vrule height6pt depth2pt width0pt}%
\normalbaselines\rm}
@@ -421,6 +430,7 @@
\let\sci=\sixit
\let\mc=\sixrm
\let\big=\sixbig
+ \let\idss=\sixidss
\setbox\strutbox=\hbox{\vrule height5.5pt depth1.5pt width0pt}%
\normalbaselines\rm}
@@ -591,7 +601,8 @@
% demo code display
% **H will produce a `|', **K can be used as an escape character, **L and **N
-% can be used i place of left and right braces to provide some control
+% can be used in place of left and right braces to provide some control **C is
+% a comment character when needed
{\catcode`\ =\active\gdef {\phantom{\char"20\relax}}\catcode`\^^H=\active\gdef^^H{\yl}}%
@@ -607,7 +618,7 @@
\catcode`\^=\active\democodelc=0 \catcode`\*=7
\chardef\*=`\*%
\catcode`\^^H=\active % ^^H
- \catcode`\^^K=0 \catcode`\^^L=1 \catcode`\^^N=2
+ \catcode`\^^K=0 \catcode`\^^L=1 \catcode`\^^N=2 \catcode`\^^C=14
\tabskip=0pt plus 1 fill
\halign \demoastyle\bgroup\linenoup\hskip\demomargin ##\hfil\hskip\demomargin%
\ifnumberlines{\sevenrm\paddednumber\democodelc}\fi\cr%
@@ -615,6 +626,10 @@
\def\enddemo{\egroup\egroup\medskip\noindent}
+% referencing lines from the demo code
+\def\dlbl#1{\expandafter\xdef\csname lncnt_#1\endcsname{\the\democodelc}}%
+\def\dref#1{\csname lncnt_#1\endcsname}%
+
\newskip\demomargin
\demomargin=3em
@@ -645,7 +660,8 @@
\epsfbox{#1.eps}\fi
}
-\let\yl| % to use in \TeX\ mode instead of `|'
+\let\yl| % to use in \TeX\ mode instead of `|'
+\def\vl{|} % same as above but expandable
\def\greaterthan{>} % CTANGLE always leaves a space after `>' in the output which interferes with some macros
% redefinitions of various CWEB macros;
@@ -760,7 +776,7 @@
\def\stripprefix##1>{}\def\gtitletoks{#3}%
\edef\gtitletoks{\expandafter\stripprefix\meaning\gtitletoks}%
\edef\next{\write\cont{%\noexpand\noexpand\noexpand\eatone{\noexpand\meaning\noexpand\ZZ}%
- \noexpand\noexpand\noexpand % AS this is a (sort of) bug in cwebmac.tex
+ \noexpand\noexpand\noexpand % AS: this is a (sort of a) bug in cwebmac.tex
% as long as the index is output (i.e. ...\eject)
% before all the sections this is unnecessary
% uncomment the line after the brace to see what \ZZ
@@ -800,46 +816,74 @@
\ifpdftex\expandafter\xdef\csname curr#1\endcsname{\secno}%
\ifnum#1>0\countB=#1 \advance\countB by-1
\advancenumber{chunk\the\countB.\expnumber{curr\the\countB}}\fi\fi
- \ifpdf\special{pdf: outline #1 << /Title (\the\toksE) /Dest
- [ @thispage /FitH @ypos ] >>}\fi
+ % drop support for pdf specials: AS
\ifon\startsection{\ttl#3}\smallskip\noindent\ignorespaces}
\outer\def\chapterN#1#2#3.{% beginning of starred section in `book' mode
\ifacro{\toksF={}\makeoutlinetoks#3\outlinedone\outlinedone}\fi
\gdepth=#1\gtitle={#3}\MN{#2}%
- \ifon
- \ifnum#1<\tw@
- \vfil\eject % force page break for chapters and major subsections
- \ifodd\pageno
- \else
- \null\vfill\eject
- \fi
- \else
- \vskip0pt plus 3.5\baselineskip
- \penalty-100
- \vskip0pt plus -3.5\baselineskip
- \vskip\intersecskip % no forced page break
- \fi
- \fi
- \message{*\secno} % progress report
+ \ifon\stsecchappreseparator{#1}\fi % before the title
+ \message{*\secno}% progress report
\def\stripprefix##1>{}\def\gtitletoks{#3}%
\edef\gtitletoks{\expandafter\stripprefix\meaning\gtitletoks}%
- \edef\next{\write\cont{%\noexpand\noexpand\noexpand\eatone{\noexpand\meaning\noexpand\ZZ}%
- \noexpand\noexpand\noexpand % AS this is a (sort of) bug in cwebmac.tex
- % as long as the index is output (i.e. ...\eject)
- % before all the sections this is unnecessary
- % uncomment the line after the brace to see what \ZZ
- % expands to in case of weird errors
- \ZZ{\gtitletoks}{#1}{\secno}% write to contents file
- {\noexpand\the\pageno}{\the\toksE}}}\next % \ZZ{title}{depth}{sec}{page}{ss}
- \ifpdftex\expandafter\xdef\csname curr#1\endcsname{\secno}%
- \ifnum#1>0\countB=#1 \advance\countB by-1
- \advancenumber{chunk\the\countB.\expnumber{curr\the\countB}}\fi\fi
- \ifpdf\special{pdf: outline #1 << /Title (\the\toksE) /Dest
- [ @thispage /FitH @ypos ] >>}\fi
+ \edef\next{%
+ \write\cont{%\noexpand\noexpand\noexpand\eatone{\noexpand\meaning\noexpand\ZZ}%
+ \noexpand\noexpand\noexpand % AS this is a (sort of) bug in cwebmac.tex
+ % as long as the index is output (i.e. ...\eject)
+ % before all the sections this is unnecessary
+ % uncomment the line after the brace to see what \ZZ
+ % expands to in case of weird errors
+ \ZZ{\gtitletoks}{#1}{\secno}{\noexpand\the\pageno}{\the\toksE}% \ZZ{title}{depth}{sec}{page}{ss}
+ }}\next % write to contents file
+ \ifpdftex
+ \expandafter\xdef\csname curr#1\endcsname{\secno}%
+ \ifnum#1=\z@
+ \countB=#1 \advance\countB by\@ne
+ \expandafter\xdef\csname curr\the\countB\endcsname{\secno}%
+ \advance\countB by\@ne
+ \expandafter\xdef\csname curr\the\countB\endcsname{\secno}%
+ \advance\countB by\@ne
+ \expandafter\xdef\csname curr\the\countB\endcsname{\secno}%
+ \fi % allow subsection depth to jump up to 3 levels after a chapter: AS
+ \ifnum#1>0\countB=#1 \advance\countB by-1
+ %\message{#3::chunk\the\countB.\expnumber{curr\the\countB}::\expnumber{chunk\the\countB.\expnumber{curr\the\countB}}}%
+ \advancenumber{chunk\the\countB.\expnumber{curr\the\countB}}%
+ \fi
+ \fi
+ % drop support for pdf specials: AS
\ifon\stsecchap{#1}{#3}\ignorespaces
}
+\def\writebookmarkline#1#2#3#4#5{{% the scheme for bookmarks is rather fragile
+ % the proper implementation must involve a stack: AS
+ \let\(=\let \let\)=\let \let\[=\let \let\]=\let \let\/=\let
+ \edef\depth{\expnumber{chunk#2.#3}}%
+ \ifnum\depth=\z@ % allow subsection depth to jump up to 3 levels: AS
+ \countB=#2 \advance\countB\@ne
+ \edef\depth{\expnumber{chunk\the\countB.#3}}%
+ \ifnum\depth=\z@
+ \advance\countB\@ne
+ \edef\depth{\expnumber{chunk\the\countB.#3}}%
+ \fi
+ \fi
+ %\message{bookmark for #5::depth:\depth::#2.#3}%
+ \pdfoutline goto num #3 count -\depth {#5}}}
+
+\def\stsecchappreseparator#1{% separator between the end of the previous section and the current one
+ \ifnum#1<\tw@
+ \vfil\eject % force page break for chapters and major subsections
+ \ifodd\pageno
+ \else
+ \null\vfill\eject
+ \fi
+ \else
+ \vskip0pt plus 3.5\baselineskip
+ \penalty-100
+ \vskip0pt plus -3.5\baselineskip
+ \vskip\intersecskip % no forced page break
+ \fi
+}
+
\def\stsecchap#1#2{\rightskip=0pt % get out of C mode (cf. \B)
\sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50
%
@@ -891,7 +935,7 @@
\newif\ifchapterhead
-% make page and sectoin number hang in the margins; \quad is chosen to
+% make page and section number hang in the margins; \quad is chosen to
% be consistent with section appearance; the page numbers are printed
% in old-style numerals;
@@ -901,7 +945,7 @@
\else
\termindexfalse\headertrue\llap{\mainfont\oldstyle\the\pageno\tentitle\quad}%
\eightpoint\rm\grouptitle\hfill\title
- \rlap{\tentitle\quad\tenpoint$^{\hbox{\sevenrm\topsecno}}_{\hbox{\sevenrm\botsecno}}$}%
+ \rlap{\tentitle\quad\secrangedisplay}%
\fi
} % top line on left-hand pages
@@ -909,23 +953,19 @@
\ifchapterhead
\hfil
\else
- \termindexfalse\headertrue\llap{\tenpoint$^{\hbox{\sevenrm\topsecno}}_{\hbox{\sevenrm\botsecno}}$\tentitle\quad}%
+ \termindexfalse\headertrue\llap{\secrangedisplay\tentitle\quad}%
\eightpoint\rm\title\hfill\grouptitle
\rlap{\tentitle\quad\mainfont\oldstyle\the\pageno}%
\fi
} % top line on right-hand pages
+\def\secrangedisplay{{\tenpoint$^{\hbox{\sevenrm\topsecno}}_{\hbox{\sevenrm\botsecno}}$}}
+
\def\botsecno{\expandafter\takeone\botmark} % the first section on the
% next page
-
-\newwrite\exampletable
-
-\newif\ifsaveparseoutput
-\newif\ifchecktable
+\newif\ifsepsectionchapter % do we put the section list in its own chapter?
\def\finmod{%
- \enddoublecols
- \closeout\exampletable
\parfillskip 0pt plus 1fil
\def\grouptitle{NAMES OF THE SECTIONS}
\let\topsecno=\nullsec
@@ -942,21 +982,18 @@
\let\Xpdf\X
%
\ifpdftex
- \makebookmarks
- \pdfdest name {NOS} fitb
- \pdfoutline goto name {NOS} count -\secno {\outsecname}
- \def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.%
- {\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}%
- \pdfoutline goto num \the\toksA \expandafter{\the\toksE}}
- \else
- \ifpdf
- \special{pdf: outline -1 << /Title (\outsecname)
- /Dest [ @thispage /FitH @ypos ] >>}
- \def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.%
- {\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}%
- \special{pdf: outline 0 << /Title (\the\toksE)
- /A << /S /GoTo /D (\romannumeral\the\toksA) >> >>}}
- \fi
+ %\makebookmarks
+ % move this to just before the contents so \inxmod has a
+ % chance to close the \cont channel; AS
+ \ifsepsectionchapter\else\pdfdest name {NOS} fith \fi
+ %\pdfoutline goto name {NOS} count -\secno {\outsecname}%
+ %\def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.%
+ %{\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}%
+ %\pdfoutline goto num \the\toksA \expandafter{\the\toksE}%
+ % remove bookmarks for individual sections to avoid unpleasant
+ % pdf navigation artefacts; AS
+ %}
+ % pdf specials are not supported: AS
\fi
\fi
%
@@ -967,10 +1004,48 @@
\centerline{\sc A LIST OF ALL SECTIONS}
\penalty300
\medskip
- \emergencystretch=10pt
+ \emergencystretch=12pt
+ \sectionlistsetup
\readsections
}
+\let\sectionlistsetup\relax
+
+\def\YYcontentsline#1#2#3#4#5{\ifnum#2=0 \smallbreak\fi
+ \line{\consetup{#2}#1
+ \rm\leaders\hbox to .5em{.\hfil}\hfil
+ \ \ifacro
+ \pdfstartlink attr {/Border [0 0 0]} goto page #4 {/FitH} \BlueGreen #3\Black\pdfendlink
+ \else#3\fi\hbox to3em{\hss#4}}}
+
+\def\YYwritebookmarkline#1#2#3#4#5{{%
+ \let\(=\let \let\)=\let \let\[=\let \let\]=\let \let\/=\let
+ \pdfoutline goto page #4 {#4} count 0 {#5}}}
+
+
+\def\makebookmarks{\let\ZZ=\writebookmarkline \let\YY\YYwritebookmarkline \readcontents\relax}
+
+\def\topofcontents{%
+ \null\vskip-3\baselineskip\centerline{C{\sc ONTENTS} (\sc\uppercase\expandafter{\title})}\medskip
+ \ifacro
+ \ifpdftex
+ \makebookmarks
+ \ifsepsectionchapter\else\pdfoutline goto name {NOS} count 0 {\outsecname}\fi% no section listing; AS
+ \pdfdest name {TOC} fith % bookmark for the table of contents
+ \fi
+ \fi
+ \let\YY\YYcontentsline
+}
+
+\def\botofcontents{\vfill
+ \ifpdftex\pdfoutline goto name {TOC} count 0 {Table of Contents}\fi
+ \centerline{\covernote}} % this material will end the table of contents page
+
+\newwrite\exampletable
+
+\newif\ifsaveparseoutput
+\newif\ifchecktable
+
% \Cee\ section macros
% stage one macros for `\B' sections: collecting tokens
@@ -982,17 +1057,13 @@
\let\oldB\B
-\long\def\Bvbpp#1\par{%
- \Bvbp@#1\X\X$\E$\par
-}
-
\long\def\Bvbpp#1\par{% the \vb{\yyendgame}\vb... is inserted by brack.pl
\Bvbp@#1\cleanBtail\X\X$\E$\par
}
\def\cleanBtail\X\X$\E${}
-\long\def\Bvbp@#1\X#2\X$#3\E#4$#5\par{% new version of the above, experimental
+\long\def\Bvbp@#1\X#2\X$#3\E#4$#5\par{%
\yystringempty{#5}%
{% this is a \Cee\ section (@c or @p); it is tempting to assume that the suffix
% is \X\X$\E$\par and forego the invocation of \Bvb@@, however, this is not always
@@ -1086,21 +1157,38 @@
% URL typesetting
-\def\url#1{%
- \hskip0pt plus .3\hsize\penalty100
+\def\urls#1#2{% make it possible to omit the `https://' nonsense
+ \hskip0pt plus .3\hsize\penalty1000
\hskip0pt plus -.3\hsize
{%
\def~{\string~}%
\ifmakepdf
- \pdfURL{{\tt #1}}{#1}%
+ \pdfURL{{\tt #2}}{#1#2}%
\else
- {\tt #1}%
+ {\tt #2}%
\fi
}%
- \hskip0pt plus .2\hsize\penalty100
- \hskip0pt plus -.2\hsize
+ \hskip0pt plus .2\hsize\penalty1000
+ \hskip0pt plus -.2\hsize\relax % this is somewhat of an infidelity in \TeX's syntax
}
+\def\urll#1#2{% make it possible to omit the `https://' nonsense
+ \hskip0pt plus .3\hsize\penalty1000
+ \hskip0pt plus -.3\hsize
+ {%
+ \def~{\string~}%
+ \ifmakepdf
+ \pdfURL{#2}{#1}%
+ \else
+ {\tt #2}%
+ \fi
+ }%
+ \hskip0pt plus .2\hsize\penalty1000
+ \hskip0pt plus -.2\hsize\relax % this is somewhat of an infidelity in \TeX's syntax
+}
+
+\def\url#1{\urls{}{#1}}
+
% commonly used names
\def\CWEB{\.{CWEB}}
@@ -1111,6 +1199,7 @@
\def\noweb{\.{noweb}}
\def\splint{\.{SPLinT}}
\def\POSIX{{\sc POSIX}}
+\def\AST{{\sc AST}}
\def\EAST{{\sc EAST}}
\def\WEST{{\sc WEST}}
\def\ISO{{\mc ISO}}
@@ -1146,13 +1235,130 @@
}%
}
+% a `union' to control command sequences in the .aux files;
+\def\auxunionctl{}% here we add sequences that control namespace switching
+ % although it is handled as a `union', we plan to execute this
+ % sequence rather than use it as a storage list
+\newwrite\auxstream
+
+\def\initauxstream{% this command should be executed only after
+ % all the command sequances have been loaded (i.e. after
+ % noweb.sty, dcols.sty, etc. have been loaded)
+ \immediate\openin\trystream=\jobname.aux
+ \ifeof\trystream
+ \else
+ \restorecslist{aux:global:activate}\auxunionctl
+ \auxunionctl % activate/deactivate individual subsets
+ \immediate\closein\trystream
+ \input \jobname.aux
+ \fi
+ \immediate\openout\auxstream=\jobname.aux
+ \restorecslist{aux:global:prestart}\auxunionctl
+ \auxunionctl
+}
+
+\def\everyendofjob{%
+ \restorecslist{aux:global:precutoff}\auxunionctl
+ \auxunionctl % write delayed data to the stream
+ \immediate\closeout\auxstream
+ \restorecslist{aux:global:preend}\auxunionctl
+ \auxunionctl % do end of run tasks for every command set that writes to aux stream
+ \message{Closed auxilary streams}%
+}
+
+% \end amendment, based on stackexchange question/answer by Bruno LeFloch
+% https://tex.stackexchange.com/questions/39279/test-whether-end-will-really-end-the-run/40894
+% with some simplifications (we do not really need to take care of every possible situation
+% since the \end command appears at a predictable spot)
+
+\def\newend{%
+ \ifdim\pagegoal=\maxdimen
+ \yybreak{\checkdeadcycles}%
+ \else
+ \yybreak{\end}% do nothing, the regular \output will take care of the endgame
+ \yycontinue
+}
+
+\def\checkdeadcycles{%
+ \ifnum\deadcycles=\z@
+ \yybreak{\testpageforstuff}%
+ \else
+ \yybreak{\end}% do nothing, the regular \output will take care of the endgame
+ \yycontinue
+}
+
+% insert the same material \end would insert (see The \TeX book, p.~264)
+\def\forceoutputagain{%
+ \prevdepth=-1000pt
+ \hbox{}\vfill\penalty-'10000000000
+}
+
+\def\testpageforstuff{% temporarily replace the output routine
+ % to check if the page contains stuff other than boxes
+ \begingroup\output{\aftergroup\endgroup\testpageoutput}%
+ \forceoutputagain % call the new output routine
+}
+
+\def\testpageoutput{%
+ \deadcycles=\z@
+ \cleantemppage
+ \yyifpageempty % is there any stuff other than boxes in the vertical list?
+ % this macro is only expanded if \pagegoal=\maxdimen and \deadcycles=0
+ {\everyendofjob}% vertical list is empty
+ {}% whatsit nodes present, let \end take care of them
+ \aftergroup\end
+ \unvbox255
+ \ifnum\outputpenalty=\@M % 10000 the break was not at a penalty item
+ \else
+ \penalty\outputpenalty
+ \fi
+}
+
+\def\cleantemppage{% remove material inserted by \forceoutputagain
+ \setbox255\vbox{%
+ \unvbox255
+ \unskip % remove \vfill
+ \setbox0\lastbox % remove \hbox{}
+ \unskip % remove \topskip
+ }%
+}
+
+\def\yyifpageempty{%
+ \setbox\z@\vbox{%
+ \vbox{}\unvcopy255\setbox0\lastbox
+ \expandafter
+ }%
+ \ifvoid\z@ %\vbox was not the last item, force output again
+ \yybreak{\yysecondoftwo}%
+ \else
+ \yybreak{\yyfirstoftwo}%
+ \yycontinue
+}
+
+\def\con{\par\vfill\eject % finish the section names
+% \ifodd\pageno\else\titletrue\null\vfill\eject\fi % for duplex printers
+ \rightskip 0pt \hyphenpenalty 50 \tolerance 200
+ \setpage \output={\normaloutput\page\lheader\rheader}
+ \titletrue % prepare to output the table of contents
+ \pageno=\contentspagenumber
+ \def\grouptitle{TABLE OF CONTENTS}
+ \message{Table of contents:}
+ \topofcontents \startpdf
+ \line{\hfil Section\hbox to3em{\hss Page}}
+ \let\ZZ=\contentsline
+ \readcontents\relax % read the contents info
+ \botofcontents
+ \newend
+} % print the contents page(s) and terminate
+
% sugar
\def\FOREVER{{\bf forever}}
+% microtypography extensions: activate optical alignment
\ifacro
\ifpdftex
- \input extras/texmf/macros/protcode.tex
+ \input other/texmf/macros/protcode.tex
\pdfprotrudechars=2
\setprotcode\tenrm
\setprotcode\ninerm
@@ -1167,10 +1373,104 @@
% do not stretch characters
%\pdfdjustspacing=2
%\pdffontexpand\sevenrm 30 20 10 autoexpand
- % TODO: use \pdfsavepos, \pdflastxpos, and \pdflastypos to
- % save the position of index terms on the page
\fi
\fi
+% TODO: use \pdfsavepos, \pdflastxpos, and \pdflastypos to
+% save the position of index terms on the page
+
+% unstable macros
+
+% two column typesetting for short sections
+% CAUTION: while the macros below seem to work, their use requires a great deal of care
+% o they assume that the sections are narrow so only use them if you are reasonably sure that
+% the width of the sections to be typeset as double column text are stable and not
+% going to change much
+% o sections to be so typeset should not be part of `concatenated' @c sections; otherwise
+% the noweb style section pointers in the margins will clash with the text in the adjacent
+% column (this is not a concern if the traditional \CWEB\ referencing style is used
+
+\def\dcolbM{\expandafter\let\csname M\endcsname\thisM
+ \vskip 0pt plus 3\baselineskip\penalty-100 \vskip 0pt plus -3\baselineskip
+ \vskip\ht\strutbox
+ \vskip-\topskip % negate the \topskip at the beginning of the column box
+ \vskip-\smallskipamount
+ \vskip\intersecskip
+ \begindoublecols
+ \csname M\endcsname
+}
+
+\def\dcolbN{\expandafter\let\csname M\endcsname\thisN
+ \vskip\ht\strutbox
+ \vskip-\topskip % negate the \topskip at the beginning of the column box
+ \vskip-\smallskipamount
+ \vskip\intersecskip
+ \begindoublecols
+ \csname N\endcsname
+}
+
+\def\dcoleM{%
+ \vfil\enddoublecols
+ \crudelet{M}{thisM}%
+ \crudelet{N}{thisN}%
+ \csname M\endcsname
+}
+
+\def\dcoleN{%
+ \vfil\enddoublecols
+ \crudelet{M}{thisM}%
+ \crudelet{N}{thisN}%
+ \csname N\endcsname
+}
+
+\def\beginfoldedsections{% begin double column output starting with the next
+ % \M or \N section
+ \ifbootstrapmode
+ \else
+ \crudelet{thisM}{M}%
+ \crudelet{thisN}{N}%
+ \crudelet{M}{dcolbM}%
+ \crudelet{N}{dcolbN}%
+ \fi
+}
+
+\def\endfoldedsections{% finish double column output starting with the next
+ % \M or \N section
+ \ifbootstrapmode
+ \else
+ \crudelet{M}{dcoleM}%
+ \crudelet{N}{dcoleN}%
+ \fi
+}
+
+\def\crudelet#1#2{% ignore \outer (as a useful side effect these assignments can be skipped
+ % as a part of an \if... statement without producing `incomplete \iftrue'
+ % or like errors
+ \edef\next{\global\let\expandafter\nx\csname#1\endcsname\expandafter\nx\csname#2\endcsname}\next
+}
+
+\def\beginfoldedsectionshere{% similar to \beginfoldedsections but can be used immediately
+ % before the @c portion of the section that will be typeset in two
+ % columns; this way the \TeX\ portion of the section can still be
+ % typeset in a single column
+ % save the current section macro to be restored by \endfoldedsections
+ \ifbootstrapmode
+ \else
+ \crudelet{thisN}{N}% both types of section macros are saved
+ \crudelet{thisM}{M}% just in case the section changes to an \M section
+ \vskip\ht\strutbox
+ \vskip-\topskip % negate the \topskip at the beginning of the column box
+ \vskip-\smallskipamount % undo the skip from \begindoublecols
+ \yskip
+ \begindoublecols
+ \parindent=1em
+ \fi
+}
+
+% support reproducible compilation
+\ifpdftex
+ \pdfinfoomitdate=1
+ \pdftrailerid{}%
+\fi
\tenpoint
diff --git a/support/splint/tex/noweb.sty b/support/splint/tex/noweb.sty
index a0f2c7cf43..b7dce9623b 100644
--- a/support/splint/tex/noweb.sty
+++ b/support/splint/tex/noweb.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -14,6 +14,43 @@
% You should have received a copy of the GNU General Public License
% along with SPLinT. If not, see <http://www.gnu.org/licenses/>.
+\def\yyuniontag{\auxunionctl}
+\defp\xrefunionctl{}% sequence to activate/deactivate/take other action for
+ % xref set of macros
+
+\defc\xrefunionctl{%
+ \restorecslist{aux:global:xrefs}\xrefunion
+}
+\savecs{aux:global:activate}\xrefunionctl
+
+\defc\xrefunionctl{%
+ \restorecslist{aux:global:xrefs:neutral}\xrefunion
+}
+\savecs{aux:global:deactivate}\xrefunionctl
+
+\defc\xrefunionctl{% this command should not make any page material contributions
+ \message{xrefs...}%
+}
+\savecs{aux:global:preend}\xrefunionctl
+
+\defc\xrefunionctl{% writing a header, etc.
+ \message{xrefs...}%
+ \toksa\expandafter{\xrefunion}%
+ \immediate\write\auxstream{\harmlesscomment\the\toksa}%
+}
+\savecs{aux:global:prestart}\xrefunionctl
+
+\yyuniondeclare\xrefunion{aux:global:xrefs}
+
+\defp\MNM#1#2#3#4{}
+\defp\XXX#1#2#3{}
+\defp\BBB#1#2#3#4{}
+\defp\SSS{}
+
+\toyyunion{aux:global:xrefs:neutral}
+
+% end global stream union macros for cross referencing
+
\def\stseclap{\rightskip=0pt % get out of C mode (cf. \B)
\sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50
\noindent{\let\*=\empty\llap{\tentitle\setsafesecno{\secno}\quad}}% push it to the margins
@@ -33,17 +70,25 @@
\fi
}
+\ifx\customchapterstyle\UNDEFINED
+ \def\customchapterstyle{0}
+\fi
+
+\ifx\customsubchapterstyle\UNDEFINED
+ \let\customsubchapterstyle\empty
+\fi
+
\def\stsecchap#1#2{\rightskip=0pt % get out of C mode (cf. \B)
\sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50
%
\ifnum#1>\z@ % the `level' if this section is below that of a chapter
\noindent{\let\*=\empty\llap{\tentitle
- \setsafesecno{\secno}\quad}}{\ttl #2}% push it to the margins
- \putxref{\MNM}{}{}.% generate a location reference for noweb cross referencing style
- \smallskip\noindent
+ \setsafesecno{\secno}\quad}}{\stsecchapttl{#1}#2\stsecchapterminator{#1}}% push it to the margins
+ \putxref{\MNM}{\customsubchapterstyle}{}.% generate a location reference for noweb cross referencing style
+ \stsecchapseparator{#1}%
\else
\setchaptertitle{\secno}{#2}%
- \putxref{\MNM}{0}{}.% generate a chapter location reference for noweb cross referencing style
+ \putxref{\MNM}{\customchapterstyle}{}.% generate a chapter location reference for noweb cross referencing style
\fi
%
\ifpdftex\smash{\raise\baselineskip\hbox to0pt{%
@@ -52,6 +97,13 @@
\let\*=\empty\special{%
pdf: dest (\romannumeral\secstar) [ @thispage /FitH @ypos ]}}}\fi\fi}
+\def\stsecchapterminator#1{} % for deeply nested sections one may put a dot at the end
+\def\stsecchapseparator#1{%
+ \smallskip
+ \noindent
+}
+\def\stsecchapttl#1{\ttl}
+
\def\setchaptertitle#1#2{%
\global\chapterheadtrue
\null
@@ -71,17 +123,20 @@
}%
\prevdepth=0pt
\bigskip
- \noindent{\let\*=\empty\llap{\tentitle\setsafesecno{\secno}\quad}}%
+ \noindent%{\let\*=\empty\llap{\tentitle\setsafesecno{\secno}\quad}}%
}
\let\startsection\stseclap
\expandafter\def\expandafter\oldB\expandafter{\oldB\global\csectionstarttrue\putxref{\BBB}{}{}.}
+% the command that writes references to the reference stream (file):
+% \<reference name>{page}{section}{param1}{param2}
+%
\def\putxref#1#2.{% it is important that #2 contains at least two braced groups (as in {}{})
% otherwise the parameter scanning mechanism will strip the outside braces
\ifxreflocal
- {\edef\next{\write\xrefstream{\nx\nx\nx#1{\nx\the\nx\pageno}{\secno}#2\harmlesscomment}}\next}%
+ {\edef\next{\write\auxstream{\nx\nx\nx#1{\nx\the\nx\pageno}{\secno}#2\harmlesscomment}}\next}%
\fi
}
@@ -94,7 +149,7 @@
{\def\sname{#2}%
\def\stripprefix##1>{ }%
\let\*\empty
- \edef\next{\write\xrefstream{\nx\nx\nx\XXX{\nx\the\nx\pageno}{\secno}{#1}\harmlesscomment
+ \edef\next{\write\auxstream{\nx\nx\nx\XXX{\nx\the\nx\pageno}{\secno}{#1}\harmlesscomment
\expandafter\stripprefix\meaning\sname}}\next}%
\fi
}
@@ -141,7 +196,7 @@
\def\setdownlink#1#2#3{%
{\setbox0\vtop{
\sevenpoint\halign{#3\cr
- \xref@nowebsection{\csname xchain[#1][#2]down\endcsname}\cr
+ \setsafesecorchapno{\csname xchain[#1][#2]down\endcsname}\cr
\relax\ifacro
\pdflink{\csname xchain[#1][#2]down\endcsname}{\raise3.5pt\hbox{$\scriptscriptstyle\bigtriangledown$}}%
\else
@@ -162,14 +217,16 @@
\lower1.3pt\hbox{$\scriptscriptstyle\bigtriangleup$}%
\fi
\cr
- \xref@nowebsection{\csname xchain[#1][#2]up\endcsname}\cr
+ \setsafesecorchapno{\csname xchain[#1][#2]up\endcsname}\cr
}
}%
\box0}%
}
+% modify \makenote (used by \pdfnote) to use \noweb\ style references.
+
\def\makenote{%
- \addtokens\toksB{\noexpand\pdflink{\the\toksC}{\setsafesecno{\the\toksC}}}%
+ \addtokens\toksB{\noexpand\pdflink{\the\toksC}{\setsafesecorchapno{\the\toksC}}}%
\toksC={}\global\countC=0
}
@@ -195,22 +252,11 @@
\ \ifacro\pdflink{#3}{#3}\else#3\fi\hbox to3em{\hss#4}}}
\newif\ifxreflocal % are we generating references in noweb style (as page no., position pairs)?
-
-\newread\trystream % generic stream to test for an existence of a file
-
-\def\readlxrefs{% see if the local reference file exists
- \openin\trystream=\jobname.xxr
- \ifeof\trystream
- \else
- \closein\trystream
- \input \jobname.xxr
- \fi
-}
-
\newif\ifcsecactive
-\def\BBB#1#2#3#4{% #1 is the page number
- % #2 is the section number
+\defc\BBB#1#2#3#4{% #1 is the page number
+ % #2 is the section number
+ % #3, #4 are reserved
\csecactivetrue
}
@@ -221,10 +267,14 @@
\lxrcurrentindex=\z@
-\def\MNM#1#2#3#4{% #1 is the page number
- % #2 is the section number
- % #3 is the chapter flag or empty
- % #4 is reserved
+% the command that processes the reference stream by setting
+% chapter numbers, etc. based on the section number (which is
+% unique across all sections); see also \BBB\ above
+
+\defc\MNM#1#2#3#4{% #1 is the page number
+ % #2 is the section number
+ % #3 is the chapter flag or empty
+ % #4 is a possible custom reference
\ifnum#1=\lxrcurrentpage
\else
\lxrcurrentindex=\z@
@@ -235,21 +285,25 @@
\def\nnext{\expandafter\noexpand\csname lxref[#2]\endcsname}%
\yystringempty{#3}{%
\let\nnnext\empty
+ \toksa{\advance\lxrcurrentindex\@ne}%
}{%
- \global\advance\chaptercount\@ne
- \def\nnnext{\the\chaptercount}%
+ \ifnum#3=\z@
+ \toksa{\advance\chaptercount\@ne}%
+ \def\nnnext{\the\chaptercount}%
+ \else
+ \processcustomchapterref{#3}{#4}{\nnnext}%
+ \fi
}%
- \edef\next{\def\nnext{{#1}{\next}{\nnnext}}}%
+ \edef\next{\def\nnext{{#1}{\next}{\nnnext}{#3}}\the\toksa}%
\expandafter
}\next
- \advance\lxrcurrentindex\@ne
}
\def\xref@nowebsection#1{% translate the \CWEB\ section number into a \noweb\ reference
\expandafter\xr@f@nowebsection\romannumeral-1\csname lxref[#1]\endcsname.%
}
-\def\xr@f@nowebsection#1#2#3.{%
+\def\xr@f@nowebsection#1#2#3#4.{%
{#1}{#2}%
}
@@ -263,15 +317,45 @@
}%
}
-\def\setsafesecno#1{%
+\def\xref@sectionorchapter#1{% translate the \CWEB\ section number into a chapter number
+ % if the section begins a chapter or a \noweb\ section reference otherwise
+ \expandafter\xr@f@sectionorchapter\romannumeral-1\csname lxref[#1]\endcsname.%
+}
+
+\ifx\customchlabel\UNDEFINED
+ \def\customchlabel#1#2#3#4{%
+ ch#3%
+ }
+\fi
+
+\def\xr@f@sectionorchapter#1#2#3#4.{%
+ \yystringempty{#3}{{#1}{#1#2}}{%
+ {#1}{\customchlabel{#1}{#2}{#3}{#4}}%
+ }%
+}
+
+\def\setsafesecno#1{% extract the noweb style section reference from the \CWEB\ section index
+ % used to typeset marginal section references
\expandafter\ifx\csname lxref[#1]\endcsname\relax
#1%
\else
- \xref@nowebsection{#1}%
+ \expandafter\lmarginref\romannumeral-1\xref@nowebsection{#1}%
\fi
}
-\def\setsafechapno#1{%
+\def\lmarginref#1#2{{\sscmd\rm#1}\rlap{\sscmd\rm#2}\ }
+
+\def\setsafesecorchapno#1{% if the section begins a chapter, extract the chapter reference,
+ % otherwise, extract the \noweb\ style reference
+ \expandafter\ifx\csname lxref[#1]\endcsname\relax
+ #1%
+ \else
+ \expandafter\eatone\romannumeral-1\xref@sectionorchapter{#1}%
+ \fi
+}
+
+\def\setsafechapno#1{% extract the chapter index
+ % used to typeset chapter headers
\expandafter\ifx\csname lxref[#1]\endcsname\relax
#1%
\else
@@ -297,19 +381,29 @@
\repeat
}
-\def\XXX#1#2#3{%
+\defc\XXX#1#2#3{%
\ifcsecactive % previous command was \BBB (produced by the \B macro)
% \expandafter\def\csname lxref[][]\endcsname{}%
\csecactivefalse
\fi
}
-\def\SSS{\let\XXX\xxxchain} % reference separator
+% the next command takes advantage of the format for section references
+% in the list of all sections: instead of a specific section number that
+% points to the section where the given chunk of code started, the
+% references contain ordered lists of all the section numbers that
+% constitute the contents of the named section;
+% this command should be placed in the main .w file before the list
+% of all sections is included but after all the regular section references.
\def\lxrefseparator{%
- \write\xrefstream{\nx\SSS}%
+ \write\auxstream{\nx\SSS}%
}
+% forming chain references to be used for navigation through a given named section
+
+\defc\SSS{\let\XXX\xxxchain} % reference separator
+
\def\xxxchain#1#2#3{%
\xxxch@in{}{}#3, .%
}
@@ -349,7 +443,7 @@
% replace the default reference setting macros in gindex.sty;
% typeset references so that, for example, \(77){8, 9} becomes
-% \(\pdflink{77}{8c}), \(\pdfpagelink{9}) provided section 77
+% \(\compoundlink{77}{8c}), \(\pagelink{9}) provided section 77
% is section 8c by noweb's reckoning.
\def\consumeonexref#1#2{% #1 is the accumulated references
@@ -357,12 +451,12 @@
\expandafter\ifx\csname lxref[#2]\endcsname\relax
\errmessage{Section #2 does not have a local index.}%
\else
- \yybreak{\expandafter\c@nsumeonexref\romannumeral-1\xref@nowebsection{#2}{#2}{#1}}%
+ \yybreak{\expandafter\c@nsumeonexref\romannumeral-1\xref@sectionorchapter{#2}{#2}{#1}}%
\yycontinue
}
\def\c@nsumeonexref#1#2#3#4#5{% #1 is the page number of the beginning of the section
- % #2 is the (\noweb) section number (within the page) where the term appears
+ % #2 is the (\noweb) section or chapter reference where the term appears
% #3 is the (\CWEB) section number there the term appears
% #4 is the accumulated references
% #5 is a list of pages where this term appears
@@ -370,13 +464,13 @@
}
\def\c@nsume@nexref#1#2#3#4#5#6, {% #1 is the page number of the beginning of the section
- % #2 is the (\noweb) section number (within the page) where the term appears
+ % #2 is the (\noweb) section or chapter reference where the term appears
% #3 is the (\CWEB) section number where the term appears
% #4 is a total list of processed references
% #5 is a local list of processed references
% #6 is a page number from the list
\ifnum#1=#6 % the term appears on the same page where the section begins
- \yybreak{\c@nsume@nexr@f{#1}{#2}{#3}#4{#5}{\compoundlink{#3}{#1#2}}}%
+ \yybreak{\c@nsume@nexr@f{#1}{#2}{#3}#4{#5}{\compoundlink{#3}{#2}}}%
\else
\yybreak{\c@nsume@nexr@f{#1}{#2}{#3}#4{#5}{\pagelink{#6}}}%
\yycontinue
@@ -397,3 +491,5 @@
\def\attachlocallist#1#2#3#4#5#6#7{%
\grabfinexrefs{#6#7}%
}
+
+\toyyunion{aux:global:xrefs}
diff --git a/support/splint/tex/stokenset.sty b/support/splint/tex/stokenset.sty
index 9382415f6c..5f2b5345e3 100644
--- a/support/splint/tex/stokenset.sty
+++ b/support/splint/tex/stokenset.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -23,7 +23,6 @@
\prettywordpairwvis{EXTENDED}{{\tt ext}}{ext}%
\prettywordpair{LT}{{\tt l}}%
\prettywordpair{RT}{{\tt r}}%
-\prettywordpairwvis{$\ undefined}{{\tt\$undefined}}{$undefined}
\prettywordpairwvis{INTEGER}{{$[\,0\ldots9\,]\ast$}}{[0...9]}%
\prettywordpairwvis{IDENTIFIER}{{$[\,\hbox{\tt a}\ldots\hbox{\tt Z}\,0\ldots9\,]\ast$}}{[a...Z0...9]*}%
\prettywordpair{META_IDENTIFIER}{{\cyr\lqq{\rm meta identifier}\rqq}}%
diff --git a/support/splint/tex/trt1.sty b/support/splint/tex/trt1.sty
index 7783e15767..541f187916 100644
--- a/support/splint/tex/trt1.sty
+++ b/support/splint/tex/trt1.sty
@@ -1,4 +1,4 @@
-% Copyright 2014-2020, Alexander Shibakov
+% Copyright 2014-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -36,4 +36,6 @@
\newtoks\toksg
\newtoks\toksh
+\newread\trystream % generic stream to test for an existence of a file
+
\expandafter\def\csname loadtexruntime1\endcsname{\endinput}
diff --git a/support/splint/tex/xarithm.sty b/support/splint/tex/xarithm.sty
index d971092043..85987106f2 100644
--- a/support/splint/tex/xarithm.sty
+++ b/support/splint/tex/xarithm.sty
@@ -1,4 +1,4 @@
-% Copyright 2014-2020, Alexander Shibakov
+% Copyright 2014-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -209,7 +209,7 @@
\xbytigid#2#3{#4#5}%
}
-% similar to \xmultiply by digit above by produces the result in the
+% similar to \xmultiply by digit above but produces the result in the
% usual digit order
\def\xsmallmultiple#1#2{%
diff --git a/support/splint/tex/yxunion.sty b/support/splint/tex/yxunion.sty
deleted file mode 100644
index 4d03d83c78..0000000000
--- a/support/splint/tex/yxunion.sty
+++ /dev/null
@@ -1,33 +0,0 @@
-% Copyright 2012-2020, Alexander Shibakov
-% This file is part of SPLinT
-%
-% SPLinT 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.
-%
-% SPLinT 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 SPLinT. If not, see <http://www.gnu.org/licenses/>.
-
-% the original, minimal bootstrapping macros were designed to process
-% \prodstyle{\%token} declarations only and are enough to establish the
-% interface between the \bison\ parser and the \bison\ lexer; to serve
-% the secondary task of providing typesetting information to
-% the \bison\ parser, all forms of token declarations must be processed.
-
-\restorecslist{bootstrap}\yyunion % get the original bootstrap macros
-
-\def\precdecls#1#2#3#4#5{#3}
-
-\def\symbolprec#1#2{%
- \toksa{}\toksb{}%
- #1%
- \yytoksempty\toksb{}{\immediate\write\tokendefs{\noexpand\tokenpp{\the\toksb}}}%
-}
-
-\savecslist{bootstrap}\yyunion
diff --git a/support/splint/tex/yy.sty b/support/splint/tex/yy.sty
index 96769a0fc5..cf842ca3b0 100644
--- a/support/splint/tex/yy.sty
+++ b/support/splint/tex/yy.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -24,7 +24,6 @@
\def\optimization{0}% created with \csname ... \endcsname
\fi
-\newwrite\tokendefs
\let\nx\noexpand
\input yycommon.sty % general routines for stack and array access
@@ -48,8 +47,9 @@
% necessary and is removed by \removefinalvb (see limbo.sty and brack.pl for
% details).
-\expandafter\def\expandafter\multicharswitch\expandafter
-{\multicharswitch\yyendgame{\yyinput\yyeof\yyeof\endparseinput\removefinalvb}}
+\amendswitch\multicharswitch\near\yyeof\by\yyendgame\to\multicharswitch % add a new label
+\replaceaction\multicharswitch\at\yyendgame % replace the new empty action
+ \by{{\yyinput\yyeof\yyeof\endparseinput\removefinalvb}}\to\multicharswitch
\def\indexpseudonamespace{[index]}
@@ -61,11 +61,15 @@
\def\modebootstrap{%
\edef\tokendeffile{\jobname.tok}% so that the name of the token file can track the name of the parser
- \edef\bstrapparser{byytab.tex}% sets \bootstrapmodetrue
+ \ifx\bstrapparser\UNDEFINED\def\bstrapparser{byytab.tex}\fi% sets \bootstrapmodetrue (again)
+ \ifx\bstraptokens\UNDEFINED\def\bstraptokens{}\fi
+ \bootstrapmodetrue % yycommon defines \newif\ifbootstrapmode that sets \ifbootstrapmode to \iffalse
\def\bootstraplexersetup{\let\yylexreturn\yylexreturnbootstrap}% only return tokens whose value is known at bootstrap
\input yybootstrap.sty%
\def\PB##1{}
\def\inlineTeXx##1{}
+ \def\texref##1{}
+ \def\texrefx##1##2{}
}
\def\modenormal{%
@@ -78,8 +82,16 @@
%\def\fgetelemof##1\at##2{% speeds up the lookup
% \csname ##1\parsernamespace\the##2\endcsname
%}%
- \input yyinit.sty%
- \input yytexlex.sty%
+ \input yyinit.sty %
+ \input yytexlex.sty %
+ \input gindex.sty %
+ \input noweb.sty %
+ \xreflocaltrue
+ \let\sectionlistsetup\lxrefseparator
+ \let\inx\inxmod
+ \let\fin\finmod
+ \termindextrue
+ \immediate\openout\gindex=\jobname.gdx
}
\input yydebug.sty
diff --git a/support/splint/tex/yybootstrap.sty b/support/splint/tex/yybootstrap.sty
index 97ddb1a666..898e385b22 100644
--- a/support/splint/tex/yybootstrap.sty
+++ b/support/splint/tex/yybootstrap.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -16,15 +16,18 @@
% token equivalence table does not exist, switch to a bootstrap parser
+\newwrite\tokendefs
+
\ifx\tokendeffile\UNDEFINED
\else
\immediate\openout\tokendefs=\tokendeffile
\fi
+
\genericparser
name: bootstrap,
ptables: \bstrapparser,
ltables: cweb/ltab.tex,
- tokens: {},
+ tokens: \bstraptokens,
asetup: \bootstraplexersetup,
dsetup: \newlexerstateextra\newparserstateextra,
rsetup: {},
diff --git a/support/splint/tex/yycommon.sty b/support/splint/tex/yycommon.sty
index a8144efaa4..9dd249bd76 100644
--- a/support/splint/tex/yycommon.sty
+++ b/support/splint/tex/yycommon.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -14,9 +14,22 @@
% You should have received a copy of the GNU General Public License
% along with SPLinT. If not, see <http://www.gnu.org/licenses/>.
+% basic data manipulation and testing routines; these are not
+% specific to any parsing/lexing task and may be used independently;
+% register definitions from the `\TeX\ runtime' (trt1.sty) are needed
+% by the list and switch macros
+
\catcode`\@=11
-% stacks will be defined as `list' macros, consisting of \sts{...}\sts{...}... type lists
+% a nestable loop, needed by the macros in xarithm.sty, included
+% immediately after the definition
+
+\def\bloop#1\repeat{#1\bl@op{#1}\repeat\fi}
+\def\bl@op#1\repeat\fi{\fi#1\bl@op{#1}\repeat\fi}
+
+\input xarithm.sty
+
+% (unoptimized) stacks will be defined as `list' macros, consisting of \sts{...}\sts{...}... type lists
% in \yypopstack, the second parameter must be a positive number
%
% note: perhaps, replacing \sts with the name of the stack would allow for more economical
@@ -111,55 +124,28 @@
\def\stackfinish#1{\def#1{0\message{:stack empty:}}}
-\def\yyreadvstack#1\upto#2{% assume that #2 > 0
- \edef\sts{\noexpand\splitstack{\number#2}{\expandafter\xincrement\expandafter{\number\toptoks}}}#1\stackend#1%
-}
-
-\long\def\splitstack#1#2#3{%
- \expandafter\def\csname$'#1\endcsname{#3}% $
- \ifnum#2<\@cclvi % we have not reached the maximum allocated number of token registers
- \expandafter\toksdef\csname$$'#1\endcsname=#2
- \toks#2{#3}%
- \fi
- \ifnum#1=\@ne %we have read the values
- \let\sts\scoopupstack
- \else
- \edef\sts{\noexpand\splitstack{\xdecrement{#1}}{\xincrement{#2}}}%
- \fi
-}
+% (unoptimized) arrays of integers are represented by a string of tokens `element0 \or element1 \or ...'
+% #2 is a register (otherwise the case and the integer from the array `coalesce');
+% the following macro was designed to make something like
+% \tempca=\getelemof\yytable\at\yyn\relax possible so it has to expand to a number;
+% incidentally, some care should be taken using the above assignment to make sure that
+% it is not followed by an expandable token (such as \if) as in this case the token might be
+% expanded prematurely while the assignment is looking for the first non-expandable token which
+% is not part of the number; this is the reason for the \relax
-\def\yypeekvstack#1\upto#2{% assume #2 > 0
- \edef\sts{\noexpand\peelstack{\number#2}{\expandafter\xincrement\expandafter{\number\toptoks}}}#1\relax%
+\def\getelemof#1\at#2{% #1 is the name of the token register containing the array, #2 is the index
+ \expandafter\get@l@mof\expandafter{\csname#1\endcsname}{#2}%
}
-\long\def\peelstack#1#2#3{%
- \expandafter\def\csname$'#1\endcsname{#3}% $
- \ifnum#2<\@cclvi % we have not reached the maximum allocated number of token registers
- \expandafter\toksdef\csname$$'#1\endcsname=#2
- \toks#2{#3}%
- \fi
- \ifnum#1=\@ne %we have read the values
- \let\sts\eatone
- \else
- \edef\sts{\noexpand\peelstack{\xdecrement{#1}}{\xincrement{#2}}}%
- \fi
+\def\get@l@mof#1#2{%
+ \expandafter\get@lemof\expandafter{\the#1}{#2}%
}
-% macros to support new printing routines
-
-\def\yypeeksstack#1\upto#2\withprefix#3{% assume #2 > 0
- \edef\sts{\noexpand\peelsstack{\number#2}}%
- \expandafter\def\expandafter\sts\expandafter{\sts{#3}{}}#1\relax%
+\def\get@lemof#1#2{%
+ \ifcase#2 #1\else\fi
}
-\long\def\peelsstack#1#2#3#4{%
- \ifnum#1=\@ne %we have read the values
- #3\let\sts\eatone
- \else
- \edef\sts{\noexpand\peelsstack{\xdecrement{#1}}}%
- \expandafter\def\expandafter\sts\expandafter{\sts{#2}{#2{#4}#3}}%
- \fi
-}
+\let\fgetelemof\getelemof
% token register access
@@ -210,6 +196,29 @@
#3{#1#2}%
}
+% a macro to append new material to an existing control sequence
+
+\def\appendxrt#1#2#3#4{% #1 one of \def, \edef (why?), \gdef, \xdef (why?)
+ % #2 sequence name being appended to
+ % #3 the material appended to the right (expanded once)
+ % #4 the material appended to the right of #3 (not expanded)
+ \expandafter\app@ndxrt\expandafter{\csname #2\endcsname}{#1}{#3}{#4}%
+}
+
+\def\app@ndxrt#1#2#3#4{% #1 is the sequence being appended to
+ % #2 is \?def
+ % #3 is expanded once (appended to the right of #1)
+ % #4 is appended to the right of #3 (not expanded)
+ \expandafter\ap@@ndxrt\expandafter{#3}{#4}{#2}{#1}%
+}
+
+\def\ap@@ndxrt#1#2#3#4{% #1 is expanded once (appended to the right of #4)
+ % #2 is appended to the right of #1 (not expanded)
+ % #3 is \?def
+ % #4 is the sequence being appended to
+ \expandafter#3\expandafter#4\expandafter{#4#1#2}%
+}
+
% the following macros are an expandable way to determine if a token register is empty;
% while a number of different conditionals can be used, including plain \iffalse,
% this choice seems to result in a shortest macro and the fewest number of \expandafter's;
@@ -236,9 +245,10 @@
% non-brace while the parameter scanning mechanism of \TeX\ will try
% to collect the smallest possible balanced input; the `excessive'
% braces will disappear in the expansion of the `\if...' construct;
-% the reason \if or other macros that expand their arguments are so well suited for this
-% `chain expansion' mechanism is in the fact that the expansions for \string and \if... are launched
-% from the same point.
+% the reason \if or other macros that expand their arguments are so
+% well suited for this `chain expansion' mechanism is in the fact
+% that the expansions for \string and \if... are launched from the
+% same point.
\long\def\yytoksempty#1{%
\iffalse{{\fi
@@ -283,7 +293,19 @@
{\expandafter\yythirdofthree\expandafter{\string}}%
}
-% the macros below are a derivation of David Kastrup's magnificent string comparison
+% the macro below can be simplified by reducing the number of braces
+% but then \yytoks@mpty could not be reused
+
+\long\def\yystartsinbrace#1{%
+ \iffalse{\fi
+ \if{\yytoks@mpty#1}}%
+ \yybreak\yysecondoftwo
+ \else
+ \yybreak\yyfirstoftwo
+ \yycontinue
+}
+
+% the macros below are based on David Kastrup's magnificent string comparison
% macros:
% \def\strequal#1{\number\strequalstart{}{}#1\relax}
% \def\strequalstart#1#2#3{\if#3\relax\strequalstop\fi
@@ -318,26 +340,75 @@
\def\yystrcleanup#1\yysecondoftwo{#1\yyfirstoftwo}
-% a `self-propagating \expandafter'; allows building lists like \yysx a\yysx b ...
-% so that a \romannumeral-1 at the beginning of the list would cary the expansion
-% to the last token but leave the list intact; note that #1 should be a single token
+% prefix comparison macros
+% use: \romannumeral-0\yyprefixmatch{string1}{string2}
+% this will expand into {common prefix}{rest of string1}{rest of string2}
-\def\yysx#1#2{%
- \expandafter\space\expandafter\yysx\expandafter#1\romannumeral-1#2%
+\def\yyprefixmatch#1#2{%
+ \yyprefixmatchbegin{#1\end}{#2\relax}{}%
}
-% the macro below can be simplified by reducing the number of braces
-% but then \yytoks@mpty could not be reused
+\def\yyprefixmatchbegin#1#2{%
+ \yypr@fixmatch#1{#2}%
+}
-\long\def\yystartsinbrace#1{%
- \iffalse{\fi
- \if{\yytoks@mpty#1}}%
- \yybreak\yysecondoftwo
+\def\yypr@fixmatch#1#2#{%
+ \yypr@fixm@tch{#1}{#2}%
+}
+
+\def\yypr@fixm@tch#1#2#3{% #2 is the rest of string1, #1 is the first char of string1
+ \yyprefixrematch#3{#1}{#2}%
+}
+
+\def\yyprefixrematch#1#2#{%
+ \yypr@fixrematch{#1}{#2}%
+}
+
+\def\yypr@fixrematch#1#2#3#4#5{%
+ \ifx#1#3%
+ \yybreak{\yyprefixmatchbegin{#4}{#2}{#5#1}}%
\else
- \yybreak\yyfirstoftwo
+ \yybreak{\yyprefixmatchend{#3#4}{#1#2}{#5}}%
\yycontinue
}
+\def\yyprefixmatchend#1#2#3{%
+ \yypr@fixmatchend#1#2{#3}%
+}
+
+\def\yypr@fixmatchend#1\end#2\relax#3{%
+ {#3}{#1}{#2}%
+}
+
+% macros to check if the string matches #1* for some char #1
+% use: \yyifrepeatedchar{char}{string}{true case}{false case}
+
+\def\yyifrepeatedchar#1#2{%
+ \yyifr@peatedchar#1#2\relax
+}
+
+\def\yyifr@peatedchar#1#2{%
+ \ifx#2\relax
+ \yybreak{\yyfirstoftwo}% string complete, match
+ \else
+ \yybreak{\yyifr@p@atedchar#1#2}%
+ \yycontinue
+}
+
+\def\yyifr@p@atedchar#1#2{%
+ \ifx#1#2%
+ \yybreak{\yyifr@peatedchar#1}% next character
+ \else
+ \yybreak{\yyifrepeatedcharmismatch}%
+ \yycontinue
+}
+
+\def\yyifrepeatedcharmismatch#1\relax{%
+ \yysecondoftwo
+}
+
+% end prefix comparison macros
+
% a test to determine whether the argument is a given control sequence
\long\def\yyisthiscs#1#2{%
@@ -362,95 +433,443 @@
\expandafter\yyisthiscs\expandafter{\the#1}%
}
-\long\def\yyfirstoftwo#1#2{#1}
-\long\def\yysecondoftwo#1#2{#2}
-\long\def\yyfirstofthree#1#2#3{#1}
-\long\def\yysecondofthree#1#2#3{#2}
-\long\def\yythirdofthree#1#2#3{#3}
+% a `self-propagating \expandafter'; allows building lists like \yysx a\yysx b ...
+% so that a \romannumeral-1 at the beginning of the list would cary the expansion
+% to the last token but leave the list intact; note that #1 should be a single token
-\long\def\yypioneofthree#1#2#3{{#1}}
-\long\def\yypitwoofthree#1#2#3{{#2}}
-\long\def\yypithreeofthree#1#2#3{{#3}}
+\def\yysx#1#2{%
+ \expandafter\space\expandafter\yysx\expandafter#1\romannumeral-1#2%
+}
-% (unoptimized) arrays of integers are represented by a string of tokens `element0 \or element1 \or ...'
-% #2 is a register (otherwise the case and the integer from the array `coalesce');
-% the following macro was designed to make something like
-% \tempca=\getelemof\yytable\at\yyn\relax possible so it has to expand to a number;
-% incidentally, some care should be taken using the above asignment to make sure that
-% it is not followed by an expandable token (such as \if) as in this case the token might be
-% expanded prematurely while the assignment is looking for the first non-expandable token which
-% is not part of the number; this is the reason for the \relax
+% linked list macros
-\def\getelemof#1\at#2{% #1 is the name of the token register containing the array, #2 is the index
- \expandafter\get@l@mof\expandafter{\csname#1\endcsname}{#2}%
-}
+\newif\iftracinglists
-\def\get@l@mof#1#2{%
- \expandafter\get@lemof\expandafter{\the#1}{#2}%
+\def\initlist#1{% #1 is the list name
+ \iftracinglists
+ \message{init list<#1>}%
+ \fi
+ \expandafter\def\csname list.counter(#1)\endcsname{0}% init the counter
+ \resetlistpointer{#1}%
}
-\def\get@lemof#1#2{%
- \ifcase#2 #1\else\fi
+\def\resetlistpointer#1{%
+ \iftracinglists
+ \message{reset list pointer<#1>}%
+ \fi
+ \expandafter\def\csname list.pointer(#1)\endcsname{0}% init the pointer
+}
+
+% the macro below may fail on some potential elements (the ones that contain #'s);
+% for extra robustness one may use \appendtolistx after storing the list element in
+% a token register.
+% if the list implementation changes, \splitlist@t must change too
+
+\def\appendtolistg#1#2#3{% #1 is the list name
+ % #2 is the list element
+ % #3 is the action on the contents
+ % store the contents in the inner element
+ \expandafter#3\csname list.term.1(#1)[\csname list.counter(#1)\endcsname]\endcsname{ #2}%
+ \iftracinglists
+ {\edef\lname{#1}\toksa\expandafter\expandafter\expandafter
+ {\csname list.term.1(#1)[\csname list.counter(#1)\endcsname]\endcsname}%
+ \message{adding to list<#1> at \showlistcounter{\lname}::\the\toksa.}}%
+ \fi
+ {%
+ \edef\listname{#1}%
+ \tempca\csname list.counter(\listname)\endcsname\relax
+ % outer element name
+ \toksa\expandafter{\csname list.term.0(\listname)[\the\tempca]\endcsname}%
+ % inner element name
+ \toksb\expandafter{\csname list.term.1(\listname)[\the\tempca]\endcsname}%
+ \advance\tempca by\@ne
+ % next outer element name
+ \toksc\expandafter{\csname list.term.0(\listname)[\the\tempca]\endcsname}%
+ \edef\next{%
+ % store the new counter
+ \def\expandafter\noexpand\csname list.counter(\listname)\endcsname{\the\tempca}%
+ % wrap the inner element
+ \def\the\toksa{\noexpand\expandafter\the\toksb\noexpand\romannumeral0\the\toksc}%
+ }\expandafter
+ }\next % \next is not affected by this
}
-\let\fgetelemof\getelemof
+\def\appendtolist#1#2{\appendtolistg{#1}{#2}{\def}}
+\def\appendtolistx#1#2{\appendtolistg{#1}{#2}{\edef}}
+\def\appendtolisti#1#2{\appendtolistg{#1}{#2}{\fdef}}
-% a nestable loop
+% note that lists with \listiterator entries can be executed and spliced
+% but some functions (like \replace...) below do not work properly
-\def\bloop#1\repeat{#1\bl@op{#1}\repeat\fi}
+\def\fdef#1#2{%
+ \def#1{\listiterator{#1}{#2}}% so that #1 knows its name ...
+}
-\def\bl@op#1\repeat\fi{\fi#1\bl@op{#1}\repeat\fi}
+\def\listiteratorsimple#1#2{%
+ #2%
+}
-% optimization macros: currently, the level of optimization has to be consistent throughout the
-% document, i.e. \optimize macros have to be called on the same arrays after loading.
-% the reason is the yyfaststack.sty file that modifies the \newtable macro once for all the tables
+\let\listiterator\listiteratorsimple % expand the list without preprocessing
-\def\optimize#1{%
- \setoptopt{#1}%
- \tempca\z@
- \bloop
- \tempcb=\expandafter\ifcase\expandafter\tempca\the\csname#1\endcsname\else\@MM\fi\relax
- \ifnum\tempcb<\@MM %
- \expandafter\edef\csname #1\parsernamespace\the\tempca\endcsname{\the\tempcb}%
- \advance\tempca\@ne
- \repeat
+% the name of the next macro is misleading: the whole
+% concatenated list starts at the first term of list #1
+% but the only way to append to the resulting list is to append to
+% list #2; any attempt to append a term to list #1 will
+% disconnect the lists (although they can be concatenated again)
+
+\def\concatlists#1#2{%
+ \expandafter\expandafter\expandafter
+ \let\expandafter\expandafter
+ \csname list.term.0(#1)[\csname list.counter(#1)\endcsname]\endcsname
+ \csname list.term.0(#2)[0]\endcsname
}
-\def\optimizetext#1{% optimizing text arrays
- \setoptopt{#1}%
- \tempca\z@
- \@ptimizetext{#1}
+\def\listisempty#1{%
+ \ifnum\csname list.counter(#1)\endcsname=\z@
+ \yybreak\yyfirstoftwo
+ \else
+ \yybreak\yysecondoftwo
+ \yycontinue
}
-\def\@ptimizetext#1{%
- \edef\next{\expandafter\ifcase\expandafter\tempca\the\csname#1\endcsname\else\end\fi}%
- \ifx\next\endcontainer
- \let\next\eatone
+% execute a slice of a list (commonly amended by an iterator)
+
+\def\evallistbetween#1#2#3{% #1 is the list name
+ % #2 is the start marker
+ % #3 is the finish marker
+ \ifnum#3<#2\relax
+ \yybreak{}%
\else
- \expandafter\edef\csname #1\parsernamespace\the\tempca\endcsname{\next}%
- \advance\tempca\@ne
- \let\next\@ptimizetext
+ \yybreak{%
+ \expandafter\expandafter\expandafter\@vallistbetween\csname list.term.0(#1)[#3]\endcsname{#1}{#2}{#3}%
+ }%
+ \yycontinue
+}
+
+\def\@vallistbetween#1#2#3#4#5#6#7#8{% #1 \expandafter
+ % #2 the contents of the element at #6
+ % #3 \romannumeral
+ % #4 0
+ % #5 the next element in the remaining list
+ % #6 the list name
+ % #7 the start marker
+ % #8 the finish marker
+ \expandafter\edef\csname list.term.0(#6)[#8]\endcsname{%
+ \noexpand#1\noexpand#2\noexpand#3#4\noexpand\space
+ }% terminate the list temporarily
+ \executelistat{#6}{#7}% execute the list slice
+ \expandafter\edef\csname list.term.0(#6)[#8]\endcsname{%
+ \noexpand#1\noexpand#2\noexpand#3#4\noexpand#5%
+ }% restore the list
+}
+
+% the macro below cannot be used with iterator amended lists (unless the iterator
+% is purely expandable)
+
+\def\readlistbetween#1#2#3\to#4{% #1 is the list name
+ % #2 is the start marker
+ % #3 is the finish marker
+ % #4 is name of the token register
+ \ifnum#3<#2\relax
+ %\errmessage{trying to read a negative slice (#2->#3) in list #1}%
+ #4{}%
+ \else
+ \expandafter\expandafter\expandafter\r@adlistbetween\csname list.term.0(#1)[#3]\endcsname{#1}{#2}{#3}{#4}%
\fi
- \next{#1}%
}
-\def\uoptimize#1{% same as the macro above but produces nonnegative constants as \mathchardef's
- \setoptopt{#1}%
- \tempca\z@
- \bloop
- \tempcb=\expandafter\ifcase\expandafter\tempca\the\csname#1\endcsname\else\@MM\fi\relax
- \ifnum\tempcb<\@MM %
- \toksa\expandafter{\csname #1\parsernamespace\the\tempca\endcsname}%
- \edef\next{\mathchardef\the\toksa=\the\tempcb\relax}\next
- \advance\tempca\@ne
- \repeat
+\def\r@adlistbetween#1#2#3#4#5#6#7#8#9{% #1 \expandafter
+ % #2 the contents of the element at #6
+ % #3 \romannumeral
+ % #4 0
+ % #5 the next element in the remaining list
+ % #6 the list name
+ % #7 the start marker
+ % #8 the finish marker
+ % #9 the token register
+ \expandafter\edef\csname list.term.0(#6)[#8]\endcsname{%
+ \noexpand#1\noexpand#2\noexpand#3#4\noexpand\space
+ }% terminate the list temporarily
+ #9\expandafter{\romannumeral0\executelistat{#6}{#7}}% store the list slice
+ \expandafter\edef\csname list.term.0(#6)[#8]\endcsname{%
+ \noexpand#1\noexpand#2\noexpand#3#4\noexpand#5%
+ }% restore the list
+}
+
+\def\consumelistupto#1#2\to#3{%
+ \readlistbetween{#1}{\showlistpointer{#1}}{#2}\to{#3}%
+ {%
+ \iftracinglists
+ \message{splice<#1> (\csname list.pointer(#1)\endcsname,#2)}%
+ \fi
+ \tempca=#2\relax
+ \advance\tempca\@ne
+ \ifnum\tempca>\showlistpointer{#1}\relax
+ \edef\next{\def\expandafter\noexpand\csname list.pointer(#1)\endcsname{\the\tempca}}%
+ \else
+ \let\next\empty
+ \fi
+ \expandafter
+ }\next
+}
+
+\def\consumefulllist#1\to#2{%
+ #2\expandafter{\romannumeral0\executelistat{#1}{\showlistpointer{#1}}}%
+}
+
+% the macro below is not aware of the list iterators so it should be used carefully with amended lists
+% (one possible way is to redefine the list iterator before applying this macro).
+
+\def\changelistelem#1#2#3#4{% #1 list name
+ % #2 marker
+ % #3 prefix
+ % #4 suffix
+ \expandafter\ch@ngelistelem\csname list.term.1(#1)[#2]\endcsname{#3}{#4}%
+}
+
+\def\ch@ngelistelem#1#2#3{
+ \expandafter\ch@ng@listelem\expandafter{#1}#1{#2}{#3}%
+}
+
+\def\ch@ng@listelem#1#2#3#4{% remove the space added by the list packaging macros
+ \expandafter\ch@ng@l@stelem\expandafter{\romannumeral0#1}{#2}{#3}{#4}%
+}
+
+\def\ch@ng@l@stelem#1#2#3#4{% assemble everything
+ \def#2{ #3#1#4}%
+}
+
+\def\replacelistelemg#1#2#3#4{% #1 list name
+ % #2 marker
+ % #3 new contents
+ % #4 action (\def, \edef, etc.)
+ \expandafter\expandafter\expandafter\r@placelistelem\csname list.term.0(#1)[#2]\endcsname{#1}{#2}%
+ \expandafter#4\csname list.term.1(#1)[#2]\endcsname{#3}%
+}
+
+\def\r@placelistelem#1#2#3#4#5#6#7{% #1 \expandafter
+ % #2 the contents of the element at #7
+ % #3 \romannumeral
+ % #4 0
+ % #5 the next element in the list
+ % #6 the list name
+ % #7 the marker
+ \expandafter\edef\csname list.term.0(#6)[#7]\endcsname{\noexpand\expandafter
+ \expandafter\noexpand\csname list.term.1(#6)[#7]\endcsname
+ \noexpand\romannumeral0\noexpand#5}%
+}
+
+\def\replacelistelem#1#2#3{%
+ \replacelistelemg{#1}{#2}{#3}{\def}%
+}
+
+\def\replacelistelemx#1#2#3{%
+ \replacelistelemg{#1}{#2}{#3}{\edef}%
+}
+
+% the next macro assumes that the list counter is pointing to the last (currently empty)
+% list element
+
+\def\finishlist#1{% #1 is the list name
+ \expandafter\def\csname list.term.0(#1)[\showlistcounter{#1}]\endcsname{ }%
+}
+
+\def\executelistat#1#2{% #1 is the list name
+ % #2 is the element at which to start execution
+ \csname list.term.0(#1)[#2]\endcsname
+}
+
+\def\executelist#1{% #1 is the list name
+ \romannumeral0\executelistat{#1}{0}%
+}
+
+\def\storelist#1\to#2{% #1 is the list name
+ % #2 is the token register to store it in
+ #2\expandafter{\romannumeral0\csname list.term.0(#1)[0]\endcsname}%
+}
+
+\def\storelistx#1\to#2#3{% #1 is the list name
+ % #2 is the token register to store it in
+ % #3 is the suffix
+ #2\expandafter{\romannumeral0\csname list.term.0(#1)[0]\endcsname#3}%
+}
+
+\def\showlistcounter#1{%
+ \number\csname list.counter(#1)\endcsname
+}
+
+\def\showlistpointer#1{%
+ \number\csname list.pointer(#1)\endcsname
+}
+
+\def\showlistcs#1{%
+ {\toksa\expandafter{\csname list.term.0(#1)[\csname list.counter(#1)\endcsname]\endcsname}%
+ \toksb\expandafter\expandafter\expandafter{\the\toksa}%
+ \message{current cs: \the\toksa is \the\toksb}}%
+}
+
+% use example for the macros above:
+%\initlist{table}
+%\toksa{#}
+%\appendtolistx{table}{\the\toksa,}
+%\appendtolist{table}{a,}
+%\appendtolist{table}{b,}
+%\appendtolist{table}{{c},}
+%\appendtolist{table}{d,}
+%\appendtolist{table}{e,}
+%\appendtolist{table}{{f}}
+%\appendtolist{table}{\space.}
+%\appendtolistx{table}{\space\space\end}
+%\finishlist{table}
+%\storelist{table}\to\toksa
+%\errmessage{full list: \the\toksa}
+
+% use example for the macros above:
+%\initlist{table}
+%\toksa{#}
+%\def\listiteratorxmpl#1#2{%
+% #2{\format}%
+%}
+%\let\listiterator\listiteratorxmpl
+%\appendtolisti{table}{..}
+%\appendtolisti{table}{a,}
+%\appendtolisti{table}{b,}
+%\appendtolisti{table}{{c},}
+%\appendtolisti{table}{d,}
+%\appendtolisti{table}{e,}
+%\appendtolisti{table}{{f}}
+%\appendtolisti{table}{.}
+%\appendtolisti{table}{\end}
+%\finishlist{table}
+%\storelist{table}\to\toksa
+%\errmessage{full list: \the\toksa}
+
+% `data structure access' macros: picking the n-th undelimited parameter
+% in a parameter list inside a token register
+% it is assumed that none of the arguments is \end, and that there are enough
+% parameters to pick the desired one
+
+\def\getfirst#1\to#2{%
+ #2\expandafter\expandafter\expandafter{\expandafter\g@tfirst\the#1\end}%
+}
+
+\def\g@tfirst#1#2\end{#1}
+
+\def\getsecond#1\to#2{%
+ #2\expandafter\expandafter\expandafter{\expandafter\g@tsecond\the#1\end}%
+}
+
+\def\g@tsecond#1#2#3\end{#2}
+
+\def\getthird#1\to#2{%
+ #2\expandafter\expandafter\expandafter{\expandafter\g@tthird\the#1\end}%
+}
+
+\def\g@tthird#1#2#3#4\end{#3}
+
+\def\getfourth#1\to#2{%
+ #2\expandafter\expandafter\expandafter{\expandafter\g@tfourth\the#1\end}%
+}
+
+\def\g@tfourth#1#2#3#4#5\end{#4}
+
+\def\getfifth#1\to#2{%
+ #2\expandafter\expandafter\expandafter{\expandafter\g@tfifth\the#1\end}%
+}
+
+\def\g@tfifth#1#2#3#4#5#6\end{#5}
+
+\def\getsixth#1\to#2{%
+ #2\expandafter\expandafter\expandafter{\expandafter\g@tsixth\the#1\end}%
}
-\def\setoptopt#1{%
- \expandafter\let\csname optopt[#1]\parsernamespace\endcsname\end
+\def\g@tsixth#1#2#3#4#5#6#7\end{#6}
+
+\def\getseventh#1\to#2{%
+ #2\expandafter\expandafter\expandafter{\expandafter\g@tseventh\the#1\end}%
}
-\countdef\toptoks=15 % register responsible for token allocations
+\def\g@tseventh#1#2#3#4#5#6#7#8\end{#7}
+
+\def\geteightth#1\to#2{%
+ #2\expandafter\expandafter\expandafter{\expandafter\g@teightth\the#1\end}%
+}
+
+\def\g@teightth#1#2#3#4#5#6#7#8#9\end{#8}
+
+\def\getninth#1\to#2{% the `.' is necessary since \TeX's scanning mechanism will
+ % strip any potential braces surrounding the last parameter
+ % (assuming there are exactly nine) twice:
+ % o first, expanding \g@tninth,
+ % o second, expanding \g@tfirst
+ #2\expandafter\expandafter\expandafter{\expandafter\g@tninth\the#1.\end}%
+ #2\expandafter\expandafter\expandafter{\the#2}%
+}
+
+\def\g@tninth#1#2#3#4#5#6#7#8#9\end{\g@tfirst#9\end}
+
+\def\gettenth#1\to#2{% no need for `.' (or any other placeholder) here,
+ % since the #9-th parameter to \g@ttenth is a list of
+ % at least two parameters itself, thus any existing braces
+ % have survived intact
+ #2\expandafter\expandafter\expandafter{\expandafter\g@ttenth\the#1\end}%
+ #2\expandafter\expandafter\expandafter{\the#2}%
+}
+
+\def\g@ttenth#1#2#3#4#5#6#7#8#9\end{\g@tsecond#9\end}
+
+% removing the first element of a token register if it has more than one;
+
+\def\sansfirst#1{%
+ \expandafter\s@nsfirst\expandafter{\the#1}{#1}%
+}
+
+\def\s@nsfirst#1#2{%
+ \expandafter\s@nsf@rst\expandafter{\eatone#1}{#2}%
+}
+
+\def\s@nsf@rst#1#2{%
+ \yystringempty{#1}{}{%
+ #2{#1}%
+ }%
+}
+
+% a version of the macro above that expands to the original argument with the first element removed
+
+\def\sansfirstx#1{%
+ \expandafter\yystringempty\expandafter{\eatone#1}{#1}{\eatone#1}%
+}
+
+% string replacement: all arguments are registers, nothing is expanded, no \next is defined
+% note that this is not a greedy replacement: this could be arranged with a more sophisticated macro
+% also note that the string being replaced cannot have any braces in it
+
+\newif\ifyytracereplacements
+\newif\ifyyreplaced
+
+\yytracereplacementstrue
+
+\def\yyreplacestring#1\in#2\with#3{%
+ \expandafter\def\expandafter\r@placestring\expandafter##\expandafter1\the#1##2\end{%
+ \def\r@placestring{##2}% is this the string at the very end?
+ \ifx\r@placestring\empty % then it is the one we inserted,
+ % report
+ \yyreplacedfalse
+ \ifyytracereplacements
+ \errmessage{string <\the#1> not present in \the#2}% do not change the register if the string is not there
+ \fi
+ \else % remove the extra copy of #1\end at the end
+ \yyreplacedtrue
+ \expandafter#2\expandafter\expandafter\expandafter
+ {\expandafter\r@plac@string\expandafter{\the#3}{##1}##2\end}%
+ \fi}% end of \r@placestring definition
+ \expandafter\def\expandafter\r@plac@string
+ \expandafter##\expandafter1%
+ \expandafter##\expandafter2%
+ \expandafter##\expandafter3%
+ \the#1\end{##2##1##3}%
+ \expandafter\expandafter\expandafter\r@placestring\expandafter\the\expandafter#2\the#1\end
+}
% returning token register values from a group
% in such a way that no other register values are affected
@@ -540,7 +959,7 @@
\yystringempty{#2}{\toksa{\taction}}{\toksa{\caction}}%
}
-\def\action#1\in#2{%
+\def\switchonwithtype#1\in#2{%
\begingroup
\checkforcount#1%
\toksb{{#1}\in{#2}}\concat\toksa\toksb
@@ -548,7 +967,6 @@
}%
\let\switchon\taction
-\let\switchonwithtype\action % phase out \action, since it is a rather common name
\let\default\relax
\def\grabaction#1#2\grabaction{\toksa{#1}}
@@ -561,11 +979,16 @@
% the macros are not expandable but can be made such with some
% (rather significant) effort
-% #1 is the label at which to change
-% #2 is the new label
-% #3 is the name of the new switch
-% #4 is the switch
+% #1 is the name of the old switch
+% #2 is the existing label to which the new label will be added
+% #3 is the new label
+% #4 is the name of the new switch
% #5 is the operation to perform if #2 is present and #3 is not
+% this operation takes the following parameters:
+% #1: the expanded original switch
+% #2: the existing label
+% #3: the new label
+% #4: the name of the new switch
\def\matchswitch#1#2#3#4#5{%
\expandafter\matchswitch@a\expandafter{#1}{#2}{#3}{#4}{#1}{\matchswitch@e}{#5}%
}
@@ -630,7 +1053,7 @@
}
\def\matchswitch@f#1#2#3#4#5#6#7{%
- \yystringempty{#1}{% label not present
+ \yystringempty{#1}{% (new) label not present
#7{#2}{#4}{#3}{#5}%
}{%
\errhelp{Switch #6 contents: #2}%
@@ -638,6 +1061,16 @@
}%
}
+% add a new empty action to a switch with a known action (safety feature)
+
+\def\amendswitch#1\near#2\by#3\to#4{%
+ \matchswitch{#1}{#2}{#3}{#4}{\@mendswitch}%
+}
+
+\def\@mendswitch#1#2#3#4{%
+ \def#4{#1#3{}}%
+}
+
% add a label to an existing action
\def\extendswitch#1\at#2\by#3\to#4{%
@@ -661,6 +1094,11 @@
}
% replace an existing action inside a switch
+% this can also be used to add new labels, although no check is performed
+% whether the new label already exists
+% a word of caution: if one is using this command as intended, the
+% action code should be surrounded by an additional pair of braces (see
+% a use example in yy.sty)
\def\replaceaction#1\at#2\by#3\to#4{%
\matchswitch{#1}{#2}{}{#4}{\r@placeaction{#3}}%
@@ -761,16 +1199,22 @@
% adding a \fi before \yycontinue, which will not affect a properly constructed
% conditional
+\long\def\yyfirstoftwo#1#2{#1}
+\long\def\yysecondoftwo#1#2{#2}
+\long\def\yyfirstofthree#1#2#3{#1}
+\long\def\yysecondofthree#1#2#3{#2}
+\long\def\yythirdofthree#1#2#3{#3}
+
+\long\def\yypioneofthree#1#2#3{{#1}}
+\long\def\yypitwoofthree#1#2#3{{#2}}
+\long\def\yypithreeofthree#1#2#3{{#3}}
+
% macros for taking care of extra tokens
-\long\def\yyid#1{#1} % this is misnamed since it changes #1 by stripping braces and spaces
+\long\def\yyid#1{#1} % this is misnamed since it may change #1 by stripping braces and spaces
\long\def\yyswap#1#2{#2#1}
\long\def\eatone#1{}
\long\def\eattwo#1#2{}
\long\def\eatthree#1#2#3{}
\long\def\eattoend#1\end{}
\long\def\eattospace#1 {}
-
-\input xarithm.sty
-
-\newif\ifbootstrapmode
diff --git a/support/splint/tex/yydebug.sty b/support/splint/tex/yydebug.sty
index 0d763aecfa..05aae20a2e 100644
--- a/support/splint/tex/yydebug.sty
+++ b/support/splint/tex/yydebug.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -41,6 +41,9 @@
\yydebugmost
\checktabletrue
\saveparseoutputtrue
+ \indexverbosetrue
+ \displaytokenrawtrue % so that the `nonstringified' version of the token is displayed as well
+
}
\def\yydebugparse{%
@@ -94,6 +97,7 @@
\yyinputdebugtrue
\yytracereplacementstrue
\traceprettytokenstrue
+ \tracingliststrue
}
\def\yydebugnone{% turn all debugging options off
@@ -125,11 +129,14 @@
\yyinputdebugfalse
\yytracereplacementsfalse
\cdebugfalse
+ \indexverbosefalse
+ \displaytokenrawfalse
+ \tracinglistsfalse
}
% miscellaneous shortcuts
-\def\shownethe#1{%
+\def\shownethe#1{% show the token register only if it is not empty
{%
\edef\next{\the#1}%
\ifx\next\empty
@@ -139,10 +146,15 @@
}%
}
-\def\showem#1#2#3{\toksa{#1}\toksb{#2}\toksc{#3}{\newlinechar=`^^J%
+\def\showem#1#2#3{\toksa{#1}\toksb{#2}\toksc{#3}{\newlinechar=`^^J% show the first three arguments
\errmessage{%
arg. 1: \the\toksa^^J%
arg. 2: \the\toksb^^J%
arg. 3: \the\toksc%
}}}
+\def\debugthisbox#1{% show the box with good depth and width
+ \showboxdepth=1000
+ \showboxbreadth=1000
+ \ifcdebug\showbox#1 \fi
+}
diff --git a/support/splint/tex/yyfaststack.sty b/support/splint/tex/yyfaststack.sty
index 9bf46b3d1e..832ef8cfce 100644
--- a/support/splint/tex/yyfaststack.sty
+++ b/support/splint/tex/yyfaststack.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -61,7 +61,7 @@
0\expandafter\noexpand\csname \expandafter\eatone\string#1[#2]\parsernamespace\endcsname
}
-\def\movestackpointer#1\by#2{%
+\def\movestackpointer#1\by#2{% this assumes that #1 is a control sequence
\expandafter\advance\csname \expandafter\eatone\string#1<count>\endcsname#2%
}
@@ -88,6 +88,11 @@
\expandafter\expandafter\expandafter\edef\gettopofstackcs#2{#1}%
}
+\long\def\yypushg#1\on#2{% global push with expand: do not use this for anything other than index macros
+ \expandafter\global\romannumeral0\movestackpointer#2\by\@ne
+ \expandafter\expandafter\expandafter\xdef\gettopofstackcs#2{#1}%
+}
+
% push register contents on a stack: #1 is a register, #2 is a stack
\def\yypushr#1\on#2{%
@@ -176,6 +181,34 @@
\expandafter\yyreadvst@ck\expandafter{\number\xincrement{#2}}{#1}{#3}%
}
+% macros to read the stack from top to bottom (i.e.~in `reverse' order)
+\def\yyreadustack#1{% we do not compute anything unless the postprocessor
+ % detected an implicit rule
+ \ifnum\number\yycomputeilength{\number\yyn}>\z@
+ \yybreak{\expandafter\yyr@@@ust@@k\expandafter{\number\toptoks}{1}{#1}}%
+ \else
+ \yybreak{}%
+ \yycontinue
+}
+
+\def\yyr@@@ust@@k#1#2#3{%
+ \yyr@@dust@@k{#2}{#1}{#3}%
+}
+
+\def\yyreadust@ck#1#2#3{%
+ \expandafter\toksdef\csname$$$'#2\endcsname=#1\relax %
+ \expandafter\yypop\expandafter#3\expandafter\into\csname$$$'#2\endcsname%$
+ \ifnum\number\yycomputeilength{\number\yyn}>#2 %
+ \yybreak{\expandafter\yyr@@dust@@k\expandafter{\number\xincrement{#2}}{#1}{#3}}%
+ \else
+ \yybreak\relax
+ \yycontinue
+}
+
+\def\yyr@@dust@@k#1#2#3{%
+ \expandafter\yyreadust@ck\expandafter{\number\xincrement{#2}}{#1}{#3}%
+}
+
% end of replacement macros
\def\yypeekvstack#1\upto#2{% assume that #2 > 0
@@ -183,6 +216,11 @@
\movestackpointer#1\by#2\relax
}
+\def\yypeekustack#1{%
+ \yyreadustack#1%
+ \movestackpointer#1\by\number\yycomputeilength{\number\yyn}\relax
+}
+
% macros for reading the state stack (needed if using bison version 3.0 and above)
\def\yyreadsstack#1\upto#2\withprefix#3{% assume that #2 > 0
@@ -238,7 +276,7 @@
\def\yn#1#{%
\ifnum#1<\@ne
- \yybreak{\putyyval}%
+ \yybreak{\yyvalx}%
\else
\yybreak{\p@tyyassignment{#1}}%
\yycontinue
@@ -259,7 +297,7 @@
}%
}
-% \bb macro implementation
+% new \bb macro implementation
\def\p@twwassignment#1{%
\expandafter\advance\csname yyvsa<count>\endcsname-#1\relax
@@ -280,8 +318,6 @@
#2\yystringempty{#3}{#1}{#3{#1}}%
}
-\def\putyyval#1{\edef\next{\yyval{#1}}\next}
-
% dysplaying stack contents (\yyparse specific)
\def\showstack#1{%
@@ -338,49 +374,3 @@
\def\appendtoyytname{\appendtoyy@generic{#1}}%
\def\appendtoyytnamelast{\appendtoyy@genericlast{#1}}%
}
-
-% list macros
-
-\def\listx#1{% #1 is the list name
- \expandafter\ifx\csname #1[\the\csname#1<count>\endcsname]\endcsname\relax
- \csname#1<count>\endcsname\z@
- \yybreak\relax
- \else
- \yybreak{\csname #1[\the\csname#1<count>\endcsname]\endcsname
- \expandafter\advance\csname#1<count>\endcsname\@ne
- \listx{#1}}%
- \yycontinue
-}
-
-\def\newlist#1{%
- \toksa{\csname newcount\endcsname}%
- \expandafter\the\expandafter\toksa\csname#1<count>\endcsname
-}
-
-\def\initlistx#1{%
- \csname#1<count>\endcsname\z@
- \expandafter\let\csname #10\endcsname\relax
-}
-
-\def\resetlistx#1{%
- \csname#1<count>\endcsname\z@
-}
-
-\def\listxlastindex#1{%
- \the\csname#1<count>\endcsname
-}
-
-\def\addtolist#1#2{%
- \expandafter\def\csname#1[\the\csname#1<count>\endcsname]\endcsname{#2}%
- \expandafter\advance\csname#1<count>\endcsname\@ne
-}
-
-\def\addxtolist#1#2{%
- \expandafter\edef\csname#1[\the\csname#1<count>\endcsname]\endcsname{#2}%
- \expandafter\advance\csname#1<count>\endcsname\@ne
-}
-
-\def\finishlist#1{%
- \expandafter\advance\csname#1<count>\endcsname\@ne
- \expandafter\let\csname#1[\the\csname#1<count>\endcsname]\endcsname\relax
-}
diff --git a/support/splint/tex/yyinit.sty b/support/splint/tex/yyinit.sty
index 5091c05007..5fdd0ee9a5 100644
--- a/support/splint/tex/yyinit.sty
+++ b/support/splint/tex/yyinit.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -143,30 +143,67 @@
\def\flexparserdatainit{%
\table{}%
+ \let\secttwoprefix\empty
}
-% output parsed tables
+% output parsed tables to a file
-\long\def\displayoutputcode#1#2#3{% #1 is the output code (will be expanded by \write)
+\long\def\saveoutputcode#1#2#3{% #1 is the output code (will be expanded by \write)
% #2 is the output stream
% #3 is the preamble (will be expanded by \write)
- \immediate\write#2{#3#1}%
+ \newlinechar=`^^J%
+ \immediate\write#2{%
+ \harmlesscomment \parsernamespace::parsed table #3:^^J#1^^J^^J%
+ \harmlesscomment \parsernamespace::stashed stream:^^J\yystash^^J^^J% TODO: this just displays the name for now;
+ \harmlesscomment \parsernamespace::format stream:^^J\yyformat^^J^^J% TODO: this just displays the name for now;
+ }%
+}
+
+% display parsed tables and streams
+
+\def\displayparsedoutput#1{%
+ \ifchecktable
+ \ferrmessage{parsed table: \the#1^^J^^J%
+ stashed stream: \yystash^^J^^J% TODO: this just displays the name for now;
+ format stream: \yyformat}% TODO: this just displays the name for now;
+ \fi
+}
+
+% display raw input
+
+\def\displayrawtable{%
+ \ifsaveparseoutput
+ {\newlinechar=`^^J\immediate\write\exampletable{^^J\harmlesscomment
+ table before parsing:^^J\the\Binputtoks}}%
+ \fi
+ \ifchecktable
+ \ferrmessage{table before parsing: \the\Binputtoks}%
+ \fi
}
-\def\displayflextable#1{{%
+\def\displayorsavefulloutput#1#2{%
+ \ifchecktable
+ \ferrmessage{table after processing: \the#1}%
+ \fi
+ \ifsaveparseoutput
+ {\newlinechar=`^^J\immediate\write#2{^^J\harmlesscomment
+ processed table:^^J\the#1}}%
+ \fi
+}
+
+% the macros below make sure that (almost) none of the command sequences produced by the parser are
+% expandable; this makes debugging easier
+
+\def\saveflextable#1{{%
\hidecslist\cwebstreamchars
\restorecslist{flexparser-debug}\yyflunion
- \newlinechar=`^^J%
- \expandafter\displayoutputcode\expandafter{\the\table}\exampletable
- {^^J\harmlesscomment \parsernamespace::parsed table #1:^^J}%
+ \expandafter\saveoutputcode\expandafter{\the\table}\exampletable{#1}%
}}
-\def\displaybisontable#1{{%
+\def\savebisontable#1{{%
\hidecslist\cwebstreamchars
\restorecslist{parser-debug}\yyunion
- \newlinechar=`^^J%
- \expandafter\displayoutputcode\expandafter{\the\table}\exampletable
- {^^J\harmlesscomment \parsernamespace::parsed table #1:^^J}%
+ \expandafter\saveoutputcode\expandafter{\the\table}\exampletable{#1}%
}}
% stage two parsing macros
@@ -229,7 +266,9 @@
\else
\yybreak{%
\ifparseverbose\ferrmessage{#1 parsing successful.}\fi
- \ifsaveparseoutput\displayparsedtable{#1}\fi
+ \ifsaveparseoutput\saveparsedtable{#1}\fi
+ \finishlist\yystash
+ \finishlist\yyformat
\typesetparsedtables
}%
\yycontinue
@@ -242,39 +281,29 @@
}
\def\postparsebisongrammar{%
- \let\displayparsedtable\displaybisontable
+ \let\saveparsedtable\savebisontable
\let\typesetparsedtables\typesetalltables
\postparsegeneric{(grammar)}%
}
\def\postparsebisonprologue{%
- \let\displayparsedtable\displaybisontable
+ \let\saveparsedtable\savebisontable
\let\typesetparsedtables\typesetalltables
\postparsegeneric{(prologue)}%
}
\def\postparseflexone{%
- \let\displayparsedtable\displayflextable
+ \let\saveparsedtable\saveflextable
\let\typesetparsedtables\typesetfsonetables
\postparsegeneric{(section 1)}%
}
\def\postparseflextwo{%
- \let\displayparsedtable\displayflextable
+ \let\saveparsedtable\saveflextable
\let\typesetparsedtables\typesetfstwotables
\postparsegeneric{(section 2)}%
}
-\def\displayrawtable{%
- \ifsaveparseoutput
- {\newlinechar=`^^J\immediate\write\exampletable{^^J\harmlesscomment
- table before parsing:^^J\the\Binputtoks}}%
- \fi
- \ifchecktable
- \ferrmessage{table before parsing: \the\Binputtoks}%
- \fi
-}
-
\fillpstack{}{%
\preparsebisongrammar
\preparsebisonprologue
@@ -286,7 +315,8 @@
\fillpstack{b}{%
\preparsebisongrammar
\preparsebisonprologue
- {\preparsefallback{**}}%
+ \preparseflexone
+ {\preparsefallback{..}}%
\relax % this \relax is necessary so that the braces above
% are not stripped by \poppstack
}
@@ -312,8 +342,6 @@
% stage 3.5 macros: typesetting
-\newtoks\symstream
-
\def\tlskip{\z@}
\def\tfskip{\parindent}
@@ -321,178 +349,77 @@
\def\typesetalltables{%
\begingroup
- \ifsaveparseoutput
- {\newlinechar=`^^J\immediate\write\exampletable{^^J\harmlesscomment
- stashed stream:^^J\the\yystash^^J^^J\harmlesscomment
- format stream: ^^J\the\yyformat}}%
- \fi
- \ifchecktable
- \ferrmessage{parsed table: \the\table^^J^^J%
- stashed stream: \the\yystash^^J^^J%
- format stream: \the\yyformat}%
- \fi
- \extractprodtableinfo
- \symstream\table
- \table{}%
+ \displayparsedoutput\table
+ \extractprodtableinfo
\setprodtable
- \the\symstream\relax
- \postoks{}\pushothertables
- \ifchecktable
- \ferrmessage{table after processing: \the\table}%
- \fi
- \ifsaveparseoutput
- {\newlinechar=`^^J\immediate\write\exampletable{^^J\harmlesscomment
- processed table:^^J\the\table}}%
- \fi
+ \executeast{\postoks{}\pushothertables}%
\parindent1em
- \checkforpropertable\table
+ \checkforpropertable{\executelist\aststream}%
\tabskip\tfskip
\ruletableset
- \ifchecktrailingstash
- \ferrmessage{remaining stash: \the\yystash}%
- \fi
- \unwrapstash\yystash
- \toksa\expandafter{\the\yystash}%
- \cleanstash\stripstash\checkforccode
- \ifchecktrailingstash
- \ferrmessage{stash after cleaning: \the\toksa}%
- \fi
- \ifnum\wd0>\z@
- %\ifchecktable
- % \showboxdepth=1000
- % \showboxbreadth=1000
- % \showbox0
- %\fi
- % currently testing for nontrivial leftover stash involves packaging the stash material
- % into a \vbox; as a result, the stash containing ${}{}$\hbox{} will have a nonzero length
- % which is why the test below is necessary
- \ifnum\ht0>\z@
- \indent\boxstash
- \fi
- \fi
- \expandafter % export the value of the alignment
+ {\edef\next{\write\auxstream{\nx\nx\nx\lodimens{\the\gaglue}{}{}{}\harmlesscomment}}\next}%
+ \finishastoutput % debugging and stash cleanup
+ \expandafter % export the value of the alignment glue
\endgroup
\expandafter\gaglue\the\gaglue\relax
}
\def\typesetfstwotables{%
\begingroup
- \ifchecktable
- \ifsaveparseoutput
- {\newlinechar=`^^J\immediate\write\exampletable{^^J\harmlesscomment
- stashed stream:^^J\the\yystash^^J^^J\harmlesscomment
- format stream: ^^J\the\yyformat}}%
- \else
- \errmessage{parsed table: \the\table^^J^^J%
- stashed stream: \the\yystash^^J^^J%
- format stream: \the\yyformat}%
- \fi
- \fi
- \extractregextableinfo
- \symstream\table
- \table{}%
- \setregextable
- \the\symstream\relax
- \regextableset
- \ifchecktable
- \ifsaveparseoutput
- \else
- \errmessage{table after processing: \the\table}%
- \fi
- \fi
- \ifsaveparseoutput
- {\newlinechar=`^^J\immediate\write\exampletable{^^J\harmlesscomment
- processed table:^^J\the\table}}%
- \fi
- \ifchecktable
- \ifchecktrim
- \ferrmessage{remaining stash: \the\yystash}%
- \fi
- \fi
- \unwrapstash\yystash
- \toksa\expandafter{\the\yystash}%
- \cleanstash\stripstash\checkforccode
- \ifchecktable
- \ifchecktrim
- \ferrmessage{stash after cleaning: \the\toksa}%
- \fi
- \fi
- \ifnum\wd0>\z@
- %\ifchecktable
- % \showboxdepth=1000
- % \showboxbreadth=1000
- % \showbox0
- %\fi
- % currently testing for nontrivial leftover stash involves packaging the stash material
- % into a \vbox; as a result, the stash containing ${}{}$\hbox{} will have a nonzero length
- % which is why the test below is necessary
- \ifnum\ht0>\z@
- \indent\boxstash
- \fi
- \fi
+ \displayparsedoutput\table
+ \extractregextableinfo % preprocess the AST for section 2
+ \setregextable % activate AST control sequences for section 2
+ \executeast{}% execute AST (the output will be collected in the \aststream list)
+ \regextableset % typeset the contents
+ \finishastoutput % debugging and stash cleanup
\endgroup
}
\def\typesetfsonetables{%
\begingroup
- \ifchecktable
- \ifsaveparseoutput
- {\newlinechar=`^^J\immediate\write\exampletable{^^J\harmlesscomment
- stashed stream:^^J\the\yystash^^J^^J\harmlesscomment
- format stream: ^^J\the\yyformat}}%
- \else
- \errmessage{parsed table: \the\table^^J^^J%
- stashed stream: \the\yystash^^J^^J%
- format stream: \the\yyformat}%
- \fi
- \fi
-% \extractregextableinfo
- \symstream\table
- \table{}%
+ \displayparsedoutput\table
+ \extractregextableinfo
\setregexdeftable
- \the\symstream\relax
+ \executeast{}% execute AST (the output will be collected in the \aststream list)
\regexdeftableset
- \ifchecktable
- \ifsaveparseoutput
- \else
- \errmessage{table after processing: \the\table}%
- \fi
- \fi
- \ifsaveparseoutput
- {\newlinechar=`^^J\immediate\write\exampletable{^^J\harmlesscomment
- processed table:^^J\the\table}}%
- \fi
- \ifchecktable
- \ifchecktrim
- \ferrmessage{remaining stash: \the\yystash}%
- \fi
- \fi
- \unwrapstash\yystash
- \toksa\expandafter{\the\yystash}%
- \cleanstash\stripstash\checkforccode
- \ifchecktable
- \ifchecktrim
- \ferrmessage{stash after cleaning: \the\toksa}%
- \fi
- \fi
- \ifnum\wd0>\z@
- %\ifchecktable
- % \showboxdepth=1000
- % \showboxbreadth=1000
- % \showbox0
- %\fi
- % currently testing for nontrivial leftover stash involves packaging the stash material
- % into a \vbox; as a result, the stash containing ${}{}$\hbox{} will have a nonzero length
- % which is why the test below is necessary
- \ifnum\ht0>\z@
- \indent\boxstash
- \fi
- \fi
+ \finishastoutput % debugging and stash cleanup
\endgroup
}
-\let\extractprodtableinfo\empty % we do not preprocess the productions table
+\def\executeast#1{% #1 is an optional postprocessing action
+ % execute AST (the output will be collected in the \aststream list)
+ \initlist\aststream
+ \the\table\relax
+ #1%
+ \finishlist\aststream
+}
+\def\finishastoutput{%
+ % possibly output debugging information,
+ % clean up and typeset any remaining stash
+ \displayorsavefulloutput\table\exampletable
+ \ifchecktrailingstash
+ \ferrmessage{remaining stash: \yystash}% TODO: this just displays the name for now;
+ \fi
+ \consumefulllist\yystash\to\toksa
+ \cleanstash\stripstash\checkforccode
+ \ifchecktrailingstash
+ \ferrmessage{stash after cleaning: \the\toksa}%
+ \fi
+ \ifnum\wd0>\z@
+ %\ifchecktable
+ % \showboxdepth=1000 \showboxbreadth=1000 \showbox0
+ %\fi
+ % currently testing for nontrivial leftover stash involves packaging the stash material
+ % into a \vbox; as a result, the stash containing ${}{}$\hbox{} will have a nonzero length
+ % which is why the test below is necessary
+ \ifnum\ht0>\z@
+ \indent\boxstash
+ \fi
+ \fi
+}
+
+\let\extractprodtableinfo\extractprodrefs % record the rules to be used later as a reference
\let\extractregextableinfo\empty % we do not preprocess the regex table
% setting the rule table: cross-section alignment and other effects are applied here;
@@ -506,14 +433,15 @@
\vskip-\baselineskip
\ifx\gatoks\relax
\else
- \table\expandafter{\the\table\gatoks}%
+ \expandafter\appendtolist\expandafter\aststream\expandafter{\gatoks}%
+ \finishlist\aststream
\fi
\setbox0\vbox\expandafter{\expandafter
\null\expandafter\prevdepth\the\prevdepth
\halign \ifpropertable to \hsize \fi
{\hbox to 2em{##\/$\,${\rm:}\hss}\hfil\tabskip\z@&\setallterms{##}&##\hfil\tabskip0pt plus1fil&%
\toksa{}##\makestashbox\hfil\tabskip\tlskip\cr
- \the\table
+ \executelist\aststream
}
\expandafter
}\expandafter
@@ -534,7 +462,7 @@
\null\expandafter\prevdepth\the\prevdepth
\halign to\hsize
{##\hfil\tabskip0 pt plus1fil\ &\relax\tabskip\tlskip\toksa{}##\makestashbox\hfil\cr
- \the\table
+ \executelist\aststream
}%
\expandafter
}\expandafter
@@ -551,7 +479,7 @@
\null\expandafter\prevdepth\the\prevdepth
\halign to\hsize
{\hskip\parindent##\hfil\tabskip0 pt plus1fil\ &\relax\tabskip\tlskip\tt##\hfil\cr
- \the\table
+ \executelist\aststream
}%
\expandafter
}\expandafter
@@ -559,6 +487,44 @@
\prevdepth\the\prevdepth\relax
}
+% recording alignment layout: the gaglue, etc.
+
+\def\yyuniontag{\auxunionctl}
+\defp\tablorunionctl{}% sequence to activate/deactivate/take other action for
+ % tablor set of macros
+
+\defc\tablorunionctl{%
+ \restorecslist{aux:global:tablors}\tablorunion
+}
+\savecs{aux:global:activate}\tablorunionctl
+
+\defc\tablorunionctl{%
+ \restorecslist{aux:global:tablors:neutral}\tablorunion
+}
+\savecs{aux:global:deactivate}\tablorunionctl
+
+\defc\tablorunionctl{% this command should not make any page material contributions
+ \message{tablors...}%
+}
+\savecs{aux:global:preend}\tablorunionctl
+
+\defc\tablorunionctl{% writing a header, etc.
+ \message{tablors...}%
+ \toksa\expandafter{\tablorunion}%
+ \immediate\write\auxstream{\harmlesscomment\the\toksa}%
+}
+\savecs{aux:global:prestart}\tablorunionctl
+
+\yyuniondeclare\tablorunion{aux:global:tablors}
+
+\defp\lodimens#1#2#3#4{}
+
+\toyyunion{aux:global:tablors:neutral}
+
+\defc\lodimens#1#2#3#4{}% define this to set the layout for tables on a given page
+
+\toyyunion{aux:global:tablors}
+
% quick and dirty global alignment: the size of the last box (and those in between)
% can be chosen automatically after one pass and read in for the final pass;
% in the future this will be the default implementation; for now, the inelegant
@@ -586,147 +552,6 @@
\hidecs{\1\4\5\6\8}%
}
-\newif\ifdisplaytokenraw
-
-\def\toksdefline#1#2#3#4#5{% #1 is the parsed version of the internal bison name
- % #2 is the index entry
- % #3 is the type
- % #4 is the explicit value
- % #5 is the parsed version of the string value
- \ifnum\tempca=\z@
- \tokdectoks\expandafter{\the\tokdectoks&{#2}#1\hfil\cr}%
- \tempca\tempcb
- \else
- \ifnum\tempcb=\tempca
- \tokdectoks\expandafter{\the\tokdectoks{#2}#1\hfil}%
- \else
- \tokdectoks\expandafter{\the\tokdectoks&{#2}#1\hfil}%
- \fi
- \advance\tempca\m@ne
- \fi
-}
-
-\def\attachtokentable{% typesetting the token declarations as part of the grammar
- \tempcb3 \tempca\tempcb
- \expandafter\tokdectoks\expandafter{\expandafter}\the\tokdectoks
- \ifnum\tempca=\tempcb
- \else
- \bloop
- \tokdectoks\expandafter{\the\tokdectoks&\omit\hfil}%
- \ifnum\tempca=\z@
- \else
- \advance\tempca\m@ne
- \repeat
- \tokdectoks\expandafter{\the\tokdectoks\cr}%
- \fi
- \toksa{\tt\strut##\hfil\tabskip=0pt plus 1fil}%
- \bloop
- \toksa\expandafter{\the\toksa&\tt\strut##\hfil}%
- \ifnum\tempcb=\tw@
- \else
- \advance\tempcb\m@ne
- \repeat
- \toksa\expandafter{\the\toksa&\tt\strut##\hfil\tabskip\z@\cr}%
- \concat\toksa\tokdectoks
- \tokdectoks\toksa
- \edef\next{\table{\the\table\noalign{%
- \tabskip\parindent
- %\nx\displaytokenrawtrue % this controls how tokens are displayed
- % in the declarations: if true, the macro names will be shown
- \halign to\hsize{\the\tokdectoks}%
- }%
- }}\next
- \tokdectoks{}%
-}
-
-% typesetting token lists, precedence declaratins, etc
-% these belong to yyunion.sty but they use `global' settings that are
-% too specific to put there
-
-\def\attachtypestable{% typesetting the type declarations as part of the grammar
- \toksa{}\the\typestable
- \edef\next{\table{\the\table\noalign{%
- {%
- \the\toksa
- }%
- }%
- }}\next\typestable{}%
-}
-
-\long\def\onetype#1#2{%
- \toksb{{%
- \hbadness\@M
- \rightskip=\z@
- \tempda\hsize \advance\tempda-1in
- \indent{$\langle$\tt union$\rangle.#1$:}\ \hfill\nobreak\hfill\nobreak\null\penalty1\relax\null\nobreak\hfill
- \hbox to\tempda{$\vtop{\noindent\hsize\tempda\raggedright #2\strut}$}\par
- }}%
- \concat\toksa\toksb
-}
-
-\long\def\flexsstatelist#1{%
- \toksb{{%
- \hbadness\@M
- \rightskip=\z@
- \tempda\hsize \advance\tempda-1in
- \indent{$\langle$\tt states-s$\rangle_{\rm f}$:}\ \hfill\nobreak\hfill\nobreak\null\penalty1\relax\null\nobreak\hfill
- \hbox to\tempda{$\vtop{\noindent\hsize\tempda\raggedright #1\strut}$}\par
- }}%
- \concat\toksa\toksb
-}
-
-\long\def\flexxstatelist#1{%
- \toksb{{%
- \hbadness\@M
- \rightskip=\z@
- \tempda\hsize \advance\tempda-1in
- \indent{$\langle$\tt states-x$\rangle_{\rm f}$:}\ \hfill\nobreak\hfill\nobreak\null\penalty1\relax\null\nobreak\hfill
- \hbox to\tempda{$\vtop{\noindent\hsize\tempda\raggedright #1\strut}$}\par
- }}%
- \concat\toksa\toksb
-}
-
-\def\attachprectable{% typesetting the precedence declarations as part of the grammar
- \toksa{}\the\prectable
- \edef\next{\table{\the\table\noalign{%
- {%
- \the\toksa
- }%
- }%
- }}\next\prectable{}%
-}
-
-\long\def\oneprec#1#2#3{%
- \toksc{%
- \hbadness\@M
- \rightskip=\z@
- \tempda\hsize \advance\tempda-1in
- \indent
- }%
- \toksd{%
- \ \hfill\nobreak\hfill\nobreak\null\penalty1\relax\null\nobreak\hfill
- \hbox to\tempda{$\vtop{\noindent\hsize\tempda\raggedright #3\strut}$}\par
- }
- \def\next{#2}%
- \ifx\next\empty
- \toksb{}%
- \else
- \toksb{${}:{}$#2}%
- \fi
- \edef\next{\toksb{{$\nx\langle$\nx\bf #1\the\toksb$\nx\rangle$}}}\next
- \appendr\toksa{{\the\toksc\the\toksb\the\toksd}}%
-}
-
-\def\attachoptionstable{% typesetting the options as part of the grammar
- \edef\next{\table{\the\table\noalign{%
- \tabskip\parindent
- \halign{####\nx\hfil\tabskip\z@&\nx\qquad\nx\it####\nx\hfil\cr
- \the\opttable
- }%
- }%
- }}\next\opttable{}%
-}
-
\newif\ifpropertable
\def\checkforpropertable#1{{% checking if there is any table material
@@ -738,7 +563,7 @@
\setbox\z@=\vbox{
\halign
{\eatone{##}&\eatone{##}.&\eatone{##}&\eatone{##}\cr
- \the#1%
+ #1%
}%
}%
\ifnum\wd\z@>\z@
@@ -867,8 +692,7 @@
\def\1{\setbox\indentbox\hbox{\box\indentbox\hbox to 3em{\hfil}}}%
\def\2{\setbox\indentbox\hbox{\box\indentbox\hbox to -3em{}}}%
\def\4{\hbox to -3em{}}%
- \def\5{}%
-% \let\6\cr
+ \let\5\ignorespaces % so that @+ does not produce a space
\def\6{%
\edef\setindentbox{%
\setbox\indentbox\hbox to\the\wd\indentbox{\noexpand\hfil}%
@@ -903,10 +727,10 @@
\ifcat\noexpand\next0%
\let\next\pr@dterm
\else
- \if\noexpand\next[%
- \let\next\pr@dterm
+ \ifcat\noexpand\next a%
+ \def\next{\hbox{$\Upsilon$}}% TODO: look for an identifier
\else
- \let\next\oldmathS
+ \let\next\oldmathS% TODO: one more category: control sequence for cases like \$\\{identifier}
\fi
\fi
\fi
@@ -921,13 +745,13 @@
\let\next\seeksym
\else
\ifnum`#1<"3A\relax
- \ifnum`#1>`0\relax
+ \ifnum`#1>"2F\relax % within ['0', '9']
\def\next{\seekno#1}%
\else
- \def\next{\hbox{$\Upsilon$}#1}% TODO: look for an identifier
+ \def\next{\oldmathS#1}%
\fi
\else
- \def\next{\hbox{$\Upsilon$}#1}% TODO: look for an identifier
+ \def\next{\oldmathS#1}%
\fi
\fi
\fi
@@ -970,7 +794,6 @@
\let\extractprodtableinfo\empty % we do not preprocess the table
\showlastactionfalse
\let\actionfiller\empty
- \let\postparsetext\postparsebproduction
\fillpstack{b}{%
\preparsebisongrammar
\preparsebisonprologue
@@ -985,18 +808,18 @@
}
\def\texcharadjust{
- ` {%
+ `{%
\yybyte{|}%
\expandafter\yycp@\expandafter`\the\yybyte\relax
\mkpurebyte
\yyreturn
- }
- _ {%
+ }%
+ _{%
\yybyte{\_}%
\expandafter\yycp@\expandafter`\the\yybyte\relax
\mkpurebyte
\yyreturn
- }
+ }%
}
\def\texcsadjust{
@@ -1016,6 +839,9 @@
}
}%
+% Note that using \setspecialcharsfrom on the switches above is unnecessary (and, indeed, an error)
+% since the characters need to be read as is, with the category codes and all
+
% production typesetting
\def\beginprod{%
@@ -1066,7 +892,6 @@
\let\acharswitch\texcharadjust
%\let\onecharswitch\texcsadjust
\let\extractprodtableinfo\empty % we do not preprocess the table
- \let\postparsetext\postparsefsection
\fillpstack{fs1}{%
\preparseflexone % TODO
\preparseflextwo
@@ -1091,19 +916,6 @@
\expandafter\gaglue\the\gaglue\relax % export the alignment width, TODO: set \gaglue in \flex
}
-
-
-% the following macros assume that \gindex or \xrefstream having been defined implies
-% that all the bookkeeping required for maintaining the custom index and local cross referencing
-% has been taken care of; this way during the bootstrapping mode, index entries or cross references
-% are not generated.
-
-\ifx\gindex\UNDEFINED
-\else
- \termindextrue
- \immediate\openout\gindex=\jobname.gdx
-\fi
-
\let\endcprod\endgroup
\let\endmprod\endgroup
\let\endprod\endgroup
diff --git a/support/splint/tex/yyinput.sty b/support/splint/tex/yyinput.sty
index 0898410c51..4ca9a8617c 100644
--- a/support/splint/tex/yyinput.sty
+++ b/support/splint/tex/yyinput.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -207,14 +207,26 @@
\yyreturn
}%
+% the single character switch `normalizes' the typesetting of underscores, as this
+% is a particularly tricky character to get right; in typewriter fonts there is a
+% `first class' underscore character so \_ may be defined as \char`\_ whereas in other fonts
+% there is no `native' underscore character so \_ may be defined as a rule of an appropriate
+% size
+\def\acharswitch{
+ \raw_\raw\_ {% the name parser will replace _ with \_ in subscripts
+ \yycp@`\_\relax
+ \yybyte{\_}%
+ \mkpurebyte
+ \yyreturn
+ }
+}
+
\def\achardefault{%
\expandafter\yycp@\expandafter`\the\yybyte\relax
\mkpurebyte
\yyreturn
}
-\def\acharswitch{}
-
% the following commands are only here for debugging purposes
% they slow down the input
@@ -222,6 +234,13 @@
\setspecialcharsfrom\multicharswitch
\setspecialcharsfrom\acharswitch
+% care should be taken with using the next command; it will only be executed
+% if the parser (rather the lexer) `sees' it as part of the input; thus if this
+% command is inserted at the end of the parsed text and, say, a bootstrap parser
+% terminates early, the command will not be executed; likewise, it may be executed
+% (more than) twice in case, for example, a parser stack is used and both (several)
+% parsers see it before the parsing is terminated.
+
\def\insertrawnext#1{% insert a command
#1\yyinput
}
@@ -230,62 +249,55 @@
\yyinput#1\stashed{#2}\vb
}
+% stash and format streams (lists)
+
\chardef\stashchar=`\ %
\chardef\formatchar=`\ %
\newcount\stashmarker
\newcount\formatmarker
+\def\yystash{[stash]}
+\def\yyformat{[format]}
+
\def\stashnextwithspace#1{%
\yybytepure{ }\yycp@\stashchar
\yybyte\expandafter{\the\yybyte{#1}}%
\advance\stashmarker\@ne
- \edef\next{\yysbyte{\noexpand\strm[\the\stashmarker]{\the\yybyte}.[\the\stashmarker]}}\next
- % the extra `.' is to avoid the stripping of braces by the parameter scanning mechanism of TeX
+ \ifnum\stashmarker<\showlistcounter\yystash\relax
+ \else
+ \appendtolist\yystash{#1}%
+ \fi
\yyreturn
}
% the mechanism for stash processing making stash invisible
\def\stashnextwithnothing#1{%
- \advance\stashmarker\@ne
\yybyte\expandafter{\the\yybyte{#1}}\concat\yysubtext\yybyte
- \appendr\yysbyte{\noexpand\strm[\the\stashmarker]{\the\yybyte}.[\the\stashmarker]}%
- \ifyyinputdebug
- \immediate\write16{stash byte: \the\yysbyte mid text: \the\yysubtext}%
- \fi
- % the extra `.' is to avoid the stripping of braces by the parameter scanning mechanism of TeX
- \yyinput
-}
-
-% while collecting the stash, the macro below packages the stash contents into a command sequence
-% to add to the \yystash stream; the stash is presented to the lexer unpackaged though; this
-% introduces a minor inefficiency while ensuring that exactly one level of packaging is present
-% (otherwise the lexer may back up and repackage already packaged stash); the inefficiency only
-% persists while the lexer scans the current token (and possibly backs up).
-
-\def\stashnextwithnothingnx#1{%
\advance\stashmarker\@ne
- \yypush{#1}\on\astarray
- \appendr\yysbyte{\noexpand\strm[\the\stashmarker]{\the\yybyte{%
- \expandafter\noexpand\romannumeral\gettopofstackcsx\astarray}}.[\the\stashmarker]}%
- \yybyte\expandafter{\the\yybyte{#1}}% do not package the input
- \concat\yysubtext\yybyte
+ \ifnum\stashmarker<\showlistcounter\yystash\relax
+ \else
+ \appendtolist\yystash{#1}%
+ \fi
\ifyyinputdebug
- \immediate\write16{stash byte: \the\yysbyte mid text: \the\yysubtext}%
+ \immediate\write16{mid text: \the\yysubtext}%
\fi
- % the extra `.' is to avoid the stripping of braces by the parameter scanning mechanism of TeX
\yyinput
}
-\let\stashnext\stashnextwithnothingnx
+% collect the stash in the stash list (stream)
+
+\let\stashnext\stashnextwithnothing
\def\formatnext#1{%
\yybytepure{ }\yycp@\formatchar
\toksa{#1}%
\advance\formatmarker\@ne
- \edef\next{\yyfbyte{\noexpand\strm[\the\formatmarker]{\the\yybyte{\the\toksa}}.[\the\formatmarker]}}\next
- % the extra `.' is to avoid the stripping of braces by the parameter scanning mechanism of TeX
+ \ifnum\formatmarker<\showlistcounter\yyformat\relax
+ \else
+ \expandafter\appendtolisti\expandafter\yyformat\expandafter{\the\yybyte{#1}}% insert the iterator sequence, as well
+ \fi
\yybyte\expandafter{\the\yybyte{#1}}%
\yyreturn
}
@@ -303,155 +315,22 @@
\yyreturn % inserting something here will effectively insert it into the input stream
}
+% the next macro is not implemented correctly (since after a backup the flushed
+% tokens may be reinserted; there needs to be a mechanism to remember that the
+% tokens are already in the stash stream
+
\def\sflushnext#1#2{% #1 is the marker
% #2 is the contents
\yybytepure{ }\yycp@\stashchar
- \edef\next{\toksc{\the\yystash\the\yystashseen}}\next
- \yyfifolastidx\toksc\in\toksc
- \toksa{#1}\toksb{#2}%
- \appendr\yysbyte{\noexpand\strm[\the\toksa]{\the\yybyte{{\nx\it flushing}: ``\the\toksb'',
- {\nx\it last index}: $[\the\toksc]$. }}.[\the\toksa]}%
- % the extra `.' is to avoid the stripping of braces by the parameter scanning mechanism of TeX
+ % `save the flushed code' goes here
\yybyte\expandafter{\the\yybyte{#1}{#2}}%
\concat\yysubtext\yybyte
\ifyyinputdebug
- \immediate\write16{stash byte: \the\yysbyte mid text: \the\yysubtext}%
+ \immediate\write16{mid text: \the\yysubtext}%
\fi
\yyreturn
}
-% the following implementation is marginally cleaner as it does not redefine \yyr@@dfifo
-% it also makes it almost transparent that \yyreadfifo does not modify any token registers
-% except for the two of its parameters
-% TODO: replace \yyr@@dfifo with \yyr@adfifo
-
-\def\yyreadfifo#1\to#2\in#3{%
-%{% to reduce the side effects to the redefinition of the input and output
- % token registers
- \def\yyr@adfifo##1\strm[#2]##2[#2]##3\end{%
- \yystringempty{##3}{#3{}}% there is no such marker in the fifo
- {%
- #3{##1\strm[#2]##2[#2]}%
- \def\yyr@@dfifo####1\strm[#2]####2[#2]\end{#1{####1}}% strip off the inserted string
- \yyr@@dfifo##3\end
-% TODO: \def\yyr@dfifo####1\strm[#2].[#2]\end{#1{####1}}% strip off the inserted string
-% \yyr@dfifo##3\end
- }%
- }%
- \expandafter\yyr@adfifo\the#1\strm[#2].[#2]\end
-%\edef\next{#1{\the#1}#3{\the#3}}\expandafter}\next
-}
-
-\def\yytrimfifo#1\to#2\in#3{% just save the initial segment of #1 in #3
- \def\yyr@adfifo##1\strm[#2]##2[#2]##3\end{%
- \yystringempty{##3}{#3{}}% there is no such marker in the fifo
- {%
- #3{##1\strm[#2]##2[#2]}%
- }%
- }%
- \expandafter\yyr@adfifo\the#1\strm[#2].[#2]\end
-}
-
-\def\yyreadfifox#1\to#2\in#3{% read the fifo to a marker in #2
- \expandafter\yyreadfifo\expandafter#1\expandafter\to\number#2\in#3%
-}
-
-\def\yyreadfifoxx#1\to#2\in#3{% read the fifo to a marker in #2
- \expandafter\yyreadfifo\expandafter#1\expandafter\to#2\in#3%
-}
-
-\def\yyreadfifot#1\to#2\in#3\with#4{% read fifo with a test:
- \def\yyr@adfifo##1\strm[#2]##2[#2]##3\end{% #4 is a \macro[##1]##2.[##3] which
- \def\yyr@@dfifo{##3}% looks at its parameters and fills up
- \ifx\yyr@@dfifo\empty % \othertoks (to be attached at the beginning of #1
- % after the initial segment has been removed)
- % and \fifotoks (to be used by another macro)
- #3{}% there is no such marker in the fifo
- \else
- \let\fifotoks#3%
- \let\othertoks#1
- \let\@@strm\strm
- \let\strm#4%
- \fifotoks{}%
- \othertoks{}%
- ##1\strm[#2]##2[#2]% run all the tests
- \let\strm\@@strm
- \def\yyr@@dfifo####1\strm[#2]####2[#2]\end{#1\expandafter{\the\othertoks####1}}%
- \yyr@@dfifo##3\end
- \fi
- }%
- \expandafter\yyr@adfifo\the#1\strm[#2].[#2]\end
-}
-
-\def\yyreadfifotx#1\to#2\in#3\with#4{% read the fifo to a marker in #2
- \expandafter\yyreadfifot\expandafter#1\expandafter\to\number#2\in#3\with{#4}%
-}
-
-% an example of a sorting macro: extract all the local formatting
-
-\def\formatsort[#1]#2.[#3]{% clobbers \toksb, \toksc
- \formatgrab#2\end
- \toksc{\strm[#1]{#2}.[#3]}%
- \let\default\formatdefaultact
- \switchon{\the\toksb}\in\formatswitch
-}
-
-\def\formatgrab#1#2\end{\toksb{#1}}
-
-\def\formatswitch{%
- \formatlocal {%
- \edef\next{\fifotoks{\the\fifotoks\the\toksc}}\next
- }
-}
-
-\def\formatdefaultact{%
- \edef\next{\othertoks{\the\othertoks\the\toksc}}\next
-}
-
-\def\yygrabfifoelem#1\at#2\in#3{%
- \def\yyr@adfifo##1\strm[#2]##2[#2]##3\end{%
- \def\yyr@@dfifo{##3}%
- \ifx\yyr@@dfifo\empty
- #3{}% there is no such marker in the fifo
- \else
- #3{\strm[#2]##2[#2]}%
- \def\yyr@@dfifo####1\strm[#2]####2[#2]\end{#1{####1}}% strip off the inserted string
- \yyr@@dfifo##1##3\end
- \fi
- }%
- \expandafter\yyr@adfifo\the#1\strm[#2].[#2]\end
-}
-
-\def\yygrabfifoelemx#1\at#2\in#3\with#4{% read the fifo to a marker in #2
- \expandafter\yygrabfifoelem\expandafter#1\expandafter\at\number#2\in#3\with{#4}%
-}
-
-\def\yypeekfifoelem#1\at#2\in#3{% just read the first element that matches the marker
- \def\yyr@adfifo##1\strm[#2]##2[#2]##3\end{%
- \def\yyr@@dfifo{##3}%
- \ifx\yyr@@dfifo\empty
- #3{}% there is no such marker in the fifo
- \else
- #3{##2}% just get the contents
- \fi
- }%
- \expandafter\yyr@adfifo\the#1\strm[#2].[#2]\end
-}
-
-\def\yypeekfifoelemx#1\at#2\in#3\with#4{% read the fifo to a marker in #2
- \expandafter\yypeekfifoelem\expandafter#1\expandafter\at\number#2\in#3\with{#4}%
-}
-
-\def\strmgetfirstidx[#1]#2.[#3]{\toksa{#1}}
-
-\def\yyfifolastidx#1\in#2{%
- \let\next\strm
- \let\strm\strmgetfirstidx
- \toksa{}\the#1%
- #2\toksa
- \let\strm\next
-}
-
\def\z@rotest{0}
\newif\ifchar
diff --git a/support/splint/tex/yymisc.sty b/support/splint/tex/yymisc.sty
index b961135b02..ad9296292d 100644
--- a/support/splint/tex/yymisc.sty
+++ b/support/splint/tex/yymisc.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -14,133 +14,6 @@
% You should have received a copy of the GNU General Public License
% along with SPLinT. If not, see <http://www.gnu.org/licenses/>.
-% `data structure access' macros: picking the n-th undelimited parameter
-% in a parameter list inside a token register
-% it is assumed that none of the arguments is \end, and that there are enough
-% parameters to pick the desired one
-
-\def\getfirst#1\to#2{%
- #2\expandafter\expandafter\expandafter{\expandafter\g@tfirst\the#1\end}%
-}
-
-\def\g@tfirst#1#2\end{#1}
-
-\def\getsecond#1\to#2{%
- #2\expandafter\expandafter\expandafter{\expandafter\g@tsecond\the#1\end}%
-}
-
-\def\g@tsecond#1#2#3\end{#2}
-
-\def\getthird#1\to#2{%
- #2\expandafter\expandafter\expandafter{\expandafter\g@tthird\the#1\end}%
-}
-
-\def\g@tthird#1#2#3#4\end{#3}
-
-\def\getfourth#1\to#2{%
- #2\expandafter\expandafter\expandafter{\expandafter\g@tfourth\the#1\end}%
-}
-
-\def\g@tfourth#1#2#3#4#5\end{#4}
-
-\def\getfifth#1\to#2{%
- #2\expandafter\expandafter\expandafter{\expandafter\g@tfifth\the#1\end}%
-}
-
-\def\g@tfifth#1#2#3#4#5#6\end{#5}
-
-\def\getsixth#1\to#2{%
- #2\expandafter\expandafter\expandafter{\expandafter\g@tsixth\the#1\end}%
-}
-
-\def\g@tsixth#1#2#3#4#5#6#7\end{#6}
-
-\def\getseventh#1\to#2{%
- #2\expandafter\expandafter\expandafter{\expandafter\g@tseventh\the#1\end}%
-}
-
-\def\g@tseventh#1#2#3#4#5#6#7#8\end{#7}
-
-\def\geteightth#1\to#2{%
- #2\expandafter\expandafter\expandafter{\expandafter\g@teightth\the#1\end}%
-}
-
-\def\g@teightth#1#2#3#4#5#6#7#8#9\end{#8}
-
-\def\getninth#1\to#2{% the `.' is necessary since \TeX's scanning mechanism will
- % strip any potential braces surrounding the last parameter
- % (assuming there are exactly nine) twice:
- % o first, expanding \g@tninth,
- % o second, expanding \g@tfirst
- #2\expandafter\expandafter\expandafter{\expandafter\g@tninth\the#1.\end}%
- #2\expandafter\expandafter\expandafter{\the#2}%
-}
-
-\def\g@tninth#1#2#3#4#5#6#7#8#9\end{\g@tfirst#9\end}
-
-\def\gettenth#1\to#2{% no need for `.' (or any other placeholder) here,
- % since the #9-th parameter to \g@ttenth is a list of
- % at least two parameters itself, thus any existing braces
- % have survived intact
- #2\expandafter\expandafter\expandafter{\expandafter\g@ttenth\the#1\end}%
- #2\expandafter\expandafter\expandafter{\the#2}%
-}
-
-\def\g@ttenth#1#2#3#4#5#6#7#8#9\end{\g@tsecond#9\end}
-
-% removing the first element of a token register if it has more than one;
-
-\def\sansfirst#1{%
- \expandafter\s@nsfirst\expandafter{\the#1}{#1}%
-}
-
-\def\s@nsfirst#1#2{%
- \expandafter\s@nsf@rst\expandafter{\eatone#1}{#2}%
-}
-
-\def\s@nsf@rst#1#2{%
- \yystringempty{#1}{}{%
- #2{#1}%
- }%
-}
-
-% a version of the macro above that expands to the original argument with the first element removed
-
-\def\sansfirstx#1{%
- \expandafter\yystringempty\expandafter{\eatone#1}{#1}{\eatone#1}%
-}
-
-% string replacement: all arguments are registers, nothing is expanded, no \next is defined
-% note that this is not a greedy replacement: this could be arranged with a more sophisticated macro
-% also note that the string being replaced cannot have any braces in it
-
-\newif\ifyytracereplacements
-\newif\ifyyreplaced
-
-\yytracereplacementstrue
-
-\def\yyreplacestring#1\in#2\with#3{%
- \expandafter\def\expandafter\r@placestring\expandafter##\expandafter1\the#1##2\end{%
- \def\r@placestring{##2}% is this the string at the very end?
- \ifx\r@placestring\empty % then it is the one we inserted,
- % report
- \yyreplacedfalse
- \ifyytracereplacements
- \errmessage{string <\the#1> not present in \the#2}% do not change the register if the string is not there
- \fi
- \else % remove the extra copy of #1\end at the end
- \yyreplacedtrue
- \expandafter#2\expandafter\expandafter\expandafter
- {\expandafter\r@plac@string\expandafter{\the#3}{##1}##2\end}%
- \fi}% end of \r@placestring definition
- \expandafter\def\expandafter\r@plac@string
- \expandafter##\expandafter1%
- \expandafter##\expandafter2%
- \expandafter##\expandafter3%
- \the#1\end{##2##1##3}%
- \expandafter\expandafter\expandafter\r@placestring\expandafter\the\expandafter#2\the#1\end
-}
-
% creating a sequence containing all pairs from the two given sequences;
% the (long) string produced by the \diagprod macro
% lists all the elements so that each ordered pair ab where a and b are
@@ -287,9 +160,9 @@
}
% namespace management for macros
-% note that if one of the sequences were made \let\name. the macros would break;
+% note that if one of the sequences, say \name, were made \let\name. the macros would break;
% this can be fixed by using a more sophisticated comparison but was decided against
-% in the interest of efficiency; the old version (that used a control sequence
+% in the interests of efficiency; the old version (that used a control sequence
% as a `stop marker') was more prone to this bug.
% the next sequence is not merely a convenient abbreviation; it is useful if one
@@ -480,6 +353,10 @@
}
% dynamic typing macros
+%
+% (1) define a macro prototype, this also defines a few other macros to be used in
+% special circumstances, such as for error checking (strict), and to use where
+% expansion must be suppressed (such as diagnostic output)
\def\defp#1#2#{% flexible dynamic type checking
\toksa\expandafter\expandafter\expandafter{\yyuniontag#1}%
@@ -494,38 +371,53 @@
\def#1#2%
}
-% define the macro with checking of the prototype
+% (2) define the macro (#1) with an automatic prototype (if the parameter list is empty) or
+% with prototype checking; the prototype should have been defined earlier with \.{\\defp}
-\def\defu#1#2#{%
- \restorecs\parserprototypesnamespace#1%
+\def\defc#1#2#{%
+ \restorecs\parserprototypesnamespace#1%
\toksa{#2}%
\edef\next{\the\toksa}%
- \ifx#1\next
- \yybreak{\def#1#2}%
+ \ifx\next\empty
+ \yybreak{\expandafter\def\expandafter#1#1}%
\else
- \toksb\expandafter{#1}%
- \yybreak{%
- {\newlinechar=`^^J%
- \errhelp{the prototype of #1is from <parser-strict:headers>^^J%
- you might want to look for a \defp#1line... somewhere}%
- \errmessage{macro definition of \noexpand#1
- does not match its prototype:^^J
- \the\toksa\space (should be \the\toksb)}%
+ \ifx\next#1%
+ \yybreak@{\expandafter\def\expandafter#1#1}%
+ \else
+ \yybreak@{%
+ \toksb\expandafter{#1}%
+ {%
+ \newlinechar=`^^J%
+ \edef\next{%
+ \errhelp{the prototype of \string#1 is from <\parserprototypesnamespace>^^J%
+ you might want to look for a \expandafter\string\expandafter\defp\string#1... line somewhere}%
+ }\next
+ \errmessage{macro definition of \string#1 does not match its prototype:^^J
+ \the\toksa\space (should be \the\toksb)}%
+ }%
}%
- }%
+ \fi
\yycontinue
}
-% define the macro with an automatic prototype
-
-\def\defc#1{%
- \restorecs\parserprototypesnamespace#1%
- \expandafter\def\expandafter#1#1%
-}
+% (3) once a set of macros have been defined, all current definitions are added to the
+% \.{\\yyunion} list in a namespace of your choosing by the \.{\\toyyunion} command
\def\t@yyunion#1#2{\def\currentyyunionnamespace{#2}\savecslist{#2}#1}
\def\toyyunion#1{\expandafter\t@yyunion\yyuniontag{#1}}
+% this command sequence provides a standard set of parameters for the scheme above
+% to work; note that these settings will stay unchanged till the next command
+
+\def\yyuniondeclare#1#2{% #1 is the command sequence that holds the union
+ % #2 is the root of the namespace
+ \def#1{\currentyyunionnamespace}% subset of the global union that deals with footnotes
+ \def\yyuniontag{#1}%
+ \def\parserstrictnamespace{#2:strict}%
+ \def\parserprototypesnamespace{#2:headers}%
+ \def\parserdebugnamespace{#2:debug}%
+}
+
{\catcode`\ =13 \aftergroup\def\aftergroup\activespace\aftergroup{\aftergroup \aftergroup}}% active space
{\catcode`\% =12 \aftergroup\def\aftergroup\harmlesscomment\aftergroup{\aftergroup%\aftergroup}}% not really a comment
{\catcode`\{ =12 \catcode`\[=1 \aftergroup\def\aftergroup\lbchar\aftergroup[\aftergroup{\aftergroup}}% not really a brace
@@ -662,6 +554,8 @@
\edef\next{\let\the\toksb\the\toksa}\next
}%
+\def\tokenpp#1{} % ignore \prodstyle{\%prec}-like declarations
+
\def\numberstochars#1{%
\ifx\end#1%
\yybreak{}%
@@ -690,6 +584,51 @@
\yycontinue
}
+% packing \write lines to avoid unnecessary expansions; it is \outer
+% because it would be pretty useless inside a macro since all the category
+% codes have already been set
+
+\outer\def\packliteral{%
+ \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
+ \catcode`\^^M=\other
+ \p@ckliteral
+}
+
+{\catcode`\%=\other\gdef\p@ckliteral#1%{\toksa{#1}\expandafter\endgroup\expandafter\p@ckl@teral\expandafter{\the\toksa}}}
+
+\def\p@ckl@teral#1#2{#2{#1}}
+
+% example of use: \packliteral {\crazy\sequence }% \toksa % this will save ` \crazy...' as cat 12 code characters in \toksa
+
+% a (relatively) safe way to turn a command sequence into its name (sans the escape character) made up of nonletters
+
+\def\csstring{%
+ \ifnum\escapechar>-1
+ \yybreak{\cs@tring}%
+ \else
+ \yybreak{}%
+ \yycontinue
+}
+
+\def\cs@tring{%
+ \ifnum\escapechar>255
+ \yybreak{}%
+ \else
+ \yybreak{\expandafter\eatone\string}%
+ \yycontinue
+}
% other parser and lexer variables
@@ -778,7 +717,6 @@
% \yyval and \yylval will be token registers
\settokreg{yyval}%
\settokreg{yylval}%
- \setnulstack{astarray}% an array of AST nodes
\setnulstack{yyssa}%
\setnulstack{yyvsa}%
}
@@ -796,14 +734,6 @@
\settokreg{yytextseenpure}% % as \yytext et al except they collect characters
\settokreg{yybytepure}% % with category code 11 (letter) and the same character code
%
- \settokreg{yyformat}% % the registers that serve the same role
- \settokreg{yyformatseen}% % as \yytext et al except they collect format
- \settokreg{yyfbyte}% % commands
- %
- \settokreg{yystash}% % the registers that serve the same role
- \settokreg{yystashseen}% % as \yytext et al except they collect stashed
- \settokreg{yysbyte}% % tokens
- %
\setcntreg{yycurrentstate}%
\setcntreg{yycurrentstatelocal}% a state variable used in eob macros
\setcntreg{yyc}%
@@ -841,6 +771,43 @@
% take advantage of the grouping mechanism provided by \TeX; note that the grouping approach seems
% to be the only viable solution if the stack mechanism is `optimized'
+% optimization macros: currently, the level of optimization has to be consistent throughout the
+% document, i.e. \optimize macros have to be called on the same arrays after loading.
+% the reason is the yyfaststack.sty file that modifies the \newtable macro once for all the tables
+
+\def\optimize#1{%
+ \setoptopt{#1}%
+ \tempca\z@
+ \bloop
+ \tempcb=\expandafter\ifcase\expandafter\tempca\the\csname#1\endcsname\else\@MM\fi\relax
+ \ifnum\tempcb<\@MM %
+ \expandafter\edef\csname #1\parsernamespace\the\tempca\endcsname{\the\tempcb}%
+ \advance\tempca\@ne
+ \repeat
+}
+
+\def\optimizetext#1{% optimizing text arrays
+ \setoptopt{#1}%
+ \tempca\z@
+ \@ptimizetext{#1}
+}
+
+\def\@ptimizetext#1{%
+ \edef\next{\expandafter\ifcase\expandafter\tempca\the\csname#1\endcsname\else\end\fi}%
+ \ifx\next\endcontainer
+ \let\next\eatone
+ \else
+ \expandafter\edef\csname #1\parsernamespace\the\tempca\endcsname{\next}%
+ \advance\tempca\@ne
+ \let\next\@ptimizetext
+ \fi
+ \next{#1}%
+}
+
+\def\setoptopt#1{%
+ \expandafter\let\csname optopt[#1]\parsernamespace\endcsname\end
+}
+
% optimization options
\def\optimizeall{%
@@ -869,7 +836,6 @@
\optimize{yycheck}%
\optimize{yyprhs}%
\optimize{yyrhs}%
- \optimize{yytoknum}%
\optimize{yystos}%
\optimizetext{yytname}%
\fi
@@ -886,7 +852,7 @@
\pinittoks{}%
\input #2 % load main parser table
\settokens % set the values of all tokens
- \yystringempty{#4}{}{%
+ \expandafter\yystringempty\expandafter{#4}{}{%
\input #4 % use token equivalence table to set the values of non-string tokens
}%
#5% (a)dditional setups
@@ -1097,11 +1063,11 @@
\expandafter\noexpand\csname (#1)\endcsname}}\next\s@tspecialcharsfrom}
\def\putother#1\in#2{%
- \tempca=\catcode`\^^A\relax
- \tempcb=\uccode`\^^A\relax
- \uccode`\^^A=#1\relax
- \uppercase{\edef\next{#2{^^A}}}\next
- \uccode`\^^A=\tempcb
+ {%
+ \uccode`\^^A=#1\relax
+ \uppercase{\edef\next{#2{^^A}}}%
+ \expandafter
+ }\next
}
% listing all the rules in a macro
@@ -1299,7 +1265,7 @@
\def\termsymname#1#2{% set the symbolic name, if it is nonempty
\def\next{#2}%
\ifx\next\empty
- \else % there is a symolic name
+ \else % there is a symbolic name
\expandafter\ifx\csname$[#2]\endcsname\relax% i$ this name unassigned?
\setnameflag{#2}\end % ... this name has been explicitly set
\setuprefs{#2}{\the\tempca}%
@@ -1438,6 +1404,110 @@
\catcode`\^^A=\tempca
+% the number below (15) is not chosen randomly but is designed to follow the conventions
+% outlined in plain.tex:
+%
+% The following counters are reserved:
+% ...
+% 10 count allocation
+% 11 dimen allocation
+% 12 skip allocation
+% 13 muskip allocation
+% 14 box allocation
+% 15 toks allocation
+% ...
+%
+% Here it is given a symbolic name for convenience. Note that this allocation is
+% needed even if only the yyfaststack.sty stack macros are used (it is used in the
+% mechanism that makes \yy0{\the\yy1\the\yy2} assignments possible).
+
+\countdef\toptoks=15 % register responsible for token allocations
+
+% value and state stack access macros: these may be replaced by the macros in yyfaststack.sty
+
+\def\yyreadvstack#1\upto#2{% assume that #2 > 0
+ \edef\sts{\noexpand\splitstack{\number#2}{\expandafter\xincrement\expandafter{\number\toptoks}}}#1\stackend#1%
+}
+
+\long\def\splitstack#1#2#3{%
+ \expandafter\def\csname$'#1\endcsname{#3}% $
+ \ifnum#2<\@cclvi % we have not reached the maximum allocated number of token registers
+ \expandafter\toksdef\csname$$'#1\endcsname=#2
+ \toks#2{#3}%
+ \fi
+ \ifnum#1=\@ne %we have read the values
+ \let\sts\scoopupstack
+ \else
+ \edef\sts{\noexpand\splitstack{\xdecrement{#1}}{\xincrement{#2}}}%
+ \fi
+}
+
+\def\yypeekvstack#1\upto#2{% assume #2 > 0
+ \edef\sts{\noexpand\peelstack{\number#2}{\expandafter\xincrement\expandafter{\number\toptoks}}}#1\relax%
+}
+
+\long\def\peelstack#1#2#3{%
+ \expandafter\def\csname$'#1\endcsname{#3}% $
+ \ifnum#2<\@cclvi % we have not reached the maximum allocated number of token registers
+ \expandafter\toksdef\csname$$'#1\endcsname=#2
+ \toks#2{#3}%
+ \fi
+ \ifnum#1=\@ne %we have read the values
+ \let\sts\eatone
+ \else
+ \edef\sts{\noexpand\peelstack{\xdecrement{#1}}{\xincrement{#2}}}%
+ \fi
+}
+
+% macros to read the stack in `natural order' (see also yyfaststack.sty)
+\def\yypeekustack#1{% we do not compute anything unless the postprocessor
+ % detected an implicit rule
+ \ifnum\number\yycomputeilength{\number\yyn}>\z@
+ \yybreak{\edef\sts{\noexpand\peelstackreverse{1}{\expandafter
+ \xincrement\expandafter{\number\toptoks}}}#1\relax}%
+ \else
+ \yybreak{}%
+ \yycontinue
+}
+
+\long\def\peelstackreverse#1#2#3{%
+ \ifnum#2<\@cclvi % we have not reached the maximum allocated number of token registers
+ \expandafter\toksdef\csname$$$'#1\endcsname=#2
+ \toks#2{#3}%
+ \fi
+ \ifnum\number\yycomputeilength{\number\yyn}>#1 %
+ \edef\sts{\noexpand\peelstack{\xincrement{#1}}{\xincrement{#2}}}%
+ \else
+ \let\sts\eatone
+ \fi
+}
+
+\def\yyimplicitlengthset#1#2{\expandafter\def\csname ilength$$[#1]\endcsname{#2}}
+
+\def\yycomputeilength#1{%
+ \expandafter\ifx\csname ilength$$[#1]\endcsname\relax
+ \yybreak{0 }%
+ \else
+ \yybreak{\csname ilength$$[#1]\endcsname\space}%
+ \yycontinue
+}
+
+% macros to support new printing routines
+
+\def\yypeeksstack#1\upto#2\withprefix#3{% assume #2 > 0
+ \edef\sts{\noexpand\peelsstack{\number#2}}%
+ \expandafter\def\expandafter\sts\expandafter{\sts{#3}{}}#1\relax%
+}
+
+\long\def\peelsstack#1#2#3#4{%
+ \ifnum#1=\@ne %we have read the values
+ #3\let\sts\eatone
+ \else
+ \edef\sts{\noexpand\peelsstack{\xdecrement{#1}}}%
+ \expandafter\def\expandafter\sts\expandafter{\sts{#2}{#2{#4}#3}}%
+ \fi
+}
+
% stack variable access
\def\ym#1){%
@@ -1516,14 +1586,14 @@
\def\p@twwassignment#1#2{%
\edef\sts{\noexpand\p@@wwassignment{\expandafter\xdecrement\expandafter{\number#1}}}%
- \expandafter\def\expandafter\sts\expandafter{\sts{#2}}%
- \yyvsa\empty
+ \expandafter\def\expandafter\sts\expandafter{\sts{#2}}% define the stack iterator
+ \yyvsa\empty % execute the stack
}
\def\p@@wwassignment#1#2#3{%
- \ifnum#1=\z@ %we have got to the element we need
+ \ifnum#1=\z@ % we have got to the element we need
\yybreak{\yystringempty{#2}{#3}{#2{#3}}\let\sts\eatone}%
- \else
+ \else % keep descending into the stack
\yybreak{\edef\sts{\noexpand\p@@wwassignment{\xdecrement{#1}}}%
\expandafter\def\expandafter\sts\expandafter{\sts{#2}}}%
\yycontinue
@@ -1545,17 +1615,35 @@
\yycontinue
}
-% a macro to access the value stack in direct order, i.e.\ from right to left
+% a macro to access the value stack in the direct order, i.e.\ from right to left
% no \yylen is necessary
\def\bb#1#{%
\ifnum#1<\@ne
- \yybreak{\putyyval}%
+ \yybreak{\yyvalx}%
\else
\yybreak{\p@twwassignment{#1}}%
\yycontinue
}
+% this macro should only be inserted by the preprocessor, it accesses
+% the stack in a `natural' order which is the opposite of how `native'
+% bison does it
+
+\def\yg#1#2#3{% #1 is the `native' bison index (e.g. for a: b c d rule,
+ % b is $1
+ % #2 is the `natural' index (so b would be $3 for the
+ % rule above
+ % #3 is the implicit `yyilen' (see yyparse.sty for more information)
+ \ifnum\yyilen=\z@ % this is probably an inline action, so yyreduce
+ % will only generate the `natural' indexed token
+ % registers
+ \yybreak{\csname $$$'#2\endcsname}%
+ \else
+ \yybreak{\ym#1)}% save one level of expansion ...
+ \yycontinue
+}
+
% symbolic name macros that prepare the environment for the use of the stack access macros above
\def\setsymcs#1#2{%
@@ -1587,3 +1675,4 @@
\def\ferrmessage#1{{\newlinechar`\^^J\immediate\write16{\parsernamespace::#1^^J}}}
+\newif\ifbootstrapmode
diff --git a/support/splint/tex/yynested.sty b/support/splint/tex/yynested.sty
index 2a47c79593..00ce5af324 100644
--- a/support/splint/tex/yynested.sty
+++ b/support/splint/tex/yynested.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
diff --git a/support/splint/tex/yyparse.sty b/support/splint/tex/yyparse.sty
index f6c6dadff8..3599692346 100644
--- a/support/splint/tex/yyparse.sty
+++ b/support/splint/tex/yyparse.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -80,15 +80,15 @@
\newif\iftracelookahead
\def\yyparsetail{% this is where the lexer returns
- \ifnum\yychar>\YYEOF\relax % if (yychar > YYEOF)
+ \ifnum\yychar>\z@\relax % if (yychar > YYEOF)
\yytoken=\fgetelemof{yytranslate}\at\yychar\relax
\iftracelookahead
\derrmessage{lookahead: \tokname, value: \the\yylval^^J}%
\fi
% yytoken = yytranslate[yychar]
\else % else
- \yychar=\YYEOF\relax % yychar = yytoken = YYEOF
- \yytoken=\YYEOF\relax
+ \yychar=\z@\relax % yychar = yytoken = YYEOF
+ \yytoken=\YYSYMBOLxYYEOF\relax
\fi% valid lookahead token
\advance\yyn by\yytoken % yyn = yypact[yystate] + yytoken
\ifnum\yyn<\z@
@@ -148,32 +148,7 @@
\def\yyreduce{%
\yylen=\fgetelemof{yyrtwo}\at\yyn\relax
- \iftracerules
- \ferrmessage{^^Jreducing (rule \the\yyn)}\printrule{\yyn}%
- \fi
- {%
- \iftracestacks
- \iftracerules
- \else
- \ferrmessage{^^J}%
- \fi
- \showstack\yyssa
- \ferrmessage{stack: \stackcs^^Jpopping \the\yylen^^J}%
- \fi
- }%
- \yyilen=\fgetelemof{yyrthree}\at\yyn\relax
- \ifnum\yyilen>\z@ % this is an inline rule
- \ifnum\yylen>\z@
- \errmessage{an inline rule with a nontrivial left hand side: rule \the\yyn}%
- \fi
- \else
- \yyilen\yylen
- \fi
- \ifnum\yyilen>\z@
- \yypeekvstack\yyvsa\upto\yyilen
- \yyval\csname $$'1\endcsname % $$ = $1
- \fi
- %
+ \preparevaluestack
\yyaction % value
%
\yypopstack\yyvsa\by\yylen
@@ -214,6 +189,36 @@
\yynewstate
}
+\def\preparevaluestack{%
+ \iftracerules
+ \ferrmessage{^^Jreducing (rule \the\yyn)}\printrule{\yyn}%
+ \fi
+ {%
+ \iftracestacks
+ \iftracerules
+ \else
+ \ferrmessage{^^J}%
+ \fi
+ \showstack\yyssa
+ \ferrmessage{stack: \stackcs^^Jpopping \the\yylen^^J}%
+ \fi
+ }%
+ \yyilen=\fgetelemof{yyrthree}\at\yyn\relax
+ \ifnum\yyilen>\z@ % this is an inline rule
+ \ifnum\yylen>\z@
+ \errmessage{an inline rule with a nontrivial left hand side: rule \the\yyn}%
+ \fi
+ \else
+ \yyilen\yylen
+ \fi
+ \ifnum\yyilen>\z@
+ \yypeekvstack\yyvsa\upto\yyilen % see yymisc.sty for the definition
+ \yyval\csname $$'1\endcsname % $$ = $1
+ \else
+ \yypeekustack\yyvsa
+ \fi
+}
+
\newif\iftraceparseresults
\def\yypaccept{%
@@ -223,6 +228,9 @@
\finishparse
}
+% most of the error processing mechanisms supplied by the `genuine' \bison\ parsers
+% have been omitted for simplicity
+
\def\yyerr{%
\iftraceparseresults
\ferrmessage{(parse) error^^J}%
@@ -332,13 +340,11 @@
\yytextseen{}%
\yytext@seen{}%
\yybyte{}%
- \yyfbyte{}\yysbyte{}%
- \yystash{}%
- \yystashseen{}%
- \yyformat{}%
- \yyformatseen{}%
+ \initlist\yystash
+ \appendtolist\yystash{}% increment the list counter
+ \initlist\yyformat
+ \appendtolist\yyformat{}% increment the list counter
\yyfutureyytext{}%
- \yyinitstack\astarray % flattened AST to (possibly) speed up the parser
\yyinitstack\yystatestack
\yyfmark=\z@
\yysmark=\z@
diff --git a/support/splint/tex/yypretty.sty b/support/splint/tex/yypretty.sty
index aeb1179b32..559deab67c 100644
--- a/support/splint/tex/yypretty.sty
+++ b/support/splint/tex/yypretty.sty
@@ -1,5 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
-% Copyright 2002-2014 Free Software Foundation, Inc.
+% Copyright 2012-2022, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -21,5 +20,5 @@
% \bison\ names (otherwise \TeX\ will complain about `... name ...
% not exceptional ...')
-\prettywordpair{emptyrhs&}{$\circ$ {\rm(empty rhs)}}%
-\prettywordpair{inline_action&}{$\diamond$ {\rm(inline action)}}%
+\prettywordpair{emptyrhs&}{\emptyrhssymbol\ {\rm(empty rhs)}}%
+\prettywordpair{inline_action&}{\inlineactionsymbol\ {\rm(inline action)}}%
diff --git a/support/splint/tex/yystype.sty b/support/splint/tex/yystype.sty
index 8e4660fb6e..904f5b57f1 100644
--- a/support/splint/tex/yystype.sty
+++ b/support/splint/tex/yystype.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -74,6 +74,9 @@
}
\def\bisonparserdatainit{%
+ \let\rhsesoneprefix\empty % prefix for the list where rhses1 will be stored
+ \let\prologuedeclarationsprefix\empty % prefix for the list where prologue_declarations will be stored
+ \let\grammarprefix\empty % prefix for the list where grammar will be stored
\table{}\typestable{}\prectable{}\opttable{}%
}
diff --git a/support/splint/tex/yytexlex.sty b/support/splint/tex/yytexlex.sty
index 7c149108d3..7f5cfd78ec 100644
--- a/support/splint/tex/yytexlex.sty
+++ b/support/splint/tex/yytexlex.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -247,7 +247,7 @@
% the most common way for a \TeX? macro to appear in in the input is being inserted by
% \CWEB\ itself; in this case \CWEB\ makes sure that the macro is expanded in math mode;
% this assumption is relied upon in the design of these macros, and violating it may
-% result in sume rather puzzling error messages, resulting from the insertion of
+% result in sume rather puzzling error messages due to the insertion of
% \ignorespaces outside of the current group; the warning macro below makes this
% dependence explicit.
@@ -260,16 +260,19 @@
\fi
}
-\def\TeXx(#1)#2;{% TODO
+\def\TeXx(#1);{% TODO
\TeXxwarn
{}$\let\oldttdot\.\relaxcweb
\let\.\dotcollect
\textoks{}%
- #1%
+ \setbox\z@=\hbox{#1\expandafter}\expandafter
+ \textoks\expandafter{\the\textoks}%
\restorecweb\let\.\oldttdot
\expandafter\T@Xx\the\textoks
{}${}\aftergroup\ignorespaces}
+\def\BZ(#1){}
+
\def\mypar{\par}
\def\TeXb(#1)#2;{% TeX material begin
@@ -286,7 +289,7 @@
\dotcollectstripquotes
${}\aftergroup\ignorespaces}
-\def\TeXa(#1)#2;{% TeX material add
+\def\TeXa(#1)#2;{% TeX material add (stitch the \TeX\ chunks together)
\TeXxwarn
{}$\let\oldttdot\.\relaxcweb
\toksa{}\let\.\dotcollectb
@@ -295,7 +298,7 @@
\dotcollectstripquotes
${}\aftergroup\ignorespaces}
-\def\TeXf(#1)#2;{% TeX material add
+\def\TeXf(#1)#2;{% TeX material add (output each chunk on a separate line)
\TeXxwarn
{}$\let\oldttdot\.\relaxcweb
\toksa{}\let\.\dotcollectb
@@ -305,7 +308,7 @@
\dotcollectstripquotes
${}\aftergroup\ignorespaces}
-\def\TeXao(#1)#2;{% TeX material output
+\def\TeXao(#1)#2;{% TeX material output (stitch the \TeX\ chunks together)
\TeXxwarn
{}$\let\oldttdot\.\relaxcweb
\toksa{}\let\.\dotcollectb
@@ -317,7 +320,7 @@
\expandafter\T@Xx\expandafter
"\the\textoks"{}${}\aftergroup\ignorespaces}
-\def\TeXfo(#1)#2;{% TeX material output
+\def\TeXfo(#1)#2;{% TeX material output (output each chunk on a separate line)
\TeXxwarn
{}$\let\oldttdot\.\relaxcweb
\toksa{}\let\.\dotcollectb
@@ -330,8 +333,26 @@
\expandafter\T@Xx\expandafter
"\the\textoks"{}${}\aftergroup\ignorespaces}
+\let\TeXxx\TeXx
+\let\TeXaxx\TeXa
+\let\TeXbxx\TeXb
+\let\TeXaoxx\TeXao
+\let\TeXfxx\TeXf
\let\TeXxi\TeXx
-\def\inlineTeXx#1{$\let\writetexidxentry\writetextxtidxentry\TeXxi(\.{"#1"});$} % for indexing macros
+\def\inlineTeXx#1{{\let\writetexidxentry\writetextxtidxentry$\TeXxi(\.{"#1"});$}} % for indexing macros
+
+\def\texref#1{% convenient shortcut
+ {%
+ \def\texnspace{texline}\def\texispace{index:tex}\inlineTeXx{#1}%
+ }%
+}
+
+\def\texrefx#1#2{% convenient shortcut
+ {%
+ \def\texnspace{#2}\def\texispace{index:tex}\inlineTeXx{#1}%
+ }%
+}
+
\def\TeXlit{\iffalse{\fi}{\setbox0\lastbox}\removewhitespace
\expandafter\.\expandafter{\iffalse}\fi} % to help with \CWEB's @t...@> cleanup
% e.g.\ |TeXao(@t\TeXlit"\hbox{\TeX\ stuff}"@>);|
@@ -367,7 +388,7 @@
\else
\bbbalance{#1}%
\fi
- \iftracetexpp\ferrmessage{TeX_ final pass: \the\texlinetoks}\fi
+ \iftracetexpp\ferrmessage{TeX_ final pass: \the\texlinetoks (idx: \the\texidxtoks)}\fi
\concat\texlinetoks\texidxtoks
\expandafter
\endgroup
@@ -426,8 +447,7 @@
\def\spacecontainer{\ }
\def\texnspace{texline}
-\def\texvspace{texvisline}
-\def\texispace{index}
+\def\texispace{index:tex}
\let\defpostfix\defTpostfix
\let\defprefix\empty
@@ -435,7 +455,7 @@
\let\settgroup\relax
\defx\space{\hbox{$\,$\char`\ $\,$}}{texline}
-\defy\space{\hbox{$\,$\char`\ $\,$}}{index}
+\defy\space{\hbox{$\,$\char`\ $\,$}}{index:tex}
\defx\hspace{% somewhat precarious definition
\hbox{\char`\ }%
@@ -450,7 +470,7 @@
}\grabbalanced
}{texline}
-\defy\hspace{\hbox{$\,$\char`\ $\,$}}{index}
+\defy\hspace{\hbox{$\,$\char`\ $\,$}}{index:tex}
\defx\advance{%
$\mathop{\hbox{\bf add}}$%
@@ -458,7 +478,7 @@
\defy\advance{%
{\bf add}%
-}{index}
+}{index:tex}
\defx\z@{%
$\,0_{\rm R}\,$%
@@ -466,7 +486,7 @@
\defy\z@{%
$0_{\rm R}$%
-}{index}
+}{index:tex}
\defx\z@{0_R}{index:visual}
@@ -476,7 +496,7 @@
\defy\@ne{%
$1_{\rm R}$%
-}{index}
+}{index:tex}
\defx\@ne{1_R}{index:visual}
@@ -486,7 +506,7 @@
\defy\tw@{%
$2_{\rm R}$%
-}{index}
+}{index:tex}
\defx\tw@{2_R}{index:visual}
@@ -496,7 +516,7 @@
\defy\m@ne{%
$-1_{\rm R}$%
-}{index}
+}{index:tex}
\defx\m@ne{-1_R}{index:visual}
@@ -506,7 +526,7 @@
\defy\tempca{%
$t_a$%
-}{index}
+}{index:tex}
\defx\tempca{t_a}{index:visual}
@@ -516,7 +536,7 @@
\defy\tempcb{%
$t_b$%
-}{index}
+}{index:tex}
\defx\tempcb{t_b}{index:visual}
@@ -536,7 +556,7 @@
\defy\toksa{%
$v_a$%
-}{index}
+}{index:tex}
\defx\toksb{%
{}$v_b${}%
@@ -554,7 +574,7 @@
\defy\toksb{%
$v_b$%
-}{index}
+}{index:tex}
\defx\toksc{%
{}$v_c${}%
@@ -572,7 +592,7 @@
\defy\toksc{%
$v_c$%
-}{index}
+}{index:tex}
\defx\toksd{%
{}$v_d${}%
@@ -590,7 +610,7 @@
\defy\toksd{%
$v_d$%
-}{index}
+}{index:tex}
\defx\tokse{%
{}$v_e${}%
@@ -608,7 +628,7 @@
\defy\tokse{%
$v_e$%
-}{index}
+}{index:tex}
\defx\toksf{%
{}$v_f${}%
@@ -624,7 +644,7 @@
\defx\toksf{vf}{index:visual}
-\defy\toksf{$v_f$}{index}
+\defy\toksf{$v_f$}{index:tex}
\defx\toksg{%
{}$v_g${}%
@@ -640,7 +660,7 @@
\defx\toksg{vg}{index:visual}
-\defy\toksg{$v_g$}{index}
+\defy\toksg{$v_g$}{index:tex}
\defx\toksh{%
{}$v_h${}%
@@ -656,7 +676,7 @@
\defx\toksh{vh}{index:visual}
-\defy\toksh{$v_h$}{index}
+\defy\toksh{$v_h$}{index:tex}
\defx\yyval{%
{}$\Upsilon${}%
@@ -672,7 +692,7 @@
\defy\yyval{%
$\Upsilon$%
-}{index}
+}{index:tex}
\defx\yyval{Y}{index:visual}
@@ -706,7 +726,7 @@
\defy\yylexreturnptr{%
{\bf return$_p$}%
-}{index}
+}{index:tex}
\defx\yylexreturnptr{return_p}{index:visual}
@@ -716,7 +736,7 @@
\defy\yylexreturnxchar{%
\hbox{\bf return$_x$}%
-}{index}
+}{index:tex}
\defx\yylexreturnxchar{return_x}{index:visual}
@@ -726,7 +746,7 @@
\defy\yylexreturnchar{%
\hbox{\bf return$_c$}%
-}{index}
+}{index:tex}
\defx\yylexreturnchar{return_c}{index:visual}
@@ -736,7 +756,7 @@
\defy\yylexnext{%
{\bf continue}%
-}{index}
+}{index:tex}
\defx\yylexnext{continue}{index:visual}
@@ -746,7 +766,7 @@
\defy\yylexreturn{%
{\bf return$_l$}%
-}{index}
+}{index:tex}
\defx\yylexreturn{return_l}{index:visual}
@@ -756,7 +776,7 @@
\defy\yylexreturnval{%
{\bf return$_v$}%
-}{index}
+}{index:tex}
\defx\yylexreturnval{return_v}{index:visual}
@@ -766,7 +786,7 @@
\defy\yylexreturnsym{%
{\bf return$_{vp}$}%
-}{index}
+}{index:tex}
\defx\yylexreturnsym{return_vp}{index:visual}
@@ -776,7 +796,7 @@
\defy\yylexreturntext{%
{\bf return$_t$}%
-}{index}
+}{index:tex}
\defx\yylexreturntext{return_t}{index:visual}
@@ -786,7 +806,7 @@
\defy\xcclreturn{%
{\bf set $\Upsilon$ {\rm and} return$^{\rm ccl}$}%
-}{index}
+}{index:tex}
\defx\xcclreturn{set U return^ccl}{index:visual}
@@ -796,7 +816,7 @@
\defy\yyflexoptreturn{%
{\bf return$^{\rm opt}$}%
-}{index}
+}{index:tex}
\defx\yyflexoptreturn{return^opt}{index:visual}
@@ -818,7 +838,7 @@
\defy\yyfatal{%
{\bf fatal}%
-}{index}
+}{index:tex}
\defx\yywarn{%
{}$\mathop{\bf warn}${}%
@@ -836,7 +856,7 @@
\defy\yywarn{%
{\bf warn}%
-}{index}
+}{index:tex}
\defx\yypdeprecated{%
{}$\mathop{\bf deprecated}${}%
@@ -854,17 +874,17 @@
\defy\yypdeprecated{%
{\bf deprecated}%
-}{index}
+}{index:tex}
\defx\table{{}$\Omega${}}{texline}
-\defy\table{$\Omega$}{index}
+\defy\table{$\Omega$}{index:tex}
\defx\table{Omega}{index:visual}
\defx\relax{\hbox{$\circ$}}{texline}
-\defy\relax{\hbox{$\circ$}}{index}
+\defy\relax{\hbox{$\circ$}}{index:tex}
\defx\the#1{%
\toksa{#1}%
@@ -876,7 +896,7 @@
\defy\the{%
$\mathop{\rm val}\cdot$ {\rm or }%
\lcenclose{$\cdot$}%
-}{index}
+}{index:tex}
\defx\the{val}{index:visual}
@@ -908,7 +928,7 @@
\defy\inmath{%
$^\bullet(\,\cdot\,)$%
-}{index}
+}{index:tex}
\defx\ifx{%
{\bf if$_{\rm x}\;$}%
@@ -916,7 +936,7 @@
\defy\ifx{%
{\bf if$_{\rm x}$}%
-}{index}
+}{index:tex}
\defx\ifnum{%
{\bf if$_\omega\;$}%
@@ -924,7 +944,7 @@
\defy\ifnum{%
{\bf if$_\omega$}%
-}{index}
+}{index:tex}
\defx\ifcat{%
{\bf if$_{\rm cat}\;$}%
@@ -932,7 +952,7 @@
\defy\ifcat{%
{\bf if$_{\rm cat}$}%
-}{index}
+}{index:tex}
\defx\iftracebadchars{%
{\bf if$_t$ {\rm[{\tt bad char}]}$\;$}%
@@ -940,7 +960,7 @@
\defy\iftracebadchars{%
{\bf if$_t$ {\rm[{\tt bad char}]}}%
-}{index}
+}{index:tex}
\defx\else{%
{\bf else$\;$}%
@@ -948,7 +968,7 @@
\defy\else{%
{\bf else}%
-}{index}
+}{index:tex}
\defx\fi{%
{\bf fi$\;$}%
@@ -956,7 +976,7 @@
\defy\fi{%
{\bf fi}%
-}{index}
+}{index:tex}
\defx\def{%
{\bf def$\;$}%
@@ -964,7 +984,7 @@
\defy\def{%
{\bf def}%
-}{index}
+}{index:tex}
\defx\edef{%
{\bf def$_{\rm x}\;$}%
@@ -972,7 +992,7 @@
\defy\edef{%
{\bf def$_{\rm x}$}%
-}{index}
+}{index:tex}
\defx\edef{def_x}{index:visual}
@@ -990,7 +1010,7 @@
\defy\empty{%
$\emptyset$%
-}{index}
+}{index:tex}
\defx\ifrhsfull{%
{\bf if {\rm ($\,$rhs${}={}$full$\,$)}$\;$}%
@@ -998,7 +1018,7 @@
\defy\ifrhsfull{%
{\bf if {\rm ($\,$rhs${}={}$full$\,$)}}%
-}{index}
+}{index:tex}
\defx\rhsfulltrue{%
{\rm rhs${}={}$full$\,$}%
@@ -1006,7 +1026,7 @@
\defy\rhsfulltrue{%
{\rm rhs${}={}$full}%
-}{index}
+}{index:tex}
\defx\rhsfullfalse{%
{\rm rhs${}={}$not full$\,$}%
@@ -1014,7 +1034,7 @@
\defy\rhsfullfalse{%
{\rm rhs${}={}$not full}%
-}{index}
+}{index:tex}
\defx\noexpand{%
$^{\rm nox}$%
@@ -1026,11 +1046,11 @@
\defy\noexpand{%
$^{\rm nox}$%
-}{index}
+}{index:tex}
\defy\nx{%
$^{\rm nx}$%
-}{index}
+}{index:tex}
\defx\to{%
${}\mapsto{}$%
@@ -1038,7 +1058,7 @@
\defy\to{%
$\mapsto$%
-}{index}
+}{index:tex}
\defx\emptyterm{%
\hbox{$\ulcorner\ldots\urcorner$}%
@@ -1046,7 +1066,7 @@
\defy\emptyterm{%
\hbox{$\ulcorner\ldots\urcorner$}%
-}{index}
+}{index:tex}
\defx\hfil{\hbox{$\,\Leftrightarrow\,$}}{texline}
\defx\omit{\hbox{$\,{\times\atop\times}$}}{texline}
@@ -1070,7 +1090,7 @@
\defy\yy{%
$\Upsilon\kern-1pt{}_{\rm?}$%
-}{index}
+}{index:tex}
\defx\yy{Y_?}{index:visual}
@@ -1100,7 +1120,16 @@
\def\setpgroup{$\Upsilon\kern-1pt{}_{\rm#1}\langle{}${\tt\the\toksa}${}\rangle\;$}\grabbalanced
}
+%\def\scriptswitch{\the\scriptfont0}
+\def\scriptswitch{%
+ \sscmd\it
+ \let\_\uscore
+% \let\acharswitch\textadustacharswitch
+}
+
\def\seeksymtt#1[{{$\Upsilon\kern-1pt{}_{\rm#1}$}}
+\def\seeksymtt#1[{{$\Upsilon\kern-1pt{}_{\hbox{\scriptswitch\nameproc{#1}\with\parsebin\the\toksa}}$}}
+\def\seeksymtt#1[{{$\Upsilon\kern-1pt{}_{\hbox{\sscmd\prodstyle{#1}}}$}}
\def\seeknott#1){{$\Upsilon\kern-1pt{}_{\rm#1}$}}
@@ -1136,7 +1165,7 @@
\defy\bb{%
${}_{\rm?}\kern-2pt\Upsilon$%
-}{index}
+}{index:tex}
\defx\bb{Y_??}{index:visual}
@@ -1149,7 +1178,7 @@
\defy\switchon{%
\hbox{\bf switch$\;$}%
-}{index}
+}{index:tex}
\defx\in{%
$\,\varepsilon\,$%
@@ -1157,7 +1186,7 @@
\defy\in{%
$\,\varepsilon\,$%
-}{index}
+}{index:tex}
\defx\concat#1#2{%
\hbox{#1${}\leftarrow{}$#1${}+_{\rm s}{}$#2$\;$}%
@@ -1165,7 +1194,7 @@
\defy\concat{%
\hbox{$A\leftarrow A+_{\rm s}B$}%
-}{index}
+}{index:tex}
\defx\appendr#1{%
\hbox{#1${}\leftarrow{}$#1${}+_{\rm sx}{}$}%
@@ -1176,7 +1205,7 @@
\defy\appendr{%
\hbox{$A\leftarrow A+_{\rm sx}B$}%
-}{index}
+}{index:tex}
\defx\default{%
{\tt default}$\;$%
@@ -1197,7 +1226,7 @@
\defy\getfirst{%
$\pi_1$%
-}{index}
+}{index:tex}
\defx\getfirst{pi_1}{index:visual}
@@ -1215,7 +1244,7 @@
\defy\getsecond{%
$\pi_2$%
-}{index}
+}{index:tex}
\defx\getsecond{pi_2}{index:visual}
@@ -1233,7 +1262,7 @@
\defy\getthird{%
$\pi_3$%
-}{index}
+}{index:tex}
\defx\getthird{pi_3}{index:visual}
@@ -1251,7 +1280,7 @@
\defy\getfourth{%
$\pi_4$%
-}{index}
+}{index:tex}
\defx\getfourth{pi_4}{index:visual}
@@ -1269,7 +1298,7 @@
\defy\getfifth{%
$\pi_5$%
-}{index}
+}{index:tex}
\defx\getfifth{pi_5}{index:visual}
@@ -1287,7 +1316,7 @@
\defy\rhscont{%
$\pi_{\{\}}$%
-}{index}
+}{index:tex}
\defx\rhscont{pi_brace}{index:visual}
@@ -1305,7 +1334,7 @@
\defy\rhscnct{%
$\pi_{\leftrightarrow}$%
-}{index}
+}{index:tex}
\defx\rhscnct{pi_arrow}{index:visual}
@@ -1323,7 +1352,7 @@
\defy\rhsbool{%
$\pi_{\vdash}$%
-}{index}
+}{index:tex}
\defx\rhsbool{pi_implies}{index:visual}
@@ -1333,7 +1362,7 @@
\defy\%{%
{\.{\harmlesscomment}}\let\defypostamble\relax%
-}{index}
+}{index:tex}
\defx\%{\%}{index:visual}
@@ -1343,7 +1372,7 @@
\defy\harmlesscomment{%
{\.{\harmlesscomment}}\let\defypostamble\relax%
-}{index}
+}{index:tex}
\defx\harmlesscomment{\%}{index:visual}
@@ -1353,7 +1382,7 @@
\defy\\{%
{\.{\\}}\let\defypostamble\relax%
-}{index}
+}{index:tex}
\defx\\{\\}{index:visual}
@@ -1363,7 +1392,7 @@
\defy\lbchar{%
\.{\{}%
-}{index}
+}{index:tex}
\expandafter\defx\expandafter\lbchar\expandafter{\lbchar lbchar}{index:visual}
@@ -1440,6 +1469,7 @@
\defx\yyBEGIN{%
\def\setegroup{{\bf enter}}%
+ \def\settgroup{{\bf enter}}% for text examples
\def\setpgroup{%
{%
\let\parsernamespace\flexpseudonamespace
@@ -1451,7 +1481,7 @@
\expandafter
}\the\toksd
\let\termindex\writeidxfsentry
- \edef\next{{}$\nx\mathop{\hbox{\nx\bf enter}}(\hbox{\the\toksd})${}%
+ \edef\next{{}$\nx\mathop{\hbox{\nx\bf enter}}(\hbox{\nx\flexsndisplay{\the\toksd}})\,${}%
\gidxentryxb{\termvstring}{\the\toksa}{\the\tokse}}\next
\let\termindex\eatone
}\grabbalanced
@@ -1459,7 +1489,7 @@
\defy\yyBEGIN{%
{\bf enter}%
-}{index}
+}{index:tex}
\defx\yyBEGIN{enter}{index:visual}
@@ -1469,7 +1499,7 @@
\defy\yyBEGINr{%
{\bf enter$_x$}%
-}{index}
+}{index:tex}
\defx\yyBEGINr{enter_x}{index:visual}
@@ -1486,7 +1516,7 @@
\expandafter
}\the\toksd
\let\termindex\writeidxfsentry
- \edef\next{{}$\nx\mathop{\hbox{\nx\bf push state}}(\hbox{\the\toksd})\,${}
+ \edef\next{{}$\nx\mathop{\hbox{\nx\bf push state}}(\hbox{\nx\flexsndisplay{\the\toksd}})\,${}
\gidxentryxb{\termvstring}{\the\toksa}{\the\tokse}}\next
\let\termindex\eatone
}\grabbalanced
@@ -1494,7 +1524,7 @@
\defy\yypushstate{%
{\bf push state}%
-}{index}
+}{index:tex}
\defx\yypushstate{push\_state}{index:visual}
@@ -1519,7 +1549,7 @@
\defy\yypopstate{%
{\bf pop state}%
-}{index}
+}{index:tex}
\defx\yypopstate{pop state}{index:visual}
@@ -1536,7 +1566,7 @@
\expandafter
}\the\toksd
\let\termindex\writeidxfsentry
- \edef\next{{}$\nx\mathop{\hbox{\nx\bf state}}(\hbox{\the\toksd})\,${}%
+ \edef\next{{}$\nx\mathop{\hbox{\nx\bf state}}(\hbox{\nx\flexsndisplay{\the\toksd}})\,${}%
\gidxentryxb{\termvstring}{\the\toksa}{\the\tokse}}\next
\let\termindex\eatone
}\grabbalanced
@@ -1544,6 +1574,6 @@
\defy\yylexstate{%
{\bf state}%
-}{index}
+}{index:tex}
\defx\yylexstate{state}{index:visual}
diff --git a/support/splint/tex/yyunion.sty b/support/splint/tex/yyunion.sty
index 7f4937a4e3..81d69b3789 100644
--- a/support/splint/tex/yyunion.sty
+++ b/support/splint/tex/yyunion.sty
@@ -1,4 +1,4 @@
-% Copyright 2012-2020, Alexander Shibakov
+% Copyright 2012-2024, Alexander Shibakov
% This file is part of SPLinT
%
% SPLinT is free software: you can redistribute it and/or modify
@@ -34,17 +34,14 @@
\|\`\\\{\}\~\ \_\&\^\$\#\n% the last one is inserted by the preprocessing scripts
}
-
-% insidemost
+% insidemost (level 0)
\long\def\stashed#1{} % stashed material (usually \Cee\ code) :: \stashed{tex_string}
\long\def\sflush#1#2{} % stash flushing marker :: \sflush{tex_string}
\def\format#1{} % format material triggered by braces and the start of production :: \format{tex_string}
\def\formatlocal#1{} % format material triggered by every term :: \formatlocal{tex_string}
-% level 1
-
-\long\def\strm[#1]#2.[#3]{} % a stream element :: \strm[digits]{\stashed|\format|\formatlocal}.[digits]
+% level 1---atoms minimally processed by the parser
% types returned by the lexer; the integer type (hex vs. decimal) is determined at the lexer level so
% these are tagged by the lexer as well
@@ -63,33 +60,32 @@
\defp\midf#1#2{} % *rule separator :: \midf{fptr}{sptr}
\defp\preckind#1#2#3{} % *precedence operator :: \preckind{12string}{fptr}{sptr}
%
-\defp\flexoptionpair#1#2{} % a flex option :: \flexoptoinpair{\idit}{\idit|\stringify}
\defp\termname#1#2{} % a production term :: \termname{\idit|\stringify|\charit}{\idit}
\defp\mergeop#1#2#3{} % merge directive :: \mergeop{\tagit}{fptr}{sptr}
\defp\dprecop#1#2#3{} % dprec directive :: \dprecop{\anint|\hexint}{fptr}{sptr}
\defp\sprecop#1#2#3{} % prec directive :: \sprecop{\idit|\stringify|\charit}{fptr}{sptr}
-\defp\rrhssep#1#2{} % :: \rrhssep{fptr}{sptr}
-\defp\arhssep#1#2{} % :: \arhssep{fptr}{sptr}
-\defp\rarhssep#1#2{} % :: \rarhssep{fptr}{sptr}
+\defp\rrhssep#1#2{} % separator :: \rrhssep{fptr}{sptr}
+\defp\arhssep#1#2{} % separator (between the action and the right hand side) :: \arhssep{fptr}{sptr}
+\defp\rarhssep#1#2{} % separator :: \rarhssep{fptr}{sptr}
\defp\hspace#1#2{} % a space has to take two parameters just like any connector :: \hspace{fptr}{sptr}
-\defp\emptyterm{}
+\defp\emptyterm{} % implicit empty right hand side :: \emptyterm
\defp\onesymbol#1#2#3{} % a symbol definition :: \onesymbol{\idit}{\anint|\hexint}{\stringify}
\defp\bracedvalue#1#2#3{} % a braced variable value :: \bracedvalue{tex_string}{fptr}{sptr}
-%level 1
+% level 2---the structures built by the parser
+\defp\prodheader#1#2#3#4{} % a `left-hand side' of a production :: \prodheader{\idit}{\idit}{fptr}{sptr}
\defp\rhs#1#2#3{} % a `right-hand side' :: \rhs{[\termname\hspace\rarhssep\arhssep\actbraces]+}{\arhssep|<nothing>}{\ifrhsfull}
\defp\actbraces#1#2#3#4#5\bdend{} % action braces :: \actbraces{tex_string}{\idit|<nothing>}{fptr}{sptr}directive*\bdend
\defp\bpredicate#1#2#3#4#5\bdend{} % predicate :: \bpredicate{tex_string}{<nothing>}{fptr}{sptr}directive*\bdend
-% level 2
+% level 3---the structures composed of structures above
-\defp\prodheader#1#2#3#4{} % a `left-hand side' of a production :: \prodheader{\idit}{\idit}{fptr}{sptr}
-\defp\rules#1#2#3{} % a complete right-hand side :: \rules{[\rhs|\rrhssep]}{max fptr}{max sptr}
+\defp\rules#1{} % a complete right-hand side :: \rules{[\rhs|\rrhssep]}
\defp\symbolprec#1#2{} % symbol precedence :: \symbolprec{\idit|\stringify|\charit}{\anint|\hexint}
%\def\pcluster#1#2{} % a production cluster :: \pcluster{\prodheader}{\termname|...} should never appear in the final output
-% level 3
+% level 4---larger structures and top level constructions
\defp\oneproduction#1#2#3{} % a complete production :: \oneproduction{\prodheader\rules}{fptr}{sptr}
\defp\prodprodsepsmall{} % production separator
@@ -102,9 +98,6 @@
\defp\ntermdecls#1#2#3{} % nterm declarations :: \ntermdecls{[\onesymbol]+}{fptr}{sptr}
\defp\typedecls#1#2#3#4{} % type declarations :: \typedecls{\tagit}{[\idit\stringify\charit]+}{fptr}{sptr}
\defp\precdecls#1#2#3#4#5{} % precedence declarations :: \precdecls{left|right|nonassoc|precedence}{\tagit}{[\idit\stringify\charit]+}{fptr}{sptr}
-\defp\flexsstatedecls#1#2#3{} % flex state declarations (nonexlusive) :: \flexsstatedecls{[\idit\stringify]+}{fptr}{sptr}
-\defp\flexxstatedecls#1#2#3{} % flex state declarations (exclusive) :: \flexxstatedecls{[\idit\stringify]+}{fptr}{sptr}
-\defp\flexoptiondecls#1#2#3{} % flex options :: \flexoptiondecls{[\flexoptionpair]+}{fptr}{sptr}
\defp\oneparametricoption#1#2#3#4{} % option :: \oneparametricoption{option-name}{\stringify|\idit}{fptr}{sptr}
\defp\optionflag#1#2#3#4{} % option flag :: \optionflag{flag name}{abbreviated name}{fptr}{sptr}
\defp\paramdef#1#2#3#4{} % parameters :: \paramdef{\braceit}{parameter domain}{fptr}{sptr}
@@ -114,10 +107,6 @@
\defp\vardef#1#2#3#4{} % variable definition :: \vardef{\idit|\stringify}{|\idit|\stringify|\bracedvalue}{fptr}{sptr}
\defp\prologuecode#1#2#3#4#5{} % prologue code :: \prologuecode{tex_string}{fptr}{sptr}{fptr}{sptr}
-% level 4
-
-%\def\grammar#1#2{} % a grammar: should never appear in the final output
-
\savecslist{parser-prototypes}\yyunion
% table construction: the macros run to build the contents of the table of productions to be
@@ -141,6 +130,10 @@
\newtoks\yystashlocal
\newtoks\yyformatlocal
+\def\astappend{\appendtolist\aststream}
+\def\astappendx{\appendtolistx\aststream}
+\def\astisempty{\listisempty\aststream}
+
% index implementation
% note that the rank and domain parameters are handed down by the
% `outer' macro while the `qualifier' (\term...string) is decided
@@ -194,7 +187,7 @@
% must take place)
% o finally, the entries that must be expanded at a specific point between the point
% of invocation and the \shipout
-% the indexing macro below treats the first three cases for the entries that the macro
+% the indexing macro below treats the first three cases for the entries that the macros
% below produce; the last case can be implemented by redefining the \stickycs macro
% at the appropriate point
@@ -256,9 +249,11 @@
\toksa{\ifcase#1<NUL>}
\tempcb=\uccode`.
+% a loop that builds a macro to produce a category 12 character with the given character code
+
\bloop
\uccode`.=\tempca
-\uppercase{\toksb\expandafter{.}}%
+\uppercase{\toksb{.}}%
\toksa\expandafter\expandafter\expandafter{\expandafter\the\expandafter\toksa\expandafter\or\the\toksb}%
\advance\tempca by\@ne
\ifnum\tempca>"FF
@@ -266,6 +261,15 @@
\else
\repeat
+% defining the macro that was built above
+
+\edef\next{\toksa{\def\noexpand\asciiprint##1{\the\toksa}}}\next
+\the\toksa
+
+% return . to its regular state
+
+\uccode`.=\tempcb
+
\def\charstocharsx#1\end{% expandable version of a `safety' macro, ascii characters only, no tricky space characters
\yystartsinspace{#1.}{%
\space\ch@rstocharsx#1\end
@@ -280,9 +284,6 @@
\def\ch@rst@charsx#1#2\end{\asciiprint{`#1}\charstocharsx#2\end}
-\edef\next{\toksa{\def\noexpand\asciiprint##1{\the\toksa}}}\next
-\the\toksa
-
\def\writeidxhentry#1{%
\indxe\gindex{{\secno}{{\currentrulecontext}{\hostparsernamespace}}{\bisonidxdomain}{\headeridxrank}#1}%
}
@@ -304,6 +305,40 @@
\fi
}
+\def\ridxentry#1#2#3{% index entry that allows raw input (see
+ \gidxentry{#1}{\end0 \vend{32}\end\toksa{#2}\noexpand\noexpand\noexpand\eatone\vend\eatone}{#3}%
+ % the first \end and \eatone will be removed by \charsto..., the next (innermost) by \numbersto... inside \FI
+}
+
+\def\didxentry#1#2{% (another) index entry that allows raw input (see \csname flex@ption_other\endcsname below)
+ \gidxentryxb{\termraw}{\number#1}{#2}%
+}
+
+\def\gtextidx#1#2#3{% #1 is the entry
+ % #2 is the visual key
+ % #3 is the domain
+ \expandafter\ifx\csname indexterms<count>\endcsname\relax
+ \else
+ {%
+ \storerawidxentry{#1}%
+ \edef\next{%
+ \noexpand\indxe\gindex{{\secno}{{}{\indexpseudonamespace}}{#3}{\termidxrank}{}%
+ {\noexpand\termraw}{\number\getstackpointer\indexterms}{#2}}%
+ }\next
+ \edef\next{\next}\next
+ }%
+ \fi
+}
+
+% a shortcut to simplify using the macro above
+
+\def\storerawidxentry#1{%
+ {%
+ \toksa{#1}%
+ \let\parsernamespace\empty\yypushg{\the\toksa}\on\indexterms
+ }%
+}
+
% a convenient shortcut, as many visual keys come in a token register
\def\gidxentryxv#1#2#3{% a generic index entry, e(x)pand (v)isual key:
@@ -338,62 +373,152 @@
\edef\next{\tidxentry{\termidstring}{#1}}\next
}
-\def\gatherstash#1#2\strm[#3]#4.[#5]{% #1 contains the stash gathered
- \yystringempty{#3}{ #1}%
- {%
- \expandafter\g@therstash\expandafter{\romannumeral0\unstash#4}{#1}%
- }%
+% stash processing wrapper macros
+
+\def\yyreadstash#1\to#2\in#3\with#4{%
+ \consumelistupto{#1}{#2}\to{#3}%
+ #4{#3}%
+ \mathsplittoks{#3}{\yyr@adstash}{\eatthree}{#1}{#2}{#3}%
}
-% stash processing wrapper macros
+% this macro is based on the assumption that all the math mode
+% changes are introduced by unadulterated $ tokens (as is done in
+% \CWEB); \CWEB's handling of math mode is a mistake so there is
+% no need to introduce another one by using clever math switches;
+% note that this is not affected by \inmath (see somewhere in this file),
+% since (as long as!) it is only inserted in the verbatim mode ...
+% ... or at least it should, so never do something like
+% @t}\inmath{{@> ... @t}}@>
+% unless you really know what you are doing (hint: it is only ok
+% to do this if there are no intervening \vb{...} groups inside
+% the ... portion above.
-\def\g@therstash#1#2{\gatherstash{#2#1}}
+\def\mathsplittoks#1#2#3{% execute actions depending on whether
+ % token register #1 contains
+ % odd (then insert #2)
+ % or even (insert #3) number of $'s
+ \expandafter\evenmathify\the#1$%
+ \evenmather\end$\evenmather\end$\evenmather\end$%
+ \evenmather\end$\evenmather\end$\evenmather\end$%
+ \emo$\eme$\emo$\eme$\emo$\eme$\emo$\eme$\emo$\end
+ {#2}{#3}%
+}
-\def\unstash#1#2{\expandafter\space#2}% #1 is \stashed or \sflush
+\def\evenmathcontainer{\evenmather\end}
-\def\yyreadstash#1\to#2\in#3\with#4{%
- \yyreadfifo#1\to#2\in#3%
- #4{#3}%
- \setbox\z@=\vbox{
- \hsize\maxdimen\emergencystretch\maxdimen
- \rightskip\z@ plus 1fill
- \insertstash{#3}%
- \ifmmode
- {}$\aftergroup\yyr@adstash % $o that the box can be finished
+\def\evenmather#1$#2$#3$#4$#5$#6${}
+
+\def\emo#1\end{\yyfirstoftwo}
+
+\def\eme#1\end{\yysecondoftwo}
+
+\def\evenmathify#1$#2$#3$#4$#5$#6${%
+ {% make all changes to \next local
+ \def\next{#6}%
+ \ifx\next\evenmathcontainer
+ \yybreak{}%
\else
- \aftergroup\eatthree
- \fi
- }{#1}{#2}{#3}%
+ \yybreak{\aftergroup\evenmathify}%
+ \yycontinue
+ }%
}
\def\yyr@adstash#1#2#3{%
- #3\expandafter{\the#3{}$}% $
- \appendlnx#1{\strm[NaN]{\stashed{{}${}}}.[NaN]}% {}, in case \yystash ends with $
+ #3\expandafter{\the#3{}$}% $upply the math mode switch
+ {%
+ \tempca#2\relax
+ \advance\tempca\@ne
+ \edef\next{%
+ \noexpand\changelistelem{#1}{#2}{}{{}$}% change the consumed stash, so it can be read again
+ \noexpand\changelistelem{#1}{\the\tempca}{{}${}}{}%
+ }\expandafter
+ }\next
}
-% the sequence below may be redefined so that the #2 parameter to \yyreadstash may be a list of
-% token registers
-
-\def\insertstash#1{\the#1\relax}
-
-\def\readstash#1{\yyreadstash\yystash\to#1\in\yystashlocal\with\unpackstash}
+\def\readstash#1{%
+ \yyreadstash\yystash\to#1\in\yystashlocal\with\eatone
+}
\def\readstashwredirect#1#2#3{% helper macro to read the stash when the stash and the format pointers appear together
% #1(the format pointer) is ignored
% #2 is the stash marker
% #3 is the local stash register
- \yyreadstash\yystash\to#2\in#3\with\unpackstash
+ \yyreadstash\yystash\to#2\in#3\with\eatone
+}
+
+% format processing wrapper macros
+
+\def\readformat#1{%
+ \let\listiterator\listiteratorsimple
+ \consumelistupto\yyformat{#1}\to\yyformatlocal
+}
+
+\def\readformatlocalonly#1{%
+ \let\listiterator\listiteratorfmtloc
+ \let\wrapupfmtlocal\wrapupyyformatlocal
+ \yyformatlocal{}%
+ \evallistbetween\yyformat{\showlistpointer\yyformat}{#1}%
+}
+
+% iterator to extract \formatlocal
+
+\def\listiteratorfmtloc#1#2{%
+ \lookforfmtloc{#1}{}{}.#2\formatlocal{\formatlocal}%
+}
+
+\def\lookforfmtl@c#1#2#3#4#5{%
+ \isthisfmtlocal#5.\formatlocal{%
+ \wrapupfmtlocal{#2}{#3#1}{#4}%
+ }{%
+ \lookforfmtloc{#2}{#3#1}{#4\formatlocal{#5}}.%
+ }%
}
-\def\unpackstash#1{#1\expandafter{\romannumeral0\expandafter\unp@ckstash\the#1\strm[].[]}}
+\def\lookforfmtloc#1#2#3#4\formatlocal#5{% remove the guard .
+ \expandafter\lookforfmtl@c\expandafter{\eatone#4}{#1}{#2}{#3}{#5}%
+}
-\def\unp@ckstash{\gatherstash{}}
-\def\unwrapstash#1{% to use where only the removal of \strm and \stashed is needed
- #1\expandafter{\romannumeral0\expandafter\unwr@pstash\the#1\strm[].[]}%
+\def\isthisfmtlocal#1\formatlocal{%
+ \yystringempty{#1}{% a match, clean up the inserted \formatlocal
+ \endoffmtlocal
+ }{% not a match yet, \lookforfmtloc again
+ \yysecondoftwo
+ }%
}
-\def\unwr@pstash{\gatherstash{}}
+\def\endoffmtlocal#1\formatlocal{\yyfirstoftwo}
+
+\def\wrapupfmtlocal#1#2#3{% a postprocessing macro, to be changed by the one that
+ % invokes the iterator
+ \fdef#1{#2}%
+}
+
+\def\wrapupyyformatlocal#1#2#3{% macro used to save the \formatlocal contents in \yyformatlocal
+ \fdef#1{#2}\yyformatlocal\expandafter{\the\yyformatlocal#3}%
+}
+
+\let\wrapupfmtlocal\wrapupyyformatlocal
+
+% use example for the macros above:
+%\initlist{table}
+%\toksa{#}
+%\let\listiterator\listiteratorfmtloc
+%\appendtolisti{table}{..}
+%\appendtolisti{table}{a,}
+%\appendtolisti{table}{\formatlocal{}{b}\formatlocal{k} , }
+%\appendtolisti{table}{{c},}
+%\appendtolisti{table}{ \space d,}
+%\appendtolisti{table}{e\formatlocal{d},}
+%\appendtolisti{table}{\format{}{f}\formatlocal{j}}
+%\appendtolisti{table}{.}
+%\appendtolisti{table}{\end}
+%\finishlist{table}
+%\storelist{table}\to\toksa
+%\the\toksa
+%\storelist{table}\to\toksa
+%\message{full list: \the\toksa}
+%\errmessage{separated: \the\yyformatlocal}
% parser invocation
@@ -401,9 +526,12 @@
\def\d@parse#1{\yyparse#1\yyeof\yyeof\endparseinput\endparse}
-\def\astarraylastcs{\expandafter\noexpand\romannumeral\gettopofstackcsx\astarray}
-
-\long\def\strm[#1]#2.[#3]{#2} % this is used with both the format and the stash streams; TODO: deprecate
+% as an alternative to lists, stacks (as arrays) can be used to speed up the parser;
+% the following setup (along with a convenient shortcut to reference the most
+% recent store) can be employed if desired; unlike lists, stacks do not have
+% a built-in mechanism for slice expansion.
+%\yyinitstack\astarray % flattened AST to (possibly) speed up the parser
+%\def\astarraylastcs{\expandafter\noexpand\romannumeral\gettopofstackcsx\astarray}
\long\def\inmath#1{$#1$}
@@ -416,9 +544,14 @@
\def\ntt{\noexpand\ntt@} % a convenient shortcut
\def\ntt@{\tt\let\_\UL}
-\def\prodheader#1#2#3#4{%
- \yyreadfifo\yyformat\to#3\in\yyformatlocal
- \restorecs{table-render}{\strm}\the\yyformatlocal
+% macros that process the bison grammar terms;
+% the higher level macros (like the \prodheader below) set up the sequence in
+% which the processing takes place; the actual typesetting (or whatever other
+% task is desired, like reference creation) is done by the lower level macros
+% like \prodhead@r in this case.
+
+\defc\prodheader{% a `left-hand side' of a production :: \prodheader{\idit}{\idit}{fptr}{sptr}
+ \readformat{#3}\the\yyformatlocal
\let\termindex\writeidxhentry
\prodhead@r{#1}{#2}%
\let\termindex\eatone
@@ -426,53 +559,50 @@
\def\prodhead@r#1#2{%
\let\idit\prodhdridit
- #1\relax\concat\table\toksa\hrhss@p
+ #1\relax\astappendx{\the\toksa}\hrhss@p
}
-\def\hrhss@p{\toksa{&\omit\hfil&\omit\hfil&\omit\hfil\cr\noalign{\penalty100}\omit\hfil&\termspostformat}\concat\table\toksa}
+\def\hrhss@p{\toksa{&\omit\hfil&\omit\hfil&\omit\hfil\cr\noalign{\penalty100}\omit\hfil&\termspostformat}\astappendx{\the\toksa}}
-\def\rrhssep#1#2{%
- \yyreadfifot\yyformat\to#1\in\yyformatlocal\with\formatsort\relax
+\defc\rrhssep{% separator :: \rrhssep{fptr}{sptr}
+ \readformatlocalonly{#1}%
\the\yyformatlocal % this will have a chance to change the definition of \rrhss@p
\rrhss@p
}
-\def\rrhss@p{\toksa{\omit\hfil&}\concat\table\toksa}
+\def\rrhss@p{\toksa{\omit\hfil&}\astappendx{\the\toksa}}
-\def\arhssep#1#2{%
- \yyreadfifo\yyformat\to#1\in\yyformatlocal
+\defc\arhssep{% separator (between the action and the right hand side) :: \arhssep{fptr}{sptr}
+ \readformat{#1}%
\the\yyformatlocal % this will have a chance to change the definition of \arhss@p
\arhss@p
}
%% between the inline action and next term:
-\def\arhss@p{\toksa{\omit\hfil&\hbox to 2em{\hfil}}\concat\table\toksa}
+\def\arhss@p{\toksa{\omit\hfil&\hbox to 2em{\hfil}}\astappendx{\the\toksa}}
-\def\rarhssep#1#2{%
- \yyreadfifo\yyformat\to#1\in\yyformatlocal
+\defc\rarhssep{% separator :: \rarhssep{fptr}{sptr}
+ \readformat{#1}%
\the\yyformatlocal % this will have a chance to change the definition of \rarhss@p
\rarhss@p
}
%% between a term and the following action
-\def\rarhss@p{\appendr\table&}
-
-\newtoks\hstoks
+\def\rarhss@p{\astappend&}
-\def\hspace#1#2{%
- \hstoks\yyformat
- \yyreadfifot\yyformat\to#1\in\yyformatlocal\with\formatsort\relax
+\defc\hspace{% a space has to take two parameters just like any connector :: \hspace{fptr}{sptr}
+ \readformatlocalonly{#1}%
\the\yyformatlocal % may change \hspac@
\hspac@
}
\def\hspac@{%
- \appendr\table{ }%
+ \astappend{ }%
}
-\def\rhs#1#2#3{#1}
+\defc\rhs{#1}% a `right-hand side' :: \rhs{[\termname\hspace\rarhssep\arhssep\actbraces]+}{\arhssep|<nothing>}{\ifrhsfull}
\def\supplybdirective#1#2{%
\edef\next{\nx\s@pplybdirective#1{\the#2}\the#1\nx\bdend}\next
@@ -482,7 +612,7 @@
#1{#3#2\bdend}%
}
-\def\termname#1#2{%
+\defc\termname{% a production term :: \termname{\idit|\stringify|\charit}{\idit}
\let\idit\termnameidit
\let\stringify\termnamestringify
\let\optstrextra\optstrextraesc
@@ -499,7 +629,7 @@
\def\t@rmn@m@#1#2{% the termname is #2, the bracketed part is in #1
\yystringempty{#1}{\toksa{#2}}{\toksa{#2\hbox{$\langle${}#1{}$\rangle$}}}%
- \concat\table\toksa
+ \astappendx{\the\toksa}%
}
\newif\ifbracketedvisible % decide whether to show the bracketed name in productions
@@ -512,16 +642,15 @@
\toksa{#2}%
\fi
}%
- \concat\table\toksa
+ \astappendx{\the\toksa}%
}
%
\newtoks\bdirects
-\def\actbraces#1#2#3#4#5\bdend{%
- \yyreadfifo\yyformat\to#3\in\yyformatlocal
- \restorecs{table-render}{\strm}%
+\defc\actbraces{% action braces :: \actbraces{tex_string}{\idit|<nothing>}{fptr}{sptr}directive*\bdend
+ \readformat{#3}%
#5% accumulate all the directives
\yytoksempty\bdirects{}{%
\edef\next{\bdirects{%
@@ -533,13 +662,12 @@
\def\actbrac@s#1#2#3{%
\readstash{#3}%
- \appendr\table{\the\bdirects&\toksa{\the\yystashlocal}\cr}%
+ \astappendx{\the\bdirects&\toksa{\the\yystashlocal}\cr}%
\bdirects{}%
}
\def\bpredicate#1#2#3#4#5\bdend{%
- \yyreadfifo\yyformat\to#3\in\yyformatlocal
- \restorecs{table-render}{\strm}%
+ \readformat{#3}%
#5% accumulate all the directives
\yytoksempty\bdirects{%
\bdirects{\quad$\dashv\ \nx\vdash$}%
@@ -554,7 +682,7 @@
\def\bpredicat@#1#2#3{%
\readstash{#3}%
- \appendr\table{\the\bdirects&\toksa{\the\yystashlocal}\cr}%
+ \astappendx{\the\bdirects&\toksa{\the\yystashlocal}\cr}%
\bdirects{}%
}
@@ -578,9 +706,9 @@
\bdirective{prec}{#1}{#2}{#3}%
}
-\def\rules#1#2#3{#1}
+\defc\rules{#1}% a complete right-hand side :: \rules{[\rhs|\rrhssep]}
-\def\oneproduction#1#2#3{#1\setrulecontext{}\stopproduction}
+\defc\oneproduction{#1\setrulecontext{}\stopproduction}% a complete production :: \oneproduction{\prodheader\rules}{fptr}{sptr}
% to make it possible to typeset tokens depending on their context
% the context name is passed to the token typeseting macros; the most
@@ -599,10 +727,13 @@
% because of this it would be unnatural to define a \prettywordpair sequence for it in the main
% parser namespace; using a special non-\bison\ name should avoid any confusion with
% the regular grammar terms
-\def\emptyterm{\appendr\table{$\nx\circ$\tidxentry{\termexception}{emptyrhs&}}}
+
+\def\emptyrhssymbol{$\circ$}
+
+\defc\emptyterm{\astappendx{\nx\emptyrhssymbol\tidxentry{\termexception}{emptyrhs&}}}
\def\termnameidit#1#2#3#4{%
- \yyreadfifot\yyformat\to#3\in\yyformatlocal\with\formatsort\relax
+ \readformatlocalonly{#3}%
\the\yyformatlocal
\nameproc{#2}\with\parsebin
\peekstash{#4}% does not clobber \toksa and \toksb
@@ -641,7 +772,7 @@
\newif\ifinheader
\def\prodhdridit#1#2#3#4{%
- \setrulecontext{}% TODO: ?
+ \setrulecontext{}% TODO: perhaps some special context for the left hand side terms is appropriate
\nameproc{#2}\with\parsebin
\setrulecontext{#1}%
\edef\next{\toksa{{%
@@ -650,7 +781,7 @@
}}}\next
}
-\def\charit#1#2#3#4{%
+\defc\charit{% *CHAR :: \charit{12string}{tex_string}{fptr}{sptr}
\expandafter\ifx\csname\prettynamecs\hostparsernamespace{#1}\endcsname\relax
\toksa{#1}\sansfirst\toksa
\edef\next{\toksa{{\ntt\the\toksa}\gidxentryxb{\termvstring}{\the\toksa}{}}}% remove the possible \\
@@ -668,12 +799,12 @@
\next
}
-\def\anint#1#2#3{%
- \appendrnx\table{#1}%
+\defc\anint{% INT :: \anint{digits}{fptr}{sptr}
+ \astappend{#1}%
}
-\def\hexint#1#2#3{%
- \expandafter\appendrnx\expandafter\table\expandafter{\eattwo#1$_{16}$}%
+\defc\hexint{% INT :: \hexint{0[xX][0-9A-F]+}{fptr}{sptr}
+ \expandafter\astappend\expandafter{\eattwo#1$_{16}$}%
}
\def\optoptsepnone{%
@@ -687,17 +818,17 @@
\def\prodprodsepsmall{%
\pushothertables
- \appendrnx\table{\noalign{\penalty-150 \smallskip}}%
+ \astappend{\noalign{\penalty-150 \smallskip}}%
}
\def\prodprodsep{%
\pushothertables
- \appendrnx\table{\noalign{\medskip}}%
+ \astappend{\noalign{\medskip}}%
}
\def\prodprodseplarge{%
\pushothertables
- \appendrnx\table{\noalign{\bigskip}}%
+ \astappend{\noalign{\bigskip}}%
}
\def\separatorswitcheq{%
@@ -730,7 +861,6 @@
\edef\next{\postoks{\nx\posmark{\the\postoks}{\the\toksd}}}\next
}
\prologuecode\ntermdecls\tokendecls
- \flexsstatedecls\flexxstatedecls\flexoptiondecls
{%
\getthird{\yy(2)}\to\postoks % the format marker
\getfourth{\yy(2)}\to\toksd % the stash marker
@@ -762,7 +892,7 @@
}
\def\posmark#1#2{%
-% \yyreadfifo\yyformat\to#1\in\yyformatlocal
+% \readformat{#1}%
% no formatting for locations currently
% \the\yyformatlocal
\posm@rk{#2}%
@@ -798,7 +928,6 @@
\oneparametricoption\vardef\paramdef\optionflag
\codepropstype\codeassoc\prologuecode
\typedecls\tokendecls\precdecls\oneproduction
- \flexsstatedecls\flexxstatedecls\flexoptiondecls
}
\def\emptyoption{\empty}
@@ -840,15 +969,117 @@
\yytoksempty\prectable{}{\attachprectable}%
% options
\yytoksempty\opttable{}{\attachoptionstable}%
- \concat\table\postoks
+ \astappendx{\the\postoks}%
} %
-% the various \attach... macros above are defined elsewhere and are the macros that
-% determine the actual typesetting of the corresponding tables.
+% typesetting token lists, precedence declarations, etc
+
+\def\attachtokentable{% typesetting the token declarations as part of the grammar
+ \tempcb3 \tempca\tempcb
+ \expandafter\tokdectoks\expandafter{\expandafter}\the\tokdectoks
+ \ifnum\tempca=\tempcb
+ \else
+ \bloop
+ \tokdectoks\expandafter{\the\tokdectoks&\omit\hfil}%
+ \ifnum\tempca=\z@
+ \else
+ \advance\tempca\m@ne
+ \repeat
+ \tokdectoks\expandafter{\the\tokdectoks\cr}%
+ \fi
+ \toksa{\tt\strut##\hfil\tabskip=0pt plus 1fil}%
+ \bloop
+ \toksa\expandafter{\the\toksa&\tt\strut##\hfil}%
+ \ifnum\tempcb=\tw@
+ \else
+ \advance\tempcb\m@ne
+ \repeat
+ \toksa\expandafter{\the\toksa&\tt\strut##\hfil\tabskip\z@\cr}%
+ \concat\toksa\tokdectoks
+ \tokdectoks\toksa
+ \astappendx{\noalign{%
+ \tabskip\parindent
+ %\nx\displaytokenrawtrue % this controls how tokens are displayed
+ % in the declarations: if true, the macro names will be shown
+ \halign to\hsize{\the\tokdectoks}%
+ }%
+ }%
+ \tokdectoks{}%
+}
+
+\def\toksdefline#1#2#3#4#5{% #1 is the parsed version of the internal bison name
+ % #2 is the index entry
+ % #3 is the type
+ % #4 is the explicit value
+ % #5 is the parsed version of the string value
+ \ifnum\tempca=\z@
+ \tokdectoks\expandafter{\the\tokdectoks&{#2}#1\hfil\cr}%
+ \tempca\tempcb
+ \else
+ \ifnum\tempcb=\tempca
+ \tokdectoks\expandafter{\the\tokdectoks{#2}#1\hfil}%
+ \else
+ \tokdectoks\expandafter{\the\tokdectoks&{#2}#1\hfil}%
+ \fi
+ \advance\tempca\m@ne
+ \fi
+}
+
+\def\attachtypestable{% typesetting the type declarations as part of the grammar
+ \toksa{}\the\typestable
+ \astappendx{\noalign{{\the\toksa}}}\typestable{}%
+}
+
+\long\def\onetype#1#2{%
+ \toksb{{%
+ \hbadness\@M
+ \rightskip=\z@
+ \tempda\hsize \advance\tempda-1in
+ \indent{$\langle$\tt union$\rangle.#1$:}\ \hfill\nobreak\hfill\nobreak\null\penalty1\relax\null\nobreak\hfill
+ \hbox to\tempda{$\vtop{\noindent\hsize\tempda\raggedright #2\strut}$}\par
+ }}%
+ \concat\toksa\toksb
+}
+
+\def\attachprectable{% typesetting the precedence declarations as part of the grammar
+ \toksa{}\the\prectable
+ \astappendx{\noalign{{\the\toksa}}}\prectable{}%
+}
+
+\long\def\oneprec#1#2#3{%
+ \toksc{%
+ \hbadness\@M
+ \rightskip=\z@
+ \tempda\hsize \advance\tempda-1in
+ \indent
+ }%
+ \toksd{%
+ \ \hfill\nobreak\hfill\nobreak\null\penalty1\relax\null\nobreak\hfill
+ \hbox to\tempda{$\vtop{\noindent\hsize\tempda\raggedright #3\strut}$}\par
+ }
+ \def\next{#2}%
+ \ifx\next\empty
+ \toksb{}%
+ \else
+ \toksb{${}:{}$#2}%
+ \fi
+ \edef\next{\toksb{{$\nx\langle$\nx\bf #1\the\toksb$\nx\rangle$}}}\next
+ \appendr\toksa{{\the\toksc\the\toksb\the\toksd}}%
+}
+
+\def\attachoptionstable{% typesetting the options as part of the grammar
+ \astappendx{\noalign{%
+ \tabskip\parindent
+ \halign{####\nx\hfil\tabskip\z@&\nx\qquad\nx\it####\nx\hfil\cr
+ \the\opttable
+ }%
+ }%
+ }\opttable{}%
+}
\let\stopproduction\relax
-\def\tokendecls#1#2#3{%
+\defc\tokendecls{% token declarations :: \tokendecls{[\onesymbol]+}{fptr}{sptr}
\savecslist{local-namespace}{\yyunion\termindex}%
\restorecslist{table-render:token-declarations}\yyunion
\let\termindex\writetokenidxentry
@@ -856,7 +1087,7 @@
\restorecslist{local-namespace}{\yyunion\termindex}%
}
-\def\typedecls#1#2#3#4{%
+\defc\typedecls{% type declarations :: \typedecls{\tagit}{[\idit\stringify\charit]+}{fptr}{sptr}
\savecslist{local-namespace}{\yyunion\termindex}%
\restorecslist{table-render:type-declarations}\yyunion
\let\termindex\writetokenidxentry
@@ -865,37 +1096,6 @@
\restorecslist{local-namespace}{\yyunion\termindex}%
}
-% \onetype is a typeseting macro defined elsewhere
-% TODO: move these to the \flex\ section
-
-\def\flexsstatedecls#1#2#3{%
- \savecslist{local-namespace}{\yyunion\termindex}%
- \restorecslist{table-render:flex-state-declarations}\yyunion
- \let\termindex\writeidxfsdentry%\writetokenidxentry
- \typesset{}#1\relax
- \appendr\typestable{\nx\flexsstatelist{\the\typesset}}%
- \restorecslist{local-namespace}{\yyunion\termindex}%
-}
-
-\def\flexxstatedecls#1#2#3{%
- \savecslist{local-namespace}{\yyunion\termindex}%
- \restorecslist{table-render:flex-state-declarations}\yyunion
- \let\termindex\writeidxfsdentry%\writetokenidxentry
- \typesset{}#1\relax
- \appendr\typestable{\nx\flexxstatelist{\the\typesset}}%
- \restorecslist{local-namespace}{\yyunion\termindex}%
-}
-
-% \flexsstatelist and \flexxstatelist are typesetting macros defined elsewhere
-
-\def\flexoptiondecls#1#2#3{%
- \savecslist{local-namespace}{\yyunion\termindex}%
- \restorecslist{table-render:flex-option-definitions}\yyunion
- \let\termindex\writeidxfsrnentry%\writetokenidxentry
- \toksa{}#1\relax
- \restorecslist{local-namespace}{\yyunion\termindex}%
-}
-
\def\precdecls#1#2#3#4#5{% #1 type
% #2 tag
% #3 list of symbols
@@ -911,8 +1111,6 @@
\setrulecontext{}%
}
-% \oneprec is a typesetting macro defined elsewhere
-
% options typesetting
\def\oneparametricoption#1#2#3#4{%
@@ -959,9 +1157,7 @@
}
\def\codepropstype#1#2#3#4#5#6#7{%
- \yyreadfifo\yyformat\to#4\in\yyformatlocal
- \restorecs{table-render}{\strm}%
- \the\yyformatlocal % this can change \codepropstyp@
+ \readformat{#4}\the\yyformatlocal % this can change \codepropstyp@
\codepropstyp@{#2}{#3}{#1}{#5}%
}
@@ -981,9 +1177,7 @@
}
\def\codeassoc#1#2#3#4#5#6#7{%
- \yyreadfifo\yyformat\to#4\in\yyformatlocal
- \restorecs{table-render}{\strm}%
- \the\yyformatlocal % this can change \codeass@c
+ \readformat{#4}\the\yyformatlocal % this can change \codeass@c
\codeass@c{#1}{#2}{#3}{#5}%
}
@@ -1001,9 +1195,7 @@
}
\def\vardef#1#2#3#4{%
- \yyreadfifo\yyformat\to#3\in\yyformatlocal
- \restorecs{table-render}{\strm}%
- \the\yyformatlocal % this can change \vard@f
+ \readformat{#3}\the\yyformatlocal % this can change \vard@f
\vard@f{#1}{#2}{#4}%
}
@@ -1022,7 +1214,7 @@
\appendr\opttable{$\nx\langle${\nx\bf define}$\nx\rangle$\nx\quad{\the\toksb}&\the\toksc\cr}%
}
-\def\prologuecode#1#2#3#4#5{% similar to \actbrac@s
+\defc\prologuecode{% prologue code :: \prologuecode{tex_string}{fptr}{sptr}{fptr}{sptr}
\readstash{#5}%
\appendr\opttable{%
\omit\span\omit\nx\cdotfill\cr
@@ -1032,7 +1224,7 @@
}
\def\yyunion@tablerender{%
- \strm\stashed\rarhss@p\rrhss@p\prodhead@r\hrhss@p\arhss@p\termnam@\termn@m@\t@rmn@m@
+ \stashed\rarhss@p\rrhss@p\prodhead@r\hrhss@p\arhss@p\termnam@\termn@m@\t@rmn@m@
\actbrac@s\hspac@\codepropstyp@\vard@f\termmetastyle\peekstash\stopproduction
}
@@ -1040,6 +1232,7 @@
\savecslist{table-render}\yyunion@tablerender
\def\setprodtable{%
+ \def\aststream{bison.rules}% the list where the AST output is gathered
\restorecslist{table-render}\yyunion
\restorecslist{table-render}\yyunion@tablerender
}
@@ -1068,10 +1261,12 @@
\let\rrhss@p\rrhss@p@flatten
\let\arhss@p\relax
\let\rarhss@p\relax
+ \def\flattenactiontrace{}%
}
\def\actbrac@s@flatten#1#2#3{% do everything but add the stash contents to the table
\readstash{#3}%
+ \edef\flattenactiontrace{\flattenactiontrace*}%
\yystashlastcontent\yystashlocal % keep the contents of the braces
% in case we want to show the last action
\futurelet\actsep\actbrac@s@fl@tten
@@ -1079,23 +1274,38 @@
% see the remarks before \emptyterm above for the reasons for choosing the index
% pseudonamespace for this term
+
+\def\inlineactionsymbol{$\diamond$}
+
\def\actbrac@s@fl@tten{%
\ifx\actsep\arhssep
- \appendr\table{$\nx\ \nx\diamond\nx\ $\tidxentry{\termexception}{inline_action&}}%
+ \astappendx{\nx\ \nx\inlineactionsymbol\nx\ \tidxentry{\termexception}{inline_action&}}%
\fi
}
\def\rrhss@p@flatten{%
- \appendrnx\table{$\ \vert\ $}%
+ \astappend{$\ \vert\ $}%
}%
\def\stopproduction@flatten{%
\ifshowlastaction
+ {%
+ \toksa\yystashlastcontent\cleanstash
+ \yytoksempty\toksa{}{% there is a non-empty action
+ \def\next{*}%
+ \ifx\flattenactiontrace\next % if there were more than one action
+ \else % preceeding it, prepend an indicator (ellipsis)
+ \appendlnx\toksa{\hbox{$\ldots\ \vert\ $}{}\ignorespaces}%
+ \fi
+ }%
+ \expandafter
+ }\expandafter\yystashlastcontent\expandafter{\the\toksa}%
\yystashlastcontent\expandafter{\expandafter\toksa\expandafter{\the\yystashlastcontent}}%
\else
\yystashlastcontent{\actionfiller}%
\fi
- \appendr\table{&&\the\yystashlastcontent\nx\cr}%
+ \def\flattenactiontrace{}%
+ \astappendx{&&\the\yystashlastcontent\nx\cr}%
}
% fold: resume normal display
@@ -1117,7 +1327,7 @@
\def\prodhead@r@inline#1#2{%
\let\idit\prodhdridit
#1\relax
- \concat\table\toksa
+ \astappendx{\the\toksa}%
\setbox\z@=\hbox{\strut\the\toksa\/$\,$\rm:\quad}%
\tempda=\wd\z@\relax
\advance\tempda-2em
@@ -1129,7 +1339,7 @@
\def\termspostformat{\ifsquashterms\aftergroup\noexpand\squashtermstrue\fi}
\def\hrhss@p@inline{%
- \appendr\table{&\termspostformat\hbox to \the\tempda{\hss}}%
+ \astappendx{&\termspostformat\hbox to \the\tempda{\hss}}%
}
% breakline: break the production line
@@ -1139,7 +1349,7 @@
}
\def\hspac@@breakline{%
- \appendrnx\table{{$\,\hookleftarrow$}&\omit\hfil&\omit\hfil\cr\omit\hfil&\hbox to 2em{\hfil}}%
+ \astappend{{$\,\hookleftarrow$}&\omit\hfil&\omit\hfil\cr\omit\hfil&\hbox to 2em{\hfil}}%
\restorecs{table-render}\hspac@
}
@@ -1157,7 +1367,7 @@
\def\hspac@@breakahead{%
\ifnum\breakaheadcount=\@ne
\yybreak{%
- \appendrnx\table{{$\,\hookleftarrow$}&\omit\hfil&\omit\hfil\cr\omit\hfil&\hbox to 2em{\hfil}}%
+ \astappend{{$\,\hookleftarrow$}&\omit\hfil&\omit\hfil\cr\omit\hfil&\hbox to 2em{\hfil}}%
\let\hspac@\bahspac@
}%
\else
@@ -1177,7 +1387,7 @@
\hrhss@p
}
-\def\hrhss@p@skipheader{\appendrnx\table{\omit\hbox to 2em{\hfil}&\termspostformat}\restorecs{table-render}{\hrhss@p}}
+\def\hrhss@p@skipheader{\astappend{\omit\hbox to 2em{\hfil}&\termspostformat}\restorecs{table-render}{\hrhss@p}}
\def\stashtoterm#1{% in case one needs to insert previous stash as a term
% usage: \let\peekstash\stashtoterm
@@ -1193,7 +1403,7 @@
\def\resetf{%
\restorecs{table-render}{\prodheader\prodhead@r\hrhss@p\rrhss@p\arhss@p\rhs\termname\actbraces\actbrac@s\rarhss@p\hspac@\rules
- \oneproduction\emptyterm\stringify\idit\charit\prodprodsep\onesymbol\strm\stopproduction}%
+ \oneproduction\emptyterm\stringify\idit\charit\prodprodsep\onesymbol\stopproduction}%
\squashtermsfalse
}
@@ -1263,26 +1473,26 @@
\restorecslist{parser-strict}\yyunion
-\def\idit#1#2#3#4{%
+\defc\idit{% *ID :: \idit{12string}{tex_string}{fptr}{sptr}
\termnameidit{#1}{#2}{#3}{#4}%
\concat\typesset\toksa
}
-\def\stringify#1#2#3#4{%
+\defc\stringify{% *STRING :: \stringify{12string}{tex_string}{fptr}{sptr}
\termnamestringify{#1}{#2}{#3}{#4}%
\concat\typesset\toksa
}
-\def\hspace#1#2{%
+\defc\hspace{% a space has to take two parameters just like any connector :: \hspace{fptr}{sptr}
\appendrnx\typesset{ }%
}
-\def\charit#1#2#3#4{%
+\defc\charit{% *CHAR :: \charit{12string}{tex_string}{fptr}{sptr}
\toksa{\.{#2}}%
\concat\typesset\toksa
}
-\def\tagit#1#2#3#4{%
+\defc\tagit{% *TAG :: \tagit{12string}{tex_string}{fptr}{sptr}
\toksa{\\{#2}}%
}
@@ -1294,19 +1504,19 @@
\restorecslist{parser-strict}\yyunion
-\def\hspace#1#2{}
+\defc\hspace{}
-\def\idit#1#2#3#4{\toksa{#2}}
+\defc\idit{\toksa{#2}}% *ID :: \idit{12string}{tex_string}{fptr}{sptr}
-\def\charit#1#2#3#4{\toksa{'#1'}}
+\defc\charit{\toksa{'#1'}}% *CHAR :: \charit{12string}{tex_string}{fptr}{sptr}
-\def\stringify#1#2#3#4{\toksb{#2}}
+\defc\stringify{\toksb{#2}}% *STRING :: \stringify{12string}{tex_string}{fptr}{sptr}
-\def\anint#1#2#3{\toksc{#1}}
+\defc\anint{\toksc{#1}}% INT :: \anint{digits}{fptr}{sptr}
-\def\hexint#1#2#3{\toksc\expandafter{\eattwo#1$_{16}$}}
+\defc\hexint{\toksc\expandafter{\eattwo#1$_{16}$}}% INT :: \hexint{0[xX][0-9A-F]+}{fptr}{sptr}
-\def\tagit#1#2#3#4{%
+\defc\tagit{% *TAG :: \tagit{12string}{tex_string}{fptr}{sptr}
\def\currenttokentype{#2}%
}
@@ -1323,9 +1533,9 @@
\edef\next{\nx\onesymb@l{\the\toksa}{\the\toksc}{\the\toksb}}\next
}
-\def\onesymb@l#1#2#3{% #1 is the macro name used internally by bison
- % #2 is the integer value
- % #3 is the string value
+\def\onesymb@l#1#2#3{% #1 is the macro name used internally by bison
+ % #2 is the integer value
+ % #3 is the string value
\let\optstrextra\optstrextraesc
\tokse{}\toksf{}\toksg{}% these registers will contain the appropriate visual keys
% and index entry processing control sequences
@@ -1362,17 +1572,17 @@
\restorecslist{parser-strict}\yyunion
-\def\idit#1#2#3#4{%
+\defc\idit{% *ID :: \idit{12string}{tex_string}{fptr}{sptr}
\termnameidit{#1}{#2}{#3}{#4}%
\concat\typesset\toksa
}
-\def\stringify#1#2#3#4{%
+\defc\stringify{% *STRING :: \stringify{12string}{tex_string}{fptr}{sptr}
\termnamestringify{#1}{#2}{#3}{#4}%
\concat\typesset\toksa
}
-\def\charit#1#2#3#4{%
+\defc\charit{% *CHAR :: \charit{12string}{tex_string}{fptr}{sptr}
\expandafter\ifx\csname\prettynamecs\hostparsernamespace{#1}\endcsname\relax
\toksa{#1}\sansfirst\toksa
\edef\next{\toksa{{\ntt\the\toksa}\gidxentryxb{\termvstring}{\the\toksa}{}}}% remove the possible \\
@@ -1391,20 +1601,20 @@
\concat\typesset\toksa
}
-\def\anint#1#2#3{%
+\defc\anint{% INT :: \anint{digits}{fptr}{sptr}
\appendrnx\typesset{${}=\hbox{\ntt#1}$}%
}
-\def\hexint#1#2#3{%
+\defc\hexint{% INT :: \hexint{0[xX][0-9A-F]+}{fptr}{sptr}
\toksa\expandafter{\eattwo#1}%
\appendr\typesset{${}=\hbox{\ntt\the\toksa}_{16}$}%
}
-\def\hspace#1#2{%
+\defc\hspace{%
\appendrnx\typesset{ }%
}
-\def\tagit#1#2#3#4{%
+\defc\tagit{% *TAG :: \tagit{12string}{tex_string}{fptr}{sptr}
\toksa{\\{#2}}%
}
@@ -1418,9 +1628,9 @@
\restorecslist{parser-strict}\yyunion
-\def\idit#1#2#3#4{\toksa{#2}}
+\defc\idit{\toksa{#2}}% *ID :: \idit{12string}{tex_string}{fptr}{sptr}
-\def\stringify#1#2#3#4{\toksa{#2}}
+\defc\stringify{\toksa{#2}}% *STRING :: \stringify{12string}{tex_string}{fptr}{sptr}
\def\bracedvalue#1#2#3{% similar to \actbrac@s
\readstash{#3}%
@@ -1433,79 +1643,33 @@
\restorecslist{parser-strict}\yyunion
-\def\idit#1#2#3#4{%
+\defc\idit{% *ID :: \idit{12string}{tex_string}{fptr}{sptr}
\termnameidit{#1}{#2}{#3}{#4}%
}
-\def\stringify#1#2#3#4{%
+\defc\stringify{% *STRING :: \stringify{12string}{tex_string}{fptr}{sptr}
\termnamestringify{#1}{#2}{#3}{#4}%
}
-\def\tagit#1#2#3#4{%
+\defc\tagit{% *TAG :: \tagit{12string}{tex_string}{fptr}{sptr}
\toksa{\\{#2}}%
}
-\def\anint#1#2#3{%
+\defc\anint{% INT :: \anint{digits}{fptr}{sptr}
\toksa{#1}%
}
-\def\hexint#1#2#3{%
+\defc\hexint{% INT :: \hexint{0[xX][0-9A-F]+}{fptr}{sptr}
\toksa\expandafter{\eattwo#1$_{16}$}%
}
\toyyunion{table-render:directives}
-% flex state declarations
-
-\restorecslist{parser-strict}\yyunion
-
-\def\idit#1#2#3#4{%
- \nameproc{#2}\with\parsebin
- \appendr\typesset{{%
- \gidxentryxv{\termttstring}{#1}{\the\toksb}%
- \ntt\the\toksa
- }}%
-}
-
-\def\hspace#1#2{%
- \appendr\typesset{ }%
-}
-
-\toyyunion{table-render:flex-state-declarations}
-
-% flex option definitions
-
-\restorecslist{parser-strict}\yyunion
-
-\def\flexoptionpair#1#2{%
- #1%
- \yystringempty{#2}{% there is no right hand side
- \appendr\opttable{$\nx\langle${\ntt\the\toksa}$\nx\rangle_{\rm f}\,\star$&\cr}%
- }{%
- \toksb\toksa\toksa{}#2%
- \appendr\opttable{$\nx\langle${\ntt\the\toksb}$\nx\rangle_{\rm f}$&\nx\it\the\toksa\nx\/\nx\cr}%
- }%
-}
-
-\def\idit#1#2#3#4{%
- \toksa{#2}%
- \edef\next{\toksa{{%
- \gidxentry{\termfsopstring}{#2}{}%
- \ntt\the\toksa
- }}}\next
-}
-
-\def\stringify#1#2#3#4{\toksa{{\ntt@"#2"}}}
-
-\def\hspace#1#2{}
-
-\toyyunion{table-render:flex-option-definitions}
-
% rule listing macros
\restorecslist{parser-prototypes}\yyunion % we just want to ignore the non-rule related code
-\def\prodheader#1#2#3#4{%
+\defc\prodheader{% a `left-hand side' of a production :: \prodheader{\idit}{\idit}{fptr}{sptr}
#1\relax
\lastlastname\lastname
\setnumname\numname
@@ -1515,14 +1679,14 @@
}
% the macros below are defined in `parser-prototypes'
-%\def\rrhssep#1#2{}
-%\def\arhssep#1#2{}
-%\def\rarhssep#1#2{}
-%\def\hspace#1#2{}
-%\def\prodprodsep{}
-%\def\onesymbol#1#2#3{}
-
-\def\rhs#1#2#3{%
+%\defp\rrhssep#1#2{}
+%\defp\arhssep#1#2{}
+%\defp\rarhssep#1#2{}
+%\defp\hspace#1#2{}
+%\defp\prodprodsep{}
+%\defp\onesymbol#1#2#3{}
+
+\defc\rhs{% a `right-hand side' :: \rhs{[\termname\hspace\rarhssep\arhssep\actbraces]+}{\arhssep|<nothing>}{\ifrhsfull}
\concat\toksa\toksc
\concat\toksb\toksd
#1\relax
@@ -1536,7 +1700,7 @@
\newtoks\lastname
\newtoks\lastlastname
-\def\termname#1#2{%
+\defc\termname{% a production term :: \termname{\idit|\stringify|\charit}{\idit}
\flushact
#1\relax
\lastlastname\lastname
@@ -1551,7 +1715,7 @@
\ifx\next\relax % this is a terminal that was renamed
\expandafter\ifx\csname token\parsernamespace\the\lastname \endcsname\relax % this is probably a symbol from another grammar
\def#1{-1}%
- \errmessage{token \csname token\parsernamespace\the\lastname \endcsname\space is undefined}%
+ \errmessage{token \the\lastname\space is undefined}%
\else
\expandafter\tempca\csname token\parsernamespace\the\lastname \endcsname
\edef#1{\fgetelemof{yytranslate}\at\tempca}%
@@ -1561,7 +1725,7 @@
\fi
}
-\def\actbraces#1#2#3#4#5\bdend{%
+\defc\actbraces{% action braces :: \actbraces{tex_string}{\idit|<nothing>}{fptr}{sptr}directive*\bdend
\flushact
\lastname{}%
#2\relax
@@ -1569,32 +1733,32 @@
\possibleimplicittrue
}
-\def\rules#1#2#3{#1}
+\defc\rules{#1}% a complete right-hand side :: \rules{[\rhs|\rrhssep]}
-\def\oneproduction#1#2#3{#1}
+\defc\oneproduction{#1}% a complete production :: \oneproduction{\prodheader\rules}{fptr}{sptr}
-\def\emptyterm{%
+\defc\emptyterm{%
\flushact
\lastname{}%
}
-\def\stringify#1#2#3#4{%
+\defc\stringify{% *STRING :: \stringify{12string}{tex_string}{fptr}{sptr}
\lastname{"#1"}%
}
-\def\idit#1#2#3#4{%
+\defc\idit{% *ID :: \idit{12string}{tex_string}{fptr}{sptr}
\lastname{#1}%
}
-\def\charit#1#2#3#4{%
+\defc\charit{% *CHAR :: \charit{12string}{tex_string}{fptr}{sptr}
\lastname{'#1'}%
}
-\def\anint#1#2#3{%
+\defc\anint{% INT :: \anint{digits}{fptr}{sptr}
\lastname{#1}%
}
-\def\hexint#1#2#3{%
+\defc\hexint{% INT :: \hexint{0[xX][0-9A-F]+}{fptr}{sptr}
\lastname\expandafter{\expandafter\number\eattwo#1$_{16}$}%
}
@@ -1626,6 +1790,8 @@
\def\prettywordpair#1#2{\prettywordpair@@{#1}{{\ntt@#2}}}
+\newif\ifdisplaytokenraw
+
\def\prettywordpair@#1#2{% a `weak symbol' version of the above macro, so that the new typesetting can be overriden
\setsafe{#1}\toksa{}\numberstocharsandspaces#2\end\expandafter\nameproc\expandafter{\the\toksa}\with\parsebin
\expandafter\edef\csname\prettynamecs\parsernamespace\saferword\endcsname##1{%
@@ -1686,11 +1852,11 @@
\restorecslist{parser-prototypes}\yyunion
-\def\tokendecls#1#2#3{#1}
+\defc\tokendecls{#1}% token declarations :: \tokendecls{[\onesymbol]+}{fptr}{sptr}
-\def\stringify#1#2#3#4{\toksa{"#1"}}
+\defc\stringify{\toksa{"#1"}}% *STRING :: \stringify{12string}{tex_string}{fptr}{sptr}
-\def\idit#1#2#3#4{\toksb{#1}}
+\defc\idit{\toksb{#1}}% *ID :: \idit{12string}{tex_string}{fptr}{sptr}
%\def\anint#1#2#3{\toksc{#1}}% this definition is not needed as all
% the information is extracted from yytname
@@ -1698,7 +1864,7 @@
% note that the definitions below do not handle cases such as
%token '{' "left brace" since the lexer knows how to return '{'
-\def\onesymbol#1#2#3{%
+\defc\onesymbol{%#1#2#3 % a symbol definition :: \onesymbol{\idit}{\anint|\hexint}{\stringify}
\toksa{}\toksb{}%\toksc{}%
#1#2#3%
\yytoksempty\toksa{\expandafter\charstonumbers\the\toksb\end}%
@@ -1712,24 +1878,27 @@
}%
}
-\def\flexsstatedecls#1#2#3{% bootstrap parser does not produce state declarations so it is fine to share states
- \savecslist{local-namespace}\yyunion
- \restorecslist{bootstrap:flex-state-declarations}\yyunion
- #1\relax
- \restorecslist{local-namespace}\yyunion
-}
-
-\let\flexxstatedecls\flexsstatedecls
-
-\savecslist{bootstrap}\yyunion
-
-\restorecslist{parser-strict}\yyunion
+% the original, minimal bootstrapping macros were designed to process
+% \prodstyle{\%token} declarations only and are enough to establish the
+% interface between the \bison\ parser and the \bison\ lexer; to serve
+% the secondary task of providing typesetting information to
+% the \bison\ parser, all forms of token declarations must be processed;
+%
+% note that the bootstrap parser cannot process these additional declarations
+% so these macros are designed to work with a full or prologue parser
+% in a bootstrap mode; see \.{\\modebootstrap} in ldman.w and
+% its use in \.{ldlex.w} and \.{ldgram.w} for an example of such
+% an arrangement.
-\def\idit#1#2#3#4{{\immediate\write\stlist{_register_name(#1);}}}
+\def\precdecls#1#2#3#4#5{#3}
-\def\hspace#1#2{}
+\def\symbolprec#1#2{%
+ \toksa{}\toksb{}%
+ #1%
+ \yytoksempty\toksb{}{\immediate\write\tokendefs{\noexpand\tokenpp{\the\toksb}}}%
+}
-\savecslist{bootstrap:flex-state-declarations}\yyunion
+\savecslist{bootstrap}\yyunion
% correct a few macros for debugging
@@ -1872,7 +2041,7 @@
\def\ignoreexplicitspace{\yyinput}
% the main name processing routine
-% does not have any side effects;
+% does not have any side effects (other than the ones explicitly produced by the final call of #2);
% the parsed term is returned as #1 of the sequence in #2; #2 of #2 will hold a visual key if
% one exists, otherwise it will be empty; #3 is \yyparsefailtrue or empty
% #4 is the prettyfied version of the term if one exists; #5 is the typesetting hint from \visflag sequences;
@@ -2013,12 +2182,24 @@
% \flex\ regex typesetting routine and \flex\ parser value stack types
+\def\flrecharadjust{
+ `{%
+ \yybyte{|}%
+ \expandafter\yycp@\expandafter`\the\yybyte\relax
+ \mkpurebyte
+ \yyreturn
+ }%
+}
+
+% no need for \setspecialcharsfrom\flrecharadjust
+
\def\frexproc#1\with#2{%
{% keeping all changes local
\iftracenames
\toksa{#1}\ferrmessage{original regex: \the\toksa}%
\fi
\toflexreparser
+ \let\acharswitch\flrecharadjust
\basicparserinit
\flexreparserinit
\flexreparserdatainit
@@ -2054,11 +2235,13 @@
\toksc{#2}%
}
-\def\setregextable{%
+\def\setregextable{% activate the appropriate AST control sequences
+ \def\aststream{flex.sect2}% the list where the AST output is gathered
\restorecslist{flexparser-sect2}\yyflunion
}
\def\setregexdeftable{%
+ \def\aststream{flex.sect1}% the list where the AST output is gathered
\restorecslist{flexparser-sect1}\yyflunion
}
@@ -2113,14 +2296,14 @@
\defp\flbracecclneg#1#2#3{} % negative character class :: \flbracecclneg{{fptr}{sptr}}{ccl}{{fptr}{sptr}}
\defp\flcclunion#1#2{} % union of character classes :: \flcclunion{ccl}{ccl}
\defp\flccldiff#1#2{} % difference of character classes :: \flccldiff{ccl}{ccl}
-\defp\flrepeat#1{} % asterisk operation :: \flrepeat{re}
-\defp\flrepeatstrict#1{} % plus operation :: \flrepeatstrict{re}
+\defp\flrepeat#1{} % * (asterisk) operation :: \flrepeat{re}
+\defp\flrepeatstrict#1{} % + (plus) operation :: \flrepeatstrict{re}
\defp\flrepeatonce#1{} % ? operation :: \flrepeatonce{re}
\defp\flrepeatnm#1#2#3{} % {n, m} operation :: \flrepeatnm{re}{num}{num}
\defp\flrepeatgen#1#2{} % {n,} operation :: \flrepeatgen{re}{num}
\defp\flrepeatn#1#2{} % {n} operation :: \flrepeatn{re}{num}
\defp\flparens#1#2#3#4{} % parenthesized regular expression :: \flparens{{fptr}{sptr}}{re}{{fptr}{sptr}}{formatting command}
-\defp\fldot#1#2{} % dot expression :: \fldot{fptr}{sptr}
+\defp\fldot#1#2{} % . (dot) expression :: \fldot{fptr}{sptr}
\defp\flor#1#2{} % `|' expression :: \flor{fptr}{sptr}
\defp\fltrail#1#2{} % regular expression sans trailing suffix :: \fltrail{re}{{fptr}{sptr}}
\defp\flretrail#1#2#3{} % regular expression with a trailing context :: \flretrail{re}{{fptr}{sptr}}{re}
@@ -2397,10 +2580,13 @@ x
}
\defc\fltrail{%#1#2% regular expression sans trailing suffix :: \fltrail{re}{{fptr}{sptr}}
- \errmessage{\nx\fltrail\space macro has not been implemented (see yyunion.sty).}
+ \errmessage{\nx\fltrail\space macro has should not be expanded.}
}
\defc\flretrail{%#1#2#3% regular expression with a trailing context :: \flretrail{re}{{fptr}{sptr}}{re}
+ % #1 is the regular expression to be matched
+ % #2 is the pointer to the context marker (/)
+ % #3 is the context
\errmessage{\nx\flretrail\space macro has not been implemented (see yyunion.sty).}
}
@@ -2412,7 +2598,7 @@ x
\toyyunion{flexparser-re}
\def\flexsndisplay#1{% state name typesetting style
- \hbox{\tt#1}%
+ {\let\ntt@\relax\idss#1}%
}
\def\flexrendisplay#1{% regular expression name typesetting style
@@ -2429,7 +2615,7 @@ x
% the parsed name goes to \toksd and the visual key is put in \tokse
\let\termindex\writeidxfstextentry
\edef\next{\toksd{\nx\flexsndisplay{\the\toksd}%
- \gidxentryxv{\termvstring}{#1}{\the\tokse}}}\next
+ \gidxentryxv{\termfsscstring}{#1}{\the\tokse}}}\next
\expandafter
}\the\toksd
}
@@ -2458,16 +2644,18 @@ x
\hbox{\textretrue\tt\the\toksc}%
}
+% \flex\ section~2 typesetting
+
\defc\flactiongroup{% #1#2#3#4#5#6% a group of \flex actions :: \flactiongroup{\flsconlist...}{fptr}{sptr}{\flaction...}{fptr}{sptr}
\toksb{}#1% collect all the state name information in \toksb
% gather the preceeding stash
- \readstash{#3}% read stash late, after \flsconslist (ignore it)
+ \readstash{#3}% read stash late, after \flsconlist (ignore it)
\edef\next{%
\toksb{\noalign{\hbox to\nx\hsize{\hskip\the\rgindent
- \nx\flexsndisplay{\the\toksb}:\toksa{\relax\the\toksg}\nx\makestashbox\nx\hfil}}}%
+ \nx\flexsndisplay{\the\toksb$^{++}$}\toksa{\relax\the\toksg}\nx\makestashbox\nx\hfil}}}%
}\next
- \yytoksempty\table{}{\appendrnx\table{\noalign{\medskip}}}%
- \concat\table\toksb
+ \astisempty{}{\astappend{\noalign{\medskip}}}%
+ \astappendx{\the\toksb}%
\advance\rgindent by\parindent
#4%
\advance\rgindent by-\parindent
@@ -2475,84 +2663,75 @@ x
\defc\flsconlist{% #1#2#3% start condition list :: \flsconlist{{fptr}{sptr}}{\flname...}{{fptr}{sptr}}
\readstashwredirect#1\toksg % save the stash preceeding the conditions list to reinsert later
+ \savecslist{local-namespace}\yyflunion
+ \restorecslist{flexparser-sect2:state-name-display}\yyflunion
#2% collect the state names (and the stash in between)
+ \restorecslist{local-namespace}\yyflunion
\readstashwredirect#3\toksf
\appendr\toksb{\nx\rm\toksa{\the\toksf}\nx\makestashbox}%
}
-\defc\flname{% #1#2#3#4% name :: \flname{name}{name12}{fptr}{sptr}
- {%
- \let\parsernamespace\flexpseudonamespace
- \nameproc{#2}\with\parsebin
- \edef\next{%
- \toksd{\toksd{\the\toksa}\tokse{\the\toksb}}%
- }\next % a trick to `reshuffle' the output of \nameproc:
- % the parsed name goes to \toksd and the visual key is put in \tokse
- \expandafter
- }\the\toksd
- \let\termindex\writeidxfsentry
- \readstashwredirect{}{#4}\toksf % do not touch \yystashlocal
- \appendr\toksb{{\nx\rm\toksa{\the\toksf}\nx\makestashbox}%
- \the\toksd\gidxentryxv{\termvstring}{#1}{\the\tokse}}%
- \let\termindex\eatone
-}
-
-\defc\flnamesep{%#1#2% separator between names :: \flnamesep{fptr}{sptr}
- \toksb\expandafter{\the\toksb\ }%
-}
-
\newskip\rgindent
-
\rgindent=\parindent
-\defc\flaction{%#1#2#3#4#5#6#7% \flex action :: \flaction{\flsconlist...}{\fl..rule ...}{fptr}{sptr}{fptr}{sptr}{formatting command}
- \toksb{}#1%
+\def\appendinteractionskip{%
+ \ifnum\prevdepth<\dp\strutbox
+ \vskip-\prevdepth\vskip\dp\strutbox
+ \fi
+ \nointerlineskip
+}
+
+\def\flaction@generic#1#2#3#4#5{% #1 is the #1 of \flaction.*
+ % #2 is the #2 of \flaction.*
+ % #3 is the #6 of \flaction.*
+ % #4 is the #7 of \flaction.*
+ % #5 is the \toksa prefix (should be expandable)
+ \toksb{}#1% collect all the state name information in \toksb
\toksc{}#2%
- #7% apply formatting
- \readstash{#6}% read stash late, after \flsconlist and \fl...rule
- \yytoksempty\toksb{%
- \appendr\table{\hskip\the\rgindent\hbox{\nx\tt\nx\strut\the\toksc}}%
- }{%
- \appendr\table{%
+ #4% apply formatting
+ \readstash{#3}% read stash late, after \flsconlist and \fl...rule
+ \yytoksempty\toksb{% no state names were collected
+ \astappendx{\hskip\the\rgindent\hbox{\nx\tt\nx\strut\the\toksc}}%
+ }{% put state names first
+ \astisempty{}{\astappend{\noalign{\medskip}}}%
+ \astappendx{%
+ \noalign{\nx\appendinteractionskip}%
\hskip\the\rgindent
\vbox{%
- {\nx\sscmd\nx\expandafter}\nx\expandafter\baselineskip\nx\the\baselineskip
+ %{\nx\sscmd\nx\expandafter}\nx\expandafter\baselineskip\nx\the\baselineskip
+ % the line above would allow a smaller vertical skip to be inserted in case
+ % the font for state names is reduced in size;
\halign{&####\hfil\cr
- \hbox to\rgindent{\nx\sscmd\nx\tt\nx\strut\the\toksb\hss}\cr
- \nx\tt\nx\strut\the\toksc\cr
+ \flexstatelisttypeset\cr
+ \hskip\parindent\nx\tt\nx\strut\the\toksc\cr
}%
}%
}%
}%
- \appendr\table{&\toksa{\relax\the\yystashlocal}\nx\cr}%
+ \astappendx{&\toksa{#5\relax\the\yystashlocal}\nx\cr}%
}
-\defc\flactionc{%#1#2#3#4#5#6#7% \flex continued action :: \flaction{\flsconlist...}{\fl..rule ...}{fptr}{sptr}{fptr}{sptr}{formatting command}
- \toksb{}#1%
- \toksc{}#2%
- \readstash{#6}% read stash late, after \flsconlist and \fl...rule
- #7% apply formatting
- \yytoksempty\toksb{%
- \appendr\table{\hskip\the\rgindent\hbox{\nx\tt\nx\strut\the\toksc}}%
- }{%
- \appendr\table{%
- \hskip\the\rgindent
- \vbox{%
- {\nx\sscmd\nx\expandafter}\nx\expandafter\baselineskip\nx\the\baselineskip
- \halign{&####\hfil\cr
- \hbox to\rgindent{\nx\sscmd\nx\tt\nx\strut\the\toksb\hss}\cr
- \nx\tt\nx\strut\the\toksc\cr
- }%
- }%
- }%
+\def\flexstatelisttypeset{%
+ \hbox to\rgindent{%
+ \vbox{\advance\hsize by -\rgindent
+ \noindent
+ \nx\strut\nx\flexsndisplay{\the\toksb$^+$}
+ }\hss
}%
- \appendr\table{&\toksa{{}$\nx\hookleftarrow$\relax\the\yystashlocal}\nx\cr}% in the event \cr has been redefined
+}
+
+\defc\flaction{%#1#2#3#4#5#6#7% \flex action :: \flaction{\flsconlist...}{\fl..rule ...}{fptr}{sptr}{fptr}{sptr}{formatting command}
+ \flaction@generic{#1}{#2}{#6}{#7}{}%
+}
+
+\defc\flactionc{%#1#2#3#4#5#6#7% \flex action :: \flaction{\flsconlist...}{\fl..rule ...}{fptr}{sptr}{fptr}{sptr}{formatting command}
+ \flaction@generic{#1}{#2}{#6}{#7}{{}$\nx\hookleftarrow$}%
}
\def\inscomment#1{%
\def\astformat@flaction{%
\toksd{#1}%
- \appendr\table{\noalign{\nx\smallskip\noindent\hskip\the\rgindent
+ \astappendx{\noalign{\nx\smallskip\noindent\hskip\the\rgindent
$\nx\triangleright\;$\the\toksd\nx\smallskip}}%
}%
}
@@ -2561,9 +2740,34 @@ x
\toyyunion{flexparser-sect2}
-% \flex\ setion~1 typesetting
-% currently, all \flex\state declarations are handled by an extended \bison\ parser
-% to collect the state data; we thus only implement regular expression definitions;
+% flex state names display inside action groups
+
+\restorecslist{flexparser-strict}\yyflunion
+
+\defc\flname{% #1#2#3#4% name :: \flname{name}{name12}{fptr}{sptr}
+ {%
+ \let\parsernamespace\flexpseudonamespace
+ \nameproc{#1}\with\parsebin
+ \edef\next{%
+ \toksd{\toksd{\the\toksa}\tokse{\the\toksb}}%
+ }\next % a trick to `reshuffle' the output of \nameproc:
+ % the parsed name goes to \toksd and the visual key is put in \tokse
+ \expandafter
+ }\the\toksd
+ \let\termindex\writeidxfsentry
+ \readstashwredirect{}{#4}\toksf % do not touch \yystashlocal
+ \appendr\toksb{{\nx\rm\toksa{\the\toksf}\nx\makestashbox}%
+ \the\toksd\gidxentryxv{\termfsscstring}{#1}{\the\tokse}}%
+ \let\termindex\eatone
+}
+
+\defc\flnamesep{%#1#2% separator between names :: \flnamesep{fptr}{sptr}
+ \toksb\expandafter{\the\toksb\ }%
+}
+
+\toyyunion{flexparser-sect2:state-name-display}
+
+% \flex\ section~1 typesetting
\restorecslist{flexparser-strict}\yyflunion
@@ -2579,24 +2783,90 @@ x
\expandafter
}\the\toksd
\frexproc{#5}\with\ppregex
- \appendr\table{{}$\nx\langle\hbox{\ntt\the\toksd}\nx\rangle${}%
- \gidxentryxv{\termfsrestring}{#1}{\the\tokse}&\the\toksc\cr% TODO: make a special type processor for regex names
+ \astappendx{{}$\nx\langle\hbox{\ntt\the\toksd}\nx\rangle${}%
+ \gidxentryxv{\termfsrestring}{#1}{\the\tokse}&\the\toksc\cr
}%
\let\termindex\eatone
}
-\defc\flopt{%#1#2#3#4#5% \flex option :: \flopt{option}{text}{text12}{fptr}{sptr}
- \csname flex@ption_#1\endcsname{#2}{#3}%
+% \flex\ options
+
+\defc\floptions{%#1 \flex options :: \floptions{\flopt ...}
+ #1%
+}
+
+\defc\flopt{%#1#2#3#4#5% \flex option :: \flopt{option}{text:(no||opt_name)}{text12}{fptr}{sptr}
+ \expandafter\ifx\csname flex@ption_#1\endcsname\relax
+ \yybreak{%
+ \errmessage{!option <#1> with value (#3) is not handled.}%
+ }%
+ \else
+ \yybreak{%
+ \csname flex@ption_#1\endcsname{#2}{#3}{#4}{#5}%
+ }%
+ \yycontinue
+}
+
+% specific options
+\expandafter\def\csname flex@ption_other\endcsname#1#2#3#4{%
+ \let\termindex\writeidxfsrnentry
+ \storerawidxentry{\tt{\rm(}#1{\rm)}#2}%
+ \astappendx{$\nx\langle${\ntt option}$\nx\rangle_{\nx\rm f}$%
+ \gidxentryxv{\termfsopstring}{option}{option}%
+ \yystringempty{#1}{%
+ \gidxentry{\termttstring}{#2}{#2}% index the <option> keyword
+ }{%
+ \didxentry{\getstackpointer\indexterms}{#2}% index the parameter
+ }%
+ &\nx\quad{\ntt#1#2}\nx\cr}%
+ \let\termindex\empty
+}
+
+\expandafter\def\csname flex@ption_file\endcsname#1#2#3#4{%
+ \let\termindex\writeidxfsrnentry
+ \astappendx{$\nx\langle${\ntt output to}$\nx\rangle_{\nx\rm f}$%
+ \gidxentry{\termfsopstring}{output to}{output to}%
+ \gidxentryxv{\termttstring}{#2}{\eatone#2}% remove the first quote for sorting
+ &\nx\quad{\ntt#1}\nx\cr}%
+ \let\termindex\empty
}
-\expandafter\def\csname flex@ption_deprecated\endcsname#1#2{%
+\expandafter\def\csname flex@ption_header\endcsname#1#2#3#4{%
+ \let\termindex\writeidxfsrnentry
+ \astappendx{$\nx\langle${\ntt header file}$\nx\rangle_{\nx\rm f}$%
+ \gidxentry{\termfsopstring}{header}{header}%
+ \gidxentryxv{\termttstring}{#2}{\eatone#2}% remove the first quote for sorting
+ &\nx\quad{\ntt#1}\nx\cr}%
+ \let\termindex\empty
+}
+
+\expandafter\def\csname flex@ption_prefix\endcsname#1#2#3#4{%
+ \let\termindex\writeidxfsrnentry
+ \astappendx{$\nx\langle${\ntt prefix}$\nx\rangle_{\nx\rm f}$%
+ \gidxentry{\termfsopstring}{prefix}{prefix}%
+ \gidxentry{\termttstring}{#2}{#2}%
+ &\nx\quad{\ntt#1}\nx\cr}%
+ \let\termindex\empty
+}
+
+% the option below processes the parameter in C mode
+\expandafter\def\csname flex@ption_xtype\endcsname#1#2#3#4{%
+ \readstash{#4}%
+ \let\termindex\writeidxfsrnentry
+ \astappendx{$\nx\langle${\ntt extra type}$\nx\rangle_{\nx\rm f}$%
+ \gidxentry{\termfsopstring}{extra type}{extra type}%
+ &\nx\quad{\toksa{\the\yystashlocal}\nx\makestashbox}\nx\cr}%
+ \let\termindex\empty
+}
+
+\expandafter\def\csname flex@ption_deprecated\endcsname#1#2#3#4{%
\flex@opt@deprecated#2%
}
\def\flex@opt@deprecated#1#2#3^^J{%
\let\termindex\writeidxfsrnentry
- \appendr\table{$\langle${\nx\tt #2}$\rangle_{\rm f}$\gidxentryxv{\termfsopstring}{#2}{#2}%
- \the\toksg&\number\flexgetnumber#3.\nx\cr}%
+ \astappendx{$\nx\langle${\ntt #2}$\nx\rangle_{\nx\rm f}$\gidxentry{\termfsopstring}{#2}{#2}%
+ &\number\flexgetnumber#3.\nx\cr}%
\let\termindex\empty
}
@@ -2620,8 +2890,49 @@ x
\yycontinue
}
+\defc\flscondecl{%#1#2#3#4% start condition declarations :: \flscondecl{x|s}{fptr}{sptr}{\flname ...}
+ \readstashwredirect{#2}{#3}\toksg % save the stash preceeding the conditions list to reinsert later
+ \savecslist{local-namespace}\yyflunion
+ \restorecslist{flexparser-sect1:state-name-display}\yyflunion
+ \toksb{}#4% collect the state names (and the stash in between) in \toksb
+ \restorecslist{local-namespace}\yyflunion
+ %\readstashwredirect#3\toksf
+ %\appendr\toksb{\nx\rm\toksa{\the\toksf}\nx\makestashbox}%
+ \let\termindex\writeidxfsentry
+ \astappendx{$\langle${\bf state-#1}$\rangle_{\rm f}$%
+ \gidxentryxv{\termfsopstring}{state-#1}{state-#1}%
+ \nx\quad\nx\flexsndisplay{\the\toksb}\toksa{\relax\the\toksg}\nx\makestashbox\nx\hfil&\nx\cr}%
+}
+
\toyyunion{flexparser-sect1}
+% inside state name declarations
+
+\restorecslist{flexparser-strict}\yyflunion
+
+\defc\flname{% #1#2#3#4% name :: \flname{name}{name12}{fptr}{sptr}
+ {%
+ \let\parsernamespace\flexpseudonamespace
+ \nameproc{#1}\with\parsebin
+ \edef\next{%
+ \toksd{\toksd{\the\toksa}\tokse{\the\toksb}}%
+ }\next % a trick to `reshuffle' the output of \nameproc:
+ % the parsed name goes to \toksd and the visual key is put in \tokse
+ \expandafter
+ }\the\toksd
+ \let\termindex\writeidxfsdentry
+ \readstashwredirect{}{#4}\toksf % do not touch \yystashlocal
+ \appendr\toksb{{\nx\rm\toksa{\the\toksf}\nx\makestashbox}%
+ \the\toksd\gidxentryxv{\termfsscstring}{#1}{\the\tokse}}%
+ \let\termindex\eatone
+}
+
+\defc\flnamesep{%#1#2% separator between names :: \flnamesep{fptr}{sptr}
+ \toksb\expandafter{\the\toksb\ }%
+}
+
+\toyyunion{flexparser-sect1:state-name-display}
+
% correct a few sequences for debugging purposes
\restorecslist{flexparser-debug}\yyflunion
@@ -2651,3 +2962,286 @@ x
}
\toyyunion{flexparser-debug}
+
+\restorecslist{flexparser-prototypes}\yyflunion
+
+\defc\flscondecl{%#1#2#3#4% start condition declarations :: \flscondecl{x|s}{fptr}{sptr}{\flname ...}
+ #4%
+}
+
+\defc\flname{% #1#2#3#4% name :: \flname{name}{name12}{fptr}{sptr}
+ {\immediate\write\stlist{_register_name(#2);}}%
+}
+
+\defc\flnamesep{%#1#2% separator between names :: \flnamesep{fptr}{sptr}
+}
+
+\toyyunion{bootstrap-flex}
+
+% remembering the rule associated with a specific section reference
+
+\newtoks\currentheader
+\newtoks\currentterm
+\newtoks\singlerule
+\newtoks\ruleset
+\newcount\refrulecount
+
+\restorecslist{parser-prototypes}\yyunion % we just want to ignore the non-rule related code
+\def\parserprototypesnamespace{parser-strict:headers} % make sure the prototypes come from the correct namespace
+
+\defc\prodheader{#1\currentheader\currentterm}
+
+% the macros below are defined in `parser-prototypes'
+%\defp\rrhssep#1#2{}
+%\defp\arhssep#1#2{}
+%\defp\rarhssep#1#2{}
+%\defp\prodprodsep{}
+%\defp\onesymbol#1#2#3{}
+
+\defc\rhs{% a `right-hand side' :: \rhs{[\termname\hspace\rarhssep\arhssep\actbraces]+}{\arhssep|<nothing>}{\ifrhsfull}
+ \singlerule{}#1%
+ \savecs{local-namespace}{\_}%
+ \let\_\uscoreletter
+ \saveruleforheader
+ \restorecs{local-namespace}{\_}%
+}
+
+\defc\termname{% a production term :: \termname{\idit|\stringify|\charit}{\idit}
+ #1\appendr\singlerule{\the\currentterm}\yystringempty{#2}{}{#2\appendr\singlerule{[\the\currentterm] }}%
+}
+
+\defc\actbraces{%
+ \readformat{#3}%
+ \actbraces@refinit
+ \readstash{#4}%
+ \savecs{local-namespace}{\format\formatlocal}%
+ \let\format\formatreinsert
+ \let\formatlocal\formatreinsertlocal
+ \the\yyformatlocal
+ \appendr\singlerule{ \nx\{\nx\stashed{\the\yystashlocal}\nx\} }%
+ \expandafter\lookforX\the\yystashlocal\X:\X\end
+ \expandafter\lookforXmark\the\yystashlocal\Xmark:\Xmark\end
+ \restorecs{local-namespace}{\format\formatlocal}%
+}
+
+\let\actbraces@refinit\empty
+
+% sometimes all format hints have to be erased (an example would be when collecting
+% productions marked by \Xmark and omitting an \inline while keeping a \fold)
+\newif\iferaselocalformat
+\newif\iferaseformat
+
+\def\formatreinsert#1{\iferaseformat\else\appendrnx\singlerule{\format{#1}}\fi}
+\def\formatreinsertlocal#1{\iferaselocalformat\else\appendrnx\singlerule{\formatlocal{#1}}\fi}
+
+% macros below (normally) package each production into an individual rule, complete with the header;
+% there are two ways to avoid this (i.e. to package the whole production set for a single lhs):
+% o using the header term for the label (in this case every production for the given lhs will
+% be collected in the appropriate command sequence, see \saveruleforheader below)
+% o using the \Xmark label with the empty name part (e.g. \Xmark label:\Xmark) to mark the
+% productions one wishes to collect for this term; note that the \Xmark mechanism does not
+% verify that the given production is for the same lhs
+
+\def\lookforX#1\X#2:#3\X#4\end{%
+ \yystringempty{#2}{}{%
+ \expandafter\ifx\csname prodrulefor[#2]\endcsname\relax
+ \yybreak{%
+ \expandafter\xdef\csname prodrulefor[#2]\endcsname{\the\currentheader: }%
+ \addtoprodrulefor{#2}{\the\singlerule}%
+ }%
+ \else
+ \yybreak{%
+ \addtoprodrulefor{#2}{\the\currentheader: }%
+ \addtoprodrulefor{#2}{\the\singlerule}%
+ }%
+ \yycontinue
+ \lookforX#4\end
+ }%
+}
+
+\def\lookforXmark#1\Xmark#2:#3\Xmark#4\end{%
+ \yystringempty{#2}{}{%
+ \expandafter\ifx\csname prodrulefor[#2]\endcsname\relax
+ \yybreak{%
+ \expandafter\xdef\csname prodrulefor[#2]\endcsname{\the\currentheader: }%
+ \addtoprodrulefor{#2}{\the\singlerule}%
+ }%
+ \else
+ \yybreak{%
+ \yystringempty{#3}{%
+ \addtoprodrulefor{#2}{|}%
+ }{%
+ \addtoprodrulefor{#2}{\the\currentheader: }%
+ }%
+ \addtoprodrulefor{#2}{\the\singlerule}%
+ }%
+ \yycontinue
+ \lookforXmark#4\end
+ }%
+}
+
+\def\saveruleforheader{%
+ \expandafter\ifx\csname prodrulefor[\the\currentheader]\endcsname\relax
+ \yybreak{%
+ \expandafter\xdef\csname prodrulefor[\the\currentheader]\endcsname{\the\currentheader: \the\singlerule}%
+ }%
+ \else
+ \yybreak{%
+ \addtoprodrulefor{\the\currentheader}{\expandafter|\the\singlerule}%
+ }%
+ \yycontinue
+}
+
+\def\addtoprodrulefor#1#2{%
+ \appendxrt{\gdef}{prodrulefor[#1]}{#2}{}%
+}
+
+\def\mergeformatting#1{%
+ \readformat{#1}%
+ \savecs{local-namespace}{\format\formatlocal}%
+ \let\format\formatreinsert
+ \let\formatlocal\formatreinsertlocal
+ \the\yyformatlocal
+ \restorecs{local-namespace}{\format\formatlocal}%
+}
+
+\defc\rules{#1}
+\defc\oneproduction{#1}
+\defc\emptyterm{\appendr\singlerule{ }}
+\defc\hspace{\appendr\singlerule{ }}
+\defc\stringify{\mergeformatting{#3}\currentterm{"#2"}}
+\defc\idit{\mergeformatting{#3}\currentterm{#2}}
+\defc\charit{\mergeformatting{#3}\currentterm{'#2'}}
+\defc\anint{\mergeformatting{#3}\currentterm{#1}}
+\defc\hexint{\mergeformatting{#3}\currentterm{#1}}
+
+\savecslist{reference:delayed}\yyunion
+
+% using the macros above
+
+\def\extractprodrefs{% this is the command sequence that performs the preprocessing of the
+ % parsed table to set the rule references
+ \restorecslist{reference:delayed}\yyunion
+ \savecs{local-names}{\*}\let\*\empty % in case the name of the section comes from a change file
+ \the\table
+ \restorecs{local-names}{\*}%
+ \resetlistpointer\yystash
+ \resetlistpointer\yyformat
+}
+
+\def\PB@#1{\PB@@#1\end}
+\def\PB@@$#1$\end{#1}
+\def\X@#1:#2\X{#1}
+\def\Xmark#1\Xmark{}
+
+\def\rulerefrequests{} % here we collect all the reference `requests' for the rules
+ % (parts of) which may be defined later in the file
+
+% referencing previously processed rules:
+% #1 is additional setup code (such as \showlastactiontrue)
+% #2 is formatting commands (typical use is to make it \nx\flatten)
+% #3 is a command sequence that expands to the desired section number
+% (the macros just above make is possible to use |@<Section name@>|
+% for that)
+
+\def\rulereferencex#1#2#3{%
+ \begingroup
+ \savecs{local-names}{\PB\X\Xmark}%
+ \let\PB\PB@ \let\X\X@ \let\Xmark\X@
+ \let\textproductionsetup\rulereftextproductionsetup
+ {%
+ \toksa\expandafter{\rulerefrequests}%
+ \edef\rulerefrequests{\the\toksa{#3}}%
+ \expandafter
+ }\expandafter\gdef\expandafter\rulerefrequests\expandafter{\rulerefrequests}%
+ \expandafter\ifx\csname full.prodrulefor[#3]\endcsname\relax
+ \else
+ \expandafter\expandafter\expandafter
+ \singlerule\expandafter\expandafter
+ \expandafter{\csname full.prodrulefor[#3]\endcsname}%
+ \restorecs{local-names}{\PB\X\Xmark}%
+ #1%
+ \edef\next{\nx\beginprod#2\the\singlerule\nx\endprod}\next
+ \fi
+ \endgroup
+}
+
+\def\rulereftextproductionsetup{%
+ \ninepoint
+ \let\returnexplicitspace\splitexplicitspace
+ %\let\acharswitch\texcharadjust
+ %\let\onecharswitch\texcsadjust% we do not need the adjustments
+ %since the names have already gone through the lexer
+ \let\extractprodtableinfo\empty % we do not prepocess the table
+ \let\actionfiller\empty
+ \fillpstack{b}{%
+ \preparsebisongrammar
+ \preparsebisonprologue
+ {\preparsefallbacktext{**}}%
+ \relax % this \relax is necessary so that the braces above
+ % are not stripped by \poppstack
+ }%
+}
+
+\def\rulereference#1#2{\rulereferencex{\showlastactiontrue}{#1}{#2}}
+
+\def\thisrulereference#1{\rulereference{#1}{\secno}}
+
+% we use lazy evaluation for the references: reference requests are collected
+% and put into the auxilary file at the end of the job
+
+\def\lookupruleref#1{%
+ \yystringempty{#1}{}% done
+ {%
+ \expandafter\expandafter\expandafter
+ \toksa
+ \expandafter\expandafter\expandafter{\csname prodrulefor[#1]\endcsname}%
+ \immediate\write\auxstream{\noexpand\getrulereffor{#1}{\the\toksa}}%
+ \lookupruleref
+ }%
+}
+
+\def\yyuniontag{\auxunionctl}
+\defp\gramrefunionctl{}% sequence to activate/deactivate/take other action for
+ % gramref set of macros
+
+\defc\gramrefunionctl{%
+ \restorecslist{aux:global:gramrefs}\gramrefunion
+}
+\savecs{aux:global:activate}\gramrefunionctl
+
+\defc\gramrefunionctl{%
+ \restorecslist{aux:global:gramrefs:neutral}\gramrefunion
+}
+\savecs{aux:global:deactivate}\gramrefunionctl
+
+\defc\gramrefunionctl{% this command should not make any page material contributions
+ \message{gramrefs...}%
+}
+\savecs{aux:global:preend}\gramrefunionctl
+
+\defc\gramrefunionctl{% this command should not make any page material
+ % contributions
+ \message{gramrefs.store...}%
+ \expandafter\lookupruleref\rulerefrequests{}%
+}
+\savecs{aux:global:precutoff}\gramrefunionctl
+
+\defc\gramrefunionctl{% writing a headers, etc.
+ \message{gramrefs.done...}%
+ \toksa\expandafter{\gramrefunion}%
+ \immediate\write\auxstream{\harmlesscomment\the\toksa}%
+}
+\savecs{aux:global:prestart}\gramrefunionctl
+
+\yyuniondeclare\gramrefunion{aux:global:gramrefs}
+
+\defp\getrulereffor#1#2{}
+
+\toyyunion{aux:global:gramrefs:neutral}
+
+\defc\getrulereffor#1#2{%
+ \expandafter\def\csname full.prodrulefor[#1]\endcsname{#2}%
+}
+
+\toyyunion{aux:global:gramrefs} % do nothing for now
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index 016e17ba57..99f159534c 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -15,6 +15,7 @@ $mirrors = {
'https://mirrors.aliyun.com/CTAN/' => 1,
'https://mirrors.bfsu.edu.cn/CTAN/' => 1,
'https://mirrors.cloud.tencent.com/CTAN/' => 1,
+ 'https://mirrors.cqu.edu.cn/CTAN/' => 1,
'https://mirrors.jlu.edu.cn/CTAN/' => 1,
'https://mirrors.nju.edu.cn/CTAN/' => 1,
'https://mirrors.pku.edu.cn/ctan/' => 1,
@@ -127,7 +128,6 @@ $mirrors = {
'https://ctan.mirror.garr.it/mirrors/ctan/' => 1,
},
'Netherlands' => {
- 'https://ftp.snt.utwente.nl/pub/software/tex/' => 1,
'https://mirror.koddos.net/CTAN/' => 1,
'https://mirror.lyrahosting.com/CTAN/' => 1,
},
@@ -138,6 +138,7 @@ $mirrors = {
'Poland' => {
'https://ctan.gust.org.pl/tex-archive/' => 1,
'https://polish-mirror.evolution-host.com/ctan/' => 1,
+ 'https://sunsite.icm.edu.pl/pub/CTAN/' => 1,
},
'Portugal' => {
'https://ftp.eq.uc.pt/software/TeX/' => 1,
@@ -154,6 +155,7 @@ $mirrors = {
'Spain' => {
'https://ctan.fisiquimicamente.com/' => 1,
'https://ctan.javinator9889.com/' => 1,
+ 'https://osl.ugr.es/CTAN/' => 1,
},
'Sweden' => {
'https://ftp.acc.umu.se/mirror/CTAN/' => 1,
@@ -175,7 +177,6 @@ $mirrors = {
'https://ctan.mirror.globo.tech/' => 1,
'https://ctan.mirror.rafal.ca/' => 1,
'https://mirror.csclub.uwaterloo.ca/CTAN/' => 1,
- 'https://mirror.its.dal.ca/ctan/' => 1,
'https://mirror.quantum5.ca/CTAN/' => 1,
'https://muug.ca/mirror/ctan/' => 1,
},
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index 9c911fbc03..f2f841517a 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
@@ -26,7 +26,7 @@ depend container_split_src_files/1
depend frozen/0
depend minrelease/2016
depend release/2023
-depend revision/69631
+depend revision/69641
name 00texlive.image
category TLCore
@@ -4844,7 +4844,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 69626
+revision 69633
shortdesc TeX Live standalone installer package
longdesc This package defines the files to go into the installer
longdesc archives (install-tl-unx.tar.gz, install-tl.zip) built by the
@@ -8876,7 +8876,7 @@ catalogue-version 0.6
name achemso
category Package
-revision 65103
+revision 69638
shortdesc Support for American Chemical Society journal submissions
relocated 1
longdesc The bundle provides the official macros (achemso.cls) and
@@ -8884,10 +8884,10 @@ longdesc BibTeX styles (achemso.bst and biochem.bst) for submission to
longdesc the journals of the American Chemical Society. The natmove
longdesc package, which moves citations relative to punctuation, is
longdesc distributed as part of the bundle.
-containersize 19300
-containerchecksum c611a28933960c49f383ddad8dcc8486403eba1e84e981d2221a8e8b6db607dadd93e6b58ffab1c0bfc19ef423b639c673693b113d7e158136c5c30555f68508
-doccontainersize 880816
-doccontainerchecksum e03343efd2179c1fb094fc5b7f46e078949f3ac75c311aa0559e9c3364c3178f3e8452c9a87b4952a76982754e57d5668970f8fea9ac508756aec45b6e11db38
+containersize 19332
+containerchecksum 1a073188cef886e2eb5c6090a2f887d5c58c04d535981d1926a1b389130092bccb614c22b8b5b675d6d2d49208e4d05ae560966db39443cd822c59bc41e6af8e
+doccontainersize 881516
+doccontainerchecksum b26169bc393110b3805c4dfdd0fbb1838a469b6dd9664914a55eb7f1c031a4cfbca7e96cdbdaaf67329a48e3225e104f5d6a46b0b52384b77835a049151f6cf1
docfiles size=236
RELOC/doc/latex/achemso/CHANGELOG.md
RELOC/doc/latex/achemso/LICENSE.md
@@ -8896,8 +8896,8 @@ docfiles size=236
RELOC/doc/latex/achemso/achemso-demo.pdf details="Example of use"
RELOC/doc/latex/achemso/achemso-demo.tex
RELOC/doc/latex/achemso/achemso.pdf details="Package documentation"
-srccontainersize 31496
-srccontainerchecksum ce918746855be7450b253d7cda9dd112fa40314538167deec1b86a58ff6fd69b68d2712789632b332acb1ce92dfe431346b57fd51f92d04aeb2540f4a35cc0c2
+srccontainersize 31552
+srccontainerchecksum 94cab70cfba8492f44a09a3b94e411cbd5b32f3dd5b9a17ca8ae1ff5bb6c5ac6c8a882f4fc94278bb267556ccb43bc981f24e4b6b47b5c9df90c81cb44005029
srcfiles size=39
RELOC/source/latex/achemso/achemso.dtx
RELOC/source/latex/achemso/achemso.ins
@@ -8980,10 +8980,11 @@ runfiles size=105
RELOC/tex/latex/achemso/achemso.cls
RELOC/tex/latex/achemso/achemso.sty
RELOC/tex/latex/achemso/natmove.sty
+catalogue-contact-repository https://github.com/josephwright/achemso
catalogue-ctan /macros/latex/contrib/achemso
-catalogue-license lppl1.3c
+catalogue-license lppl1.3c other-free
catalogue-topics chemistry journalpub bibtex-sty class
-catalogue-version 3.13f
+catalogue-version 3.13g
name acmart
category Package
@@ -36851,7 +36852,7 @@ catalogue-version 1.5
name bib2gls
category Package
-revision 68534
+revision 69635
shortdesc Command line application to convert .bib files to glossaries-extra.sty resource files
longdesc This Java command line application may be used to extract
longdesc glossary information stored in a .bib file and convert it into
@@ -36869,10 +36870,10 @@ longdesc containing definitions (\newglossaryentry etc.) to the .bib
longdesc format required by bib2gls.
depend bib2gls.ARCH
depend glossaries-extra
-containersize 2019008
-containerchecksum 98fa1d2a2af4c0bcb63aee20725206d015d9aeacae7291739d1b0e2a11acc2a0b447a6da8229bf1f09cbbedc4f5071401ec5f61a4a69e64658ad62e927e6618e
-doccontainersize 5758584
-doccontainerchecksum 6213d39c6029ce142232f077e65173b92b9eeb2c88b4d15431301687d4fcc16dbced3ab4817241a1f252c5e8eafd7f63f5bd71ce7d7dcd277b49bddbe351c93d
+containersize 2031324
+containerchecksum e73d6e0c7596252dade43291fb26ae02c0ed8f2650498294d2b1c36d69e777411fc1637619226f34f80c7e5cc06d3ae07f3b5d2eb144a2e69bde16a22c4aa449
+doccontainersize 5761384
+doccontainerchecksum 46d4a219969aaf897cb4c7705a00d1558b7b16cf0d4b16121672df8df2bdb0c0d0ee3350687b430f1d1d29eacee330aaee3206ef664c406c1d2b1c8c316de0ff
docfiles size=2027
texmf-dist/doc/man/man1/bib2gls.1
texmf-dist/doc/man/man1/bib2gls.man1.pdf
@@ -36951,9 +36952,9 @@ docfiles size=2027
texmf-dist/doc/support/bib2gls/examples/unaryoperators.bib
texmf-dist/doc/support/bib2gls/examples/usergroups.bib
texmf-dist/doc/support/bib2gls/examples/vegetables.bib
-srccontainersize 1865876
-srccontainerchecksum b029073dff63dd547fcb5f2359c0449e1d91c9eac243cc45a850fcce917db4fc22646bc45e47f5fee14b75ae67e75b13bf4677e0e76868c5a83e689411de28b4
-srcfiles size=944
+srccontainersize 1874256
+srccontainerchecksum 662855e5579429694325042e0256385b9a5c40a4b54e6cf98712432469243de567cd5ea68f1ea93a593428eaeaf09d9d5a97e3e670dfe9ba90cd6f8c2383a3d4
+srcfiles size=946
texmf-dist/source/support/bib2gls/src/bib2gls-begin.tex
texmf-dist/source/support/bib2gls/src/bib2gls-cite.bib
texmf-dist/source/support/bib2gls/src/bib2gls-src.zip
@@ -36964,7 +36965,7 @@ srcfiles size=944
texmf-dist/source/support/bib2gls/src/convertgls2bib.pod
texmf-dist/source/support/bib2gls/src/gls2bib-src.zip
texmf-dist/source/support/bib2gls/src/texparser-src.zip
-runfiles size=560
+runfiles size=563
texmf-dist/scripts/bib2gls/bib2gls.jar
texmf-dist/scripts/bib2gls/bib2gls.sh
texmf-dist/scripts/bib2gls/convertgls2bib.jar
@@ -36977,7 +36978,7 @@ catalogue-contact-repository https://github.com/nlct/bib2gls
catalogue-ctan /support/bib2gls
catalogue-license gpl3+
catalogue-topics bibtex-util glossary
-catalogue-version 3.8
+catalogue-version 3.9
name bib2gls.aarch64-linux
category Package
@@ -46842,7 +46843,7 @@ catalogue-version 0.2
name bxjscls
category Package
-revision 67657
+revision 69637
shortdesc Japanese document class collection for all major engines
relocated 1
longdesc This package provides an extended version of the Japanese
@@ -46851,23 +46852,23 @@ longdesc original version supports only pLaTeX and upLaTeX, the extended
longdesc version also supports pdfLaTeX, XeLaTeX and LuaLaTeX, with the
longdesc aid of suitable packages that provide capability of Japanese
longdesc typesetting.
-containersize 34740
-containerchecksum 83829f4785fbe8e283adc7c463bade1828f5bb3b401e0e3e632ca418754e76b8ab68f275e408cc779ee8644f4f90885257ac989e66982efe6b66d77ae2587d6e
-doccontainersize 1283184
-doccontainerchecksum c5923edd13dee12f95611103de2926c03edad8cbe85259ac345d33ab164012e9cb4011381fd58a49f8a76ec1eb11653b6dc589b3c8a4dff2299b7140547e14f6
-docfiles size=345
+containersize 35104
+containerchecksum bdcc01806c8379d02ebcb49c25bd497d11dcd3f0954dee7c1e1639c4cb3986a1bc54266e2f635c263058e1cdb34d540d52291cbe73502f02eb54d4b98ea3676b
+doccontainersize 1297828
+doccontainerchecksum 047fd7bca863ea5088d2e33d512a80879f72c32dd2e7bd3813fce6614d22f0285beb0adcd887f4528457db24472518663ea4e711d90e4fc0f36c8282db6672cf
+docfiles size=348
RELOC/doc/latex/bxjscls/LICENSE
RELOC/doc/latex/bxjscls/README-ja.md details="Readme (Japanese)" language="ja"
RELOC/doc/latex/bxjscls/README.md details="Readme"
RELOC/doc/latex/bxjscls/bxjscls-manual.pdf details="User guide (Japanese)" language="ja"
RELOC/doc/latex/bxjscls/bxjscls-manual.tex
RELOC/doc/latex/bxjscls/bxjscls.pdf details="Package documentation (Japanese)" language="ja"
-srccontainersize 93108
-srccontainerchecksum b111a7f4054086062db2f5686552b8b763f7617d5828a74b57462836c09284c7fae6666d2af2d4892b8a7fe2db9198f93ecefa38e1a152cea31c52ad35995583
-srcfiles size=114
+srccontainersize 93848
+srccontainerchecksum 5eecd3c63ba56bdae6a5a720aec1394649732db2acf7d25a6e3125ed742fb1033648edd7c45bd558f7dd3b9ea912617111b0846614546b89ab5f2aecdf770f00
+srcfiles size=115
RELOC/source/latex/bxjscls/bxjscls.dtx
RELOC/source/latex/bxjscls/bxjscls.ins
-runfiles size=107
+runfiles size=111
RELOC/tex/latex/bxjscls/bxjsarticle.cls
RELOC/tex/latex/bxjscls/bxjsbook.cls
RELOC/tex/latex/bxjscls/bxjscjkcat.sty
@@ -46884,7 +46885,7 @@ catalogue-contact-repository https://github.com/zr-tex8r
catalogue-ctan /language/japanese/BX/bxjscls
catalogue-license bsd2
catalogue-topics japanese class
-catalogue-version 2.9
+catalogue-version 2.9b
name bxnewfont
category Package
@@ -177652,7 +177653,7 @@ catalogue-version 3.35
name kpfonts-otf
category Package
-revision 68970
+revision 69636
shortdesc OTF version of the Kp-fonts
relocated 1
longdesc This bundle provides OpenType versions of the Type1 Kp-fonts
@@ -177666,11 +177667,11 @@ longdesc st), ancient long-s and a long-tailed capital Q are available
longdesc via font features. Math fonts cover all usual symbols including
longdesc AMS'; a full list of available symbols is provided, see the
longdesc 'List of glyphs'.
-containersize 1115636
-containerchecksum d2519e9ea6aa8cb660d2fdd69e6e686c17c6111eeeb313dd163dc3dfc4ea90dab4abf41661541a461c6b7536062cc6d30f8bc802c2c86850b88b19e64b5c827b
-doccontainersize 2035752
-doccontainerchecksum ad75e243de2644d48130c75923953368ffa09144f7b8e67738e2cc2e065026fbf1762251fef84ff89762f40a86ae1f1f6cb92b4a09924036fa73a004921acdb6
-docfiles size=564
+containersize 1115540
+containerchecksum 5c90bbd34da4ff9b610e5d1d407787cf658cc1a649c42c43d64bd374d04f43038956a5dcd159efbe912fb952d5a11370388870c87bf0a4094f19c019965a173b
+doccontainersize 2035528
+doccontainerchecksum 677dc5c94ab24a047028b403db43a0493acb4bf8644ff6b63cbdfba12f1de11541eaca6836290c4ed822c1800dba299e2b5afb9f5455164db038c01e7ef0f17a
+docfiles size=565
RELOC/doc/fonts/kpfonts-otf/Kpfonts-OTF-Doc-English.ltx
RELOC/doc/fonts/kpfonts-otf/Kpfonts-OTF-Doc-English.pdf details="Package documentation (English)" language="en"
RELOC/doc/fonts/kpfonts-otf/Kpfonts-OTF-Doc-French.ltx
@@ -177678,7 +177679,7 @@ docfiles size=564
RELOC/doc/fonts/kpfonts-otf/README.md details="Readme"
RELOC/doc/fonts/kpfonts-otf/unimath-kpfonts.ltx
RELOC/doc/fonts/kpfonts-otf/unimath-kpfonts.pdf details="List of glyphs"
-runfiles size=840
+runfiles size=838
RELOC/fonts/opentype/public/kpfonts-otf/KpMath-Bold.otf
RELOC/fonts/opentype/public/kpfonts-otf/KpMath-Light.otf
RELOC/fonts/opentype/public/kpfonts-otf/KpMath-Regular.otf
@@ -177713,7 +177714,7 @@ catalogue-also kpfonts
catalogue-ctan /fonts/kpfonts-otf
catalogue-license ofl lppl1.3
catalogue-topics font font-body font-maths font-mono font-otf font-proportional font-sans font-serif font-supp
-catalogue-version 0.61
+catalogue-version 0.62
name ksfh_nat
category Package
@@ -215999,7 +216000,7 @@ catalogue-version 4.2
name mhchem
category Package
-revision 69624
+revision 69639
shortdesc Typeset chemical formulae/equations and H and P statements
relocated 1
longdesc The bundle provides three packages: The mhchem package provides
@@ -216016,17 +216017,17 @@ depend graphics
depend l3kernel
depend l3packages
depend tools
-containersize 186400
-containerchecksum 9da1e415b335538d7e0d4163167e1752391660f6eb5eb7e7781da05bba3c7c147b2b1bd2941dcbc77759dbc68780e93cab7cc841e6a97efd3252d927543298cd
-doccontainersize 426852
-doccontainerchecksum b16c14a5ef93254da2cdfea614b391c934806f9e72dd75c5d4fae6f6fe54508c532373780482b0f5cd19e1453b6418f4bf7e7249451e34e67d34bb4bd6555311
-docfiles size=120
+containersize 185132
+containerchecksum 5b85541e565ad80891ba56375bb3c2d6720c7e0acc9e96d611626eace4daafeb078fe08fe4e6db4875823bf570f8af1dd4b319d38b41fc4c3ae9696772e7996a
+doccontainersize 427988
+doccontainerchecksum 487a5d90782d1c0814c7110388e5277e70dff9adc82048f8b5c33ffbf8c82e9df73293b4ab78bc83c2ef23674e341a2fb15f6b3268d1fdff1aa57d4d3813ea1e
+docfiles size=121
RELOC/doc/latex/mhchem/README details="Readme"
RELOC/doc/latex/mhchem/lppl-1-3c.txt
RELOC/doc/latex/mhchem/manifest.txt
RELOC/doc/latex/mhchem/mhchem.pdf details="Package documentation"
RELOC/doc/latex/mhchem/mhchem.tex
-runfiles size=576
+runfiles size=577
RELOC/tex/latex/mhchem/hpstatement.inc/hpstatement-bg.inc.sty
RELOC/tex/latex/mhchem/hpstatement.inc/hpstatement-cs.inc.sty
RELOC/tex/latex/mhchem/hpstatement.inc/hpstatement-da.inc.sty
@@ -311912,7 +311913,7 @@ binfiles arch=x86_64-solaris size=1
name tex4ht
category Package
-revision 69631
+revision 69640
shortdesc Convert (La)TeX to HTML/XML
longdesc A converter from TeX and LaTeX to SGML-based formats such as
longdesc (X)HTML, MathML, OpenDocument, and Docbook, providing a
@@ -311933,10 +311934,10 @@ longdesc files from them is nontrivial, and generally done with the
longdesc Makefile in development, from which the TeX4ht package in TeX
longdesc Live is updated.
depend tex4ht.ARCH
-containersize 1119012
-containerchecksum a056287544c6c5af2bd7d8e0df3d18b7ba9d31d25a07915aa7ccccc117d985011c38cfbec2e55cb2a8446906fa1dede88f6b17b1a85f98654526d005e3abe8f6
+containersize 1119032
+containerchecksum 0c067ff395b36934e4f206f3e056d7d6cb96fa9e29cd4082028e7d008fbe33981e738201b222db5591c11182d4a9e975f828ca8efc95c6c0afdd12e5928bbbe3
doccontainersize 136384
-doccontainerchecksum 69ada09757ee90f1ff4aa6e5dcf129c248d2d77034d0600c228ca79ecd6d97b6c58d95e5c43ecb09ae68fb89ad5ea4f09118a22ad2c6006a1216f63160d95dc9
+doccontainerchecksum d2a44d9127646d3625ee8b5f79e0c8d1d92170a04ad29887f9ac62830ed4efcb91bd6c447aac140c64a5a90cf2bb763ee94b04ab75967b69469b86f3c7654a22
docfiles size=260
texmf-dist/doc/generic/tex4ht/Makefile
texmf-dist/doc/generic/tex4ht/README details="Readme"
@@ -312008,8 +312009,8 @@ docfiles size=260
texmf-dist/doc/generic/tex4ht/mn56.html
texmf-dist/doc/generic/tex4ht/mn5x.png
texmf-dist/doc/generic/tex4ht/mn6x.png
-srccontainersize 1486440
-srccontainerchecksum 6198e638e772760086a04948182ff8716105cec50713a0944bab461a7aff37d26b9966486bc97b3cf284a581032c5dc1ef54258d6ce4ee3a83f46da6a0782ee9
+srccontainersize 1481220
+srccontainerchecksum 389beba86d0ef41060525cd302c276477f63b49fe0662a60f1234d8d13f36f4958d0e05fb48da42883d5060dbc11acf9337c886ef9b5910767955fd5cef37b6b
srcfiles size=4639
texmf-dist/source/generic/tex4ht/ChangeLog
texmf-dist/source/generic/tex4ht/Makefile
@@ -324423,7 +324424,7 @@ docfiles size=376
name texlive-scripts
category TLCore
-revision 69626
+revision 69633
shortdesc TeX Live infrastructure programs
longdesc Includes install-tl, tl-portable, rungs, etc.; not needed for
longdesc tlmgr to run but still ours. Not included in tlcritical.
@@ -324432,9 +324433,9 @@ depend texlive.infra
execute addMap mathpple.map
postaction shortcut type=menu name="TeX Live command-line" cmd=TEXDIR/tlpkg/installer/tl-cmd.bat
containersize 114048
-containerchecksum 690099d9f93db63ad0caee5277f732f3e3a44d4b689e33366d542e5ea290f806ab4d9c0fa4aca74793e06e47328aef835a5ea5930fa3c6648ab225155fe86d31
+containerchecksum 0dc8065f464e61b89dced870dcc5060cc712b7bb35e2c4cef91e0b8b528ca74549403a295eb40f544aa6df11586abbf2a369c03e78500bedafda267fbcb29723
doccontainersize 431908
-doccontainerchecksum db18f1928cf23ff257e00624c2bb17db55f68743ccf9ee21877c781e9a49ce725ca22d935bb1c85305a20e740ed98d61a8d0a1c0c13fe422dd1fbf0f9224c363
+doccontainerchecksum c880a2c1e0036d21486179329f0395c846f4b391c64b3e79bd8012ef18bc30744a067b68154ed2da16f405a5e1f3187f7f40bdae171d372947da5d5185d9b180
docfiles size=563
doc.html
texmf-dist/doc/man/man1/fmtutil-sys.1
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index e7d6d0a30d..0c586e89c3 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-ff8285f4b910082a99c313b9608ba35d texlive.tlpdb
+cae9c63ae2c38c8972c48aece5165991 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index 52bafb434f..705b21b221 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-2f68b331e2559e942195eecf3e0e487acc04281a0233f2bc9176fe7f31e2663811c198bf3fbbea0f2981470c2a89eccdc62194717e012b2e45d7d6313e29af68 texlive.tlpdb
+2cde810ba1d5dbd8412e4c96a83bf6101a7f058c411d2336f60ff41ff6c9730c566db6e38b867be3aa6fde1b2a6a1ce1e879dce35b091073602f814eaab222c6 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index bf20a47d59..3462f64415 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
@@ -1,11 +1,11 @@
-----BEGIN PGP SIGNATURE-----
-iQEzBAEBCgAdFiEE2PL4YFeoV+QqiBBqTOGHfhlDjHAFAmW4RtAACgkQTOGHfhlD
-jHCntQf+Ny25q+cOy51NwZjCXZM2y9g1vhPXRfkOrLkNWiGD6TULZONSeBQkezug
-2UZ/lA3ua2l+UjMxjBPfMpB3kbOSVK8QZi+7RgJGg/ZUMHfmztARpMwS7kzcdvnh
-n6+4T0JHoKeUFaDiXU+o7wH6w8iq/Pk4+I9gVmK/9IvYRnYeqdmoqQ4sPsbjMREU
-+TE2TLQKRCsXuVYUYwO35T+z5py1WpHbr2UuTvrHGuRso4r7TmkV4081uLGdDCis
-Sz0lOhAmpb6HvGjKuzD5+tkBqUkZBK4n6+BzEMidypxesxNdFLKLbzWWx2tZcTXy
-38Q8a0Lokm3wnkG8ZzvFS5vPn4ngRQ==
-=R4By
+iQEzBAEBCgAdFiEE2PL4YFeoV+QqiBBqTOGHfhlDjHAFAmW5mFAACgkQTOGHfhlD
+jHD3wAf9F/yJ4zn08I0vwT3FeX3JhdjAdaNaa7BXkZLcIBaPH5vSTL/K0ORIBYRj
+TNXfmrNO09nYPO0wxTM234y3OJ2w9XjDHmQWf8v4vPg3+hij3Q0MH32GF24c/e+O
++/XnKfp90yBXAxosP8Kq/xIA5uqE7KUCDM/HmMT62QJLKHWIriOauz6TKXs2Ir28
+Cj2p2fLYmx114zdn9ont7lYOch9kZgsvQgamFi7eAmku1zqTzFMqiii2upvs5RTo
+lQyeEr2Xt4BaEetgez3CxIsZlWBw4+W8P/7v8IkOpklgcmP1Rj9bsRtKdMy9BlMT
+K35IE74kVivxEeJVaE7+4WWwaH6MAQ==
+=EMQ2
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index bc849e2d2c..de81e05e20 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files differ
diff --git a/timestamp b/timestamp
index 3d2848b3ba..5ed7dd33cd 100644
--- a/timestamp
+++ b/timestamp
@@ -2,4 +2,4 @@
# The source CTAN of this site's material:
dante.ctan.org
# The year-month-day-hour-minute of this site's material:
-2024-01-31-02-02
+2024-02-01-02-02