texlive[63514] Master/texmf-dist: latex2e (8jun22)

commits+karl at tug.org commits+karl at tug.org
Wed Jun 8 22:41:20 CEST 2022


Revision: 63514
          http://tug.org/svn/texlive?view=revision&revision=63514
Author:   karl
Date:     2022-06-08 22:41:20 +0200 (Wed, 08 Jun 2022)
Log Message:
-----------
latex2e (8jun22)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/amsmath/README.md
    trunk/Master/texmf-dist/doc/latex/amsmath/amsbsy.pdf
    trunk/Master/texmf-dist/doc/latex/amsmath/amscd.pdf
    trunk/Master/texmf-dist/doc/latex/amsmath/amsgen.pdf
    trunk/Master/texmf-dist/doc/latex/amsmath/amsldoc.pdf
    trunk/Master/texmf-dist/doc/latex/amsmath/amsldoc.tex
    trunk/Master/texmf-dist/doc/latex/amsmath/amsmath.pdf
    trunk/Master/texmf-dist/doc/latex/amsmath/amsopn.pdf
    trunk/Master/texmf-dist/doc/latex/amsmath/amstext.pdf
    trunk/Master/texmf-dist/doc/latex/amsmath/amsxtra.pdf
    trunk/Master/texmf-dist/doc/latex/amsmath/changes.txt
    trunk/Master/texmf-dist/doc/latex/amsmath/subeqn.pdf
    trunk/Master/texmf-dist/doc/latex/amsmath/technote.pdf
    trunk/Master/texmf-dist/doc/latex/amsmath/testmath.pdf
    trunk/Master/texmf-dist/doc/latex/base/README.md
    trunk/Master/texmf-dist/doc/latex/base/alltt.pdf
    trunk/Master/texmf-dist/doc/latex/base/cfgguide.pdf
    trunk/Master/texmf-dist/doc/latex/base/cfgguide.tex
    trunk/Master/texmf-dist/doc/latex/base/changes.txt
    trunk/Master/texmf-dist/doc/latex/base/classes.pdf
    trunk/Master/texmf-dist/doc/latex/base/clsguide.pdf
    trunk/Master/texmf-dist/doc/latex/base/clsguide.tex
    trunk/Master/texmf-dist/doc/latex/base/cmfonts.pdf
    trunk/Master/texmf-dist/doc/latex/base/cyrguide.pdf
    trunk/Master/texmf-dist/doc/latex/base/cyrguide.tex
    trunk/Master/texmf-dist/doc/latex/base/doc.pdf
    trunk/Master/texmf-dist/doc/latex/base/docstrip.pdf
    trunk/Master/texmf-dist/doc/latex/base/encguide.pdf
    trunk/Master/texmf-dist/doc/latex/base/encguide.tex
    trunk/Master/texmf-dist/doc/latex/base/exscale.pdf
    trunk/Master/texmf-dist/doc/latex/base/fix-cm.pdf
    trunk/Master/texmf-dist/doc/latex/base/fntguide.pdf
    trunk/Master/texmf-dist/doc/latex/base/fntguide.tex
    trunk/Master/texmf-dist/doc/latex/base/graphpap.pdf
    trunk/Master/texmf-dist/doc/latex/base/ifthen.pdf
    trunk/Master/texmf-dist/doc/latex/base/inputenc.pdf
    trunk/Master/texmf-dist/doc/latex/base/lamport-manual.pdf
    trunk/Master/texmf-dist/doc/latex/base/latexrelease.pdf
    trunk/Master/texmf-dist/doc/latex/base/latexsym.pdf
    trunk/Master/texmf-dist/doc/latex/base/lb2.err
    trunk/Master/texmf-dist/doc/latex/base/lb2.pdf
    trunk/Master/texmf-dist/doc/latex/base/letter.pdf
    trunk/Master/texmf-dist/doc/latex/base/lgc2.err
    trunk/Master/texmf-dist/doc/latex/base/lgc2.pdf
    trunk/Master/texmf-dist/doc/latex/base/lppl.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltcmdhooks-code.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltcmdhooks-doc.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltcmdhooks-doc.tex
    trunk/Master/texmf-dist/doc/latex/base/ltfilehook-code.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltfilehook-doc.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltfilehook-doc.tex
    trunk/Master/texmf-dist/doc/latex/base/lthooks-code.pdf
    trunk/Master/texmf-dist/doc/latex/base/lthooks-doc.pdf
    trunk/Master/texmf-dist/doc/latex/base/lthooks-doc.tex
    trunk/Master/texmf-dist/doc/latex/base/ltluatex.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews01.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews01.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews02.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews02.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews03.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews03.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews04.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews04.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews05.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews05.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews06.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews06.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews07.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews07.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews08.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews08.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews09.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews09.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews10.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews10.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews11.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews11.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews12.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews12.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews13.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews13.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews14.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews14.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews15.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews15.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews16.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews16.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews17.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews17.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews18.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews18.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews19.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews19.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews20.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews21.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews22.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews22.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews23.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews23.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews24.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews24.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews25.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews25.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews26.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews26.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews27.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews27.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews28.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews28.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews29.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews29.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews30.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews31.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews32.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews32.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews33.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews34.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews34.tex
    trunk/Master/texmf-dist/doc/latex/base/ltpara-code.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltpara-doc.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltpara-doc.tex
    trunk/Master/texmf-dist/doc/latex/base/ltshipout-code.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltshipout-doc.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltshipout-doc.tex
    trunk/Master/texmf-dist/doc/latex/base/ltx3info.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltx3info.tex
    trunk/Master/texmf-dist/doc/latex/base/ltxdoc.pdf
    trunk/Master/texmf-dist/doc/latex/base/makeindx.pdf
    trunk/Master/texmf-dist/doc/latex/base/manifest.txt
    trunk/Master/texmf-dist/doc/latex/base/modguide.pdf
    trunk/Master/texmf-dist/doc/latex/base/modguide.tex
    trunk/Master/texmf-dist/doc/latex/base/nfssfont.pdf
    trunk/Master/texmf-dist/doc/latex/base/proc.pdf
    trunk/Master/texmf-dist/doc/latex/base/slides.pdf
    trunk/Master/texmf-dist/doc/latex/base/slifonts.pdf
    trunk/Master/texmf-dist/doc/latex/base/source2e.pdf
    trunk/Master/texmf-dist/doc/latex/base/source2e.tex
    trunk/Master/texmf-dist/doc/latex/base/syntonly.pdf
    trunk/Master/texmf-dist/doc/latex/base/tlc2.err
    trunk/Master/texmf-dist/doc/latex/base/tlc2.pdf
    trunk/Master/texmf-dist/doc/latex/base/tulm.pdf
    trunk/Master/texmf-dist/doc/latex/base/usrguide.pdf
    trunk/Master/texmf-dist/doc/latex/base/usrguide.tex
    trunk/Master/texmf-dist/doc/latex/base/usrguide3.pdf
    trunk/Master/texmf-dist/doc/latex/base/usrguide3.tex
    trunk/Master/texmf-dist/doc/latex/base/utf8ienc.pdf
    trunk/Master/texmf-dist/doc/latex/base/webcomp.pdf
    trunk/Master/texmf-dist/doc/latex/firstaid/changes.txt
    trunk/Master/texmf-dist/doc/latex/firstaid/latex2e-first-aid-for-external-files.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/README.md
    trunk/Master/texmf-dist/doc/latex/graphics/changes.txt
    trunk/Master/texmf-dist/doc/latex/graphics/color.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/drivers.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/epsfig.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/graphics.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/graphicx.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/grfguide.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/grfguide.tex
    trunk/Master/texmf-dist/doc/latex/graphics/keyval.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/lscape.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/rotating.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/rotex.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/trig.pdf
    trunk/Master/texmf-dist/doc/latex/tools/README.md
    trunk/Master/texmf-dist/doc/latex/tools/afterpage.pdf
    trunk/Master/texmf-dist/doc/latex/tools/array.pdf
    trunk/Master/texmf-dist/doc/latex/tools/bm.pdf
    trunk/Master/texmf-dist/doc/latex/tools/calc.pdf
    trunk/Master/texmf-dist/doc/latex/tools/changes.txt
    trunk/Master/texmf-dist/doc/latex/tools/dcolumn.pdf
    trunk/Master/texmf-dist/doc/latex/tools/delarray.pdf
    trunk/Master/texmf-dist/doc/latex/tools/enumerate.pdf
    trunk/Master/texmf-dist/doc/latex/tools/fileerr.pdf
    trunk/Master/texmf-dist/doc/latex/tools/fontsmpl.pdf
    trunk/Master/texmf-dist/doc/latex/tools/ftnright.pdf
    trunk/Master/texmf-dist/doc/latex/tools/hhline.pdf
    trunk/Master/texmf-dist/doc/latex/tools/indentfirst.pdf
    trunk/Master/texmf-dist/doc/latex/tools/layout.pdf
    trunk/Master/texmf-dist/doc/latex/tools/longtable.pdf
    trunk/Master/texmf-dist/doc/latex/tools/multicol.pdf
    trunk/Master/texmf-dist/doc/latex/tools/rawfonts.pdf
    trunk/Master/texmf-dist/doc/latex/tools/shellesc.pdf
    trunk/Master/texmf-dist/doc/latex/tools/showkeys.pdf
    trunk/Master/texmf-dist/doc/latex/tools/somedefs.pdf
    trunk/Master/texmf-dist/doc/latex/tools/tabularx.pdf
    trunk/Master/texmf-dist/doc/latex/tools/theorem.pdf
    trunk/Master/texmf-dist/doc/latex/tools/tools-overview.pdf
    trunk/Master/texmf-dist/doc/latex/tools/tools-overview.tex
    trunk/Master/texmf-dist/doc/latex/tools/trace.pdf
    trunk/Master/texmf-dist/doc/latex/tools/varioref.pdf
    trunk/Master/texmf-dist/doc/latex/tools/verbatim.pdf
    trunk/Master/texmf-dist/doc/latex/tools/xr.pdf
    trunk/Master/texmf-dist/doc/latex/tools/xspace.pdf
    trunk/Master/texmf-dist/makeindex/latex/gglo.ist
    trunk/Master/texmf-dist/makeindex/latex/gind.ist
    trunk/Master/texmf-dist/source/latex/amsmath/amsbsy.dtx
    trunk/Master/texmf-dist/source/latex/amsmath/amsbsy.ins
    trunk/Master/texmf-dist/source/latex/amsmath/amscd.dtx
    trunk/Master/texmf-dist/source/latex/amsmath/amscd.ins
    trunk/Master/texmf-dist/source/latex/amsmath/amsgen.dtx
    trunk/Master/texmf-dist/source/latex/amsmath/amsgen.ins
    trunk/Master/texmf-dist/source/latex/amsmath/amsmath.dtx
    trunk/Master/texmf-dist/source/latex/amsmath/amsmath.ins
    trunk/Master/texmf-dist/source/latex/amsmath/amsopn.dtx
    trunk/Master/texmf-dist/source/latex/amsmath/amsopn.ins
    trunk/Master/texmf-dist/source/latex/amsmath/amstext.dtx
    trunk/Master/texmf-dist/source/latex/amsmath/amstext.ins
    trunk/Master/texmf-dist/source/latex/amsmath/amsxtra.dtx
    trunk/Master/texmf-dist/source/latex/amsmath/amsxtra.ins
    trunk/Master/texmf-dist/source/latex/base/alltt.dtx
    trunk/Master/texmf-dist/source/latex/base/alltt.ins
    trunk/Master/texmf-dist/source/latex/base/classes.dtx
    trunk/Master/texmf-dist/source/latex/base/classes.ins
    trunk/Master/texmf-dist/source/latex/base/cmextra.ins
    trunk/Master/texmf-dist/source/latex/base/cmfonts.ins
    trunk/Master/texmf-dist/source/latex/base/doc.dtx
    trunk/Master/texmf-dist/source/latex/base/docstrip.dtx
    trunk/Master/texmf-dist/source/latex/base/docstrip.ins
    trunk/Master/texmf-dist/source/latex/base/ec.ins
    trunk/Master/texmf-dist/source/latex/base/exscale.dtx
    trunk/Master/texmf-dist/source/latex/base/exscale.ins
    trunk/Master/texmf-dist/source/latex/base/fix-cm.dtx
    trunk/Master/texmf-dist/source/latex/base/fix-cm.ins
    trunk/Master/texmf-dist/source/latex/base/fontdef.dtx
    trunk/Master/texmf-dist/source/latex/base/format.ins
    trunk/Master/texmf-dist/source/latex/base/graphpap.dtx
    trunk/Master/texmf-dist/source/latex/base/graphpap.ins
    trunk/Master/texmf-dist/source/latex/base/ifthen.dtx
    trunk/Master/texmf-dist/source/latex/base/ifthen.ins
    trunk/Master/texmf-dist/source/latex/base/inputenc.dtx
    trunk/Master/texmf-dist/source/latex/base/inputenc.ins
    trunk/Master/texmf-dist/source/latex/base/latex209.dtx
    trunk/Master/texmf-dist/source/latex/base/latex209.ins
    trunk/Master/texmf-dist/source/latex/base/latexrelease.dtx
    trunk/Master/texmf-dist/source/latex/base/latexrelease.ins
    trunk/Master/texmf-dist/source/latex/base/latexsym.dtx
    trunk/Master/texmf-dist/source/latex/base/latexsym.ins
    trunk/Master/texmf-dist/source/latex/base/letter.dtx
    trunk/Master/texmf-dist/source/latex/base/letter.ins
    trunk/Master/texmf-dist/source/latex/base/ltalloc.dtx
    trunk/Master/texmf-dist/source/latex/base/ltbibl.dtx
    trunk/Master/texmf-dist/source/latex/base/ltboxes.dtx
    trunk/Master/texmf-dist/source/latex/base/ltclass.dtx
    trunk/Master/texmf-dist/source/latex/base/ltcmd.dtx
    trunk/Master/texmf-dist/source/latex/base/ltcmdhooks.dtx
    trunk/Master/texmf-dist/source/latex/base/ltcntrl.dtx
    trunk/Master/texmf-dist/source/latex/base/ltcounts.dtx
    trunk/Master/texmf-dist/source/latex/base/ltdefns.dtx
    trunk/Master/texmf-dist/source/latex/base/ltdirchk.dtx
    trunk/Master/texmf-dist/source/latex/base/lterror.dtx
    trunk/Master/texmf-dist/source/latex/base/ltexpl.dtx
    trunk/Master/texmf-dist/source/latex/base/ltfilehook.dtx
    trunk/Master/texmf-dist/source/latex/base/ltfiles.dtx
    trunk/Master/texmf-dist/source/latex/base/ltfinal.dtx
    trunk/Master/texmf-dist/source/latex/base/ltfloat.dtx
    trunk/Master/texmf-dist/source/latex/base/ltfntcmd.dtx
    trunk/Master/texmf-dist/source/latex/base/ltfssaxes.dtx
    trunk/Master/texmf-dist/source/latex/base/ltfssbas.dtx
    trunk/Master/texmf-dist/source/latex/base/ltfsscmp.dtx
    trunk/Master/texmf-dist/source/latex/base/ltfssdcl.dtx
    trunk/Master/texmf-dist/source/latex/base/ltfssini.dtx
    trunk/Master/texmf-dist/source/latex/base/ltfsstrc.dtx
    trunk/Master/texmf-dist/source/latex/base/lthooks.dtx
    trunk/Master/texmf-dist/source/latex/base/lthyphen.dtx
    trunk/Master/texmf-dist/source/latex/base/ltidxglo.dtx
    trunk/Master/texmf-dist/source/latex/base/ltlength.dtx
    trunk/Master/texmf-dist/source/latex/base/ltlists.dtx
    trunk/Master/texmf-dist/source/latex/base/ltlogos.dtx
    trunk/Master/texmf-dist/source/latex/base/ltluatex.dtx
    trunk/Master/texmf-dist/source/latex/base/ltmath.dtx
    trunk/Master/texmf-dist/source/latex/base/ltmiscen.dtx
    trunk/Master/texmf-dist/source/latex/base/ltoutenc.dtx
    trunk/Master/texmf-dist/source/latex/base/ltoutenc.ins
    trunk/Master/texmf-dist/source/latex/base/ltoutput.dtx
    trunk/Master/texmf-dist/source/latex/base/ltpage.dtx
    trunk/Master/texmf-dist/source/latex/base/ltpageno.dtx
    trunk/Master/texmf-dist/source/latex/base/ltpar.dtx
    trunk/Master/texmf-dist/source/latex/base/ltpara.dtx
    trunk/Master/texmf-dist/source/latex/base/ltpictur.dtx
    trunk/Master/texmf-dist/source/latex/base/ltplain.dtx
    trunk/Master/texmf-dist/source/latex/base/ltsect.dtx
    trunk/Master/texmf-dist/source/latex/base/ltshipout.dtx
    trunk/Master/texmf-dist/source/latex/base/ltspace.dtx
    trunk/Master/texmf-dist/source/latex/base/lttab.dtx
    trunk/Master/texmf-dist/source/latex/base/lttextcomp.dtx
    trunk/Master/texmf-dist/source/latex/base/ltthm.dtx
    trunk/Master/texmf-dist/source/latex/base/ltvers.dtx
    trunk/Master/texmf-dist/source/latex/base/ltxdoc.dtx
    trunk/Master/texmf-dist/source/latex/base/ltxref.dtx
    trunk/Master/texmf-dist/source/latex/base/makeindx.dtx
    trunk/Master/texmf-dist/source/latex/base/makeindx.ins
    trunk/Master/texmf-dist/source/latex/base/newdc.ins
    trunk/Master/texmf-dist/source/latex/base/newlfont.dtx
    trunk/Master/texmf-dist/source/latex/base/nfssfont.dtx
    trunk/Master/texmf-dist/source/latex/base/nfssfont.ins
    trunk/Master/texmf-dist/source/latex/base/olddc.ins
    trunk/Master/texmf-dist/source/latex/base/oldlfont.dtx
    trunk/Master/texmf-dist/source/latex/base/preload.dtx
    trunk/Master/texmf-dist/source/latex/base/proc.dtx
    trunk/Master/texmf-dist/source/latex/base/proc.ins
    trunk/Master/texmf-dist/source/latex/base/slides.dtx
    trunk/Master/texmf-dist/source/latex/base/slides.ins
    trunk/Master/texmf-dist/source/latex/base/syntonly.dtx
    trunk/Master/texmf-dist/source/latex/base/syntonly.ins
    trunk/Master/texmf-dist/source/latex/base/tulm.ins
    trunk/Master/texmf-dist/source/latex/base/unpack.ins
    trunk/Master/texmf-dist/source/latex/base/utf8ienc.dtx
    trunk/Master/texmf-dist/source/latex/firstaid/latex2e-first-aid-for-external-files.dtx
    trunk/Master/texmf-dist/source/latex/graphics/color.dtx
    trunk/Master/texmf-dist/source/latex/graphics/drivers.dtx
    trunk/Master/texmf-dist/source/latex/graphics/epsfig.dtx
    trunk/Master/texmf-dist/source/latex/graphics/graphics.dtx
    trunk/Master/texmf-dist/source/latex/graphics/graphics.ins
    trunk/Master/texmf-dist/source/latex/graphics/graphicx.dtx
    trunk/Master/texmf-dist/source/latex/graphics/keyval.dtx
    trunk/Master/texmf-dist/source/latex/graphics/lscape.dtx
    trunk/Master/texmf-dist/source/latex/graphics/rotating.dtx
    trunk/Master/texmf-dist/source/latex/graphics/trig.dtx
    trunk/Master/texmf-dist/source/latex/tools/afterpage.dtx
    trunk/Master/texmf-dist/source/latex/tools/afterpage.ins
    trunk/Master/texmf-dist/source/latex/tools/array.dtx
    trunk/Master/texmf-dist/source/latex/tools/bm.dtx
    trunk/Master/texmf-dist/source/latex/tools/bm.ins
    trunk/Master/texmf-dist/source/latex/tools/calc.dtx
    trunk/Master/texmf-dist/source/latex/tools/dcolumn.dtx
    trunk/Master/texmf-dist/source/latex/tools/delarray.dtx
    trunk/Master/texmf-dist/source/latex/tools/enumerate.dtx
    trunk/Master/texmf-dist/source/latex/tools/fileerr.dtx
    trunk/Master/texmf-dist/source/latex/tools/fontsmpl.dtx
    trunk/Master/texmf-dist/source/latex/tools/ftnright.dtx
    trunk/Master/texmf-dist/source/latex/tools/hhline.dtx
    trunk/Master/texmf-dist/source/latex/tools/indentfirst.dtx
    trunk/Master/texmf-dist/source/latex/tools/layout.dtx
    trunk/Master/texmf-dist/source/latex/tools/longtable.dtx
    trunk/Master/texmf-dist/source/latex/tools/longtable.ins
    trunk/Master/texmf-dist/source/latex/tools/multicol.dtx
    trunk/Master/texmf-dist/source/latex/tools/multicol.ins
    trunk/Master/texmf-dist/source/latex/tools/rawfonts.dtx
    trunk/Master/texmf-dist/source/latex/tools/shellesc.dtx
    trunk/Master/texmf-dist/source/latex/tools/showkeys.dtx
    trunk/Master/texmf-dist/source/latex/tools/somedefs.dtx
    trunk/Master/texmf-dist/source/latex/tools/tabularx.dtx
    trunk/Master/texmf-dist/source/latex/tools/tabularx.ins
    trunk/Master/texmf-dist/source/latex/tools/theorem.dtx
    trunk/Master/texmf-dist/source/latex/tools/tools.ins
    trunk/Master/texmf-dist/source/latex/tools/trace.dtx
    trunk/Master/texmf-dist/source/latex/tools/varioref.dtx
    trunk/Master/texmf-dist/source/latex/tools/varioref.ins
    trunk/Master/texmf-dist/source/latex/tools/verbatim.dtx
    trunk/Master/texmf-dist/source/latex/tools/xr.dtx
    trunk/Master/texmf-dist/source/latex/tools/xspace.dtx
    trunk/Master/texmf-dist/tex/latex/amsmath/amsbsy.sty
    trunk/Master/texmf-dist/tex/latex/amsmath/amscd.sty
    trunk/Master/texmf-dist/tex/latex/amsmath/amsgen.sty
    trunk/Master/texmf-dist/tex/latex/amsmath/amsmath.sty
    trunk/Master/texmf-dist/tex/latex/amsmath/amsopn.sty
    trunk/Master/texmf-dist/tex/latex/amsmath/amstext.sty
    trunk/Master/texmf-dist/tex/latex/amsmath/amsxtra.sty
    trunk/Master/texmf-dist/tex/latex/base/alltt.sty
    trunk/Master/texmf-dist/tex/latex/base/ansinew.def
    trunk/Master/texmf-dist/tex/latex/base/applemac.def
    trunk/Master/texmf-dist/tex/latex/base/article.cls
    trunk/Master/texmf-dist/tex/latex/base/article.sty
    trunk/Master/texmf-dist/tex/latex/base/ascii.def
    trunk/Master/texmf-dist/tex/latex/base/atbegshi-ltx.sty
    trunk/Master/texmf-dist/tex/latex/base/atveryend-ltx.sty
    trunk/Master/texmf-dist/tex/latex/base/bezier.sty
    trunk/Master/texmf-dist/tex/latex/base/bk10.clo
    trunk/Master/texmf-dist/tex/latex/base/bk11.clo
    trunk/Master/texmf-dist/tex/latex/base/bk12.clo
    trunk/Master/texmf-dist/tex/latex/base/book.cls
    trunk/Master/texmf-dist/tex/latex/base/book.sty
    trunk/Master/texmf-dist/tex/latex/base/cp1250.def
    trunk/Master/texmf-dist/tex/latex/base/cp1252.def
    trunk/Master/texmf-dist/tex/latex/base/cp1257.def
    trunk/Master/texmf-dist/tex/latex/base/cp437.def
    trunk/Master/texmf-dist/tex/latex/base/cp437de.def
    trunk/Master/texmf-dist/tex/latex/base/cp850.def
    trunk/Master/texmf-dist/tex/latex/base/cp852.def
    trunk/Master/texmf-dist/tex/latex/base/cp858.def
    trunk/Master/texmf-dist/tex/latex/base/cp865.def
    trunk/Master/texmf-dist/tex/latex/base/decmulti.def
    trunk/Master/texmf-dist/tex/latex/base/doc.sty
    trunk/Master/texmf-dist/tex/latex/base/docstrip.tex
    trunk/Master/texmf-dist/tex/latex/base/exscale.sty
    trunk/Master/texmf-dist/tex/latex/base/fix-cm.sty
    trunk/Master/texmf-dist/tex/latex/base/fixltx2e.sty
    trunk/Master/texmf-dist/tex/latex/base/flafter.sty
    trunk/Master/texmf-dist/tex/latex/base/fleqn.clo
    trunk/Master/texmf-dist/tex/latex/base/fleqn.sty
    trunk/Master/texmf-dist/tex/latex/base/fltrace.sty
    trunk/Master/texmf-dist/tex/latex/base/fontenc.sty
    trunk/Master/texmf-dist/tex/latex/base/fontmath.cfg
    trunk/Master/texmf-dist/tex/latex/base/fontmath.ltx
    trunk/Master/texmf-dist/tex/latex/base/fonttext.cfg
    trunk/Master/texmf-dist/tex/latex/base/fonttext.ltx
    trunk/Master/texmf-dist/tex/latex/base/graphpap.sty
    trunk/Master/texmf-dist/tex/latex/base/hyphen.ltx
    trunk/Master/texmf-dist/tex/latex/base/idx.tex
    trunk/Master/texmf-dist/tex/latex/base/ifthen.sty
    trunk/Master/texmf-dist/tex/latex/base/inputenc.sty
    trunk/Master/texmf-dist/tex/latex/base/lablst.tex
    trunk/Master/texmf-dist/tex/latex/base/latex.ltx
    trunk/Master/texmf-dist/tex/latex/base/latex209.def
    trunk/Master/texmf-dist/tex/latex/base/latexrelease.sty
    trunk/Master/texmf-dist/tex/latex/base/latexsym.sty
    trunk/Master/texmf-dist/tex/latex/base/latin1.def
    trunk/Master/texmf-dist/tex/latex/base/latin10.def
    trunk/Master/texmf-dist/tex/latex/base/latin2.def
    trunk/Master/texmf-dist/tex/latex/base/latin3.def
    trunk/Master/texmf-dist/tex/latex/base/latin4.def
    trunk/Master/texmf-dist/tex/latex/base/latin5.def
    trunk/Master/texmf-dist/tex/latex/base/latin9.def
    trunk/Master/texmf-dist/tex/latex/base/lcyenc.dfu
    trunk/Master/texmf-dist/tex/latex/base/leqno.clo
    trunk/Master/texmf-dist/tex/latex/base/leqno.sty
    trunk/Master/texmf-dist/tex/latex/base/letter.cls
    trunk/Master/texmf-dist/tex/latex/base/letter.sty
    trunk/Master/texmf-dist/tex/latex/base/ltluatex.lua
    trunk/Master/texmf-dist/tex/latex/base/ltluatex.tex
    trunk/Master/texmf-dist/tex/latex/base/ltxcheck.tex
    trunk/Master/texmf-dist/tex/latex/base/ltxdoc.cls
    trunk/Master/texmf-dist/tex/latex/base/ly1enc.dfu
    trunk/Master/texmf-dist/tex/latex/base/macce.def
    trunk/Master/texmf-dist/tex/latex/base/makeidx.sty
    trunk/Master/texmf-dist/tex/latex/base/newlfont.sty
    trunk/Master/texmf-dist/tex/latex/base/next.def
    trunk/Master/texmf-dist/tex/latex/base/nfssfont.tex
    trunk/Master/texmf-dist/tex/latex/base/oldlfont.sty
    trunk/Master/texmf-dist/tex/latex/base/omlcmm.fd
    trunk/Master/texmf-dist/tex/latex/base/omlcmr.fd
    trunk/Master/texmf-dist/tex/latex/base/omlenc.def
    trunk/Master/texmf-dist/tex/latex/base/omllcmm.fd
    trunk/Master/texmf-dist/tex/latex/base/omscmr.fd
    trunk/Master/texmf-dist/tex/latex/base/omscmsy.fd
    trunk/Master/texmf-dist/tex/latex/base/omsenc.def
    trunk/Master/texmf-dist/tex/latex/base/omsenc.dfu
    trunk/Master/texmf-dist/tex/latex/base/omslcmsy.fd
    trunk/Master/texmf-dist/tex/latex/base/omxcmex.fd
    trunk/Master/texmf-dist/tex/latex/base/omxlcmex.fd
    trunk/Master/texmf-dist/tex/latex/base/openbib.sty
    trunk/Master/texmf-dist/tex/latex/base/ot1cmdh.fd
    trunk/Master/texmf-dist/tex/latex/base/ot1cmfib.fd
    trunk/Master/texmf-dist/tex/latex/base/ot1cmfr.fd
    trunk/Master/texmf-dist/tex/latex/base/ot1cmr.fd
    trunk/Master/texmf-dist/tex/latex/base/ot1cmss.fd
    trunk/Master/texmf-dist/tex/latex/base/ot1cmtt.fd
    trunk/Master/texmf-dist/tex/latex/base/ot1cmvtt.fd
    trunk/Master/texmf-dist/tex/latex/base/ot1enc.def
    trunk/Master/texmf-dist/tex/latex/base/ot1enc.dfu
    trunk/Master/texmf-dist/tex/latex/base/ot1lcmss.fd
    trunk/Master/texmf-dist/tex/latex/base/ot1lcmtt.fd
    trunk/Master/texmf-dist/tex/latex/base/ot2enc.dfu
    trunk/Master/texmf-dist/tex/latex/base/ot4enc.def
    trunk/Master/texmf-dist/tex/latex/base/preload.cfg
    trunk/Master/texmf-dist/tex/latex/base/preload.ltx
    trunk/Master/texmf-dist/tex/latex/base/proc.cls
    trunk/Master/texmf-dist/tex/latex/base/proc.sty
    trunk/Master/texmf-dist/tex/latex/base/report.cls
    trunk/Master/texmf-dist/tex/latex/base/report.sty
    trunk/Master/texmf-dist/tex/latex/base/sfonts.def
    trunk/Master/texmf-dist/tex/latex/base/shortvrb.sty
    trunk/Master/texmf-dist/tex/latex/base/showidx.sty
    trunk/Master/texmf-dist/tex/latex/base/size10.clo
    trunk/Master/texmf-dist/tex/latex/base/size11.clo
    trunk/Master/texmf-dist/tex/latex/base/size12.clo
    trunk/Master/texmf-dist/tex/latex/base/slides.cls
    trunk/Master/texmf-dist/tex/latex/base/slides.def
    trunk/Master/texmf-dist/tex/latex/base/slides.sty
    trunk/Master/texmf-dist/tex/latex/base/source2edoc.cls
    trunk/Master/texmf-dist/tex/latex/base/structuredlog.sty
    trunk/Master/texmf-dist/tex/latex/base/syntonly.sty
    trunk/Master/texmf-dist/tex/latex/base/t1cmdh.fd
    trunk/Master/texmf-dist/tex/latex/base/t1cmfib.fd
    trunk/Master/texmf-dist/tex/latex/base/t1cmfr.fd
    trunk/Master/texmf-dist/tex/latex/base/t1cmr.fd
    trunk/Master/texmf-dist/tex/latex/base/t1cmss.fd
    trunk/Master/texmf-dist/tex/latex/base/t1cmtt.fd
    trunk/Master/texmf-dist/tex/latex/base/t1cmvtt.fd
    trunk/Master/texmf-dist/tex/latex/base/t1enc.def
    trunk/Master/texmf-dist/tex/latex/base/t1enc.dfu
    trunk/Master/texmf-dist/tex/latex/base/t1enc.sty
    trunk/Master/texmf-dist/tex/latex/base/t1lcmss.fd
    trunk/Master/texmf-dist/tex/latex/base/t1lcmtt.fd
    trunk/Master/texmf-dist/tex/latex/base/t2aenc.dfu
    trunk/Master/texmf-dist/tex/latex/base/t2benc.dfu
    trunk/Master/texmf-dist/tex/latex/base/t2cenc.dfu
    trunk/Master/texmf-dist/tex/latex/base/testpage.tex
    trunk/Master/texmf-dist/tex/latex/base/textcomp-2018-08-11.sty
    trunk/Master/texmf-dist/tex/latex/base/textcomp.sty
    trunk/Master/texmf-dist/tex/latex/base/tracefnt.sty
    trunk/Master/texmf-dist/tex/latex/base/ts1cmr.fd
    trunk/Master/texmf-dist/tex/latex/base/ts1cmss.fd
    trunk/Master/texmf-dist/tex/latex/base/ts1cmtt.fd
    trunk/Master/texmf-dist/tex/latex/base/ts1cmvtt.fd
    trunk/Master/texmf-dist/tex/latex/base/ts1enc.def
    trunk/Master/texmf-dist/tex/latex/base/ts1enc.dfu
    trunk/Master/texmf-dist/tex/latex/base/tuenc.def
    trunk/Master/texmf-dist/tex/latex/base/tulmdh.fd
    trunk/Master/texmf-dist/tex/latex/base/tulmr.fd
    trunk/Master/texmf-dist/tex/latex/base/tulmss.fd
    trunk/Master/texmf-dist/tex/latex/base/tulmssq.fd
    trunk/Master/texmf-dist/tex/latex/base/tulmtt.fd
    trunk/Master/texmf-dist/tex/latex/base/tulmvtt.fd
    trunk/Master/texmf-dist/tex/latex/base/ucmr.fd
    trunk/Master/texmf-dist/tex/latex/base/ucmss.fd
    trunk/Master/texmf-dist/tex/latex/base/ucmtt.fd
    trunk/Master/texmf-dist/tex/latex/base/ulasy.fd
    trunk/Master/texmf-dist/tex/latex/base/ullasy.fd
    trunk/Master/texmf-dist/tex/latex/base/utf8-2018.def
    trunk/Master/texmf-dist/tex/latex/base/utf8.def
    trunk/Master/texmf-dist/tex/latex/base/utf8enc.dfu
    trunk/Master/texmf-dist/tex/latex/base/x2enc.dfu
    trunk/Master/texmf-dist/tex/latex/firstaid/everysel-ltx.sty
    trunk/Master/texmf-dist/tex/latex/firstaid/filehook-ltx.sty
    trunk/Master/texmf-dist/tex/latex/firstaid/latex2e-first-aid-for-external-files.ltx
    trunk/Master/texmf-dist/tex/latex/graphics/color.sty
    trunk/Master/texmf-dist/tex/latex/graphics/dvipdf.def
    trunk/Master/texmf-dist/tex/latex/graphics/dvipsnam.def
    trunk/Master/texmf-dist/tex/latex/graphics/dvipsone.def
    trunk/Master/texmf-dist/tex/latex/graphics/dviwin.def
    trunk/Master/texmf-dist/tex/latex/graphics/emtex.def
    trunk/Master/texmf-dist/tex/latex/graphics/epsfig.sty
    trunk/Master/texmf-dist/tex/latex/graphics/graphics.sty
    trunk/Master/texmf-dist/tex/latex/graphics/graphicx.sty
    trunk/Master/texmf-dist/tex/latex/graphics/keyval.sty
    trunk/Master/texmf-dist/tex/latex/graphics/lscape.sty
    trunk/Master/texmf-dist/tex/latex/graphics/pctex32.def
    trunk/Master/texmf-dist/tex/latex/graphics/pctexhp.def
    trunk/Master/texmf-dist/tex/latex/graphics/pctexps.def
    trunk/Master/texmf-dist/tex/latex/graphics/pctexwin.def
    trunk/Master/texmf-dist/tex/latex/graphics/rotating.sty
    trunk/Master/texmf-dist/tex/latex/graphics/tcidvi.def
    trunk/Master/texmf-dist/tex/latex/graphics/trig.sty
    trunk/Master/texmf-dist/tex/latex/graphics/truetex.def
    trunk/Master/texmf-dist/tex/latex/tools/.tex
    trunk/Master/texmf-dist/tex/latex/tools/afterpage.sty
    trunk/Master/texmf-dist/tex/latex/tools/array.sty
    trunk/Master/texmf-dist/tex/latex/tools/bm.sty
    trunk/Master/texmf-dist/tex/latex/tools/calc.sty
    trunk/Master/texmf-dist/tex/latex/tools/dcolumn.sty
    trunk/Master/texmf-dist/tex/latex/tools/delarray.sty
    trunk/Master/texmf-dist/tex/latex/tools/e.tex
    trunk/Master/texmf-dist/tex/latex/tools/enumerate.sty
    trunk/Master/texmf-dist/tex/latex/tools/fontsmpl.sty
    trunk/Master/texmf-dist/tex/latex/tools/fontsmpl.tex
    trunk/Master/texmf-dist/tex/latex/tools/ftnright.sty
    trunk/Master/texmf-dist/tex/latex/tools/h.tex
    trunk/Master/texmf-dist/tex/latex/tools/hhline.sty
    trunk/Master/texmf-dist/tex/latex/tools/indentfirst.sty
    trunk/Master/texmf-dist/tex/latex/tools/layout.sty
    trunk/Master/texmf-dist/tex/latex/tools/longtable.sty
    trunk/Master/texmf-dist/tex/latex/tools/multicol.sty
    trunk/Master/texmf-dist/tex/latex/tools/q.tex
    trunk/Master/texmf-dist/tex/latex/tools/r.tex
    trunk/Master/texmf-dist/tex/latex/tools/rawfonts.sty
    trunk/Master/texmf-dist/tex/latex/tools/s.tex
    trunk/Master/texmf-dist/tex/latex/tools/shellesc.sty
    trunk/Master/texmf-dist/tex/latex/tools/showkeys.sty
    trunk/Master/texmf-dist/tex/latex/tools/somedefs.sty
    trunk/Master/texmf-dist/tex/latex/tools/tabularx.sty
    trunk/Master/texmf-dist/tex/latex/tools/thb.sty
    trunk/Master/texmf-dist/tex/latex/tools/thc.sty
    trunk/Master/texmf-dist/tex/latex/tools/thcb.sty
    trunk/Master/texmf-dist/tex/latex/tools/theorem.sty
    trunk/Master/texmf-dist/tex/latex/tools/thm.sty
    trunk/Master/texmf-dist/tex/latex/tools/thmb.sty
    trunk/Master/texmf-dist/tex/latex/tools/thp.sty
    trunk/Master/texmf-dist/tex/latex/tools/trace.sty
    trunk/Master/texmf-dist/tex/latex/tools/varioref.sty
    trunk/Master/texmf-dist/tex/latex/tools/verbatim.sty
    trunk/Master/texmf-dist/tex/latex/tools/verbtest.tex
    trunk/Master/texmf-dist/tex/latex/tools/x.tex
    trunk/Master/texmf-dist/tex/latex/tools/xr.sty
    trunk/Master/texmf-dist/tex/latex/tools/xspace.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/base/doc-code.pdf
    trunk/Master/texmf-dist/doc/latex/base/doc-code.tex
    trunk/Master/texmf-dist/doc/latex/base/ltmarks-code.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltmarks-code.tex
    trunk/Master/texmf-dist/doc/latex/base/ltmarks-doc.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltmarks-doc.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews35.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews35.tex
    trunk/Master/texmf-dist/doc/latex/graphics/mathcolor.pdf
    trunk/Master/texmf-dist/source/latex/base/ltkeys.dtx
    trunk/Master/texmf-dist/source/latex/base/ltmarks.dtx
    trunk/Master/texmf-dist/source/latex/base/ltmeta.dtx
    trunk/Master/texmf-dist/source/latex/graphics/mathcolor.dtx
    trunk/Master/texmf-dist/tex/latex/base/doc-2016-02-15.sty
    trunk/Master/texmf-dist/tex/latex/base/doc-2021-06-01.sty
    trunk/Master/texmf-dist/tex/latex/base/ltxdoc.cfg
    trunk/Master/texmf-dist/tex/latex/graphics/mathcolor.ltx
    trunk/Master/texmf-dist/tex/latex/tools/multicol-2019-10-01.sty
    trunk/Master/texmf-dist/tex/latex/tools/showkeys-2014-10-28.sty

Removed Paths:
-------------
    trunk/Master/texmf-dist/doc/latex/base/latexchanges.pdf
    trunk/Master/texmf-dist/doc/latex/base/latexchanges.tex
    trunk/Master/texmf-dist/doc/latex/base/tex2.txt
    trunk/Master/texmf-dist/doc/latex/base/texpert.txt
    trunk/Master/texmf-dist/tex/latex/base/doc-v3beta.sty

Modified: trunk/Master/texmf-dist/doc/latex/amsmath/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/amsmath/README.md	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/amsmath/README.md	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,7 +1,7 @@
 The amsmath bundle for LaTeX
 ============================
 
-Release 2021-11-15
+Release 2022-06-01
 
 Overview
 --------
@@ -77,4 +77,5 @@
 -----
 
 <p>Copyright (C) 2001-2004, 2007, 2008, 2010, 2011, 2013 American Mathematical Society. <br />
-<p>Copyright (C) 2016-2021 The LaTeX Project and American Mathematical Society. <br />
+<p>Copyright (C) 2016-2022 The LaTeX Project and American Mathematical Society. <br />
+

Modified: trunk/Master/texmf-dist/doc/latex/amsmath/amsbsy.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/amsmath/amscd.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/amsmath/amsgen.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/amsmath/amsldoc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/amsmath/amsldoc.tex
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/amsmath/amsmath.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/amsmath/amsopn.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/amsmath/amstext.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/amsmath/amsxtra.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/amsmath/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/amsmath/changes.txt	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/amsmath/changes.txt	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,6 +3,35 @@
 ================================================================================
 
 #########################
+# 2022-06-01 Release
+#########################
+
+2022-04-08  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* amsmath.dtx:
+	Make various math commands robust to match the LaTeX kernel (gh/123)
+
+	* amsopn.dtx:
+	Make various operators \protected (gh/123)
+
+
+2022-02-03  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* amsmath.dtx (subsection{The \env{multline} environment}):
+	Added missing \relax for (gh/716)
+	Also make \shoveleft and \shoveright robust (part of gh/123)
+
+2022-01-20  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* amsopn.dtx:
+	Do not define/reset \operator at font; it is already defined in
+	the LaTeX kernel (gh/734)
+
+2021-11-18  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* All *.dtx: Replaced \StopEventually by \MaybeStop
+
+#########################
 # 2021-11-15 Release
 #########################
 

Modified: trunk/Master/texmf-dist/doc/latex/amsmath/subeqn.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/amsmath/technote.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/amsmath/testmath.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/README.md	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/README.md	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,7 +1,7 @@
 The LaTeX kernel
 ================
 
-Release 2021-11-15 patch level 1
+Release 2022-06-01
 
 Overview
 --------
@@ -10,10 +10,15 @@
 a minimal LaTeX system also needs the files contained in the
 
 - LaTeX team documentation (`doc`)
+- L3 programming layer (`l3kernel`)
+- L3 backend interfaces (`l3backend`)
+- L3 unicode support (`unicode-data`)
+
 - Packages which must be available (`required`). These are
   - Essential tools (`tools`)
   - Core graphics and color support (`graphics`)
   - Key mathematics support (`amsmath`)
+  - First aid for external packages (`firstaid`)
 
 This file contains a small set of pointers to other more complete
 documentation on installing and using a LaTeX system.
@@ -36,10 +41,6 @@
    with one line of information about the contents
 - `legal.txt` and `lppl.txt` (LaTeX Project Public License) describe the
    LaTeX copyright, warranty and copying restrictions.
-- `texpert.txt` contains information about the system that may still be
-   useful for TeX experts
-- `tex2.txt` contains important information for users of extremely
-   old versions of TeX (pre 1990)
 - `bugs.txt` describes how to submit a bug report for LaTeX
 
 Other documentation files include files with names of the form:
@@ -93,6 +94,6 @@
 
 -----
 
-<p>Copyright (C) 1989-2021 The LaTeX Project <br />
+<p>Copyright (C) 1989-2022 The LaTeX Project <br />
 <a href="http://latex-project.org/">http://latex-project.org/</a> <br />
 All rights reserved.</p>

Modified: trunk/Master/texmf-dist/doc/latex/base/alltt.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/cfgguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/cfgguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/cfgguide.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/cfgguide.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/changes.txt	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/changes.txt	2022-06-08 20:41:20 UTC (rev 63514)
@@ -11,6 +11,329 @@
 ================================================================================
 
 #########################
+# 2022-06-01 Release
+#########################
+
+2022-06-07  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* utf8ienc.dtx (subsection{The mapping table}):
+	Fix \guillemetleft and \guillemetright also in dfu files (gh/65)
+
+2022-06-03  David Carlisle  <David.Carlisle at latex-project.org>
+
+	* doc.dtx: adjust ltxdoc.cls and doc.dtx to process existing
+	use of L3 names and \pkg in base dtx files
+
+2022-06-02  David Carlisle  <David.Carlisle at latex-project.org>
+
+	* ltfinal.dtx: add \NoCaseChange (previously available in the
+          textcase package)
+
+2022-06-01  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltmarks.dtx (subsection{Updating mark structures}):
+	Be more careful when unpackage a \vbox for mark detection, it might
+	contain infinite shrink glue (gh/836)
+
+2022-05-27  David Carlisle  <David.Carlisle at latex-project.org>
+
+	* ltfiles.dtx, ltoutenc.dtx:
+	save the original version string in \ver@@...
+	Usable by \listfiles if the standard \ver at ... command has been set to \relax
+	(as in fontenc.sty) gh/825
+
+2022-05-27  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltxdoc.dtx (section{Customisation}):
+	Added option doc2 so that old doc version can be requested (gh/822)
+
+2022-05-27  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* doc.dtx (subsection{Processing the package keys}):
+	Adjusted doc to use \ProcessKeyOptions (not the older l3keys2e variant)
+
+2022-05-17  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+
+	* lthooks.dtx (subsection{Setting rules for hooks code}):
+	Refuse sorting one-time hooks (gh/818).
+
+2022-05-17  Ulrike Fischer <Ulrike.Fischer at latex-project.org>
+
+	* ltmeta.dtx:
+	Added dummy definitions for target commands.
+
+2022-05-13  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+
+	* lthooks.dtx (subsection{Using the hook}):
+	Avoid l3debug error on an undeclared variable in \hook_use_once:nnn.
+
+2022-05-08  Marcel Krüger  <Marcel.Krueger at latex-project.org>
+
+  * utf8ienc.dtx:
+	Declare Unicode codepoints U+3008 and U+3009 to be equivalent
+	to their canonical equivalent codepoints 2329/232A (corresponding
+	to \textlangle/\textrangle)
+
+2022-05-08  Marcel Krüger  <Marcel.Krueger at latex-project.org>
+
+	* ltmath.dtx: Use more consistent default math styles on LuaLaTeX
+
+2022-04-13  Ulrike Fischer <Ulrike.Fischer at latex-project.org>
+
+	* ltxref.dtx:
+	Added starred versions of \ref, \pageref and \Ref
+	  Added expandable version for \pageref and \ref
+	* ifthen.dtx:
+	use new expandable version for \pageref and \ref
+
+2022-05-08  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltshipout.dtx (subsection{Handling the end of job hook}):
+	Handle case where shipout/lastpage is run too early and issue
+	a warning (gh/813)
+
+2022-04-21  Joseph Wright <Joseph.Wright at latex-project.org>
+
+	* ltfinal.dtx (subsection{Lccodes and uccodes}):
+	Support \noexpand in arg. to \MakeUppercase and
+	\MakeLowercase
+
+2022-04-08  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltmath.dtx (subsubsection{The UNSORTED Rest}):
+	Make \openup robust (gh/123)
+
+2022-04-03  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltmarks.dtx: New module to implement new marks mechanism
+
+	* ltpage.dtx (section| command.):
+	Updates to \markboth and \markright to interface with new mark mechanism
+
+	* ltoutput.dtx (subsection{Floats}):
+	Interface with new mark mechanism
+
+	* ltfinal.dtx (subsection{Typesetting parameters}):
+	Integration of new mark management interface
+
+2022-04-01  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltfiles.dtx (section{File Handling}):
+	Process include/excluded hook(s) if an include file is bypassed
+
+	* lthooks.dtx (subsection{Adding or removing hook code}):
+	Add support for generic include/.../excluded hooks
+
+	* ltfilehook.dtx: document include/excluded hooks
+
+2022-03-18  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+
+	* ltcmd.dtx (subsection{Utilities}):
+	Fix \@@_cmd_type_cases:NnnnnF prematurely expanding macros (gh/795).
+
+2022-03-18  Joseph Wright  <joseph.wright at latex-project.org>
+
+	* ltkeys.dtx:
+	Remove \ProcessKeyPackageOptions
+
+2022-03-10  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+
+	* ltfilehook.dtx (subsection{Selecting a file (\cs{set at curr@file})}):
+	Add \set at curr@file at nosearch, to ignore \input at path and \l_file_search_path_seq.
+
+2022-03-10  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltbibl.dtx (section{Bibliography Generation}):
+	Ensure that an empty argument given to \cite generates
+	a warning (gh/790)
+
+2022-02-28  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+
+	* ltvers.dtx (subsection{Declaring an all-new module}):
+	Detect a missing \IncludeInRelease{0000/00/00} in a new module.
+
+2022-02-28  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+
+	* latexrelease.dtx, ltexpl.dtx, ltcmd.dtx:
+	Move most make-harmless redefinitions right after ltexpl.dtx.
+
+2022-02-21  Joseph Wright  <Joseph.Wright at latex-project.org>
+
+        * ltkeys.dtx:
+	More efficient module expansion
+
+2022-02-19  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltcmd.dtx (subsection{User functions}):
+	Added \IfBlankTF and friends to test if a received argument
+	is empty or contains only normal space characters.
+
+2022-02-19  David Carlisle  <David.Carlisle at latex-project.org>
+
+	* utf8ienc.dtx: use \protected definitions.
+	also avoid global definitions for gh/762
+
+2022-02-16  Joseph Wright  <Joseph.Wright at latex-project.org>
+
+        * ltkeys.dtx:
+	Allow for active characters in module argument
+	\DeclareUnknownKeyHandler better than with the "s"
+
+2022-02-15  Joseph Wright  <Joseph.Wright at latex-project.org>
+
+        * ltkeys.dtx:
+        Expand optional module argument in design-level commands
+        Add \DeclareUnknownKeysHandler
+
+2022-02-07  Joseph Wright  <Joseph.Wright at latex-project.org>
+
+	* ltkeys.dtx:
+	Correct definition of .code property
+
+2022-02-05  Joseph Wright  <Joseph.Wright at latex-project.org>
+
+	* ltkeys.dtx:
+	Create key properties at the 2e layer
+	Add .code property
+
+2022-01-25  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltplain.dtx (section{Plain \TeX}):
+	Alter \obeyspaces and \obeylines to use a redirection for special
+	use cases (gh/367)}
+
+2022-01-20  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* doc.dtx (subsection{Keys supported by doc):
+	Fixed key handling for nohyperref and nomulticol (gh/750).
+
+2022-01-15  Joseph Wright  <Joseph.Wright-project.org>
+
+	* ltkeys.dtx:
+        Clear option data in \AtEndOfPackage hook
+
+2022-01-06  Joseph Wright  <Joseph.Wright-project.org>
+
+	* ltexpl.dtx (section{Document-level command names for expl3 functions}):
+	Adjust document-level names for \exp_args:Nc and the like
+
+2021-12-30  Ulrike Fischer <Ulrike.Fischer at latex-project.org>
+
+	* ltmeta.dtx:
+	Adapted bundle name to new name `LaTeX-lab'
+
+2021-12-31  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+
+	* ltcmd.dtx (subsubsection{Showing the definition of a command}):
+	Make \ShowCommand stop for interaction with ltcmd (gh/739)
+
+2021-12-28  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltexpl.dtx (section{Document-level command names for expl3 functions}):
+	Added document-level names for \exp_args:Nc and the like
+	for use with \NewDocumentCommand, etc. (gh/735)
+
+2021-12-27  Marcel Krüger  <Marcel.Krueger at latex-project.org>
+
+	* ltluatex.dtx:
+	Added \newluacmd and \newprotectedluacmd for easy allocation of Lua command ids.
+
+2021-12-13  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltmeta.dtx:
+	First version of this module added implementing an interface to
+	\DocumentMetadata. At the moment the actual code is outside the
+	format and only loaded if the command is called.
+
+2021-12-13  David Carlisle  <David.Carlisle at latex-project.org>
+
+	* utf8ienc.dtx:  Use hex 80 not A0 to test for single byte UTF-8 github/730
+
+2021-12-12  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltoutenc.dtx (subsection{Definitions for the TU encoding}):
+	\DeclareUnicodeAccent now makes the encoding argument implicit
+	as it is already done for other Unicode encoding commands.
+	Also added \DeclareUnicodeCommand and \DeclareUnicodeSymbol (gh/253).
+
+2021-12-12  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* doc.dtx (subsection[Dealing with the change history]):
+	Implement option recordchangedates to show dates  in the change log
+	if that option is used (gh/531).
+
+2021-12-11  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltdirchk.dtx (section{Initialization}):
+	Add comment lines into latex.ltx to indicate temp definitions that
+	are later overwritten (gh/725).
+
+2021-12-10  David Carlisle  <David.Carlisle at latex-project.org>
+
+	* utf8ienc.dtx: Add inputenc UTF-8 support for Digraphs U+01C4-U+01CC
+
+2021-12-09  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* proc.dtx (subsection{The page style}):
+	Support twoside by providing an appropriate footer line (gh/704).
+
+2021-12-08  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* lttextcomp.dtx (section{Sub-encodings}):
+	Describe correctly (I hope) how sub-encodings work for TS1.
+
+2021-11-30  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltexpl.dtx:
+	Added \fpeval, \inteval, \dimeval, and \skipeval (gh711)
+
+2021-11-18  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* All *.dtx: Replaced \StopEventually by \MaybeStop
+
+2021-11-30 Joseph Wright <joseph.wright at latex-project.org>
+
+  * ltclasses.dtx
+	New option handling routine using ltkeys
+
+2021-11-26 Joseph Wright <joseph.wright at latex-project.org>
+
+  * ltkeys.dtx
+	New file to integrate keyval option processing into the kernel
+
+2021-11-17  Marcel Krüger  <Marcel.Krueger at latex-project.org>
+
+	* ltluatex.dtx:
+	Classify [hv]pack_quality callbacks as exclusive
+	Never pass true to the engine for LuaTeX list callbacks
+
+2021-11-15  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* build.lua (textfiles):
+	Dropped a few obsolete documentation files (nobody installs manually these
+	days and the advice given was no longer current).
+
+	* latexchanges.tex:
+	We no longer maintain this file; instead everything is documented in ltnewsXX
+	and in the changes.txt files so we zap this file too because the double book
+	keeping always means one or the other is out of date.
+
+2021-11-14  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* doc.dtx: Replaced doc.dtx with V3 version.
+	The old doc can be reactivated with \usepackage{doc}[=v2].
+	Hyperref usage (on by default) can be turned off with
+        \usepackage[hyperref=false]{doc}.
+	New options etc are documented: use texdoc doc
+	(code documentation only partly done).
+
+2021-11-12  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltxdoc.dtx (section{Configuration file}):
+	Added our default .cfg for extraction.
+	Added option "nocfg" to bypass a system cfg.
+
+#########################
 # 2021-11-15 PL1 Release
 #########################
 
@@ -24,7 +347,7 @@
 # 2021-11-15 Release
 #########################
 
-2021-10-20 Phelype Oleinik  <phelype.oleinik at latex-project.org>
+2021-10-20  Phelype Oleinik  <phelype.oleinik at latex-project.org>
 
 	* ltcmdhooks.dtx (subsubsection{Patching by expansion and redefinition}):
 	Fix patching of commands that contain parameter tokens (gh/697)
@@ -62,7 +385,7 @@
 	* classes.dtx, doc.dtx, makeindx.dtx, preload.dtx, slides.dtx, array.dtx
 	Removed old references to latex.tex or latex.dtx (gh/685)
 
-2021-09-28 Phelype Oleinik  <phelype.oleinik at latex-project.org>
+2021-09-28  Phelype Oleinik  <phelype.oleinik at latex-project.org>
 
 	* ltcmdhooks.dtx (subsection{Patching commands}):
 	Make patching of commands with generic cmd hooks a global operation (gh/674)
@@ -1435,8 +1758,8 @@
 
 	* fontdef.dtx (subsection{Defaults}): Set
 	\shapedefault explicitly to "n" not \updefault
-	\bfdefault set to to "b" not "bx" (but bx for CM fonts)
-	\updefault set to to "up" not "n".
+	\bfdefault set to "b" not "bx" (but bx for CM fonts)
+	\updefault set to "up" not "n".
 	Part of extending the series and shape handling, see ltnews31.
 
 2019-12-17  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
@@ -12007,7 +12330,7 @@
 
 	* unpack2e.ins:
 	Removed unnecessary .drv generation (some are still there)
-	Added the the WITHOUT ANY WARRANTY message to some preambles.
+	Added the WITHOUT ANY WARRANTY message to some preambles.
 
 	* oldgerm.dtx:
 	Moved the driver code in front so that the documentation can be

Modified: trunk/Master/texmf-dist/doc/latex/base/classes.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/clsguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/clsguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/clsguide.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/clsguide.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/cmfonts.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/cyrguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/cyrguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/cyrguide.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/cyrguide.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Added: trunk/Master/texmf-dist/doc/latex/base/doc-code.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/base/doc-code.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/doc-code.pdf	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/doc-code.pdf	2022-06-08 20:41:20 UTC (rev 63514)

Property changes on: trunk/Master/texmf-dist/doc/latex/base/doc-code.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/base/doc-code.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/doc-code.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/base/doc-code.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -0,0 +1,4 @@
+% this will typeset documentation + code
+
+\AtBeginDocument{\AlsoImplementation}
+\input{doc.dtx}


Property changes on: trunk/Master/texmf-dist/doc/latex/base/doc-code.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/base/doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/docstrip.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/encguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/encguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/encguide.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/encguide.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/exscale.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/fix-cm.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/fntguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/fntguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/fntguide.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/fntguide.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -12,7 +12,7 @@
 % 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
+%    https://www.latex-project.org/lppl.txt
 % and version 1.3c or later is part of all distributions of LaTeX
 % version 2008 or later.
 %
@@ -33,16 +33,21 @@
 
 \documentclass{ltxguide}[1995/11/28]
 
-\usepackage{varioref}
 
+\setcounter{totalnumber}{8}
+\setcounter{topnumber}{8}
+
+\usepackage[trace]{fewerfloatpages}
+\usepackage{booktabs,varioref}
+
 \title{\LaTeXe{} font selection}
 
 \author{\copyright~Copyright 1995--2021, \LaTeX\ Project
   Team.\thanks{Thanks to Arash Esbati for documenting the
     newer NFSS features of 2020}\\
-   All rights reserved.}
+  All rights reserved.}
 
-\date{March 2021}
+\date{December 2021}
 
 \begin{document}
 
@@ -160,7 +165,7 @@
 local \TeX{} Users Group, or the international \TeX{} Users Group.
 Addresses and other details can be found at:
 \begin{quote}\small\label{addrs}
-  \texttt{http://www.tug.org/lugs.html}
+  \texttt{https://www.tug.org/lugs.html}
 \end{quote}
 
 
@@ -288,6 +293,9 @@
 e.g., ``demi-bold'' is normally just another name for ``semi-bold'', so
 should get |sb| assigned, etc.
 
+
+\newpage
+
 \NEWdescription{2020/02/02}
 The most common values for the font shape are:
 \begin{center}
@@ -343,27 +351,29 @@
    Overfull \hbox (3.80855pt too wide) in paragraph at lines 314--318
    []\OT1/cmr/m/n/10 Normally [] and [] will be iden-ti-cal,
 \end{verbatim}
-The author commands for fonts set the five attributes:
-\begin{center}
-  \hspace*{-1em}%
-  \begin{tabular}{rcl}
-    \emph{Author command} & \emph{Attribute}
+The author commands for fonts set the five attributes as shown in table~\vref{tab:attributes}.
+\begin{table}[!tbp]
+  \centering
+  \begin{tabular}{@{}r@{\hspace{3pt}}c@{\hspace{1pt}}c@{}}
+    \toprule
+    \multicolumn{1}{c}{\emph{Author command}} & \emph{Attribute}
                           & \emph{Value in} |article| \emph{class} \\
+    \midrule
     |\textnormal{..}| or |\normalfont| & family & |cmr|     \\
                                        & series & |m|       \\
-                                       & shape  & |n|       \\[1pt]
+                                       & shape  & |n|       \\ \midrule%[2pt]
     |\textrm{..}| or |\rmfamily|       & family & |cmr|     \\
     |\textsf{..}| or |\sffamily|       & family & |cmss|    \\
     |\texttt{..}| or |\ttfamily|       & family & |cmtt|    \\
     |\textmd{..}| or |\mdseries|       & series & |m|       \\
-    |\textbf{..}| or |\bfseries|       & series & |bx|      \\[1pt]
+    |\textbf{..}| or |\bfseries|       & series & |bx|      \\ \midrule%[2pt]
     |\textit{..}| or |\itshape|        & shape  & |it|      \\
     |\textsl{..}| or |\slshape|        & shape  & |sl|      \\
     |\textsc{..}| or |\scshape|        & shape  & |sc|      \\
     |\textssc{..}| or |\sscshape|      & shape  & |ssc|     \\
     |\textsw{..}| or |\swshape|        & shape  & |sw|      \\
-    |\textulc{..}| or |\ulcshape|      & shape  & |ulc| (virtual) $\to$ |n|, |it|, |sl| or |ssc| \\
-    |\textup{..}| or |\upshape|        & shape  & |up|  (virtual) $\to$ |n| or |sc|    \\[1pt]
+    |\textulc{..}| or |\ulcshape|      & shape  & |ulc| (virtual) $\to$ |n|, |it|, |sl| or |ssc|     \\
+    |\textup{..}| or |\upshape|        & shape  & | up| (virtual) $\to$ |n| or |sc     |\phantom{, , } \\\midrule%[2pt]
     |\tiny|                            & size   & |5pt|     \\
     |\scriptsize|                      & size   & |7pt|     \\
     |\footnotesize|                    & size   & |8pt|     \\
@@ -373,9 +383,11 @@
     |\Large|                           & size   & |14.4pt|  \\
     |\LARGE|                           & size   & |17.28pt| \\
     |\huge|                            & size   & |20.74pt| \\
-    |\Huge|                            & size   & |24.88pt|
+    |\Huge|                            & size   & |24.88pt| \\
+    \bottomrule
   \end{tabular}
-\end{center}
+  \caption{Author font commands and their effects (article class)}\label{tab:attributes}
+\end{table}
 The values used by these commands are determined by the document class,
 using the parameters defined in Section~\ref{Sec:text.param}.
 
@@ -386,6 +398,10 @@
 turned into \TeX{} font names.  This is described in
 Section~\ref{Sec:install}.
 
+
+\newpage
+
+
 \subsection{Selection commands}
 
 The low-level commands used to select a text font are as follows.
@@ -392,10 +408,10 @@
 
 \begin{decl}
   |\fontencoding| \arg{encoding} \\
-  |\fontfamily|  \arg{family} \\
-  |\fontseries| \arg{series} \\
+  |\fontfamily|  \arg{family} \qquad
+  |\fontseries| \arg{series} \qquad
   |\fontshape| \arg{shape} \\
-  |\fontsize| \arg{size} \arg{baselineskip} \\
+  |\fontsize| \arg{size} \arg{baselineskip} \qquad
   |\linespread| \arg{factor}
 \end{decl}
 
@@ -439,14 +455,14 @@
 The current values of the font attributes are held in internal macros.
 
 \begin{decl}
-  |\f at encoding| \\
-  |\f at family| \\
-  |\f at series| \\
-  |\f at shape|  \\
-  |\f at size| \\
+  |\f at encoding| \quad
+  |\f at family| \quad
+  |\f at series| \quad
+  |\f at shape|  \quad
+  |\f at size| \quad
   |\f at baselineskip| \\
-  |\tf at size| \\
-  |\sf at size| \\
+  |\tf at size| \quad
+  |\sf at size| \quad
   |\ssf at size|
 \end{decl}
 
@@ -482,9 +498,9 @@
 \end{verbatim}
 
 \begin{decl}
-  |\encodingdefault| \\
-  |\familydefault|   \\
-  |\seriesdefault|   \\
+  |\encodingdefault| \qquad
+  |\familydefault|   \qquad
+  |\seriesdefault|   \qquad
   |\shapedefault|
 \end{decl}
 The encoding, family, series and shape of the main body font.  By
@@ -493,8 +509,8 @@
 will change the main body font of the document.
 
 \begin{decl}
-  |\rmdefault| \\
-  |\sfdefault| \\
+  |\rmdefault| \qquad
+  |\sfdefault| \qquad
   |\ttdefault|
 \end{decl}
 The families selected by |\textrm|, |\rmfamily|, |\textsf|, |\sffamily|,
@@ -502,7 +518,7 @@
 |cmtt|.
 
 \begin{decl}
-  |\bfdefault| \\
+  |\bfdefault| \qquad
   |\mddefault|
 \end{decl}
 The series selected by |\textbf|, |\bfseries|, |\textmd| and
@@ -516,12 +532,12 @@
 and the |ssub| size function, see Section~\ref{sec:sizefunct}.
 
 \begin{decl}
-  |\itdefault|  \\
-  |\sldefault|  \\
-  |\scdefault|  \\
-  |\sscdefault| \\
+  |\itdefault|  \qquad
+  |\sldefault|  \qquad
+  |\scdefault|  \qquad
+  |\sscdefault| \qquad
   |\swdefault|  \\
-  |\ulcdefault| \\
+  |\ulcdefault| \qquad
   |\updefault|
 \end{decl}
 \NEWfeature{2020/02/02}
@@ -611,6 +627,8 @@
 as they did in \LaTeX~2.09. We strongly urge you \emph{not} to misuse
 this declaration to invent new font commands.
 
+\newpage
+
 The following example defines |\it| to produce the italic shape of the
 main document font if used in text and to switch to the font that would
 normally be produced by the math alphabet |\mathit| if used in a
@@ -714,13 +732,13 @@
 Section~\ref{Sec:math.commands} explains how to define symbol commands.
 
 \begin{decl}
-  |\mathnormal{<math>}| \\
-  |\mathcal{<math>}| \\
-  |\mathrm{<math>}| \\
-  |\mathbf{<math>}| \\
-  |\mathsf{<math>}| \\
+  |\mathnormal{<math>}| \quad
+  |\mathcal{<math>}| \quad
+  |\mathbf{<math>}| \quad
   |\mathit{<math>}| \\
-  |\mathtt{<math>}|
+  |\mathrm{<math>}| \qquad
+  |\mathsf{<math>}| \qquad
+  |\mathtt{<math>}| 
 \end{decl}
 Each math alphabet is a command which can only be used inside math mode.
 For example, |$x + \mathsf{y} + \mathcal{Z}$| produces
@@ -799,6 +817,8 @@
 \m{version} is a known math version and \m{encoding} is a known encoding
 scheme.
 
+\newpage
+
 This example defines |\baz| for the `normal' math version only:
 \begin{verbatim}
    \SetMathAlphabet{\baz}{normal}{OT1}{cmss}{m}{n}
@@ -868,6 +888,8 @@
 Checks that the command \m{math-alph} is either already a math alphabet
 command or is undefined; and that \m{sym-font} is a symbol font.
 
+\newpage
+
 Example:
 \begin{verbatim}
    \DeclareSymbolFontAlphabet{\mathrm}{operators}
@@ -928,6 +950,8 @@
    \DeclareMathSymbol{\alphld}{\mathalpha}{AMSb}{"0C}
 \end{verbatim}
 
+\newpage
+
 \begin{decl}
   |\DeclareMathDelimiter| \arg{cmd} \arg{type}
                           \arg{sym-font-1} \arg{slot-1}\\
@@ -1021,6 +1045,7 @@
 This section explains how \LaTeX's font attributes are turned into
 \TeX{} font specifications.
 
+
 \subsection{Font definition files}
 
 \NEWdescription{1997/12/01}
@@ -1043,6 +1068,8 @@
 The declarations in the font definition file are responsible for telling
 \LaTeX{} how to load fonts for that encoding/family combination.
 
+
+
 \subsection{Font definition file commands}
 
 \emph{Note}: A font definition file should contain only commands from
@@ -1056,7 +1083,11 @@
   |\ProvidesFile{<file-name>}[<release-info>]|
 \end{decl}
 The file should announce itself with a |\ProvidesFile| command, as
-described in \emph{\clsguide}.  For example:
+described in \emph{\clsguide}.
+
+\newpage
+
+For example:
 \begin{verbatim}
    \ProvidesFile{t1ptm.fd}[1994/06/01 Adobe Times font definitions]
 \end{verbatim}
@@ -2017,6 +2048,8 @@
 they always keep the same shape and do not nicely blend in with the text
 font).
 
+\newpage
+
 The following tables show the macros available.  The next commands are
 `constructed' accents and are built via \TeX{} macros:
 \begin{center}
@@ -2023,6 +2056,9 @@
   \begin{tabular}[t]{@{}ll}
     \verb*|\capitalcedilla A| & \capitalcedilla A \\
     \verb*|\capitalogonek A|  & \capitalogonek A  \\
+  \end{tabular}
+  \quad
+  \begin{tabular}[t]{@{}ll}
     \verb*|\textcircled a|    & \textcircled a
   \end{tabular}
 \end{center}
@@ -2052,12 +2088,21 @@
   \end{tabular}
 \end{center}
 
-Table~\vref{tab:textcomp} contains macros to access text symbols.  Again,
+Table~\vref{tab:textcomp}
+contains the full list of commands to access the text symbols.
+%
+% Tables~\vrefrange{tab:ts1-subset-always}{tab:ts1-subset-9-disable}
+% contain the commands to access the text symbols.
+%
+Again,
 the numbers are the slots in the encoding.
 
-\begin{table}
-\centering\footnotesize
+\iftrue
+\begin{table}[!tp]
+  \centering\footnotesize
+  \renewcommand\arraystretch{1.07}
   \begin{tabular}[t]{@{}lp{1.5em}l@{}}
+    \toprule
     \verb|\textcapitalcompwordmark|  & \textcapitalcompwordmark  & 23 \\
     \verb|\textascendercompwordmark| & \textascendercompwordmark & 31 \\
     \verb|\textquotestraightbase|    & \textquotestraightbase    & 13 \\
@@ -2112,9 +2157,11 @@
     \verb|\textbullet|               & \textbullet               & 136 \\
     \verb|\textcelsius|              & \textcelsius              & 137 \\
     \verb|\textdollaroldstyle|       & \textdollaroldstyle       & 138 \\
-    \verb|\textcentoldstyle|         & \textcentoldstyle         & 139
+    \verb|\textcentoldstyle|         & \textcentoldstyle         & 139 \\
+    \bottomrule
   \end{tabular}\qquad
   \begin{tabular}[t]{lp{1.5em}l}
+    \toprule
     \verb|\textflorin|               & \textflorin               & 140 \\
     \verb|\textcolonmonetary|        & \textcolonmonetary        & 141 \\
     \verb|\textwon|                  & \textwon                  & 142 \\
@@ -2168,12 +2215,371 @@
     \verb|\textthreequarters|        & \textthreequarters        & 190 \\
     \verb|\texteuro|                 & \texteuro                 & 191 \\
     \verb|\texttimes|                & \texttimes                & 214 \\
-    \verb|\textdiv|                  & \textdiv                  & 246
+    \verb|\textdiv|                  & \textdiv                  & 246 \\
+    \null \\
+    \bottomrule
   \end{tabular}
-\caption{Text symbols formerly from the \textsf{textcomp} package}
-\label{tab:textcomp}
+  \caption{Text symbols formerly from the \textsf{textcomp} package}
+  \label{tab:textcomp}
 \end{table}
 
+\fi
+
+The |TS1| encoding contains a rich set of symbols which means that
+several symbols are only available in a few \TeX{} fonts and some, such
+as the capital accents, not available at all but developed as part of
+the reference font implementation.  In reality, many existing fonts
+don't provide a full set of glyphs defined in |TS1| encoding and the
+question arises: ``Which glyphs of the |TS1| encoding are implemented by
+which font?''
+
+\NEWfeature{2021/06/01}
+Fonts can be ordered in sub-encodings with the |\DeclareEncodingSubset|
+macro:
+\begin{decl}
+  |\DeclareEncodingSubset| \arg{encoding}
+                           \arg{font family}
+                           \arg{subset number}
+\end{decl}
+The macro takes 3 mandatory arguments: An \m{encoding} for which a
+subsetting is wanted (currently only |TS1|), the \m{font family} for
+which we declare the subset and finally the \m{subset number} between
+|0| (all of the encoding is supported) and |9| (many glyphs are
+missing).  Hence, it is assumed that some symbols are always available
+by all fonts and each sub-encoding defines macros which become
+unavailable (i.e., they are not provided in the sub-encoding with that
+number and all sub-encodings with higher numbers.)
+
+\begin{table}[tbp]
+  \centering\footnotesize
+  \begin{tabular}[t]{@{}lp{1.5em}l@{}}
+    \toprule
+    \verb|\textquotestraightbase|     & \textquotestraightbase     & 13  \\
+    \verb|\textquotestraightdblbase|  & \textquotestraightdblbase  & 18  \\
+    \verb|\textcapitalcompwordmark|   & \textcapitalcompwordmark   & 23  \\
+    \verb|\textascendercompwordmark|  & \textascendercompwordmark  & 31  \\
+    \verb|\textdollar|                & \textdollar                & 36  \\
+    \verb|\textquotesingle|           & \textquotesingle           & 39  \\
+    \verb|\textasteriskcentered|      & \textasteriskcentered      & 42  \\
+    \verb|\textdagger|                & \textdagger                & 132 \\
+    \verb|\textdaggerdbl|             & \textdaggerdbl             & 133 \\
+    \verb|\textperthousand|           & \textperthousand           & 135 \\
+    \verb|\textbullet|                & \textbullet                & 136 \\
+    \verb|\texttrademark|             & \texttrademark             & 151 \\
+    \verb|\textcent|                  & \textcent                  & 162 \\
+    \verb|\textsterling|              & \textsterling              & 163 \\
+    \verb|\textyen|                   & \textyen                   & 165 \\
+    \verb|\textbrokenbar|             & \textbrokenbar             & 166 \\
+    \bottomrule
+  \end{tabular}\qquad
+  \begin{tabular}[t]{@{}lp{1.5em}l@{}}
+    \toprule
+    \verb|\textsection|               & \textsection               & 167 \\
+    \verb|\textcopyright|             & \textcopyright             & 169 \\
+    \verb|\textordfeminine|           & \textordfeminine           & 170 \\
+    \verb|\textlnot|                  & \textlnot                  & 172 \\
+    \verb|\textregistered|            & \textregistered            & 174 \\
+    \verb|\textdegree|                & \textdegree                & 176 \\
+    \verb|\textpm|                    & \textpm                    & 177 \\
+    \verb|\textparagraph|             & \textparagraph             & 182 \\
+    \verb|\textperiodcentered|        & \textperiodcentered        & 183 \\
+    \verb|\textordmasculine|          & \textordmasculine          & 186 \\
+    \verb|\textonequarter|            & \textonequarter            & 188 \\
+    \verb|\textonehalf|               & \textonehalf               & 189 \\
+    \verb|\textthreequarters|         & \textthreequarters         & 190 \\
+    \verb|\texttimes|                 & \texttimes                 & 214 \\
+    \verb|\textdiv|                   & \textdiv                   & 246 \\
+    \null \\
+    \bottomrule
+  \end{tabular}
+  \caption{Symbols available in all \texttt{TS1} sub-encodings}
+  \label{tab:ts1-subset-always}
+\end{table}
+
+
+
+\begin{table}[!tbp]
+  \centering
+  \begin{tabular}[t]{@{}lll@{}}
+    \toprule
+    \verb*|\textcircled| & \textcircled{} & acc \\
+    \bottomrule
+  \end{tabular}
+  \caption{Symbol unavailable in \texttt{TS1} sub-encoding \texttt{1}
+    and higher}
+  \label{tab:ts1-subset-1-disable}
+\end{table}
+
+
+
+\begin{table}[!tbp]
+  \centering\footnotesize
+  \begin{tabular}[t]{@{}lp{1.5em}l@{}}
+    \toprule
+    \verb|\capitalcedilla|       & \capitalcedilla{}       & acc \\
+    \verb|\capitalogonek|        & \capitalogonek{}        & acc \\
+    \verb|\capitalgrave|         & \capitalgrave{}         & 0   \\
+    \verb|\capitalacute|         & \capitalacute{}         & 1   \\
+    \verb|\capitalcircumflex|    & \capitalcircumflex{}    & 2   \\
+    \verb|\capitaltilde|         & \capitaltilde{}         & 3   \\
+    \verb|\capitaldieresis|      & \capitaldieresis{}      & 4   \\
+    \verb|\capitalhungarumlaut|  & \capitalhungarumlaut{}  & 5   \\
+    \verb|\capitalring|          & \capitalring{}          & 6   \\
+    \verb|\capitalcaron|         & \capitalcaron{}         & 7   \\
+    \verb|\capitalbreve|         & \capitalbreve{}         & 8   \\
+    \verb|\capitalmacron|        & \capitalmacron{}        & 9   \\
+    \verb|\capitaldotaccent|     & \capitaldotaccent{}     & 10  \\
+    \verb|\capitaltie|           & \capitaltie{}           & 27  \\
+    \verb|\newtie|               & \newtie{}               & 28  \\
+    \verb|\capitalnewtie{}|      & \capitalnewtie{}        & 29  \\
+    \verb|\textdblhyphen|        & \textdblhyphen          & 45  \\
+    \verb|\textzerooldstyle|     & \textzerooldstyle       & 48  \\
+    \verb|\textoneoldstyle|      & \textoneoldstyle        & 49  \\
+    \verb|\texttwooldstyle|      & \texttwooldstyle        & 50  \\
+    \verb|\textthreeoldstyle|    & \textthreeoldstyle      & 51  \\
+    \verb|\textfouroldstyle|     & \textfouroldstyle       & 52  \\
+    \verb|\textfiveoldstyle|     & \textfiveoldstyle       & 53  \\
+    \verb|\textsixoldstyle|      & \textsixoldstyle        & 54  \\
+    \verb|\textsevenoldstyle|    & \textsevenoldstyle      & 55  \\
+    \verb|\texteightoldstyle|    & \texteightoldstyle      & 56  \\
+    \verb|\textnineoldstyle|     & \textnineoldstyle       & 57  \\
+    \verb|\textmho|              & \textmho                & 77  \\
+    \verb|\textbigcircle|        & \textbigcircle          & 79  \\
+    \verb|\textlbrackdbl|        & \textlbrackdbl          & 91  \\
+    \verb|\textrbrackdbl|        & \textrbrackdbl          & 93  \\
+    \verb|\textasciigrave|       & \textasciigrave         & 96  \\
+    \verb|\textborn|             & \textborn               & 98  \\
+    \bottomrule
+  \end{tabular}\qquad
+  \begin{tabular}[t]{@{}lp{1.5em}l@{}}
+    \toprule
+    \verb|\textdivorced|         & \textdivorced           & 99  \\
+    \verb|\textdied|             & \textdied               & 100 \\
+    \verb|\textleaf|             & \textleaf               & 108 \\
+    \verb|\textmarried|          & \textmarried            & 109 \\
+    \verb|\textmusicalnote|      & \textmusicalnote        & 110 \\
+    \verb|\texttildelow|         & \texttildelow           & 126 \\
+    \verb|\textdblhyphenchar|    & \textdblhyphenchar      & 127 \\
+    \verb|\textasciibreve|       & \textasciibreve         & 128 \\
+    \verb|\textasciicaron|       & \textasciicaron         & 129 \\
+    \verb|\textacutedbl|         & \textacutedbl           & 130 \\
+    \verb|\textgravedbl|         & \textgravedbl           & 131 \\
+    \verb|\textdollaroldstyle|   & \textdollaroldstyle     & 138 \\
+    \verb|\textcentoldstyle|     & \textcentoldstyle       & 139 \\
+    \verb|\textnaira|            & \textnaira              & 143 \\
+    \verb|\textguarani|          & \textguarani            & 144 \\
+    \verb|\textpeso|             & \textpeso               & 145 \\
+    \verb|\textrecipe|           & \textrecipe             & 147 \\
+    \verb|\textpertenthousand|   & \textpertenthousand     & 152 \\
+    \verb|\textpilcrow|          & \textpilcrow            & 153 \\
+    \verb|\textbaht|             & \textbaht               & 154 \\
+    \verb|\textdiscount|         & \textdiscount           & 156 \\
+    \verb|\textopenbullet|       & \textopenbullet         & 158 \\
+    \verb|\textservicemark|      & \textservicemark        & 159 \\
+    \verb|\textlquill|           & \textlquill             & 160 \\
+    \verb|\textrquill|           & \textrquill             & 161 \\
+    \verb|\textasciidieresis|    & \textasciidieresis      & 168 \\
+    \verb|\textcopyleft|         & \textcopyleft           & 171 \\
+    \verb|\textcircledP|         & \textcircledP           & 173 \\
+    \verb|\textasciimacron|      & \textasciimacron        & 175 \\
+    \verb|\textasciiacute|       & \textasciiacute         & 180 \\
+    \verb|\textreferencemark|    & \textreferencemark      & 184 \\
+    \verb|\textsurd|             & \textsurd               & 187 \\
+    \null \\
+    \bottomrule
+  \end{tabular}
+  \caption{Symbols unavailable in \texttt{TS1} sub-encoding \texttt{2}
+    and higher}
+  \label{tab:ts1-subset-2-disable}
+\end{table}
+
+
+\begin{table}[!tbp]
+  \centering\footnotesize
+  \begin{tabular}[t]{@{}lp{1.5em}l@{}}
+    \toprule
+    \verb|textlangle|                & \textlangle               & 60 \\
+    \bottomrule
+  \end{tabular}\qquad
+  \begin{tabular}[t]{@{}lp{1.5em}l@{}}
+    \toprule
+    \verb|\textrangle|               & \textrangle               & 62 \\
+    \bottomrule
+  \end{tabular}
+  \caption{Symbols unavailable in \texttt{TS1} sub-encoding \texttt{3}
+    and higher}
+  \label{tab:ts1-subset-3-disable}
+\end{table}
+
+
+Thus, the symbols that are available in sub-encoding $x$ are the symbols
+in table~\ref{tab:ts1-subset-always} (always available) and the symbols
+that only become unavailable in sub-encodings $> x$.  The tables
+\vrefrange{tab:ts1-subset-1-disable}{tab:ts1-subset-9-disable} show the symbols that
+become unavailable in the different sub-encodings.  Again, the numbers
+are the slots in the |TS1| encoding, |acc| indicates a `constructed'
+accent.
+
+\newpage
+
+
+
+\begin{table}[!tbp]
+  \centering\footnotesize
+  \begin{tabular}[t]{@{}lp{1.5em}l@{}}
+    \toprule
+    \verb|\textleftarrow|            & \textleftarrow            & 24  \\
+    \verb|\textrightarrow|           & \textrightarrow           & 25  \\
+    \verb|\textuparrow|              & \textuparrow              & 94  \\
+    \verb|\textdownarrow|            & \textdownarrow            & 95 \\
+    \bottomrule
+  \end{tabular}\qquad
+  \begin{tabular}[t]{@{}lp{1.5em}l@{}}
+    \toprule
+    \verb|\textcolonmonetary|        & \textcolonmonetary        & 141 \\
+    \verb|\textwon|                  & \textwon                  & 142 \\
+    \verb|\textlira|                 & \textlira                 & 146 \\
+    \verb|\textdong|                 & \textdong                 & 150 \\
+    \bottomrule
+  \end{tabular}
+  \caption{Symbols unavailable in \texttt{TS1} sub-encoding \texttt{4}
+    and higher}
+  \label{tab:ts1-subset-4-disable}
+\end{table}
+
+
+\begin{table}[!tbp]
+  \centering\footnotesize
+  \begin{tabular}[t]{@{}lp{1.5em}l@{}}
+    \toprule
+    \verb|\textnumero|               & \textnumero               & 155 \\
+    \bottomrule
+  \end{tabular}\qquad
+  \begin{tabular}[t]{@{}lp{1.5em}l@{}}
+    \toprule
+    \verb|\textestimated|            & \textestimated            & 157 \\
+    \bottomrule
+  \end{tabular}
+  \caption{Symbols unavailable in \texttt{TS1} sub-encoding \texttt{5}
+    and higher}
+  \label{tab:ts1-subset-5-disable}
+\end{table}
+
+
+
+\begin{table}[!tbp]
+  \centering\footnotesize
+  \begin{tabular}[t]{@{}lp{1.5em}l@{}}
+    \toprule
+    \verb|\textflorin|               & \textflorin               & 140 \\
+    \bottomrule
+  \end{tabular}\qquad
+  \begin{tabular}[t]{@{}lp{1.5em}l@{}}
+    \toprule
+    \verb|\textcurrency|             & \textcurrency             & 164 \\
+    \bottomrule
+  \end{tabular}
+  \caption{Symbols unavailable in \texttt{TS1} sub-encoding \texttt{6}
+    and higher}
+  \label{tab:ts1-subset-6-disable}
+\end{table}
+
+
+
+\begin{table}[!tbp]
+  \centering\footnotesize
+  \begin{tabular}[t]{@{}lp{1.5em}l@{}}
+    \toprule
+    \verb|\textfractionsolidus|      & \textfractionsolidus      & 47 \\
+    \verb|\textminus|                & \textminus                & 61 \\
+    \bottomrule
+  \end{tabular}\qquad
+  \begin{tabular}[t]{@{}lp{1.5em}l@{}}
+    \toprule
+    \verb|\textohm|                  & \textohm                  & 87 \\
+    \verb|\textmu|                   & \textmu                   & 181 \\
+    \bottomrule
+  \end{tabular}
+  \caption{Symbols unavailable in \texttt{TS1} sub-encoding \texttt{7}
+    and higher}
+  \label{tab:ts1-subset-7-disable}
+\end{table}
+
+
+
+\begin{table}[!tbp]
+  \centering\footnotesize
+  \begin{tabular}[t]{@{}lp{1.5em}l@{}}
+    \toprule
+    \verb|\textblank|                & \textblank                & 32 \\
+    \verb|\textinterrobang|          & \textinterrobang          & 148 \\
+    \bottomrule
+  \end{tabular}\qquad
+  \begin{tabular}[t]{@{}lp{1.5em}l@{}}
+    \toprule
+    \verb|\textinterrobangdown|      & \textinterrobangdown      & 149 \\
+    \null \\
+    \bottomrule
+  \end{tabular}
+  \caption{Symbols unavailable in \texttt{TS1} sub-encoding \texttt{8}
+    and higher}
+  \label{tab:ts1-subset-8-disable}
+\end{table}
+
+
+\begin{table}[!tbp]
+  \centering\footnotesize
+  \begin{tabular}[t]{@{}lp{1.5em}l@{}}
+    \toprule
+    \verb|\texttwelveudash|          & \texttwelveudash          & 21  \\
+    \verb|\textthreequartersemdash|  & \textthreequartersemdash  & 22  \\
+    \verb|\textbardbl|               & \textbardbl               & 134 \\
+    \verb|\textcelsius|              & \textcelsius              & 137 \\
+    \bottomrule
+  \end{tabular}\qquad
+  \begin{tabular}[t]{@{}lp{1.5em}l@{}}
+    \toprule
+    \verb|\texttwosuperior|          & \texttwosuperior          & 178 \\
+    \verb|\textthreesuperior|        & \textthreesuperior        & 179 \\
+    \verb|\textonesuperior|          & \textonesuperior          & 185 \\
+    \null \\
+    \bottomrule
+  \end{tabular}
+  \caption{Symbols unavailable in \texttt{TS1} sub-encoding \texttt{9}}
+  \label{tab:ts1-subset-9-disable}
+\end{table}
+
+
+
+As an example,
+%\begin{verbatim}
+   \verb=\DeclareEncodingSubset{TS1}{foo}{5}=
+%\end{verbatim}
+indicates that the font family |foo| contains the always available
+symbols (table~\vref{tab:ts1-subset-always}) and the ones disabled
+in sub-encodings 6--9, i.e.,
+tables~\vrefrange{tab:ts1-subset-6-disable}{tab:ts1-subset-9-disable}.
+
+As these days many font families are set up to end in |-LF| (lining
+figures), |-OsF| (oldstyle figures), etc. the declaration supports a
+shortcut: if the \m{font family} name ends in |-*| then the star gets
+replaced by these common ending, e.g.,
+\begin{verbatim}
+   \DeclareEncodingSubset{TS1}{Alegreya-*}{2}
+\end{verbatim}
+is the same as writing
+\begin{verbatim}
+   \DeclareEncodingSubset{TS1}{Alegreya-LF}  {2}
+   \DeclareEncodingSubset{TS1}{Alegreya-OsF} {2}
+   \DeclareEncodingSubset{TS1}{Alegreya-TLF} {2}
+   \DeclareEncodingSubset{TS1}{Alegreya-TOsF}{2}
+\end{verbatim}
+If only some are needed then one can define them individually but in
+many cases all four are wanted, hence the shortcut.
+
+
+
+
 \section{If you need to know more \ldots}
 
 \NEWdescription{1996/06/01}

Modified: trunk/Master/texmf-dist/doc/latex/base/graphpap.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ifthen.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/inputenc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/lamport-manual.pdf
===================================================================
(Binary files differ)

Deleted: trunk/Master/texmf-dist/doc/latex/base/latexchanges.pdf
===================================================================
(Binary files differ)

Deleted: trunk/Master/texmf-dist/doc/latex/base/latexchanges.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/latexchanges.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/latexchanges.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,1025 +0,0 @@
-% \iffalse meta-comment
-%
-% Copyright (C) 2015-2021
-% The LaTeX Project and any individual authors listed elsewhere
-% in this file.
-%
-% This file is part of the LaTeX base system.
-% -------------------------------------------
-%
-% It 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 or later.
-%
-% This file has the LPPL maintenance status "maintained".
-%
-% The list of all files belonging to the LaTeX base distribution is
-% given in the file `manifest.txt'. See also `legal.txt' for additional
-% information.
-%
-% The list of derived (unpacked) files belonging to the distribution
-% and covered by LPPL is defined by the unpacking scripts (with
-% extension .ins) which are part of the distribution.
-%
-% \fi
-% Filename: latexchanges.tex
-
-\NeedsTeXFormat{LaTeX2e}
-
-\documentclass{ltxguide}
-
-\usepackage[T1]{fontenc}
-
-\usepackage{url}
-
-\title{Changes to the \LaTeXe{} format}
-
-\author{\copyright~Copyright 2015--2021, \LaTeX\ Project Team.\\
-   All rights reserved.}
-
-\date{2021-06-08}
-
-% a few commands from doc
-\newcommand\Lpack[1]{\mbox{\textsf{#1}}}
-\newcommand\DescribeMacro[1]{\texttt{\string#1}}
-
-\newcommand\pkg[1]{\texttt{#1}}
-\newcommand\cs[1]{\texttt{\textbackslash #1}}
-
-\makeatletter % -- provide command introduced in new release
-              %    so this typesets with an old format
-
-\DeclareTextCommandDefault\textcommabelow[1]
-  {\hmode at bgroup\ooalign{\null#1\crcr\hidewidth\raise-.31ex
-   \hbox{\check at mathfonts\fontsize\ssf at size\z@
-   \math at fontsfalse\selectfont,}\hidewidth}\egroup}
-
-\makeatother
-
-  
-
-\ifx\href\undefined
-  \newcommand\ghissue[1]{github #1}
-  \newcommand\gnatsissue[1]{gnats #1}
-  \newcommand\ltnewsissue[1]{\LaTeX\ News~#1}
-  \newcommand\sxanswer[1]{\url{https://tex.stackexchange.com\slash a\slash #1}}
-  \newcommand\sxquestion[1]{\url{https://tex.stackexchange.com\slash q\slash #1}}
-\else
-  \newcommand\ghissue[1]{%
-    \href{https://github.com/latex3/latex2e/issues/#1}{github #1}}
-  \newcommand\gnatsissue[1]{%
-    \href{https://www.latex-project.org/cgi-bin/ltxbugs2html?pr=latex/#1}{gnats #1}}
-  \newcommand\ltnewsissue[1]{%
-    \href{https://www.latex-project.org/news/latex2e-news/ltnews#1.pdf}{\LaTeX\ News~#1}}
-  \newcommand\sxanswer[1]{%
-     \url{https://tex.stackexchange.com/a/#1}}
-  \newcommand\sxquestion[1]{%
-     \url{https://tex.stackexchange.com/q/#1}}
-\fi
-
-
-\setcounter{tocdepth}{1}  % don't show subsections
-
-
-\begin{document}
-
-\maketitle
-
-\begin{abstract}
-This document describes changes that were made to the
-\LaTeX\ format since the  2014-05-01 \LaTeX\ releases.
-
-
-As announced in \ltnewsissue{22}, the 2015 \LaTeX{} release adopts a new
-policy. Improvements and bug fixes will be made to the format sources,
-with the \Lpack{latexrelease} package being available to revert
-changes to use definitions from an earlier format.
-
-As a summary of changes for a main release will always be available in
-\LaTeX\ News, detailed changes are not repeated in this document,
-but changes in any patch releases will be listed in more
-detail here.
-
-More detailed change logs are available as
-\texttt{changes.txt} in the base distribution, and full code
-  differences may be browsed via the code repository on GitHub
-see for example
-\url{https://github.com/latex3/latex2e/commits/master}.
-\end{abstract}
-
-\tableofcontents
-
-\newpage
-
-%\section{Introduction}
-
-\section{Changes introduced in 2021-06-01 patch~1}
-
-A further refinement to the handling of ``raw'' option lists added
-in the last release, see \ghissue{508}.
-
-Fixes an issue with rollback when \pkg{latexrelease} is loaded by some
-other package (as done for \texttt{platex} (\ghissue{577}).
-
-First aid for \pkg{ulem} and \pkg{varwidth} got added to help them
-along until they get corrected. \pkg{ulem} has a problem with the
-improved definition of \cs{hspace} and \pkg{varwidth} chokes on a
-newly introduced glue item in vertical lists, which is needed for
-paragraph hook handling (\ghissue{583}).
-
-
-\section{Changes introduced in 2021-06-01}
-
-The focus of this release is to provide further important building
-blocks for the future production of reliable tagged PDF output.  Many
-other improvements have been made. Please see \ltnewsissue{33} for an
-overview of the new features and the change log in
-\texttt{changes.txt} for a more detailed list of individual changes.
-
-\section{Changes introduced in 2020-10-01 patch~4}
-
-This patch fixed two bugs in the hook management: if debugging for the
-L3 programming layer was turned on it reported inconsistent use of
-local/global variables. This was a spurious warning but nevertheless
-disconcerting (\ghissue{463}). The other bug was more serious, in some
-situations a wrong value of \verb=\CurrentFile= inside of file-related hooks
-could lead to errors (\ghissue{464}).
-
-We also added the documentation file \texttt{usrguide3.pdf} which
-will become the main home for documenting new features of \LaTeX. At
-this point in time it covers the \Lpack{xparse} functionality that has
-been added to the kernel.
-
-\section{Changes introduced in 2020-10-01 patch~3}
-
-This patch fixed some rollback issues that prevented successful
-rollback to other release levels in some cases.  It also fixed an issue
-with file hooks involving files with explicit paths  (\ghissue{422}).
-
-One important change was to handle hook declarations done in the
-document preamble in a special way, e.g., those done with
-\verb=\AtBeginDocument=. They are now always executed last and are not
-subject to the normal code sorting for hooks, because they are nearly always
-needed to overwrite earlier settings made in packages.
-
-Finally, the NFSS series handling was slightly changed to
-automatically drop surplus ``\texttt{m}''s from series specifications
-when needed (and warn about them when encountered), e.g.,
-``\texttt{mc}'' automatically becomes ``\texttt{c}'' which is the
-official NFSS name for a \emph{medium compact} series (\ghissue{453}).
-This was done to improve the fix in 2020-02-02 PL~5.
-
-\section{Changes introduced in 2020-10-01 patch~2}
-
-This patch fixed the passing of options to packages and classes when
-they are stored in a special place (denoted by \verb=\input at path=)
-instead of their normal location (\ghissue{414}). In that case the
-options got lost.
-
-\section{Changes introduced in 2020-10-01 patch~1}
-
-This patch fixed a file handling issue: to allow for spaces in file
-names quotes were used but this upsets Bib\TeX{} (\ghissue{400}).  In
-addition, two rollback issues got corrected.
-
-\section{Changes introduced in 2020-10-01}
-
-Major enhancements in this release include pre-loading of the
-\Lpack{xparse} package for producing document-level commands with more
-complicated argument signatures and the new hook management system for
-\LaTeX{} documented in \texttt{lthooks-doc.pdf},
-\texttt{ltfilehook-doc.pdf} and \texttt{ltshipout-doc.pdf}.
-
-In addition there have been many smaller fixes and enhancements.
-Please see \ltnewsissue{32} for an overview of the new features and
-the change log in \texttt{changes.txt} for a more detailed list of
-individual changes.
-
-\section{Changes introduced in 2020-02-02 patch~5}
-
-The patch~4 dropped a bit too much in certain situations, e.g., it
-changed a series value of \texttt{semibold} (as used by
-\texttt{autoinst}) to \texttt{seibold}, rendering it useless. So we
-now only correct series values if they are a member of the
-following list: \texttt{ulm}, \texttt{elm}, \texttt{lm}, \texttt{slm},
-\texttt{mm}, \texttt{sbm}, \texttt{bm}, \texttt{ebm}, \texttt{ubm},
-\texttt{muc}, \texttt{mec}, \texttt{mc}, \texttt{msc}, \texttt{msx},
-\texttt{mx}, \texttt{mex} or \texttt{mux}. Here we assume that people
-intended to follow the NFSS convention but somehow got it wrong. So we
-drop one ``m'' and also add a warning that the
-\verb=\DeclareFontShape= declaration in question should be updated
-(\ghissue{293}).
-
-
-\section{Changes introduced in 2020-02-02 patch~4}
-
-In some cases the \texttt{filecontents} environment was opening the
-file for writing without quoting it, so that files with spaces failed
-(\ghissue{284}).
-
-Ensure that \verb=\DeclareFontShape= drops surplus ``m'' in situations
-where an \texttt{.fd} incorrectly specifies \texttt{mc} instead of
-\texttt{c}, etc.\ (\ghissue{289}).
-
-\section{Changes introduced in 2020-02-02 patch~3}
-
-Support the following scenario:
-\begin{verbatim}
-\fontfamily{ptm}\selectfont text  \textbf{\sffamily bold sans text}
-\end{verbatim}
-The default bold series for \texttt{ptm} is \texttt{b} so
-\verb=\textbf= switches to that. The \verb=\sffamily= then tried to
-find \texttt{OT1/cmss/b/n} which doesn't exist instead of first
-altering the series default to use \texttt{bx} as needed for Computer
-Modern Sans Serif. This has now been corrected (\ghissue{277}).
-
-
-\section{Changes introduced in 2020-02-02 patch~2}
-
-Correct \verb=\capitalacute=, etc.\ so that they work in
-\texttt{tabbing} (\ghissue{271}).  Provide \verb=\@defaultfamilyhook= to
-support CJK packages (\ghissue{269}).  Provide a list of \texttt{fontenc}
-loads with their options in \verb=\@fontenc at load@list= so that Babel
-can determine the right \verb=\latinencoding= value (\ghissue{273}).
-
-
-\section{Changes introduced in 2020-02-02 patch~1}
-
-Fixed a misspelled command name that caused trouble (\ghissue{264}).  Make
-\texttt{textcomp} package issue only info messages about glyph
-substitutions (\ghissue{262}) and warn if it attempts to run in an old format (\ghissue{260}).
-
-\section{Changes introduced in 2020-02-02}
-
-Major enhancements in this release include pre-loading \Lpack{expl3}
-to improve startup times, especially with Lua\TeX\ and Xe\TeX, and
-extra features in the font selection mechanism. Please see
-\ltnewsissue{31}  for an overview of the new features and the change
-log in \texttt{changes.txt} for a more detailed list of individual
-changes.
-
-
-\section{Changes introduced in 2019-10-01 patch~3}
-
-Further fixes to the handling of filenames, expand macros (and
-\verb|\jobname| \emph{before} removing \verb|"|, not after.
-
-\section{Changes introduced in 2019-10-01 patch~2}
-
-Further fixes to the handling of filenames, \ghissue{204}: non-ascii
-filenames and filenames with spaces and multiple dots should now work
-in \verb|\includegraphics|.
-
-Reclassify some luatex callbacks.  Other fixes for Issues raised:
-\ghissue{198}, \ghissue{201}, \ghissue{202}, \ghissue{205}.
-
-\section{Changes introduced in 2019-10-01 patch~1}
-
-Adjustments to \verb|\set at curr@file|, and \verb|\@extracolsep|.
-
-Added missing \verb=\else= branch in \texttt{nfssfont} so that
-\verb=\action= is executed if provided.
-
-\section{Changes introduced in 2019-10-01}
-
-Introduced \LaTeX\texttt{-dev} formats for pre testing future \LaTeX{}
-releases. Now there's a \texttt{latex-base-dev} package on CTAN which
-contains a pre-release of the \LaTeXe{} kernel and both \TeX Live and
-MiK\TeX{} include the standard \LaTeX{} executables (\texttt{pdflatex},
-\texttt{lualatex}, etc.) with \texttt{-dev} appended, which use the
-pre-release format.
-
-The handling of Unicode characters was improved by making them safe
-inside \verb|\ref|s and \verb|\label|s, by using \verb|\ifincsname|
-to make these characters safe in these contexts (\ghissue{95}).
-
-In line with the better handling of Unicode characters, file names
-can now contain any Unicode character plus spaces, as these cases
-are now correctly handled by the kernel.
-
-An optional argument was added to the \texttt{filecontents} environment,
-to which a comma-separated list of options can be given. The options
-include \texttt{overwrite} (or \texttt{force}), \texttt{nosearch}, and
-\texttt{noheader} (which has the same effect as the starred form of the
-environment). The environment is now allowed anywhere in the document.
-
-A plethora of \LaTeX{} commands was made robust so that fewer
-\verb|\protect| are needed when using some commands in moving arguments.
-There are a few border cases where it's tricker to make the command
-robust or where it's not worth it to do so, but most reasonable use
-cases are covered. The most notable change was \verb|\begin| and
-\verb|\end|, which are now robust and won't break when used in moving
-arguments.
-
-An extra \verb|\hskip 1sp| was added to \verb|c|-column table cells to
-protect against the presence of an \verb|\unskip| in the table cell
-(\ghissue{102}).
-
-\texttt{U+012F} which is ``i with ogonek'' should produce an
-``i'' and not a ``dotless i''. This has been corrected
-(\ghissue{122}).
-
-The Unicode slots \texttt{27E8} and \texttt{27E9} have been mapped to
-\verb|textlangle| and \verb|textrangle| which is the recommended mapping
-(\ghissue{110}).
-
-Basic ligatures (ff, fi, fl, ffi, ffl, ft, st) can now be input as a
-single unicode character in pdf\TeX, which is useful when copy-pasting
-(\ghissue{154}).
-
-\verb|\InputIfFileExists{foo}{\input{bar}}{}|
-did not load the files \texttt{foo.tex} and \texttt{bar.tex} but
-would load \texttt{bar.tex} twice. This has been corrected (\ghissue{109}).
-
-The \textsf{fncylab} and \textsf{varioref} packages changed \LaTeX's internal
-counter prefix commands \verb|p at ...| so that they would take the counter
-value as an argument instead of just acting as a prefix to them. These
-packages also provided the \verb|\labelformat| macro to change the prefix
-macro and \verb|\Ref| so that using counters defined that way in the
-beginning of sentences would have the proper capitalization. These features
-were added to the \LaTeXe{} kernel.
-
-The kernel now says ``Trying to load\ldots''
-instead of ``Try loading \ldots'' in one of its informal
-messages to match style of similar messages (\ghissue{107}).
-
-\verb|\DeclareErrorFont| would change the font size to 10\,pt which, when
-used in the wrong place, would make incorrect font settings in the document.
-This has now been fixed (\gnatsissue{4399}).
-
-The default action of the file \texttt{nfssfont.tex} was set to produce a
-font table, so that one can simply hit enter instead of having to write
-\verb=\table\bye=.
-
-The \LaTeX{} kernel now provides dummy (empty) definitions for the two
-commands \verb|\conditionally at traceoff| and
-\verb|\conditionally at traceon| from the \texttt{trace} package so they
-can be used by package developers without worrying about them being
-defined or not (\ghissue{164}).
-
-
-
-
-
-\section{Changes introduced in 2018-12-01}
-
-Further additions to the characters supported by default in UTF-8.
-The commands \verb|\guillemetleft| and \verb|\guillemetright| are
-provided as alias for the names based on the Adobe font names
-(\ghissue{65}).
-
-The use of potrusion in tables of contents is suppressed by default,
-see \sxquestion{172785}.
-
-The handling of visible space in verbatim was adjusted for
-\ghissue{69} and \ghissue{70}.
-
-Spaces are removed from the argument passed to BiBTeX, \ghissue{88}.
-
-New commands \verb|\Hwithstroke| and \verb|\hwithstroke| added to T1 encoding support.
-
-The internal box structure for floats is adjusted to preserve box
-levels of split hyperlinks, avoiding a fatal pdftex error. \ghissue{94}.
-
-
-\section{Changes  introduced in 2018-04-01 patch~5}
-Improved support for non ASCII filenames on the command line on
-filesystems using legacy encodings.
-
-Adjusted the new package rollback code so that some edge cases where rollback
-can not be guaranteed become a warning not an error.
-
-\section{Changes  introduced in 2018-04-01 patch~4}
-No changes to the format, but \texttt{docstrip} adjusted so that non-ASCII
-\texttt{.ins} files work with the new UTF-8 defaults.
-
-\section{Changes  introduced in 2018-04-01 patch~3}
-Additional adjustments for GitHub issues \ghissue{34} and \ghissue{38}, adjustment to the
-location of some documentation files, such as \texttt{source2e.tex} to
-be installed in the documentation sources not the default \TeX\ input
-tree.
-
-
-\section{Changes  introduced in 2018-04-01 patch~2}
-Additional adjustments for GitHub issues  \ghissue{32} and  \ghissue{33}.
-
-\section{Changes  introduced in 2018-04-01 patch~1}
-Make \verb|\UseRawInputEncoding| and \Lpack{latexrelease} reset \verb|\inputencodingname|
-when disabling the UTF-8 input handling.
-
-\section{Changes  introduced in 2018-04-01}
-Further details of changes at this release are given in \ltnewsissue{28}, but in brief
-the main changes are as listed below.
-
-The default encoding for files has been changed to UTF-8.
-
-A new possibility to refer to older versions of packages has been added.
-
-New commands previously available in \Lpack{remreset} and
-\Lpack{chngcntr} packages for controlling counters have been added.
-
-The definition of \verb|\@ifundefined| has been refined to use the e-\TeX \verb|\ifcsname|
-primitive when available, and to avoid defining the command being tested to be \verb|\relax|
-in the case that it was previously undefined.
-
-\section{Changes  introduced in 2017-04-15}
-Optionally, \LaTeX{} format and package dates may use ISO style dates with
-\texttt{-}  rather than \texttt{/}.
-
-For Unicode \TeX{}s, made further adjustments to the composite accent
-code in \texttt{tuenc.def}, and further updates tracking changes in
-Lua\TeX, now at 1.04.
-
-Previously defining an encoding-specific composite with an undeclared
-accent (or an accent declared later) gave no error, but did nothing useful.
-\LaTeX\ will now detect this and give the accent command a default definition
-as an error, allowing the declared composite to work as intended.
-
-The definition of \verb|\-| is adjusted to match the comments in
-\gnatsissue{3855} to accommodate non standard settings of \verb|\hyphenchar|.
-
-In parboxes and similar settings, \verb|\lineskiplimit| is now
-reset (to the existing default value, \verb|\normallineskiplimit|).
-See \sxanswer{359934}.
-
- The code for \verb|\newpage| has been adjusted to add a test on the value of
-\verb|\prevdepth| so that the depth of the last line is preserved in
-forced page breaks.
-
-\section{Changes  introduced in 2017/01/01 patch~3}
-Emergency patch to correct a typo in a change introduced in patch~2.
-
-\section{Changes  introduced in 2017/01/01 patch~2}
-More adjustments for TU encoding, allowing for characters missing in
-common system fonts. Additional \texttt{fd} files
-for Latin Modern variants are included in the documented sources.
-
-\section{Changes  introduced in 2017/01/01 patch~1}
-Fixes to TU encoding definitions for Lua\TeX\ and Xe\TeX.
-
-\section{Changes  introduced in 2017/01/01}
-
-A new test is added during format making that e\TeX\ extensions are
-available. As noted in \LaTeX\ news, e\TeX\ will now be required to
-build \LaTeX.
-
-Further updates tracking changes for Lua\TeX~1.0.
-
-The definition of \verb|\showhyphens| is changed in formats built
-with Xe\TeX, as the original version, inherited from plain \TeX\ does
-not work with Xe-\TeX.
-
-Changes to the default encoding used by Lua\TeX\ and Xe\TeX\ formats to
-be TU (Unicode) rather than OT1 (7 bit legacy \TeX\ encoding).
-
-\section{Changes  introduced in 2016/03/31 patch~3}
-Fixes to \verb|\newinsert| and \verb|\extrafloats|.
-
-\section{Changes  introduced in 2016/03/31 patch~2}
-Adjustments to \verb|\c{g}| in OT1 encoding.
-
-\section{Changes  introduced in 2016/03/31 patch~1}
-Adjust the upper limit for Character Class allocation in Xe-\TeX\ to
-4096 to match a change in Xe-\TeX.
-
-\section{Changes  introduced in 2016/03/31}
-Modify picture mode as suggested in latex/4452 to avoid leaders of
-almost zero length.
-
-Modify the checks in \verb|\DeclareMathSymbol| and related commands
-so that they do not give errors with new Lua\TeX\ releases.
-
-\section{Changes  introduced in 2016/02/01}
-Adjustments to Lua\TeX\ support to match changes to the Lua\TeX\ engine,
-and to the character class allocation in Xe\TeX.
-
-Load Unicode data from new generic \texttt{unicode-data} distribution.
-
-\section{Changes  introduced in 2015/10/01 patch~2}
-
-This release fixes the behavior of the allocation mechanism if the switch
-from the standard to extended pool takes place within a group.
-
-\section{Changes  introduced in 2015/10/01 patch~1}
-This release allows \Lpack{latexrelease} to revert the
-Lua\TeX{}-specific
-changes, in particular fixing an incorrect date in part of the mechanism and
-adding a method to disable callback management entirely.
-
-\section{Changes  introduced in \LaTeX\ 2015/10/01}
-
-\subsection{LuaTeX allocation}
-Almost all changes at this release relate to incorporating allocation macros for luatex into the format
-as done for etex and xetex in 2015/01/01. For details see |ltluatex.dtx| or \ltnewsissue{22}.
-|ltluatex.dtx| now forms a new chapter (N) in the documented sources, |source2e.tex|.
-
-
-\subsection{Increased number of floats}
-The default float list has been increased from 18 to 52 registers if
-e\TeX\ is available.
-The list can be increased further using |\extrafloats| however this
-default allocation uses classic registers below 256 so the registers are
-also available for |\newinsert| as described below.
-
-\subsection{Improved \texttt{\textbackslash newinsert}}
-The command |\newinsert| has been extended to take registers from the lists of free float
-registers once the classic register allocation is used up. This should make it highly unlikely
-to get ``no room'' errors on register allocation assuming the format is used with
-an e-\TeX\ based \TeX\ engine.
-
-\subsection{New accent, \texttt{\textbackslash textcommabelow} (pr/4414)}
-The command |\textcommabelow| has been added. This is mainly intended for Romanian letters
-\textcommabelow{S}\,\textcommabelow{s}\,\textcommabelow{T}\,\textcommabelow{t}.
-
-\subsection{Unicode 8}
-The file |unicode-letters.def| used to initialize character data in
-Unicode \TeX\ variants has been regenerated from data files updated
-to Unicode~8.
-
-\section{Changes  introduced in 2015/01/01 patch~2}
-There were no changes to the format at this release, but the sources were fixed to fix bug latex/4434
-affecting bottom float positioning if the \Lpack{latexrelease} package was used.
-
-\section{Changes  introduced in 2015/01/01 patch~1}
-This release re-introduces the ``Patch Level'' scheme for identifying
-releases between main ``dated'' releases. Early \LaTeXe\ releases
-included a mechanism whereby updates could be provided by a
-\emph{patch
-  file}. This was mainly intended to allow updates to be made without
-downloading the full sources again, which was an important
-consideration with download speeds and costs at the time.
-
-The new mechanism incorporates any changes directly into the sources,
-but having the patch level identified in the banner allows the
-\LaTeX\ release to be identified, even if (as in this case) most of the
-changes do not affect the format but affect other base packages such
-as \Lpack{latexrelease} and \Lpack{inputenc}. The patch level is shown
-in the banner at the start of the job, but does not affect the date
-handling of the |\IncludeInRelease| mechanism.
-
-Apart from re-arranging the version banner, the only change in the
-format is that |\newtoks| was accidentally defined twice, using the
-old and new allocation scheme described in Section \ref{e at alloc}.
-The old definition is now only in the \Lpack{latexrelease} package,
-for use when emulating old formats.
-
-
-
-
-\section
-[Changes between  \LaTeX\ releases 2014/05/01 and 2015/01/01]
-{Changes between \LaTeX\ releases 2014/05/01 and 2015/01/01\footnote{Much of this text
-is taken from \Lpack{fixltx2e} package which was formerly used to make such changes available separately.}}
-
-\subsection{Support for \LaTeX\ version changes}
-\DescribeMacro{\includeInRelease}\arg{date}\oarg{date}\arg{label}\arg{message}\arg{code}
-
-\smallskip
-
-The |\includeInRelease| command has been added to support backward and
-forward compatibility for the \LaTeX\ format. It supports the
-declaration of conditional code that can be loaded based on options
-given to the \Lpack{latexrelease} package. Its use is described in
-detail in the \Lpack{latexrelease} package documentation.
-
-\subsection{New Allocation Code\label{e at alloc}}
-Previously |\newcount| and related commands were based on classic TeX
-and only allocated in the range 0--255. This was extended (in
-different ways) for e-\TeX\ in the |etex| package and in the
-|xelatex.ini| and |lualatex.ini| files used in those formats. Related
-to this the number of boxes allocated to store floats was
-limited. This was extended to a certain extent in the |morefloats|
-package (by Don Hosek and H.-Martin Muench) but the new allocation
-incorporates float allocation directly and supports much larger float
-lists using the extended registers.
-
-The new code allocates registers in the full extended range (
-$2^{15}-1$ for etex and xelatex, $2^{16}-1$ for lualatex.
-In addition a new command |\extrafloats| is provided.
-
-\DescribeMacro{\extrafloats}\arg{number}
-\smallskip
-
-This allocates additional registers for the \LaTeX\ float system to
-hold figures and tables etc. Similar functionality has been
-available via the \Lpack{morefloats} package but this is a different
-implementation using extended e-\TeX\ registers when available so
-allows many more registers to be reserved for floats as they are
-allocated from a pool of 32 or 64 thousand rather than 256 registers,
-depending on the engine in use.
-
-\DescribeMacro{\newmarks}\arg{command}
-\smallskip
-
-e-\TeX\ only, previously available via the \Lpack{etex} package.
-Allocates commands to use the extended  e-\TeX\ mark mechanism.
-
-\DescribeMacro{\newXeTeXintercharclass}\arg{command}
-\smallskip
-
-Xe-\TeX\ only, previously in the Xe-\LaTeX\ format, but added via
-|xelatex.ini| not part of the core release.
-Allocates commands to use the Xe-\TeX\ character class mechanism.
-
-
-\subsection{e-\TeX\ tracing if available}
-|\loggingall| (Usually used via |\tracingall|) is extended to enable
-additional e-\TeX\ tracing if e-\TeX\ is available. (|\tracingall|
-extension has been available as part of the |etex| package previously).
-
-Also based on code from the |etex| package, a command |\tracingnone|
-is added to reverse the effects of |\tracingall| and turn off all primitive
-\TeX\ tracing. A new command |\hideoutput| has been  added which resets the
-tracing parameters set by |\showoutput|.
-
-
-
-
-\subsection{\texttt{\textbackslash textsubscript} not defined in
-   latex.ltx (pr/3492)}
-
-\begin{verbatim}
->>Number:         3492
->>Category:       latex
->>Synopsis:       \textsubscript not defined in latex.ltx
->>Arrival-Date:   Tue Jan 14 23:01:00 CET 2003
->>Originator:     Ionel Mugurel Ciobica
-
-I use \textsubscript much more often than \textsuperscript, and
-\textsubscript it is not defined in latex.ltx. Could you please
-consider including the definition of \textsubscript in the latex.ltx
-for the next versions of LaTeX.    Thank you.
-\end{verbatim}
-
-\subsection{\texttt{\textbackslash @} discards spaces when moving
-            (pr/3039)}
-
-\begin{verbatim}
->>Number:         3039
->>Category:       latex
->>Synopsis:       \@ discards spaces when moving
->>Arrival-Date:   Sat May 22 09:01:06 1999
->>Originator:     Donald Arseneau
->>Description:
-The \@ command expands to \spacefactor\@m in auxiliary files,
-which then ignores following spaces when it is reprocessed.
-\end{verbatim}
-
-\subsection{1-col fig can come before earlier 2-col fig
-           (pr/2346)}
-
-\begin{verbatim}
->>Number:         2346
->>Category:       latex
->>Synopsis:       2-col: 1-col fig can come before earlier 2-col fig
->>Arrival-Date:   Wed Dec 18 15:41:07 1996
->>Originator:     bil kleb
->>Description:
-as documented in Lamport's book, p. 198, concerning figure
-placement, "a figure will not be printed before an earlier
-figure, and a table will not be printed before an earlier
-table."  however, there is a footnote stating, "However,
-in two-column page style, a single-column figure can come before
-an earlier double-column figure, and vice versa."
-
-This twocolumn behavior is undesirable---at least by me and
-most professional organizations i publish in.  ed snyzter developed
-a hack fix for 2.09 several years ago which links the two
-counters, but i have not run across a similar "fix" for 2e...
-\end{verbatim}
-
-Originally fixed in package \Lpack{fix2col} which was merged into
-this package. Documentation and code from this package have been
-merged into this file.
-
-\subsubsection{Notes on the Implementation Strategy}
-
-The standard output routine maintains two lists of floats that have
-been `deferred' for later consideration. One list for single column
-floats, and one for double column floats (which are always
-immediately put onto their deferred list). This mechanism means
-that \LaTeX\ `knows' which type of float is contained in each box
-by the list that it is processing, but having two lists means
-that there is no mechanism for preserving the order between the
-floats in each list.
-
-The solution to this problem consists of two small changes to
-the output routine.
-
-Firstly, abandon the `double column float list' |\@dbldeferlist|
-and change every command where it is used so that instead the
-same |\@deferlist| is used as for single column floats.
-That one change ensures that double and single column floats
-stay in the same sequence, but as \LaTeX\ no longer `knows'
-whether a float is double or single column, it will happily
-insert a double float into a single column, overprinting the
-other column, or the margin.
-
-The second change is to provide an alternative mechanism for
-recording the two column floats. \LaTeX\ already has a compact
-mechanism for recording float information, an integer count register
-assigned to each float records information about the `type' of float
-`figure', `table' and the position information `htp' etc.
-
-The type information is stored in the `high' bits, one bit position
-(above `32') allocated to each float type. The `low' bits store
-information about the allowed positions, one bit each allocated for
-|h t b p|.  In the \LaTeX2.09 system, the bit corresponding to `16'
-formed a `boundary' between these two sets of information, and it
-was never actually used by the system. Ed Sznyter's
-\Lpack{fixfloats} package not unreasonably used this position to
-store the double column information, setting the bit for double
-column floats. Then at each point in the output routine at which a
-float is committed to a certain region, an additional check must be
-made to check that the float is (or is not) double column. If it
-spans the wrong number of columns it is deferred rather than being
-added.
-
-Unfortunately the bit `16' is not available in \LaTeXe. It is used
-to encode the extra float position possibility `|!|' that was added
-in that system. It would be possible to use position `32' and to
-move the flags for `table', `figure',\ldots\ up one position, to
-start at 64, but this would mean that in principle one less float
-type would be supported, and more importantly is likely to break
-any other packages that assume anything about the output routine
-internals. So here I instead use another mechanism for flagging
-double column floats: By default all floats have depth 0pt.
-This package arranges that double column ones have depth 1sp.
-This information may then be used in the same manner as in
-the \Lpack{fixfloats} package, to defer any floats that are not of
-the correct column spanning type.
-
-
-
-\subsection{Infinite glue found (pr/4023 and pr/2346)}
-
-The fix for pr/2346 did not work as intended when used in conjunction
-with |\enlargethispage| as the latter introduced an infinite negative
-glue at the bottom of the page. That in turn make a |\vsplit|
-operation to get at the column marks invalid.
-
-\subsection{Wrong header for twocolumn (pr/2613)}
-
-\begin{verbatim}
->>Number:         2613
->>Category:       latex
->>Synopsis:       wrong headline for twocolumn
->>Arrival-Date:   Mon Sep 22 16:41:09 1997
->>Originator:   Daniel Reischert
->>Description:
-When setting the document in two columns
-the headline shows the top mark of the second column,
-but it should show the top mark of the first column.
-\end{verbatim}
-
-Originally fixed in package \Lpack{fix2col} which was merged into
-this package. Documentation and code from this package have been
-merged into this file.
-
-\subsubsection{Notes on the Implementation Strategy}
-
-The standard \LaTeX\ twocolumn system works internally by making
-each column a separate `page' that is passed independently to \TeX's
-page breaker. (Unlike say the \Lpack{multicol} package, where all
-columns are gathered together and then split into columns later,
-using |\vsplit|.) This means that the primitive \TeX\ marks that are
-normally used for header information, are globally reset after the
-first column. By default \LaTeX\ does nothing about this.
-A good solution is provided by Piet van Oostrum (building on earlier
-work of Joe Pallas) in his \Lpack{fixmarks} package.
-
-After the first column box has been collected the mark information
-for that box is saved, so that any |\firstmark| can be
-`artificially' used to set the page-level marks after the second
-column has been collected. (The second column |\firstmark| is not
-normally required.) Unfortunately \TeX\ does not provide a direct
-way of knowing if any marks are in the page, |\firstmark| always has a
-value from previous pages, even if there is no mark in this page.
-The solution is to make a copy of the box and then |\vsplit| it
-so that any marks show up as |\splitfirstmark|.
-
-The use of |\vsplit| does mean that the output routine will globally
-change the value of |\splitfirstmark| and
-|\splitbotmark|. The \Lpack{fixmarks} package goes to some trouble
-to save and restore these values so that the output routine does
-\emph{not} change the values. This part of \Lpack{fixmarks} is not
-copied here as it is quite costly (having to be run on every page) and
-there is no reason why anyone writing code using |\vsplit| should
-allow the output routine to be triggered before the split marks have
-been accessed.
-
-
-
-\subsection{\texttt{\textbackslash setlength} produces error if
-  used with registers like \texttt{\textbackslash dimen0} (pr/3066)}
-
-\begin{verbatim}
->>Number:         3066
->>Category:       latex
->>Synopsis:       \setlength{\dimen0}{10pt}
->>Arrival-Date:   Tue Jul  6 15:01:06 1999
->>Originator:     Heiko Oberdiek
->>Description:
-The current implementation of \setlength causes an error,
-because the length specification isn't terminated properly.
-More safe:
-\def\setlength#1#2{#1=#2\relax}
-\end{verbatim}
-
-\subsection{Fewer fragile commands}
-
-\begin{verbatim}
->>Number:         3816
->>Category:       latex
->>Synopsis:       Argument of \@sect has an extra }.
->>Arrival-Date:   Sat Oct 22 23:11:01 +0200 2005
->>Originator:     Susanne Wunsch
-
-Use of a \raisebox in \section{} produces the error message
-mentioned in the subject.
-
-PR latex/1738 described a similar problem, which has been solved
-10 years ago. Protecting the \raisebox with \protect solved my
-problem as well, but wouldn't it make sense to have a similar fix
-as in the PR?
-
-It is particularly confusing, that an unprotected \raisebox in a
-\section*-environment works fine, while in a \section-environment
-produces error.
-\end{verbatim}
-
-While not technically a bug, in this day and age there are few
-reasons why commands taking optional arguments should not be robust.
-
-\subsubsection{Notes on the implementation strategy}
-
-Rather than changing the kernel macros to be robust, we have decided
-to add the macro \DescribeMacro{\MakeRobust}|\MakeRobust| in
-\Lpack{fixltx2e} so that users can easily turn fragile macros into
-robust ones. A macro |\foo| is made robust by doing the simple
-|\MakeRobust{\foo}|. \Lpack{fixltx2e} makes the following kernel
-macros robust: |\(|, |\)|, |\[|, |\]|,
- |\makebox|, |\savebox|,
-|\framebox|, |\parbox|, |\rule| and |\raisebox|.
-
-\ldots TODO \ldots  fleqn vesion of |\[\]|
-
-\subsection{\texttt{\textbackslash addpenalty} ruins flush-bottom (pr/3073)}
-
-\begin{verbatim}
->>Number:         3073
->>Category:       latex
->>Synopsis:       \addpenalty ruins flush-bottom
->>Arrival-Date:   Sat Jul 17 05:11:05 1999
->>Originator:     Donald Arseneau
->>Description:
-Just to keep in mind for further development eh?
-A page break at an \addpenalty after \vspace does *not*
-give a flush-bottom page.  (The intent of \addpenalty is
-apparently just to preserve the flush bottom by putting
-the breakpoint `above' the skip.)
-\end{verbatim}
-
-\subsection{Within counters only reset next level down (pr4393)}
-
-This is actually implicitly documented behavior in the \LaTeX{}
-Manual that states that |\stepcounter| resets all counters marked
-``within''. However it means that if, for example, theorems are
-numbered within sections and you start a new chapter in a book, the
-section counter is reset to zero but the theorem counter is not
-until the first section appears. Thus a theorem directly within the
-chapter body (without a new section) would show an incremented
-number relative to the last theorem of the previous chapter.
-
-
-For this reason we are now resetting all levels of within in one go
-even if that means that some of these resets may happen several times
-unnecessarily.
-
-
-\subsection{Check the optional arguments of floats}
-
-By default LaTeX silently ignores unknown letters in the optional
-arguments of floats. |\begin{figure}[tB]| the |B| is ignored so it
-acts like |\begin{figure}[t]| However |\begin{figure}[B]| does
-\emph{not} act like |\begin{figure}[]| as the check for an empty
-argument, or unsupplied argument, is earlier. |[]| causes the
-default float placement to be used, but |[B]| means that \emph{no}
-float area is allowed and so the float will not be placed until the
-next |\clearpage| or end of document, no warning is given.
-
-This package adds a check on each letter, and if it not one of
-|!tbhp| then an error is given and the code acts as if |p| had been
-used, so that the float may be placed somewhere.
-
-\subsection{\texttt{\textbackslash DeclareMathSizes} only take pts.
-    (pr/3693)}
-
-\begin{verbatim}
->>Number:         3693
->>Category:       latex
->>Synopsis:       \DeclareMathSizes only take pts.
->>Arrival-Date:   Fri Jun 11 16:21:00 CEST 2004
->>Originator:     Morten Hoegholm
-
-The last three arguments of \@DeclareMathSizes cannot take a dimension
-as argument, making it inconsistent with the rest of the font changing
-commands and itself, as the second argument can take a dimension
-specification.
-\end{verbatim}
-
-\subsection{No hyphenation in first word after float environment (pr/3498)}
-
-\begin{verbatim}
->>Number:         3498
->>Category:       latex
->>Synopsis:       No hyphenation in first word after float environment
->>Arrival-Date:   Thu Jan 30 13:21:00 CET 2003
->>Originator:    Harald Harders
-
-If a float environment (figure, table) is written within a paragraph,
-the first word after the environment is not hyphenated.
-\end{verbatim}
-
-\subsection{\texttt{\textbackslash fnsymbol} should use text symbols
-    (pr/3400)}
-
-\begin{verbatim}
->>Number:         3400
->>Category:       latex
->>Synopsis:       \fnsymbol should use text symbols if possible
->>Arrival-Date:   Fri Jan 04 20:41:00 CET 2002
->>Originator:     Walter Schmidt
-
-The \fnsymbol command can be used in both text and math
-mode.  The symbols produced are, however, always taken from
-the math fonts.  As a result, they may not match the text
-fonts, even if the symbols are actually available, for
-instance from the TS1 encoding.  Since \fnsymbol is
-primarily used for footnotes in text, this should be fixed,
-IMO.
-\end{verbatim}
-
-
-
-
-
-\subsection{\texttt{\textbackslash footnotemark}[x] crashes with fixltx2e.sty
-   (pr/3752)}
-
-\begin{verbatim}
->>Number:         3752
->>Category:       tools
->>Synopsis:       feature \footnotemark[x] crashes with fixltx2e.sty
->>Arrival-Date:   Fri Dec 17 10:11:00 +0100 2004
->>Originator:     Stefan Pofahl
-
- If I use /fnsymbol together with fixltx2e.sty I can not use
- optional parameter [num]
- \footnotemark[1] is not showing the mark number 1 but
- the mark \value{footnote}.
-\end{verbatim}
-This bug was related to pr/3400, where |\@fnsymbol| was made robust.
-
-\subsubsection{Notes on the implementation strategy}
-
-Pr/3400 made |\@fnsymbol| decide between text-mode and math-mode,
-which requires a certain level of robustness somewhere as the
-decision between text and math must be made at typesetting time and
-not when inside |\protected at edef| or similar commands. One way of
-dealing with this is to make sure the value seen by |\@fnsymbol| is
-a fully expanded number, which could be handled by code such as
-\begin{verbatim}
-\def\fnsymbol#1{\expandafter\@fnsymbol
-  \expandafter{\the\csname c@#1\endcsname}}
-\end{verbatim}
-This would be a good solution if everybody used the high level
-commands only by writing code like |\fnsymbol{footnote}|. Unfortunately
-many classes (including the standard classes) and packages use the
-internal forms directly as in |\@fnsymbol\c at footnote| so the easy
-solution of changing |\fnsymbol| would break code that had worked for
-the past 20~years.
-
-Therefore the implementation here makes |\@fnsymbol| itself a
-non-robust command again and instead uses a new robust command
-\DescribeMacro{\TextOrMath}|\TextOrMath|, which will take care of
-typesetting either the math or the text symbol. In order to do so,
-we face an age old problem and unsolvable problem in \TeX: A
-reliable test for math mode that doesn't destroy
-kerning. Fortunately this problem can be solved when using e\TeX\ so
-if you use this as engine for your \LaTeX\ format, as recommended by
-the \LaTeX\ Project, you will get a fully functioning |\TextOrMath|
-command with no side effects. If you use regular \TeX\ as engine for
-your \LaTeX\ format then we have to choose between the lesser of two
-evils: 1)~breaking ligatures and preventing kerning or 2)~face the
-risk of choosing text-mode at the beginning of an alignment cell,
-which was supposed to be math-mode. We have decided upon 1) as is
-customary for regular robust commands in \LaTeX.
-
-
-
-\end{document}

Modified: trunk/Master/texmf-dist/doc/latex/base/latexrelease.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/latexsym.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/lb2.err
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/lb2.err	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/lb2.err	2022-06-08 20:41:20 UTC (rev 63514)
@@ -419,7 +419,7 @@
 2006/04 & Jens Mandavid & 121 \\
 2006/10 & Ralf Heckmann & 61  \\
 2008/04 & --- \\
-\ldots & Termin einer weiteren Verlosung offen
+\ldots & keine weitere Verlosung
 %2008/10 & \\
 \end{tabular}
 \end{center}

Modified: trunk/Master/texmf-dist/doc/latex/base/lb2.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/letter.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/lgc2.err
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/lgc2.err	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/lgc2.err	2022-06-08 20:41:20 UTC (rev 63514)
@@ -10,7 +10,7 @@
 %
 % The current version of this file can be found at:
 %
-%    https://www.latex-project.org/guides/books.html
+%    https://www.latex-project.org/help/books
 %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -351,12 +351,12 @@
 you own by changing the configuration in the file \texttt{\jobname.cfg}.
 
 \begin{center}
-  \Large \bfseries  To Err is Human --- Bug Contest
+  \Large \bfseries  To Err is Human --- Bug Contest (no longer open)
 \end{center}
 
 Any mistake found and reported is a gain for all readers of our book.
-For this reason Addison-Wesley and the authors offer a prize (for 6
-periods) to the eligible person who finds the largest
+For this reason Addison-Wesley and the authors offer a prize to the
+eligible person who finds the largest
 number of bugs during that period (in case of a draw a random choice
 will be made between all those with the largest number of findings).
 A person can receive at most one prize, ever; errors found by any of
@@ -378,7 +378,7 @@
 Contest period ends & Winner \\[4pt]
 2008/05 & Milan Vujtek            &  16 suggestions\\
 2010/05 &                         & \\
-\ldots
+\ldots  & contest no longer open
 \end{tabular}
 \end{center}
 \end{list}

Modified: trunk/Master/texmf-dist/doc/latex/base/lgc2.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/lppl.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltcmdhooks-code.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltcmdhooks-doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltcmdhooks-doc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltcmdhooks-doc.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltcmdhooks-doc.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -2,5 +2,6 @@
 
 \AtBeginDocument{\OnlyDescription
                  \let\tableofcontents\relax
+                  \RenewCommandCopy\MaybeStop\StopEventually
                  }
 \input{ltcmdhooks.dtx}

Modified: trunk/Master/texmf-dist/doc/latex/base/ltfilehook-code.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltfilehook-doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltfilehook-doc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltfilehook-doc.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltfilehook-doc.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,5 +3,6 @@
 
 \AtBeginDocument{\OnlyDescription
 %                 \let\tableofcontents\relax
+                  \RenewCommandCopy\MaybeStop\StopEventually
                  }
 \input{ltfilehook.dtx}

Modified: trunk/Master/texmf-dist/doc/latex/base/lthooks-code.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/lthooks-doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/lthooks-doc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/lthooks-doc.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/lthooks-doc.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,5 +3,6 @@
 
 \AtBeginDocument{\OnlyDescription
 %                 \let\tableofcontents\relax
+                  \RenewCommandCopy\MaybeStop\StopEventually
                  }
 \input{lthooks.dtx}

Modified: trunk/Master/texmf-dist/doc/latex/base/ltluatex.pdf
===================================================================
(Binary files differ)

Added: trunk/Master/texmf-dist/doc/latex/base/ltmarks-code.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/base/ltmarks-code.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltmarks-code.pdf	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltmarks-code.pdf	2022-06-08 20:41:20 UTC (rev 63514)

Property changes on: trunk/Master/texmf-dist/doc/latex/base/ltmarks-code.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/base/ltmarks-code.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltmarks-code.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/base/ltmarks-code.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -0,0 +1,5 @@
+% This will typeset documentation + code
+%
+
+\AtBeginDocument{\AlsoImplementation}
+\input{ltmarks.dtx}


Property changes on: trunk/Master/texmf-dist/doc/latex/base/ltmarks-code.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/base/ltmarks-doc.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/base/ltmarks-doc.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltmarks-doc.pdf	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltmarks-doc.pdf	2022-06-08 20:41:20 UTC (rev 63514)

Property changes on: trunk/Master/texmf-dist/doc/latex/base/ltmarks-doc.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/base/ltmarks-doc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltmarks-doc.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/base/ltmarks-doc.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -0,0 +1,8 @@
+% This will typeset only documentation but not the code
+%
+
+\AtBeginDocument{\OnlyDescription
+%                 \let\tableofcontents\relax
+                  \RenewCommandCopy\MaybeStop\StopEventually
+                 }
+\input{ltmarks.dtx}


Property changes on: trunk/Master/texmf-dist/doc/latex/base/ltmarks-doc.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -38,9 +38,9 @@
 
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesFile{ltnews.tex}%
-  [2021/06/07 v1.4d Master file for ltnews*.tex (LaTeX Project)]
+  [2021/11/12 v1.4d Master file for ltnews*.tex (LaTeX Project)]
 
-\providecommand*{\lastissue}{34}
+\providecommand*{\lastissue}{35}
 
 \InputIfFileExists{ltnews-lastissue.cfg}{}{}
 
@@ -222,7 +222,11 @@
                 \def\y{|multicol}%
                 \ifx\x\y
                 \else
-                  \@latex at error{ltnews.tex: \string\usepackage[#1]{#2} found}\@ehc
+                  \def\y{|color}%
+                  \ifx\x\y
+                  \else
+                    \@latex at error{ltnews.tex: \string\usepackage[#1]{#2} found}\@ehc
+                  \fi
                 \fi
               \fi
             \fi

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews01.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews01.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews01.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews01.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews02.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews02.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews02.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews02.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews03.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews03.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews03.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews03.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews04.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews04.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews04.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews04.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews05.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews05.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews05.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews05.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews06.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews06.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews06.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews06.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews07.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews07.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews07.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews07.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews08.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews08.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews08.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews08.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews09.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews09.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews09.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews09.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews10.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews10.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews10.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews10.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews11.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews11.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews11.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews11.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews12.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews12.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews12.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews12.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews13.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews13.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews13.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews13.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews14.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews14.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews14.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews14.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews15.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews15.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews15.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews15.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews16.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews16.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews16.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews16.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews17.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews17.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews17.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews17.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews18.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews18.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews18.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews18.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews19.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews19.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews19.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews19.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews20.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews21.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews22.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews22.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews22.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews22.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2015-2021
+% Copyright (C) 2015-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews23.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews23.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews23.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews23.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2015-2021
+% Copyright (C) 2015-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews24.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews24.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews24.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews24.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2015-2021
+% Copyright (C) 2015-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews25.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews25.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews25.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews25.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2016-2021
+% Copyright (C) 2016-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews26.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews26.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews26.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews26.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2017-2021
+% Copyright (C) 2017-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews27.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews27.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews27.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews27.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2017-2021
+% Copyright (C) 2017-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews28.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews28.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews28.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews28.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2017-2021
+% Copyright (C) 2017-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews29.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews29.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews29.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews29.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2018-2021
+% Copyright (C) 2018-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews30.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews31.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews32.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews32.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews32.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews32.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -307,7 +307,7 @@
 hyphen in the second-last line of the paragraph. This is now avoided
 by setting \cs{finalhyphendemerits} to zero in unjustified settings.
 %
-\githubissue{274}
+\githubissue{247}
 
 \subsection{Set a non-zero \cs{baselineskip} in text scripts}
 

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews33.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews34.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews34.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews34.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews34.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -493,8 +493,9 @@
 This optional argument 
 specifies the format of the counter, such as \cs{roman};
 the default value is \cs{arabic}.
+Alternatively, you can use a starred form, in which case the format of the
+counter is not altered at all.
 
-
 \subsection{Tests for package and class loading}
 
 To test whether a package has been loaded you can now use \cs{IfPackageLoadedTF}
@@ -548,7 +549,7 @@
 
 
 \subsection{Additional Extended Latin characters predefined}
-More characters, such as \'k (U+1E131), are now pre-defined and
+More characters, such as \'k (U+1E31), are now pre-defined and
 do not need a \verb|\DeclareUnicodeCharacter| declaration.
 %
 \githubissue{593}
@@ -783,7 +784,7 @@
 A \env{tabular} environment is typeset (internally) as an \env{array}
 environment with special settings, and it therefore uses (hidden) math mode. 
 Since it is not in fact a math formula, 
-no extra space from \cs{mathsuround} should be added 
+no extra space from \cs{mathsurround} should be added 
 (the spacing around the \env{tabular} should not get changed). 
 %
 Note that this bug has been present ``forever'', which shows that  \cs{mathsurround} 
@@ -830,7 +831,7 @@
 arguments; this could cause low-level errors in some cases. 
 The code has therefore now been changed to avoid these errors.
 %
-\sxissue{603948}
+\sxissue{q/603948}
 
 
 \medskip

Added: trunk/Master/texmf-dist/doc/latex/base/ltnews35.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/base/ltnews35.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews35.pdf	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews35.pdf	2022-06-08 20:41:20 UTC (rev 63514)

Property changes on: trunk/Master/texmf-dist/doc/latex/base/ltnews35.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/base/ltnews35.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews35.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews35.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -0,0 +1,987 @@
+% \iffalse meta-comment
+%
+% Copyright 2021-2022
+% The LaTeX Project and any individual authors listed elsewhere
+% in this file.
+%
+% This file is part of the LaTeX base system.
+% -——————————————
+%
+% It 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
+%    https://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008 or later.
+%
+% This file has the LPPL maintenance status "maintained".
+%
+% The list of all files belonging to the LaTeX base distribution is
+% given in the file `manifest.txt'. See also `legal.txt' for additional
+% information.
+%
+% The list of derived (unpacked) files belonging to the distribution
+% and covered by LPPL is defined by the unpacking scripts (with
+% extension .ins) which are part of the distribution.
+%
+% \fi
+% Filename: ltnews35.tex
+%
+% This is issue 35 of LaTeX News.
+
+\NeedsTeXFormat{LaTeX2e}[2020-02-02]
+
+\documentclass{ltnews}
+
+%%  Maybe needed only for Chris' inadequate system:
+\providecommand\Dash {\unskip \textemdash}
+
+%% NOTE:  Chris' preferred hyphens!
+%%\showhyphens{parameters}
+%%  \hyphenation{because parameters parameter}
+
+\usepackage[T1]{fontenc}
+
+\usepackage{lmodern,url,hologo}
+
+\usepackage{csquotes}
+\usepackage{multicol}
+\usepackage{color}
+
+\providecommand\hook[1]{\texttt{#1}}
+
+\providecommand\meta[1]{$\langle$\textrm{\itshape#1}$\rangle$}
+\providecommand\option[1]{\texttt{#1}}
+\providecommand\env[1]{\texttt{#1}}
+\providecommand\Arg[1]{\texttt\{\meta{#1}\texttt\}}
+
+
+\providecommand\eTeX{\hologo{eTeX}}
+\providecommand\XeTeX{\hologo{XeTeX}}
+\providecommand\LuaTeX{\hologo{LuaTeX}}
+\providecommand\pdfTeX{\hologo{pdfTeX}}
+\providecommand\MiKTeX{\hologo{MiKTeX}}
+\providecommand\CTAN{\textsc{ctan}}
+\providecommand\TL{\TeX\,Live}
+\providecommand\githubissue[2][]{\ifhmode\unskip\fi
+     \quad\penalty500\strut\nobreak\hfill
+     \mbox{\small\slshape(%
+       \href{https://github.com/latex3/latex2e/issues/\getfirstgithubissue#2 \relax}%
+          	    {github issue#1 #2}%
+           )}%
+     \par\smallskip}
+%% But Chris has to mostly disable \href for his TEXPAD app:
+%%  \def\href #1{}  % Only For Chris' deficient TeX engine
+
+% simple solution right now (just link to the first issue if there are more)
+\def\getfirstgithubissue#1 #2\relax{#1}
+
+\providecommand\sxissue[1]{\ifhmode\unskip
+     \else
+       % githubissue preceding
+       \vskip-\smallskipamount
+       \vskip-\parskip
+     \fi
+     \quad\penalty500\strut\nobreak\hfill
+     \mbox{\small\slshape(\url{https://tex.stackexchange.com/#1})}\par}
+
+\providecommand\gnatsissue[2]{\ifhmode\unskip\fi
+     \quad\penalty500\strut\nobreak\hfill
+     \mbox{\small\slshape(%
+       \href{https://www.latex-project.org/cgi-bin/ltxbugs2html?pr=#1\%2F\getfirstgithubissue#2 \relax}%
+          	    {gnats issue #1/#2}%
+           )}%
+     \par}
+
+\let\cls\pkg
+\providecommand\env[1]{\texttt{#1}}
+\providecommand\acro[1]{\textsc{#1}}
+
+\vbadness=1400  % accept slightly empty columns
+
+
+\makeatletter
+% maybe not the greatest design but normally we wouldn't have subsubsections
+\renewcommand{\subsubsection}{%
+   \@startsection      {subsubsection}{2}{0pt}{1.5ex \@plus 1ex \@minus .2ex}%
+      {-1em}{\@subheadingfont\colonize}%
+}
+\providecommand\colonize[1]{#1:}
+\makeatother
+
+\let\finalvspace\vspace          % for document layout fixes
+
+% Undo ltnews's \verbatim at font with active < and >
+\makeatletter
+\def\verbatim at font{%
+  \normalsize\ttfamily}
+\makeatletter
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\providecommand\tubcommand[1]{}
+\tubcommand{\input{tubltmac}}
+
+\publicationmonth{June}
+\publicationyear{2022}
+
+\publicationissue{35}
+
+\begin{document}
+
+\tubcommand{\addtolength\textheight{4.2pc}}   % only for TUB
+
+\maketitle
+{\hyphenpenalty=10000 \exhyphenpenalty=10000 \spaceskip=3.33pt \hbadness=10000
+\tableofcontents}
+
+\setlength\rightskip{0pt plus 3em}
+
+
+\medskip
+
+
+\section{Introduction}
+
+The 2022 June release of \LaTeX{} is again focussing on improvements
+made for our multi-year project to automatically offer tagged PDF
+output~\cite{35:blueprint}. These are the new document metadata
+interface, the new mark mechanism for \LaTeX{}, a standard key/value
+approach for options, and the introduction of the \texttt{latex-lab}
+area for temporary code that can be optionally loaded by a document
+(when \cs{DocumentMetadata} is used with certain test keys). These
+additions are described in the first sections.  Related to this effort
+there are updates to \pkg{hyperref} and \pkg{tagpdf}, both of which
+have their own distributions.
+
+As usual, we also added a number of smaller improvements and bug
+fixes in various components of core \LaTeX{}. Perhaps the most
+interesting ones (for some users) are direct support for floating
+point arithmetic (via \cs{fpeval}; see below) and the ability to
+properly color parts of math formulas without introducing spacing
+problems. For this we now offer the command \cs{mathcolor}; see the
+description near the end of the newsletter.  There is also a new major
+release of the \pkg{doc} package that supports a more fine-grained
+classification of code elements and properly supports \pkg{hyperref}.
+
+
+\section{Document metadata interface}
+
+Until recently there was no dedicated location to declare
+settings that affect a document as a whole. Settings had to be placed
+somewhere in the preamble or as class options or sometimes even as
+package options. For some such settings this may cause issues, e.g.,
+setting the PDF version is only possible as long as the PDF output
+file has not yet been opened which can be caused by loading one or the
+other package.
+
+For the \enquote{\LaTeX{} Tagged PDF project}~\cite{35:blueprint}
+further metadata about the whole document (and its processing) need to
+be specified and again this data should be all placed in a single
+well-defined place.
+
+For this reason we introduce the new command \cs{DocumentMetadata} to
+unify all such settings in one place.  The command expects a key/value
+list that describes all document metadata for the current document. It
+is only allowed to be used at the very beginning of the document,
+i.e., the declaration has to be placed \emph{before}
+\cs{documentclass} and will issue an error if found later.
+
+
+At this point in time we provide only the bare command in the format;
+the actual processing of the key/value is defined externally and the
+necessary code will be loaded if the command is used. This scheme is
+chosen for two reasons: by adding the command in the kernel it is
+available to everybody without the need to load a special package
+using \cs{RequirePackage}. The actual processing, though, is external
+so that we can easily extend the code (e.g., offering additional keys
+or changing the internal processing) while the above-mentioned project
+is progressing. Both together allows users to immediately benefit from
+intermediate results produced as part of the project, as well as
+offering the \LaTeX{} Project Team the flexibility to enable such
+intermediate results (for test purposes or even production use)
+in-between and independently of regular \LaTeX{} releases. Over time,
+tested and approved functionality can then seamlessly move into the
+kernel at a later stage without any alterations to documents already
+using it. At the same time, not using the new consolidated interface
+means that existing documents are in no way affected by the work that
+is carried out and is in a wider alpha or beta test phase.
+
+Documentation about the new command and
+already existing keys are in \file{l3meta.pdf} and \file{documentmetadata-support.pdf}
+and also in the documentation of the \pkg{pdfmanagement-testphase} package.
+
+Package and class authors can test if a user has used \cs{DocumentMetadata}
+with \cs{IfDocumentMetadataTF}.
+
+
+\section{The \pkg{latex-lab} bundle}
+
+We added a new \pkg{latex-lab}oratory bundle in which we place new
+code that is going to be available only through a
+\cs{DocumentMetadata} declaration and that is\Dash most
+importantly\Dash work under development and subject to
+change without further notice. This means that commands and interfaces provided there may
+get altered or removed again after some public testing.  The code can
+be accessed through the \cs{DocumentMetadata} key \texttt{testphase}.
+Currently supported values are \texttt{phase-I} and \texttt{phase-II}
+that enable code of the tagged PDF project (phase~I is frozen, and
+phase~II is the phase we are currently working on).  With
+\begin{verbatim}
+  \DocumentMetadata{testphase=phase-II}
+\end{verbatim}
+you currently enable tagging for paragraphs and footnotes; more
+document elements will follow soon.
+
+Eventually, code will move (once considered stable) from the
+testphase into the \LaTeX{} kernel itself. Tagging will continue to
+require a \cs{DocumentMetadata} declaration, but you will then be able
+to drop the \texttt{testphase} key setting.
+
+
+\section{A new mark mechanism for \LaTeX{}}
+
+The mark mechanism is \TeX{}'s way to pass information to the
+page-building process, which happens asynchronously, in order to
+communicate relevant data for running headers and footers to the
+latter, e.g., what is the first section on the page or the last
+subsection, etc. However, marks may also be
+used for other purposes. The new kernel module provides a generalized
+mechanism for marks of independent classes.
+
+The \TeX{} engines offer a low-level mark mechanism to
+communicate information about the content of the current page to
+the asynchronous operating output routine. It works by placing
+\cs{mark} commands into the source document.
+
+This mechanism works well for simple formats (such as plain \TeX)
+whose output routines are only called to generate pages. It
+fails, however, in \LaTeX{} (and other more complex formats),
+because here the output routine is sometimes called without
+producing a page, e.g., when encountering a float and placing it
+into one of the float regions.
+%
+When that happens \TeX{}'s  \cs{topmark} no
+longer reflects the situation at the top of the next page when that
+page is finally boxed.
+
+Furthermore, \TeX{} only offered a single mark while \LaTeX{} wanted to
+keep track of more than one piece of information.  For that reason,
+\LaTeX{} implemented its own mark mechanism where the marks always
+contained two parts with their own interfaces: \cs{markboth} and
+\cs{markright} to set marks and \cs{leftmark} and \cs{rightmark} to
+retrieve them.
+
+Unfortunately, this extended mechanism, while supporting scenarios such
+as chapter/section marks, was far from general. The mark
+situation at the top of a page (i.e., \cs{topmark}) remained
+unusable and the two marks offered were not really independent of
+each other because \cs{markboth} (as the name indicates) was
+always setting both.
+
+
+The new mechanism now available in \LaTeX{} starting with the 2022
+release overcomes both issues:
+\begin{itemize}
+\item
+  It provides arbitrary many, fully independent named marks, that
+  can be allocated and from that point onwards used.
+\item
+  It offers access for each such mark to retrieve its top,
+  first, and bottom value separately.
+\item
+  Furthermore, the mechanism is augmented to give access to marks
+  in different ``regions'', which may be other than full pages.
+\end{itemize}
+The legacy interfaces, e.g., \cs{markboth}, are kept. Thus classes and
+packages making use of them continue to work seamlessly. To make use
+of the extended possibility a new set of commands for the declaration of
+mark classes, setting their values and querying their state (in the
+output routine) is now available in addition.
+%
+You find the documentation for the new interfaces together with
+examples and further notes on the mechanism in the file
+\texttt{ltmarks-doc.pdf}. Just call \texttt{texdoc}
+\texttt{ltmarks-doc} to display it on your computer.
+
+
+\section{A key/value approach to option handling}
+
+The classical \LaTeXe{} method for handling options, using \cs{ProcessOptions},
+treats each entry in the list as a string. Many package authors have sought to
+extend this handling by treating each entry as a key--value pair (keyval)
+instead. To date, this has required the use of additional packages, for example
+\pkg{kvoptions}.
+
+The \LaTeX{} team have for some time offered the package \pkg{l3keys2e} to
+allow keyvals defined using the L3 programming layer module \pkg{l3keys} to act
+as package options. This ability has now been integrated directly into the
+kernel. As part of this integration, the syntax for processing keyval options
+has been refined, such that
+\begin{verbatim}
+\ProcessKeyOptions
+\end{verbatim}
+will now automatically pick up the package name as the key \emph{family},
+%unless explicitly given as an optional argument.
+unless explicitly given as an optional argument:
+\begin{verbatim}
+\ProcessKeyOptions[family]
+\end{verbatim}
+
+To support creating key options for this mechanism, the new command
+\cs{DeclareKeys} has been added. This works using the same general
+approach as \pkg{l3keys} or \pkg{pgfkeys}: each key has one or more
+\emph{properties} which define its behavior.
+
+Options for packages which use this new approach will not be checked for
+clashes by the kernel. Instead, each time a \cs{usepackage} or
+\cs{RequirePackage} line is encountered, the list of options given will be
+passed to \cs{ProcessKeyOptions}. Options which can only be given
+the first time a package is loaded can be marked using the property
+\texttt{.usage = load}, and will result in a warning if used in a subsequent
+package loading line.
+
+Package options defined in this way can also be set within a package using
+the new command \cs{SetKeys}, which again takes an optional argument
+to specify the \emph{family}, plus a mandatory one for the options themselves.
+
+
+
+\section{New or improved commands}
+
+
+\subsection{Floating point and integer calculations}
+
+The L3 programming layer offers expandable commands for calculating
+floating point and integer values, but so far these functions have
+only been available to programmers, because they require
+\cs{ExplSyntaxOn} to be in force. To make them easily available at the
+document level, the small package \pkg{xfp} defined \cs{fpeval} and
+\cs{inteval}.
+
+
+An example of use could be the following:
+\begin{verbatim}
+  \LaTeX{} can now compute:
+  \[ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3}
+      = \fpeval{sin(3.5)/2 + 2e-3}         \]
+\end{verbatim}
+which produces the following output:
+\begin{quote}
+\LaTeX{} can now compute:
+\[ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3}
+   = \fpeval{sin(3.5)/2 + 2e-3}         \]
+\end{quote}
+These two commands have now been moved into the kernel and in addition
+we also provide \cs{dimeval} and \cs{skipeval}. The details of their
+syntax are described in \file{usrguide3.pdf}.  The command \cs{fpeval}
+offers a rich syntax allowing for extensive calculations, whereas the
+other three commands are essentially thin wrappers for \cs{numexpr},
+\cs{dimexpr}, and \cs{glueexpr} \Dash therefore inheriting some syntax
+%peculiars and limitations in expressiveness.
+peculiarities and limitations in expressiveness.
+%  \newcommand\calulateheight[1]{%
+\begin{verbatim}
+  \newcommand\calculateheight[1]{%
+    \setlength\textheight{\dimeval{\topskip
+          + \baselineskip * \inteval{#1-1}}}}
+\end{verbatim}
+The above, for example, calculates the appropriate \cs{textheight} for
+a given number of text lines.
+%
+\githubissue{711}
+
+
+\subsection{CamelCase commands for changing arguments to csnames}
+
+It is sometimes helpful to \enquote{construct} a command name on the
+fly rather than providing it as a single \cs{...}\ token. For these
+kinds of tasks the \LaTeX3 programming layer offers a general mechanism
+(in the form of \cs{exp\_args:N...}\ and
+\cs{cs\_generate\_variant:Nn}). However, when declaring new
+document-level commands with \cs{NewDocumentCommand} or
+\cs{NewCommandCopy}, etc.\ the L3 programming layer may not be active,
+and even if it is, mixing CamelCase syntax with L3 programming syntax
+is not really a good approach. We have therefore added the commands
+\cs{UseName} and \cs{ExpandArgs} to assist in such
+situations, e.g.,
+\begin{verbatim}
+\NewDocumentCommand\newcopyedit{mO{red}}
+  {\newcounter{todo#1}%
+   \ExpandArgs{c}\NewDocumentCommand{#1}{s m}%
+     {\stepcounter{todo#1}%
+      \IfBooleanTF {##1}%
+         {\todo[color=#2!10]%
+            {\UseName{thetodo#1}: ##2}}%
+         {\todo[inline,color=#2!10]%
+            {\UseName{thetodo#1}: ##2}}%
+     }%
+  }
+\end{verbatim}
+which provides a declaration mechanism for copyedit commands, so that
+\verb=\newcopyedit{FMi}[blue]= then defines \cs{FMi} (and the
+necessary counter).
+
+The command \cs{ExpandArgs} can be useful with the argument \texttt{cc} or
+\texttt{Nc} in
+combination with \cs{NewCommandCopy} if the old or new command name
+or both need constructing. Finally, there is \cs{UseName} which
+takes its argument and turns it into a command (i.e., a CamelCase
+version of \cs{@nameuse} (\LaTeXe) or \cs{use:c} (L3 programming
+layer)) which was also used in the example above.
+%
+\githubissue{735}
+
+
+\subsection{Testing for (nearly) empty arguments}
+%
+In addition to \cs{IfNoValueTF} to test if an optional argument was
+provided or not, there is now also \cs{IfBlankTF}, which tests if the
+argument is empty or contains only blanks. Based on the result it
+selects a true or false code branch. As usual, the variants
+\cs{IfBlankT} and \cs{IfBlankF} are also provided for use when only one
+branch leads to some action.  Further details and examples are given
+in \file{usrguide3.pdf}.
+
+This test can also be useful if you set up key/value options and want
+to test if a key was specified without giving a value, vs.\ 
+specifying \enquote{\textit{key}\texttt{ = ,}}.
+
+
+\subsection{Better allocator for Lua command ids}
+
+In \LuaTeX\ we already had the \cs{newluafunction} macro which allocates
+a Lua function identifier which can be used to define commands
+with \cs{luadef}. But this always required two steps: \cs{newluafunction}
+defines the passed control sequence as an integer, which then has to be used
+to define the actual Lua command with \cs{luadef}. After that, the integer is
+no longer needed. This was inconsistent with other allocators. Therefore we
+added two new allocators \cs{newluacmd} and \cs{newexpandableluacmd} which
+directly define a control sequences invoking the allocated Lua function.
+The former defines a non-expandable Lua command, the latter an expandable
+one. Of course, the associated Lua function still has to be defined by assigning
+a function to the \verb|lua.get_functions_table()| table. The required index is
+available in \cs{allocationnumber}.
+
+An example could be
+\begin{verbatim}
+\newluacmd \greeting
+\directlua {
+lua.get_functions_table()
+   [tex.count.allocationnumber]
+   = function()
+    local name = token.scan_argument()
+    tex.sprint('Hello ', name, '!')
+  end
+}
+
+\greeting{world}
+\end{verbatim}
+%
+\githubissue{536}
+
+\subsection{Starred command version for \cs{ref}, \cs{Ref} and \cs{pageref}}
+
+For a long time \pkg{hyperref} has provided starred versions for the reference commands
+which do not create active links. This syntax extension required users and
+package authors to check if \pkg{hyperref} was loaded and adjust the coding
+accordingly or take the starred forms out if text was copied to a document
+without \pkg{hyperref}. The commands have now been aligned with
+the \pkg{hyperref} usage and always allow an optional star. The \pkg{showkeys} package
+has been updated to handle the starred versions too, both with \pkg{hyperref} or \pkg{nameref}
+and without. The commands are defined with \cs{NewDocumentCommand} and so no longer expand when
+written to auxiliary files. This reduces the number of compilations needed to resolve references
+in captions and sectioning commands. The package \pkg{ifthen} has been updated to ensure that
+\cs{pageref} can still be used inside tests like \cs{isodd}.
+
+
+\subsection{Preparation for supporting PDF in backends}
+
+At the current point in time, basic support for PDF in
+backends is not part of \LaTeX{} core; it is provided by an external
+package like \pkg{hyperref}.
+At some time in the future that work will be placed
+into the kernel but for now it is separate and has to be
+explicitly loaded in the document. To enable class and package authors
+to support PDF-specific tasks like the creation of link targets without
+having to test first if \pkg{hyperref} has been loaded, dummy versions of
+the commands \cs{MakeLinkTarget}, \cs{LinkTargetOn}, \cs{LinkTargetOff} and
+\cs{NextLinkTarget} are provided.
+
+\section{Code improvements}
+
+\subsection{\cs{protected} UTF-8 character definitions}
+The characters defined via \file{utf8.def} are now defined as \cs{protected}
+macros. This makes them safe to use in expansion contexts where the
+classic \cs{protect} mechanism is not enabled, notably L3 programming
+layer \texttt{e} and \texttt{x} arguments.
+
+Related to this change \cs{MakeUppercase} and \cs{MakeLowercase} have
+been updated to use the Unicode-aware case changing functions
+\cs{text\string_lowercase:n} in place of the \TeX\ primitive \cs{lowercase}.
+The \cs{NoCaseChange} command from the \pkg{textcase} package has also been added.
+
+Note: for technical reasons these low-level character handling changes
+will not be rolled back if the format version is rolled back using the
+\pkg{latexrelease} package rollback mechanism.
+%
+\githubissue{780}
+
+\subsection{A small update to \cs{obeylines} and \cs{obeyspaces}}
+
+The plain \TeX{} versions of \cs{obeylines} and \cs{obeyspaces} make
+\verb=^^M= and \verb*= = active and force them to execute \cs{par} %*
+and \cs{space}, respectively. Don Knuth makes a remark in the \TeX{}book
+that one can then use a trick such as
+\begin{verbatim}
+  \let\par=\cr \obeylines \halign{...
+\end{verbatim}
+However, redefining \cs{par} like this 
+may lead to all kinds of problems in \LaTeX. We have therefore changed
+the commands to use an indirection: the active characters now execute
+\cs{obeyedline} and \cs{obeyedspace}, which in turn do what the
+hardwired solution did before.
+
+\begin{quote}
+  \renewcommand\obeyedspace{\ \textbullet\ }
+  \footnotesize\obeyspaces%
+This means that it is now possible to %
+achieve special effects in a safe way. %
+This paragraph, for example, was produced by %
+making \cs{obeyedspace} generate %
+\texttt{\{\cs{\verbvisiblespace}\cs{textbullet}\cs{\verbvisiblespace}\}} and %
+enabling \cs{obeyspaces} within a %
+quote environment.
+\end{quote}
+Thus, if you are keen to use the plain \TeX{} trick, you need to say
+\cs{let}\cs{obeyedlines}\texttt{=}\cs{cr} now.
+%
+\githubissue{367}
+
+
+\subsection{\pkg{doc} upgraded to version~3}
+
+After roughly three decades the \pkg{doc} package received a cautious
+uplift, as already announced at the 2019 TUG conference\Dash changes
+to \pkg{doc} are obviously always done in a leisurely manner.
+
+Given that most documentation is nowadays viewed on screen,
+\pkg{hyperref} support is added and by default enabled (suppress it
+with option \option{nohyperref} or alternatively with
+\option{hyperref}\texttt{=false}) so the internal cross-references are
+properly resolved including those from the index back into the
+document.
+
+Furthermore, \pkg{doc} now has a general mechanism to define
+additional \enquote{doc} elements besides the two \texttt{Macro} and
+\texttt{Env} it has known in the past. This enables better
+documentation because you can now clearly mark different types of
+objects instead of simply calling them all \enquote{macros}.
+If desired, they can be collected together under a heading
+in the index so that you have a section just with your document
+interface commands, or with all parameters, or \ldots
+
+The code borrows ideas from Didier Verna's \pkg{dox} package (although
+the document level interface is different) and it makes use of Heiko
+Oberdiek's \pkg{hypdoc} package, which at some point in the future
+will be completely integrated, given that its whole purpose it to
+patch \pkg{doc}'s internal commands to make them \pkg{hyperref}-aware.
+
+All changes are expected to be upward compatible, but if you run into
+issues with older documentation using \pkg{doc} a simple and quick
+solution is to load the package as follows:
+\verb/\usepackage{doc}[=v2]/
+
+\subsection{\pkg{doc} can now show dates in change log}
+
+Up to now the change log was always sorted by version numbers
+(ignoring the date that was given in the \cs{changes} command).  It
+can now be sorted by both version and date if you specify the option
+\option{reportchangedates} on package level and in that case the
+changes are displayed with
+\begin{quote}
+  \meta{version} -- \meta{date}
+\end{quote}
+as the heading (instead of just \meta{version}), when using
+\cs{PrintChanges}.
+%
+\githubissue{531}
+
+
+
+\subsection{\class{ltxdoc} gets options \option{nocfg} and \option{doc2}}
+
+The \LaTeX{} sources are formatted with the \class{ltxdoc} class,
+which supports loading a local config file \file{ltxdoc.cfg}. In the
+past the \LaTeX{} sources used such a file but it was not distributed.
+As a result reprocessing the \LaTeX{} sources elsewhere showed
+formatting changes.  We now distribute this file which means that it
+is loaded by default. With the option \option{nocfg} this can be
+prevented.
+
+We also added a \option{doc2} option to the class so that it is
+possible to run old documentation with \pkg{doc} version~2, if
+necessary.
+
+
+
+\subsection{Lua\TeX\ callback improvements}
+
+The Lua\TeX\ callbacks \texttt{hpack\_quality} and \texttt{vpack\_quality} are
+now \texttt{exclusive} and therefore only allow a single handler.
+The previous type \texttt{list} resulted in incorrect parameters when multiple
+handlers were set; therefore, this only makes an existing restriction more
+explicit.
+
+Additionally the return value \texttt{true} for \texttt{list}
+callbacks is now handled internally and no longer passed on to the
+engine. This simplifies the handling of these callbacks and makes it
+easier to provide consistent interfaces for user-defined \texttt{list}
+callbacks.
+
+
+\subsection{Class \class{proc} supports \option{twoside}}
+
+The document class \class{proc}, which is a small variation on the
+\class{article} class, now supports the \option{twoside} option,
+displaying different data in the footer line on recto and verso pages.
+%
+\githubissue{704}
+
+
+\subsection{Croatian character support}
+
+The default \pkg{inputenc} support has been extended to support the 9 characters
+D\v Z, D\v z, d\v z, LJ, Lj, lj, NJ, Nj, nj, input as single UTF-8 code points
+in the range U+01C4 to U+01CC.
+%
+\githubissue{723}
+
+
+\subsection{Cleanup of the Unicode declaration interface}
+
+When declaring encoding specific commands for the Unicode (TU)
+encoding some declarations (e.g., \cs{DeclareUnicodeComposite}) do not
+have an explicit argument for the encoding name, but instead use
+the command \cs{UnicodeEncodingName} internally. There was one
+exception though: \cs{DeclareUnicodeAccent} required an explicit
+encoding argument.  This inconsistency has now been removed and the
+encoding name is always implicit. To avoid a breaking change for a few
+packages on CTAN, \cs{DeclareUnicodeAccent} still accepts three
+arguments if the second argument is \texttt{TU} or
+\cs{UnicodeEncodingName}. Once all packages have been updated this
+code branch will get removed.
+
+At the same time we added \cs{DeclareUnicodeCommand} and
+\cs{DeclareUnicodeSymbol} for consistency. They also use
+\cs{UnicodeEncodingName} internally, instead of requiring an encoding
+argument as their general purpose counterparts do.
+%
+\githubissue{253}
+
+
+\subsection{New hook:\ \hook{include/excluded}}
+
+A few releases ago we introduced a number of file hooks for different
+types of files; see~\cite{35:ltnews32} and in
+particular~\cite{35:ltfilehook-doc}.
+%
+The hooks for \cs{include} files now have an addition: if such a file
+is not included (because \cs{includeonly} is used and its \meta{name}
+is not listed in the argument) then the hooks \hook{include/excluded}
+and \hook{include/\meta{name}/excluded} are executed in that
+order\Dash of course, only if they contain code.  This happens after
+\LaTeX{} has loaded the \texttt{.aux} file for this include file,
+i.e., after \LaTeX{} has updated its counters to pretend that the file
+was seen.
+
+
+\subsection{Input support for normalized angle brackets}
+
+Source files containing \textlangle\ or \textrangle\ directly written
+as Unicode codepoints U+2329 and U+232A no longer break when the
+source file gets normalized under Unicode normalization rules.
+%
+\githubissue{gh/714}
+
+
+
+
+\section{Bug fixes}
+
+\subsection{Using \cs{DeclareUnicodeCharacter} with C1 control points}
+An error in the UTF-8 handling for non-Unicode \TeX\ has prevented
+\cs{DeclareUnicodeCharacter} being used with characters in the range
+hex 80 to 9F. This has been corrected in this release.
+%
+\githubissue{730}
+
+
+
+\subsection{Fix \cs{ShowCommand} when used with \pkg{ltcmd}}
+
+When \cs{ShowCommand} support was added for \pkg{ltcmd} in the previous
+release~\cite{35:ltnews34}, a blunder in the code made it so that
+when \cs{ShowCommand} was used on a command defined with \pkg{ltcmd}, it
+only printed the meaning of the command in the terminal, but didn't stop
+for interaction as it does elsewhere (mimicking \cs{show}).  The issue
+is now fixed.
+%
+\githubissue{739}
+
+
+
+\subsection{Make \cs{cite}\texttt{\textbraceleft\textbraceright} produce a warning}
+
+When the \cs{cite} command can't resolve a citation label it issues a
+warning \enquote{Citation `\meta{label}' on page \meta{page}
+  undefined}.  However, due to some implementation details a completely
+empty argument was always silently accepted. Given that there are probably
+people who write \verb=\cite{}= with the intention to fill in the
+correct label later it is rather unfortunate if that is not generating
+a warning that something in the document is still amiss.
+This has finally been corrected and a warning is now generated also in this case.
+%
+\githubissue{790}
+
+
+
+\subsection{Fix adding \hook{cmd} hooks to simple macros}
+
+A bug in how \LaTeX{} detected the type of a command caused a
+premature forced expansion of such commands, which, depending on their
+definition, could be harmless or could cause severe trouble.  This has
+been fixed in the latest release.
+%
+\githubissue{795}
+\sxissue{q/637565}
+
+
+\subsection{Warn if \hook{shipout/lastpage} hook is executed too early}
+
+The hook \hook{shipout/lastpage} is intended to place \cs{special}s
+into the last page shipped out. This is needed for some use cases,
+e.g., tagging. If that hook is nonempty and the user has added additional
+pages since the last run, then \LaTeX{} executes this hook too early,
+but until now without giving any indication that the document needs
+rerunning. This has now been corrected and an appropriate warning is
+given.
+%
+\githubissue{813}
+
+
+\subsection{More consistent use of cramped math styles in \LuaTeX}
+
+Using \LuaTeX's \cs{Udelimiterover} to place a horizontally extensible glyph
+on top of a mathematical expression now causes the expression to be set in cramped
+style, as used in similar situations by traditional \TeX\ math rendering.
+Similarly, cramped style is now used for expressions set under such a delimiter
+using \cs{Uunderdelimiter}, but is no longer used when setting an expression on top
+of such extensible glyphs using \cs{Uoverdelimiter}.
+This new behavior follows \TeX's rule that cramped style is used whenever something
+else appears above the expression.
+Additionally the math style of these constructs can now be detected using \cs{mathstyle}.
+
+The old behavior can be restored by adding
+\begin{verbatim}
+   \mathdefaultsmode=0
+\end{verbatim}
+to a document.
+
+
+\subsection{Fixed bug when setting hook rules for one-time hooks}
+
+If a \cs{DeclareHookRule} command is set for a one-time hook, it has to
+come \emph{before} the hook gets used, because otherwise it never
+applies\Dash after all, the hook is used only once.  There was a bug in
+the implementation in that the sorting mechanism was still applied if
+the \cs{DeclareHookRule} declaration appeared while the one-time hook was
+executed, causing the spurious typesetting of the code labels and the
+hook name.  This bug is now fixed and an error is raised when a new
+sorting rule is added to an already-used one-time hook.
+
+A possible scenario in which this new error is raised is the following:
+package \pkg{AAA} declares a hook rule for \hook{begindocument} (i.e.,
+\cs{AtBeginDocument}) to sort out the behavior between itself and some
+other package. Package \pkg{BBB} wants to load package \pkg{AAA} but
+only if it hasn't been loaded in the preamble, so delays the loading to
+\hook{begindocument}. In that case the hook rule declared by \pkg{AAA}
+can no longer be applied and you get the error. If that happens the
+solution is to load the package in \hook{begindocument/before}, which
+is executed at the very end of the preamble but before
+\hook{begindocument} is processed.
+%
+\githubissue{818}
+
+
+
+
+\section{Changes to packages in the \pkg{amsmath} category}
+
+
+\subsection{\pkg{amsopn}:\ Do not reset \cs{operator at font}}
+
+The package \pkg{amsopn} used to define \cs{operator at font} but this
+command has been provided by the \LaTeX{} format for at least 14
+years. As a result the definition in \pkg{amsopn} is equivalent to a
+reset to the kernel definition, which is unnecessary and surprising if
+you alter the math setup (e.g., by loading a package) and at a later
+stage add \pkg{amsmath}, which then undoes part of your setup. For
+this reason the definition was taken out and
+\pkg{amsmath}/\pkg{amsopn} now relies on the format definition.
+
+In the unlikely event that you want the resetting to happen, use
+\begin{verbatim}
+  \makeatletter
+   \def\operator at font{\mathgroup\symoperators}
+  \makeatother
+\end{verbatim}
+after loading the package.
+%
+\githubissue{734}
+
+\subsection{\pkg{amsmath}:\ Error in \cs{shoveleft}}
+
+If \cs{shoveleft} started out with the words \enquote{plus} or
+\enquote{minus} it was misunderstood as part of a rubber length and
+led either to an error or was swallowed without trace.  By adding a
+\cs{relax} this erroneous scanning into the argument of \cs{shoveleft}
+is now prevented.
+%
+\githubissue{714}
+
+
+\subsection{\pkg{amsmath} and \pkg{amsopn}:\ Robustify user commands}
+
+Most user-level commands have been made robust in the \LaTeX{} kernel
+during the last years, but variant definitions in \pkg{amsmath} turned
+them back into fragile beings. We have now made most commands in
+\pkg{amsmath} and \pkg{amsopn} robust as well to match the kernel
+behavior. This also resolves a bug recently discovered in the
+\pkg{mathtools} package, which was due to \cs{big} not being robust after
+\pkg{amsmath} was loaded.
+%
+\githubissue{123}
+
+
+
+\section{Changes to packages in the \pkg{graphics} category}
+
+\subsection{Color in formulas}
+
+While it is possible to color parts of a formula using \cs{color}
+commands the approach is fairly cumbersome. For example, to color a
+summation sign, but not its limits, you need four \cs{color} commands and
+some seemingly unnecessary sets of braces to get coloring and spacing
+right:
+{\hfuzz=1pt
+\begin{verbatim}
+\[ X = \color{red} \sum
+% without {{ the superscript below is misplaced
+                    _{{\color{black} i=1}}
+% without {{ the \sum is black
+                    ^{{\color{black} n}}
+   \color{black}    % without it the x_i is red
+   x_i           \]
+\end{verbatim}
+}\noindent
+Leaving out any of the \cs{color} commands or any of the \verb={{...}}=
+will give you a wrong result instead of the desired
+\[ X = \color{red} \sum
+    _{{\color{black} i=1}} % without {{ the superscript is misplaced
+    ^{{\color{black} n}}   % without {{ the \sum is black
+   \color{black}           % without it the x_i is red
+   x_i
+\]
+So even if this is possible, it is not a very practical solution and
+furthermore there are a number of cases where it is impossible to
+color a certain part of a formula, for example, an opening symbol such
+as \verb=\left(= but not the corresponding \verb=\right)=.
+
+We have therefore added the command \cs{mathcolor} to the \pkg{color}
+and \pkg{xcolor} package, which has the same syntax as \cs{textcolor},
+but is specially designed for use in math and handles sub and
+superscripts and other aspects correctly and preserves correct
+spacing. Thus, the above example can now be written as
+\begin{verbatim}
+\[ X = \mathcolor{red}{\sum}_{i=1}^n x_i \]
+\end{verbatim}
+This command is \emph{only} allowed in formulas.
+For details and further examples, see \file{mathcolor.pdf}.
+
+
+\subsection{Fix locating files with \cs{graphicspath}}
+%
+
+If a call to \cs{includegraphics} asked for a file (say, \file{image})
+without extension, and if both \file{A/image.pdf} and \file{B/image.tex}
+existed (both \file{A/} and \file{B/} in \cs{graphicspath}, but neither
+in a folder searched by \TeX), then \file{A/image.pdf} would not be
+found, and a \enquote{file not found} error would be incorrectly thrown.
+The issue is now fixed and the graphics file is correctly found.
+%
+\githubissue{776}
+\sxissue{q/630167}
+
+
+
+
+\section{Changes to packages in the \pkg{tools} category}
+
+\subsection{\pkg{multicol}:\ Fix \cs{newcolumn}}
+
+The recently added \cs{newcolumn} didn't work properly if used in
+vertical mode, where it behaved like \cs{columnbreak}, i.e., spreading
+the column material out instead of running the column short.
+%
+\sxissue{q/624940}
+
+
+\subsection{\pkg{bm}:\ Fix for \pkg{amsmath} operators}
+
+An internal command used in the definition of operator commands such
+as \cs{sin} in \pkg{amsmath} has been guarded in \cs{bm} to prevent
+internal syntax errors due to premature expansion.
+%
+\githubissue{744}
+
+
+
+\medskip
+
+\begin{thebibliography}{9}
+
+\fontsize{9.3}{11.3}\selectfont
+
+\bibitem{35:blueprint} Frank Mittelbach and Chris Rowley:
+  \emph{\LaTeX{} Tagged PDF \Dash A blueprint for a large project}.\\
+  \url{https://latex-project.org/publications/indexbyyear/2020/}
+
+%\bibitem{35:source2e}
+%  \emph{\LaTeX{} documentation on the \LaTeX{} Project Website}.\\
+%  \url{https://latex-project.org/help/documentation/}
+
+%\bibitem{35:ltnews31} \LaTeX{} Project Team:
+%  \emph{\LaTeXe{} news 31}.\\
+%  \url{https://latex-project.org/news/latex2e-news/ltnews31.pdf}
+
+\bibitem{35:ltnews32} \LaTeX{} Project Team:
+  \emph{\LaTeXe{} news 32}.\\
+  \url{https://latex-project.org/news/latex2e-news/ltnews32.pdf}
+
+%\bibitem{35:ltnews33} \LaTeX{} Project Team:
+%  \emph{\LaTeXe{} news 33}.\\
+%  \url{https://latex-project.org/news/latex2e-news/ltnews33.pdf}
+
+\bibitem{35:ltnews34} \LaTeX{} Project Team:
+  \emph{\LaTeXe{} news 34}.\\
+  \url{https://latex-project.org/news/latex2e-news/ltnews34.pdf}
+
+\bibitem{35:ltfilehook-doc} Frank Mittelbach, Phelype Oleinik, \LaTeX{}~Project~Team:
+  \emph{The \texttt{\upshape ltfilehook} documentation}.\\
+  Run \texttt{texdoc} \texttt{ltfilehook-doc} to view.
+\end{thebibliography}
+
+
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/base/ltnews35.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/base/ltpara-code.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltpara-doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltpara-doc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltpara-doc.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltpara-doc.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -2,5 +2,6 @@
 
 \AtBeginDocument{\OnlyDescription
                  \let\tableofcontents\relax
+                  \RenewCommandCopy\MaybeStop\StopEventually
                  }
 \input{ltpara.dtx}

Modified: trunk/Master/texmf-dist/doc/latex/base/ltshipout-code.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltshipout-doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltshipout-doc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltshipout-doc.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltshipout-doc.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,5 +3,6 @@
 
 \AtBeginDocument{\OnlyDescription
 %                 \let\tableofcontents\relax
+                  \RenewCommandCopy\MaybeStop\StopEventually
                  }
 \input{ltshipout.dtx}

Modified: trunk/Master/texmf-dist/doc/latex/base/ltx3info.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/ltx3info.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltx3info.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/ltx3info.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/ltxdoc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/makeindx.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/manifest.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/manifest.txt	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/manifest.txt	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,5 +1,5 @@
 %
-% The following files form the LaTeX2e distribution of 2020-10-01
+% The following files form the LaTeX2e distribution
 %
 %
 % CONTENTS OF THE LaTeX DISTRIBUTION
@@ -11,10 +11,6 @@
 % README.md       --  The distribution guide. START BY READING THIS FILE
 % manifest.txt    --  This file.
 %
-% tex2.txt        --  Extras for installing LaTeX on TeX2.
-%
-% texpert.txt     --  Documentation for TeX experts.
-%
 % legal.txt       --  Copyright notice; warranty; copying conditions.
 % lppl.txt        --  The LaTeX Project Public License (current version).
 % lppl-1-0.txt    --  The LaTeX Project Public License (version 1.0).
@@ -72,6 +68,9 @@
 % ltnews30.tex    --  What was new in the release dated 2019/10.
 % ltnews31.tex    --  What was new in the release dated 2020/02.
 % ltnews32.tex    --  What was new in the release dated 2020/10.
+% ltnews33.tex    --  What was new in the release dated 2021/06.
+% ltnews34.tex    --  What was new in the release dated 2021/11.
+% ltnews35.tex    --  What was new in the release dated 2022/06.
 
 %
 % ltx3info.tex    --  Information about the LaTeX3 project.
@@ -139,6 +138,9 @@
 % lthooks.dtx     --  Hook management
 % ltfilehook.dtx  --  Hook management for file loading
 % ltshipout.dtx   --  Hook management for \shipout
+% ltcmdhooks.dtx  --  Hook management (generic) for commands
+% ltpara.dtx      --  Hook management for paragraphs
+% ltmarks.dtx     --  Mark management
 %
 % Standard Classes:
 % -----------------
@@ -186,7 +188,7 @@
 % doc.dtx         --  Package for self documenting code.
 % docstrip.dtx    --  Module for removing comments.
 % ltxdoc.dtx      --  Class file for printing documentation.
-% doc-v3beta.sty  --  New version of doc, current for internal use only.
+% ltxdoc.cfg      --  config file to format the LaTeX sources.
 %
 %
 % Installation scripts for the various parts:

Modified: trunk/Master/texmf-dist/doc/latex/base/modguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/modguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/modguide.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/modguide.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/nfssfont.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/proc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/slides.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/slifonts.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/source2e.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/source2e.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/source2e.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/source2e.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -264,6 +264,8 @@
 
  \DocInclude{ltpara}   % Paragraph hooks (L3 module)
 
+ \DocInclude{ltmeta}   % Document Metadara interface (L3 module)
+
  \DocInclude{ltspace}  % Spacing, line and page breaking.
 
  \DocInclude{ltlogos}  % Logos.
@@ -322,10 +324,14 @@
 
  \DocInclude{ltbibl}   % Bibliography
 
+ \DocInclude{ltmarks}  % Output routine marks management (L3 module)
+
  \DocInclude{ltpage}   % \pagestyle \raggedbottom \sloppy
 
  \DocInclude{ltclass}  % Package & Class interface
 
+ \DocInclude{ltkeys}   % Key-based option management (L3 module)
+
  \DocInclude{ltfilehook}  % Hook management for files (L3 module)
 
  \DocInclude{ltshipout}% \shipout redefinition (L3 module)

Modified: trunk/Master/texmf-dist/doc/latex/base/syntonly.pdf
===================================================================
(Binary files differ)

Deleted: trunk/Master/texmf-dist/doc/latex/base/tex2.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/tex2.txt	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/tex2.txt	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,83 +0,0 @@
-               LaTeX installation TeX2 information
-
-                       16 September 1995
-
-
-In order to make a LaTeX format and use it you need, in addition to
-the LaTeX source files, a TeX implementation.
-
-If your TeX is very old, prior to version TeX3, then certain features
-will be missing from your system. In particular, you will probably
-have no support for `8-bit' input and hyphenation of words with
-accented characters.
-
-Most (perhaps all) TeX implementations are available in versions that
-are at least as recent as TeX3 (released in 1989) so the best course
-of action is to update your TeX installation before building LaTeX.
-
-However, if you must for some reason make the LaTeX format by running
-the old TeX2 then it is necessary to have a `configuration file' named
-fonttext.cfg.  The existence of this file will prevent LaTeX trying to
-access 8-bit characters, which is not allowed in the old TeX2 version
-of TeX.
-
-If you fail to use such a configuration file, LaTeX will detect that it
-is running under TeX2 and stop with the following message (without
-making a format file):
-
-*************************************
-*
-* You MUST use a fonttext.cfg file!
-* As you are still using TeX2!!!!!!
-*
-* See the documentation file tex2.txt
-*
-*************************************
-
-
-There is more information about the file fonttext.cfg in the file
-cfgguide.tex; but for a minimal configuration that allows LaTeX to
-be built on TeX2, just do the following:
-
- * Copy the standard fonttext.ltx file to fonttext.cfg
- * Then edit the file fonttext.cfg as follows:
-   --  Change the \ProvidesFile call (see below).
-   --  Comment out all the lines referring to the `T1' encoding (but not
-       those referring to the `OT1' encoding).
-
-Thus the resulting file will look something like the following.
-
-%%% File: fonttext.cfg
-\ProvidesFile{fonttext.cfg}
-           [1995/06/05 v1.0 TeX2 text font setup]
-
-\input {OMLenc.def}
-%%%%% NOT FOR TeX2    \input  {T1enc.def}
-\input {OT1enc.def}       % <- should come after T1 for speed
-\input {OMSenc.def}
-\fontencoding{OT1}
-\DeclareFontEncodingDefaults{}{}
-%%%%% NOT FOR TeX2    \DeclareFontSubstitution{T1}{cmr}{m}{n}
-\DeclareFontSubstitution{OT1}{cmr}{m}{n}
-%%%%% NOT FOR TeX2    \input  {T1cmr.fd}
-\input  {OT1cmr.fd}
-\input {OT1cmss.fd}
-\input {OT1cmtt.fd}
-\DeclareErrorFont{OT1}{cmr}{m}{n}{10}
-\newcommand\rmdefault{cmr}
-\newcommand\sfdefault{cmss}
-\newcommand\ttdefault{cmtt}
-
-\newcommand\bfdefault{bx}
-\newcommand\mddefault{m}
-
-\newcommand\itdefault{it}
-\newcommand\sldefault{sl}
-\newcommand\scdefault{sc}
-\newcommand\updefault{n}
-
-\newcommand\encodingdefault{OT1}
-\newcommand\familydefault{\rmdefault}
-\newcommand\seriesdefault{\mddefault}
-\newcommand\shapedefault{\updefault}
-\endinput

Deleted: trunk/Master/texmf-dist/doc/latex/base/texpert.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/texpert.txt	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/texpert.txt	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,210 +0,0 @@
-              LaTeX installation TeX expert information
-
-                        1 June 1997
-
-
-SUMMARY
-=======
-
-This document contains information about the LaTeX installation for
-TeX experts.  In particular it describes:
-
- * The checks performed by ltxcheck.tex
-
- * How to print the LaTeX source.
-
-For more general information, see install.txt.
-
-For information on configuring LaTeX see cfgguide.tex.
-
-
-THE LTXCHECK.TEX CHECKS
-=======================
-
-Here is a description of the checks run by ltxcheck.
-
-1) The \@currdir check.
-
-   It is useful for LaTeX to know the syntax for the `current directory
-   (or folder)', or `default directory', if  the operating system has
-   such a concept.
-
-   For example, file abc.tex in this directory, or folder, is specified
-   by:
-     ./abc.tex   on Unix and most DOS/OS2 TeX's,
-     []abc.tex   on VMS
-      :abc.tex   on a Macintosh.
-   The above possibilities will be found automatically during the
-   installation.  However, if none of these syntaxes works on your
-   system then the internal macro \@currdir will be set to be empty
-   and ltxcheck will report this.
-
-   If your system does have a notion of a current directory, you can
-   define \@currdir in the file texsys.cfg.
-
-   You could also report this to the latex-bug address, so that
-   later releases can automatically cope with your system.
-
-2) The file name parser check.
-   \filename at parse may be defined in texsys.cfg if the default
-   installation does not define a suitable parser. (In fact no widely
-   used TeX system should need such a re-definition as the standard
-   installation should correctly define this command for unix, dos,
-   atari, VMS, and Macintosh, at least.)
-   Because of differences in directory syntax, most features of this
-   command can not be checked in a portable way, however ltxcheck does
-   check that at least {article.cls} is correctly parsed as base name
-   article and extension cls.
-
-3) The \input at path check.
-
-   On some systems TeX cannot check whether a file exists before
-   trying to input it, unless the filename is expressed as a full path
-   name, including the directory.  On these systems LaTeX needs to be
-   given a list of directories in which to look for files; the
-   internal macro \input at path holds this information.
-
-   When run, ltxcheck will try to locate the file article.cls.
-   If it fails to find this file (and you have placed it in the
-   `standard input directory') then you must define \input at path in
-   the file texsys.cfg.
-
-   The files texsys.cfg and ltdirchk.dtx contain examples of how to do
-   this but only you know the directories and syntax that should be used
-   for your installation.
-
-   We hope to build up a better collection of examples in future
-   releases of LaTeX, as it is tested on more TeX systems.
-
-4) TeX version check.
-
-   The next check tests that you are running a recent version of TeX.
-   If ltxcheck reports that you have TeX2, then you should try to
-   upgrade TeX (and rebuild LaTeX) as soon as possible.  LaTeX may be
-   used with TeX2, but certain features will be missing and you will
-   not be able to use the new (8-bit) font families that are now
-   available. If you must stick with TeX2, please read the extra
-   information in the file tex2.txt.
-
-   If ltxcheck reports that your TeX version is older than 3.141, you
-   will see some strange messages during the installation.  This is
-   because earlier versions of TeX printed certain line-breaks in
-   messages on the terminal as `^^J' rather than starting a new line.
-
-   LaTeX will work round this bug and thus avoid `^^J' appearing in
-   error messages, but you should upgrade your TeX as soon as
-   possible, as other bugs have been fixed, not just line breaks in
-   messages.
-
-   At the present time (2005) the current TeX version is 3.141592.
-
-5) Fonts check.
-
-   Finally ltxcheck.tex tests to see if it can find a `representative
-   sample' of the fonts used by LaTeX.
-
-   Fonts that may cause problems are:
-   a) The circle fonts. These were renamed some years ago from circle*
-      to lcircle*, although some sites still have them under the old
-      name. Also the names are longer than 8 letters which may cause
-      some problems.
-   b) The `extra Computer Modern' fonts.  The American Mathematical
-      Society has extended the range of sizes available in the
-      Computer Modern fonts.  LaTeX now assumes that these extra cm
-      fonts are available.
-      The fonts are available from a CTAN archive, in the directory
-      ctan:macros/latex/fonts  or alternatively as part of the
-      AMS fonts collection, which also includes many useful
-      mathematical fonts.
-   c) The `T1 encoded Computer Modern' fonts.  This is the ec or dc font
-      collection. The new (1995) release 1.2 of the dc fonts changed
-      most of the file names.  For this reason the fd files such as
-      t1cmr.fd cannot be written to work with the dc fonts of different
-      releases.  LaTeX by default unpacks the fd files for the ec
-      dc fonts.
-      If you have an older release of the dc fonts and do not wish to
-      upgrade then you should unpack the necessary fd files by running
-      LaTeX on the file  olddc.ins (dc older than version 1.2) or
-      newdc.ins (version 1.2 and 1.3).
-      As the T1 fd files will have been used when making the format,
-      you must re-run  initex latex.ltx  to remake the format if you
-      update the fd files in this way.
-      Running ltxcheck will produce a ! BAD LaTeX2e system!! error
-      message if it detects that the `new' fd files are loaded into
-      the format, but only the old dc fonts are available, and vice
-      versa.
-      If the old fonts are detected, and the `old' fd files are loaded
-      then no error is generated, but a message suggesting that you
-      upgrade is produced.
-      The ec fonts are available from a CTAN archive, in the directory
-      ctan:fonts/ec .
-
-
-6) Files check.
-
-      Finally ltxcheck checks that the main TeX input files that LaTeX
-      will use when running documents (such as the article class file,
-      fd files, and main packages such as fontenc) are all available.
-
-
-DOCUMENTATION OF THE CODE
-=========================
-
-Most of the documentation is nowadays available as precomplied PDF
-files. This section describes how to produce typeset code
-documentation yourself from the source.
-
-To typeset a documented code file (a .dtx file) you simply run LaTeX
-on it. The file source2e.tex is a master file which produces the
-documented code for the whole LaTeX kernel (but not the standard
-packages, classes, or compatibility mode).  You need to have LaTeX2e
-installed before doing this.
-
-To configure the appearance of this documentation, you can use a
-ltxdoc.cfg file.  For example, putting the following line into this
-file will format the documentation for A4 paper:
-
-   \PassOptionsToClass{a4paper}{article}
-
-The doc package, which is used by the documentation files, writes
-index files and change-history files that can be processed by the
-program MakeIndex.  If this program is part of your TeX installation,
-you can get an index and history listing for a documentation file
-by running the .idx and .glo files through this program.
-
-For example, in Unix MakeIndex, you should say:
-
-   makeindex -s gind.ist FILENAME
-   makeindex -s gglo.ist -o FILENAME.gls FILENAME.glo
-
-source2e.tex needs a special source2e.ist file (in place of gind.ist).
-Running makeindex will produce some warning messages about ignored
-style specifiers; these can be safely ignored.
-
-See the comments at the end of source2e.tex for more information.
-
-
-CONFIGURING LaTeX
-=================
-
-In addition to the system-dependent customisation in texsys.cfg,
-various other parts of LaTeX can be configured to suit local needs.
-Further details can be found in the document cfgguide.tex.  We
-recommend that you install the standard system before attempting any
-further customisation.
-
-If you are thinking of making other changes to LaTeX, please read the
-document modguide.tex as it describes the precautions you need to take
-when making modifications in order to ensure that standard LaTeX
-remains a stable, maintainable system.
-
-
-FURTHER INFORMATION
-===================
-
-You will find further information about various aspects of LaTeX in
-the distributed files with names <*>guide.tex.  You will need
-to install the new version before you can typeset these files.
-
-
---- Copyright (C) 1995-2019 the LaTeX Project.  All rights reserved ---

Modified: trunk/Master/texmf-dist/doc/latex/base/tlc2.err
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/tlc2.err	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/tlc2.err	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,4 +1,4 @@
-\newcommand\erratafiledate{2014-09-30}
+\newcommand\erratafiledate{2022-01-03}
 
 \def\comando#1{\texttt{\string#1}}
 
@@ -852,6 +852,9 @@
 \erroronpage{116}{Footnote 1, line 1}{CBC}{2004/05/18}{2}
    Replace: ``I managed to confuse'' with ``we managed to confuse''.
 
+\erroronpage{117}{para 1,  l.1}{EOl}{2022/01/02}{}
+   Missing letter: ``to cho\u{o}se'' 
+
 \erroronpage{117}{para 2, l.2}{HjG}{2004/05/25}{2}
    Missing letter: ``It take\u{s} two \ldots''
 
@@ -2233,6 +2236,10 @@
    Various deviations from alphabetical sort order of the table
    entries.
 
+\erroronpage{553}{para 3,  l.1}{EOl}{2022/01/02}{}
+   Missing letter: ``sup\u{p}ressing'' 
+
+
 \iffalse % more blue align stuff
 \erroronpage{534}{page}{FMi}{2004/04/23}{}
    Printing problem: blue color not properly aligned (horizontally).
@@ -2313,7 +2320,7 @@
 \erroronpage{551}{tab 9.3}{CBe}{2004/07/27}{}
    I am surprised that in Russian there is no word for ``Glossary''.
 
-   Frank: It most certainly exits :-), but right now Babel doesn't
+   Frank: It most certainly exists :-), but right now Babel doesn't
    know about it---so there is nothing we can do about it at the
    moment. Actually the same problem exists with Polish, although here
    I got a translation ``s\l{}ownik termin\'ow'' which will eventually
@@ -2715,6 +2722,9 @@
 \erroronpage{616}{boxed texts}{FMi}{2004/05/26}{2}
    Corrections as outlined in summary entry above.
 
+\erroronpage{617}{Fig. 10-2-2}{EOl}{2021/11/17}{}
+   A ``|%|'' should follow the ending ``|}|'' of the two |\bluefbox|es.
+
 \erroronpage{618}{boxed text}{CAR}{2004/05/26}{2}
    Replace: ``\textit{key val list}'' \> ``\textit{key/val-list}''
    (also in following text).
@@ -2740,6 +2750,9 @@
 %\erroronpage{621}{page}{FMi}{2004/04/23}{}
 %   Printing problem: blue color not properly aligned.
 
+\erroronpage{621}{Fig. 10-2-8}{EOl}{2021/11/17}{}
+   A ``|%|'' should follow the ending ``|}|'' of the first |\bluefbox|.
+
 \erroronpage{623}{para 1, l.7}{HjG}{2004/06/07}{2}
    Delete word: ``some \u{of} key combinations''
 
@@ -2752,7 +2765,7 @@
         \u{\texttt{tabular}} examples''
 
 \erroronpage{631}{para.2, l.6}{FMi/HjG}{2006/10/22}{s}
-  Ersetze: "`\u{This point} is shown \ldots"' \>
+  Replace: "`\u{This point} is shown \ldots"' \>
            "`\u{This} is shown \ldots"'
 
 \erroronpage{631}{para -1, l.-1}{JBr}{2004/08/02}{2}
@@ -4547,6 +4560,7 @@
 \contributor{DHL}{Dan Luecking}
 \contributor{DIs}{Daniel Isaacson}
 \contributor{DSch}{Dirk Schlimm}
+\contributor{EOl}{Edgar Olthof}
 \contributor{ERy}{Elizabeth Ryan}
 \contributor{FHa}{Ferdy Hanssen}
 \contributor{FMi}{Frank Mittelbach}
@@ -4621,7 +4635,7 @@
 \begin{flushleft}
 |\erroronpage{|\textit{page-number}|}{|\textit{line-identification}|}{|%
    \textit{your-initials}|}{|\textit{date}|}{}| \\
-   \hspace*{2em}\textit{description of the the erratum}
+   \hspace*{2em}\textit{description of the erratum}
 \end{flushleft}
 Here is an example:
 \begin{verbatim}

Modified: trunk/Master/texmf-dist/doc/latex/base/tlc2.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/tulm.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/usrguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/usrguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/usrguide.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/usrguide.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex/base/usrguide3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/usrguide3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/usrguide3.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/base/usrguide3.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2020-2021
+% Copyright (C) 2020-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -31,12 +31,13 @@
 \documentclass{ltxguide}
 
 \usepackage[T1]{fontenc}  % needed for \textbackslash in tt
+\usepackage{csquotes}
 
 \title{New \LaTeX\ methods for authors (starting 2020)}
-\author{\copyright~Copyright 2020-2021, \LaTeX\ Project Team.\\
+\author{\copyright~Copyright 2020-2022, \LaTeX\ Project Team.\\
    All rights reserved.}
 
-\date{2021-06-11}
+\date{2022-02-19}
 
 \NewDocumentCommand\cs{m}{\texttt{\textbackslash\detokenize{#1}}}
 \NewDocumentCommand\marg{m}{\arg{#1}}
@@ -48,6 +49,18 @@
 \renewcommand \verbatim at font {\normalfont \ttfamily}
 \makeatother
 
+
+% for fpeval documentation
+
+\providecommand\fpop[1]{\mathop{\texttt{#1}}}
+\providecommand\fpbin[1]{\mathbin{\texttt{#1}}}
+\providecommand\fprel[1]{\mathrel{\texttt{#1}}}
+\providecommand\nan{\texttt{NaN}}
+
+\ExplSyntaxOn
+\ProvideExpandableDocumentCommand \fpeval { m } { \fp_eval:n {#1} }
+\ExplSyntaxOff
+
 \begin{document}
 
 \maketitle
@@ -227,6 +240,11 @@
    same name.  This should be used sparingly.
 \end{itemize}
 
+If the \meta{cmd} can't be provided as a single token but needs
+\enquote{constructing}, you can use \cs{ExpandArgs} as explained in
+Section~\ref{sec:preconstructing-csnames} which also gives an example
+in which this is needed.
+
 \begin{decl}
   |\NewDocumentEnvironment|     \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\
   |\RenewDocumentEnvironment|   \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\
@@ -288,7 +306,7 @@
 \end{verbatim}
 the user input |\foo{arg1}[arg2]{arg3}| and \verb*|\foo{arg1} [arg2] {arg3}|
 will both be parsed in the same way.
- 
+
 The behavior of optional arguments \emph{after} any mandatory arguments is
 selectable. The standard settings will allow spaces here, and thus with
 \begin{verbatim}
@@ -338,6 +356,8 @@
 Optional arguments make use of dedicated variables to return information about
 the nature of the argument received.
 
+
+
 \begin{decl}
   |\IfNoValueTF| \arg{arg} \arg{true code} \arg{false code} \\
   |\IfNoValueT|  \arg{arg} \arg{true code} \\
@@ -373,11 +393,12 @@
 When two optional arguments follow each other (a syntax we typically
 discourage), it can make sense to allow users of the command to
 specify only the second argument by providing an empty first
-argument.  Rather than testing separately for emptiness and for
+argument.
+\NEWdescription{2022/06/01}
+Rather than testing separately for emptiness and for
 |-NoValue-| it is then best to use the argument type~|O| with an
-empty default value, and simply test for emptiness using the
-\pkg{expl3} conditional \cs{tl_if_blank:nTF} or its \pkg{etoolbox}
-analogue \cs{ifblank}.
+empty default value, and then test for emptiness using the
+conditional \cs{IfBlankTF} (described below) instead.
 
 \begin{decl}
   |\IfValueTF| \arg{arg} \arg{true code} \arg{false code} \\
@@ -388,6 +409,51 @@
 as \cs{IfValue(TF)}. The context will determine which logical
 form makes the most sense for a given code scenario.
 
+
+
+
+
+\begin{decl}[2022/06/01]
+  |\IfBlankTF| \arg{arg} \arg{true code} \arg{false code} \\
+  |\IfBlankT|  \arg{arg} \arg{true code} \\
+  |\IfBlankF|  \arg{arg} \arg{false code}
+\end{decl}
+
+
+The \cs{IfNoValueTF} command chooses the \meta{true code} if the optional argument has not
+been used at all (and it returns the special \texttt{-NoValue-}
+marker), but not if it has been given an empty value. In contrast
+\cs{IfBlankTF} returns true if its argument is either truly empty or
+only contains one or more normal blanks.
+For example
+\begin{verbatim}
+\NewDocumentCommand\foo{m!o}{\par #1:
+   \IfNoValueTF{#2}{No optional}%
+                   {\IfBlankTF{#2}{Blanks in or empty}%
+                                  {Real content in}}%
+                    \space argument!}
+\foo{1}[bar] \foo{2}[  ] \foo{3}[] \foo{4}[\space] \foo{5} [x]
+\end{verbatim}
+results
+in the following output:
+\begin{quote}
+  \NewDocumentCommand\foo{m!o}{\par #1:
+    \IfNoValueTF{#2}{No optional}%
+                {\IfBlankTF{#2}{Blanks in or empty}%
+                  {Real content in}}%
+                \space argument!}
+  \foo{1}[bar] \foo{2}[  ] \foo{3}[] \foo{4}[\space] \foo{5} [x]
+\end{quote}
+  
+Note that the \cs{space} in (4) is considered real content---because it is
+a command and not a \enquote{space} character---even though it results
+in producing a space. You can also observe in (5) the effect of the
+\texttt{!} specifier, preventing the last \cs{foo}
+from interpreting \texttt{[x]} as its optional argument.
+
+
+
+
 \begin{decl}
   |\BooleanFalse|  \\
   |\BooleanTrue|
@@ -554,10 +620,12 @@
 otherwise be spaces coming from the ends the lines after |[\itshape]| and
 |world!|. Putting the prefix |!| before \texttt{b} suppresses space-trimming.
 
-When \texttt{b} is used in the argument specification, the last argument of the environment declaration (e.g., \cs{NewDocumentEnvironment}), which consists of an \meta{end code} to insert at
-|\end|\marg{environment}, is redundant since one can simply put that code at
-the end of the \meta{start code}. Nevertheless this (empty) \meta{end code}
-must be provided.
+When \texttt{b} is used in the argument specification, the last
+argument of the environment declaration (e.g.,
+\cs{NewDocumentEnvironment}), which consists of an \meta{end code} to
+insert at |\end|\marg{environment}, is redundant since one can simply
+put that code at the end of the \meta{start code}. Nevertheless this
+(empty) \meta{end code} must be provided.
 
 Environments that use this feature can be nested.
 
@@ -665,7 +733,7 @@
 \subsection{Creating new argument processors}
 
 \begin{decl}
-  |\ProcessedArgument| 
+  |\ProcessedArgument|
 \end{decl}
 Argument processors allow manipulation of a grabbed argument before it is
 passed to the underlying code. New processor implementations may be created
@@ -710,4 +778,280 @@
 the \meta{function} or \meta{environment} has no known argument
 specification then an error is issued.
 
+
+
+\section{Copying and showing (robust) commands}
+
+If you want to (slightly) alter an existing command you may want to
+save the current definition under a new name and then use that in a
+new definition. If the existing command is robust, then the old trick of
+using the low-level \cs{let} for this doesn't work, because it only
+copies the top-level definition, but not the part that actually does
+the work. As most \LaTeX{} commands are nowadays robust, \LaTeX{}
+now offers some high-level declarations for this instead.
+
+However, please note that it is usually better to make use of
+available hooks (e.g., the generic command or environment hooks),
+instead of copying the current definition and thereby freezing it; see
+the hook management documentation \texttt{lthooks-doc.pdf} for
+details.
+
+\begin{decl}
+  |\NewCommandCopy|       \arg{cmd} \arg{existing-cmd} \\
+  |\RenewCommandCopy|     \arg{cmd} \arg{existing-cmd} \\
+  |\DeclareCommandCopy|   \arg{cmd} \arg{existing-cmd}
+\end{decl}
+
+This copies the definition of \meta{existing-cmd} to \meta{cmd}. After
+this \meta{existing-cmd} can be redefined and \meta{cmd}
+still works! This allows you to then provide a new definition for
+\meta{existing-cmd} that makes use of \meta{cmd} (i.e., of its old
+definition). For example, after
+\begin{verbatim}
+  \NewCommandCopy\LaTeXorig\LaTeX
+  \RenewDocumentCommand\LaTeX{}{\textcolor{blue}{\LaTeXorig}}
+\end{verbatim}
+all \LaTeX{} logos generated with \cs{LaTeX} will come out in blue
+(assuming you have a color package loaded).
+
+The differences between \cs{New...} and \cs{Renew...} are as
+elsewhere: i.e., you get an error depending on whether or not
+\meta{cmd} already exists, or in case of \cs{Declare...} it is copied
+regardless. Note that there is no \cs{Provide...} declaration, because
+that would be of limited value.
+
+
+If the \meta{cmd} or \meta{existing-cmd} can't be provided as a single
+token but need \enquote{constructing}, you can use \cs{ExpandArgs}
+as explained in
+Section~\ref{sec:preconstructing-csnames}.
+
+
+
+
+\begin{decl}
+  |\ShowCommand|       \arg{cmd}
+\end{decl}
+
+This displays the meaning of the \meta{cmd} on the terminal and then
+stops (just like the primitive \cs{show}). The difference is that it
+correctly shows the meaning of more complex commands, e.g., in case of
+robust commands it displays not only the top-level definition but
+also the actual payload code and in case of commands declared with
+\cs{NewDocumentCommand}, etc.\ it also gives you detailed information
+about the argument signature.
+
+
+\section[Preconstructing command names \\ (or otherwise expanding arguments)]
+        {Preconstructing command names (or otherwise expanding arguments)}
+\label{sec:preconstructing-csnames}
+
+When declaring new commands with \cs{NewDocumentCommand} or
+\cs{NewCommandCopy} or similar, it is sometimes necessary to
+``construct'' the csname. As a general mechanism the L3 programming
+layer has \cs{exp_args:N...} for this, but there is no mechanism for
+it if \cs{ExplSyntaxOn} is not active (and mixing programming and user
+interface level commands is not a good approach anyhow). We therefore
+offer a mechanism to access this ability using CamelCase naming.
+
+\begin{decl}
+  |\UseName|  \arg{string} \\
+  |\ExpandArgs| \arg{spec} \arg{cmd} \arg{arg1} \dots
+\end{decl}
+
+\cs{UseName} turns the \meta{string} directly into a csname and
+then executes it: this is equivalent to the long-standing
+\LaTeXe{} internal command \cs{@nameuse}, or the L3 programming
+equivalent \cs{use:c}. \cs{ExpandArgs} takes a \meta{spec} which
+describes how to expand the \meta{arguments}, carries out these
+operations then executes the \meta{cmd}. The \meta{spec} uses
+the descriptions offered by the L3 programming layer, and the
+relevant \cs{exp_args:N...} function must exist. Common cases will
+have a \meta{spec} of \texttt{c}, \texttt{cc} or \texttt{Nc}: see below.
+
+As an example, the following declaration provides a method to generate
+copyedit commands:
+\begin{verbatim}
+\NewDocumentCommand\newcopyedit{mO{red}}
+  {\newcounter{todo#1}%
+   \ExpandArgs{c}\NewDocumentCommand{#1}{s m}%
+     {\stepcounter{todo#1}%
+      \IfBooleanTF {##1}%
+         {\todo[color=#2!10]{\UseName{thetodo#1}: ##2}}%
+         {\todo[inline,color=#2!10]{\UseName{thetodo#1}: ##2}}%
+     }%
+  }
+\end{verbatim}
+Given that declaration you can then write
+\verb/\newcopyedit{note}[blue]/ which defines the command \cs{note}
+and the corresponding counter for you.
+
+A second example is to copy a command by string name using
+\cs{NewCommandCopy}: here we might need to construct both command
+names.
+\begin{verbatim}
+\NewDocumentCommand\savebyname{m}
+  {\ExpandArgs{cc}\NewCommandCopy{saved#1}{#1}}
+\end{verbatim}
+
+In the \meta{spec} each \texttt{c} stands for one argument that is
+turned into a `\texttt{c}'ommand. An \texttt{n} represents a
+`\texttt{n}'ormal argument that is not altered and \texttt{N} stands for
+a `\texttt{N}'ormal argument which is also left unchanged, but one
+consisting only of a single token (and usually unbraced). Thus, to
+construct a command from a string only for the second argument of
+\cs{NewCommandCopy} you would write
+\begin{verbatim}
+\ExpandArgs{Nc}\NewCommandCopy\mysectionctr{c at section}
+\end{verbatim}
+There are several other single letters supported in the L3 programming
+layer that \emph{could} be used in the \meta{spec} to manipulate
+arguments in other ways.  If you are interested, take a look at the
+\enquote{Argument expansion} section in the L3 programming layer
+documentation in \texttt{interface3.pdf}.
+
+
+
+\section{Expandable floating point (and other) calculations}
+
+The \LaTeX3 programming layer which is part of the format offers a
+rich interface to manipulate floating point variables and values. To
+allow for (simpler) applications to use this on document-level or in
+packages otherwise not making use of the L3 programming layer a few
+interface commands are made available.
+
+
+\begin{decl}
+  |\fpeval| \arg{floating point expression}
+\end{decl}
+
+The expandable command \cs{fpeval} takes as its argument a floating
+point expression and produces a result using the normal rules of
+mathematics. As this command is expandable it can be used where \TeX{}
+requires a number and for example within a low-level \cs{edef} operation
+to give a purely numerical result.
+
+
+
+Briefly, the floating point expressions may comprise:
+\begin{itemize}
+  \item Basic arithmetic: addition $x\fpbin{+}y$, subtraction $x\fpbin{-}y$,
+    multiplication $x\fpbin{*}y$, division $x\fpbin{/}y$, square root~$\sqrt{x}$,
+    and parentheses.
+  \item Comparison operators: $x\fprel{<}y$,
+    $x\fprel{<=}y$, $x\fprel{>?}y$,
+    $x\fprel{!=}y$ \emph{etc.}
+  \item Boolean logic: sign $\fpop{sign} x$,
+    negation $\fpop{!}x$, conjunction
+    $x\fprel{\&\&}y$, disjunction $x\fprel{\string|\string|}y$, ternary
+    operator $x\fprel{?}y\fprel{:}z$.
+  \item Exponentials: $\fpop{exp} x$, $\fpop{ln} x$, $x\mathord{\texttt{\^{}}}y$.
+  \item Integer factorial: $\fpop{fact} x$.
+  \item Trigonometry: $\fpop{sin} x$, $\fpop{cos} x$, $\fpop{tan} x$, $\fpop{cot} x$, $\fpop{sec}
+    x$, $\fpop{csc} x$ expecting their arguments in radians, and
+    $\fpop{sind} x$, $\fpop{cosd} x$,
+    $\fpop{tand} x$, $\fpop{cotd} x$,
+    $\fpop{secd} x$, $\fpop{cscd} x$ expecting their
+    arguments in degrees.
+  \item Inverse trigonometric functions: $\fpop{asin} x$,
+    $\fpop{acos} x$, $\fpop{atan} x$,
+    $\fpop{acot} x$, $\fpop{asec} x$,
+    $\fpop{acsc} x$ giving a result in radians, and
+    $\fpop{asind} x$, $\fpop{acosd} x$,
+    $\fpop{atand} x$, $\fpop{acotd} x$,
+    $\fpop{asecd} x$, $\fpop{acscd} x$ giving a result
+    in degrees.
+  \item Extrema: $\fpop{max}(x_{1},x_{2},\ldots)$, $\fpop{min}(x_{1},x_{2},\ldots)$,
+    $\fpop{abs}(x)$.
+  \item Rounding functions, controlled by two optional
+    values,  $n$ (number of places, $0$ by default) and
+      $t$ (behavior on a tie, $\nan$ by default):
+    \begin{itemize}
+    \item $\fpop{trunc}(x,n)$ rounds towards zero,
+    \item $\fpop{floor}(x,n)$ rounds towards~$-\infty$,
+    \item $\fpop{ceil}(x,n)$ rounds towards~$+\infty$,
+    \item $\fpop{round}(x,n,t)$ rounds to the closest value, with
+    ties rounded to an even value by default, towards zero if $t=0$,
+    towards $+\infty$ if $t>0$ and towards $-\infty$ if $t<0$.
+    \end{itemize}
+  \item Random numbers: $\fpop{rand}()$, $\fpop{randint}(m,n)$.
+  \item Constants: \texttt{pi}, \texttt{deg} (one degree in radians).
+  \item Dimensions, automatically expressed in points, \emph{e.g.},
+    \texttt{pc} is~$12$.
+  \item Automatic conversion (no need for \cs{number}) of
+    integer, dimension, and skip variables to floating points numbers,
+    expressing dimensions in points and ignoring the stretch and
+    shrink components of skips.
+  \item Tuples: $(x_1,\ldots{},x_n)$ that can be added together,
+    multiplied or divided by a floating point number, and nested.
+\end{itemize}
+
+An example of use could be the following:
+\begin{verbatim}
+  \LaTeX{} can now compute: $ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3}
+  = \fpeval{sin(3.5)/2 + 2e-3} $.
+\end{verbatim}
+which produces the following output:
+\begin{quote}
+  \LaTeX{} can now compute: $ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3}
+  = \fpeval{sin(3.5)/2 + 2e-3} $.
+\end{quote}
+
+\begin{decl}
+  |\inteval| \arg{integer expression}
+\end{decl}
+
+  The expandable command \cs{inteval} takes as its argument an integer
+  expression and produces a result using the normal rules of
+  mathematics with some restrictions, see below. The operations
+  recognized are |+|, |-|, |*| and |/| plus parentheses.  As this
+  command is expandable it can be used where \TeX{} requires a number
+  and for example within a low-level \cs{edef} operation to give a
+  purely numerical result.
+
+  This is basically a thin wrapper for the primitive \cs{numexpr}
+  command and therefore has some syntax restrictions. These are:
+  \begin{itemize}
+  \item \texttt{/} denotes division rounded to the closest integer with
+    ties rounded away from zero;
+  \item there is an error and the overall expression evaluates to zero
+    whenever the absolute value of any intermediate result exceeds
+    $2^{31}-1$, except in the case of scaling operations
+    $a$\texttt{*}$b$\texttt{/}$c$, for which $a$\texttt{*}$b$ may be
+    arbitrarily large;
+  \item parentheses may not appear after unary \texttt{+} or
+    \texttt{-}, namely placing \texttt{+(} or \texttt{-(} at the start
+    of an expression or after \texttt{+}, \texttt{-}, \texttt{*},
+    \texttt{/} or~\texttt{(} leads to an error.
+  \end{itemize}
+
+An example of use could be the following.
+\begin{verbatim}
+\LaTeX{} can now compute: The sum of the numbers is $\inteval{1 + 2 + 3}$.
+\end{verbatim}
+which results in
+\enquote{\LaTeX{} can now compute: The sum of the numbers is $\inteval{1 + 2 + 3}$.}
+
+
+\begin{decl}
+  |\dimeval| \arg{dimen expression} \qquad
+  |\skipeval| \arg{skip expression}
+\end{decl}
+
+Similar to \cs{inteval} but computing a length (\texttt{dimen}) or a
+rubber length (\texttt{skip}) value. Both are thin wrappers around
+the corresponding engine primitives, which makes them fast, but
+therefore shows the same syntax peculiars as discussed
+above. Nevertheless, in practice they are usually sufficient.  For
+example
+\begin{verbatim}
+\newcommand\calulateheight[1]{%
+  \setlength\textheight{\dimeval{\topskip+\baselineskip*\inteval{#1-1}}}}
+\end{verbatim}
+sets the \cs{textheight} to the appropriate value if a page should
+hold a specific number of text lines. Thus after |\calulateheight{40}|
+it is set to \dimeval{\topskip+\baselineskip*\inteval{40-1}}, given
+the values \cs{topskip} (\dimeval{\topskip}) and \cs{baselineskip}
+(\dimeval{\baselineskip}) in the current document.
+
 \end{document}

Modified: trunk/Master/texmf-dist/doc/latex/base/utf8ienc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/base/webcomp.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/firstaid/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/firstaid/changes.txt	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/firstaid/changes.txt	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,3 +1,12 @@
+2022-02-20  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* latex2e-first-aid-for-external-files.dtx:
+	Fixes for biditools because taken out as package is updated
+
+2021-11-18  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* All *.dtx: Replaced \StopEventually by \MaybeStop
+
 2021-11-11  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* latex2e-first-aid-for-external-files.dtx:

Modified: trunk/Master/texmf-dist/doc/latex/firstaid/latex2e-first-aid-for-external-files.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/graphics/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/graphics/README.md	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/graphics/README.md	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,7 +1,7 @@
 The LaTeX `graphics` bundle
 ===========================
 
-Release 2021-12-14
+Release 2022-06-01
 
 Overview
 --------
@@ -61,4 +61,4 @@
 
 -----
 
-<p>Copyright (C) 1993-2021 The LaTeX Project <br />
+<p>Copyright (C) 1993-2022 The LaTeX Project <br />

Modified: trunk/Master/texmf-dist/doc/latex/graphics/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/graphics/changes.txt	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/graphics/changes.txt	2022-06-08 20:41:20 UTC (rev 63514)
@@ -9,6 +9,26 @@
 ================================================================================
 
 #########################
+# 2022-06-01 Release
+#########################
+
+2022-03-10  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+
+	* graphics.dtx:
+	Use \set at curr@file at nosearch to avoid premature inclusion of path
+	from \cs{graphicspath} (gh/776).
+
+2022-01-06  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* mathcolor.dtx:
+	Support \mathcolor to correctly color parts of formulas without
+	spacing problems. This command is *only* supported in math mode.
+
+2021-12-07  Ulrike Fischer <Ulrike.Fischer at latex-project.org>
+
+	* color.dtx: Remove stray spaces after change for xcolor/gh/10}
+
+#########################
 # 2021-12-14 Release
 #########################
 

Modified: trunk/Master/texmf-dist/doc/latex/graphics/color.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/graphics/drivers.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/graphics/epsfig.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/graphics/graphics.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/graphics/graphicx.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/graphics/grfguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/graphics/grfguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/graphics/grfguide.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/graphics/grfguide.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -243,12 +243,27 @@
 So the above is essentially equivalent to
 |{\color|\arg{name}\emph{text}|}|.
 
+\subsection{Using Colours in math formulas}
+
+While |\color| and to some extent |\textcolor| can be used in
+formulas, this is cumbersome, may lead to bad spacing, and in some
+situations is simply not possible. For this reason we also introduce
+|\mathcolor| which will help in this respect. The basic syntax is:
+
+\begin{decl}
+|\mathcolor|\arg{name}\arg{math}
+\end{decl}
+
+See \texttt{mathcolor.pdf} for details on this command.
+
+
 \subsubsection{Using colour specifications directly}
 
 
 \begin{decl}
 |\color|\oarg{model}\arg{specification}\\
-|\textcolor|\oarg{model}\arg{specification}\arg{text}
+|\textcolor|\oarg{model}\arg{specification}\arg{text}\\
+|\mathcolor|\oarg{model}\arg{specification}\arg{math}
 \end{decl}
 
 Normally one would predeclare all the colours used in a package, or in

Modified: trunk/Master/texmf-dist/doc/latex/graphics/keyval.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/graphics/lscape.pdf
===================================================================
(Binary files differ)

Added: trunk/Master/texmf-dist/doc/latex/graphics/mathcolor.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/graphics/mathcolor.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/graphics/mathcolor.pdf	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/graphics/mathcolor.pdf	2022-06-08 20:41:20 UTC (rev 63514)

Property changes on: trunk/Master/texmf-dist/doc/latex/graphics/mathcolor.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/graphics/rotating.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/graphics/rotex.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/graphics/trig.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tools/README.md	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/tools/README.md	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,7 +1,7 @@
 The LaTeX `tools` bundle
 ========================
 
-Release 2021-11-15
+Release 2022-06-01
 
 Overview
 --------
@@ -51,4 +51,4 @@
 
 -----
 
-<p>Copyright (C) 1993-2021 The LaTeX Project <br />
+<p>Copyright (C) 1993-2022 The LaTeX Project <br />

Modified: trunk/Master/texmf-dist/doc/latex/tools/afterpage.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/array.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/bm.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/calc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tools/changes.txt	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/tools/changes.txt	2022-06-08 20:41:20 UTC (rev 63514)
@@ -10,6 +10,32 @@
 ================================================================================
 
 #########################
+# 2022-06-01 Release
+#########################
+
+2022-04-12  Ulrike Fischer  <Ulrike.Fischer at latex-project.org>
+
+	* showkeys.dtx: Adapt to starred references, update varioref support.
+      Added rollback to 2014-10-28
+
+2022-01-05  David Carlisle  <David.Carlisle at latex-project.org>
+
+	* bm.dtx: Guard \nolimits@ for gh issue 744
+
+2021-12-05  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* multicol.dtx (subsection{Manual column breaking} \label{sec:colbreak}):
+	Added a missing guard in \newcolumn -- it only worked in hmode (sx/624940)
+
+2021-11-30  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* multicol.dtx: Added rollback to v1.8 (2019-10-01 release)
+
+2021-11-18  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* All *.dtx: Replaced \StopEventually by \MaybeStop
+
+#########################
 # 2021-11-15 Release
 #########################
 
@@ -87,7 +113,7 @@
 2021-03-28  David Carlisle  <David.Carlisle at latex-project.org>
 
 	* longtable.dtx: \reset at font in captions gh/133
-	
+
 	* longtable.dtx: Allow paragraphs in footnotes gh/364
 
 2021-03-10  Johannes Braams  <Johannes.Braams at latex-project.org>
@@ -1903,4 +1929,3 @@
 	Changed driver code slightly.
 	Moved the driver code in front so that the documentation can be
         processed by simply running the file through LaTeX2e.
-

Modified: trunk/Master/texmf-dist/doc/latex/tools/dcolumn.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/delarray.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/enumerate.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/fileerr.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/fontsmpl.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/ftnright.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/hhline.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/indentfirst.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/layout.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/longtable.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/multicol.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/rawfonts.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/shellesc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/showkeys.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/somedefs.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/tabularx.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/theorem.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/tools-overview.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/tools-overview.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tools/tools-overview.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/doc/latex/tools/tools-overview.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,7 +1,7 @@
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesFile{tools-overview.tex}[2015/03/31 v1.0 Tools overview]
 
-% Copyright (C) 2006-2021
+% Copyright (C) 2006-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.

Modified: trunk/Master/texmf-dist/doc/latex/tools/trace.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/varioref.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/verbatim.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/xr.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tools/xspace.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/makeindex/latex/gglo.ist
===================================================================
--- trunk/Master/texmf-dist/makeindex/latex/gglo.ist	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/makeindex/latex/gglo.ist	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -43,7 +43,12 @@
 %% extension .ins) which are part of the distribution.
 %%
 %% Package `doc' to use with LaTeX 2e
-%% Copyright (C) 1989-2020 Frank Mittelbach, all rights reserved.
+%% Copyright (C) 1989-2022 Frank Mittelbach, all rights reserved.
+
+
+
+
+
 %% This is a MAKEINDEX style file which should be used to
 %% generate the formatted change history for use with the doc
 %% package. The TeX commands used below are defined in
@@ -75,6 +80,7 @@
 postamble
 "\n\n \\end{theglossary}\n"
 keyword "\\glossaryentry"
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% 
 %%
 %% End of file `gglo.ist'.

Modified: trunk/Master/texmf-dist/makeindex/latex/gind.ist
===================================================================
--- trunk/Master/texmf-dist/makeindex/latex/gind.ist	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/makeindex/latex/gind.ist	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -43,7 +43,12 @@
 %% extension .ins) which are part of the distribution.
 %%
 %% Package `doc' to use with LaTeX 2e
-%% Copyright (C) 1989-2020 Frank Mittelbach, all rights reserved.
+%% Copyright (C) 1989-2022 Frank Mittelbach, all rights reserved.
+
+
+
+
+
 %% This is a MAKEINDEX style file which should be used to
 %% generate the formatted index for use with the doc
 %% package. The TeX commands used below are defined in
@@ -73,6 +78,7 @@
 heading_prefix   "{\\bfseries\\hfil "
 heading_suffix   "\\hfil}\\nopagebreak\n"
 headings_flag       1
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% 
 %%
 %% End of file `gind.ist'.

Modified: trunk/Master/texmf-dist/source/latex/amsmath/amsbsy.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/amsmath/amsbsy.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/amsmath/amsbsy.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -81,7 +81,7 @@
 % \[
 %           \pmb{\infty} = \boldsymbol{\infty} \quad ?
 % \]
-% \StopEventually{}
+% \MaybeStop{}
 %
 %    Standard package info.
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/amsmath/amsbsy.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/amsmath/amsbsy.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/amsmath/amsbsy.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -26,7 +26,7 @@
 \preamble
 
 Copyright (C) 1995, 1999 American Mathematical Society.
-Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
+Copyright (C) 2016-2022 LaTeX Project and American Mathematical Society.
 
 This work may be distributed and/or modified under the
 conditions of the LaTeX Project Public License, either version 1.3c

Modified: trunk/Master/texmf-dist/source/latex/amsmath/amscd.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/amsmath/amscd.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/amsmath/amscd.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -2,7 +2,7 @@
 % \iffalse meta-comment
 %
 % Copyright (C) 1995, 1999 American Mathematical Society.
-% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
+% Copyright (C) 2016-2022 LaTeX Project and American Mathematical Society.
 %
 % This work may be distributed and/or modified under the
 % conditions of the LaTeX Project Public License, either version 1.3c
@@ -97,7 +97,7 @@
 % \end{CD}\end{equation}
 % \end{verbatim}
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %    Standard package info.
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/amsmath/amscd.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/amsmath/amscd.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/amsmath/amscd.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 %%
 %% Copyright (C) 2010 American Mathematical Society.
-%% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
+%% Copyright (C) 2016-2022 LaTeX Project and American Mathematical Society.
 %%
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License, either version 1.3c
@@ -25,7 +25,7 @@
 \preamble
 
 Copyright (C) 1995, 1999 American Mathematical Society.
-Copyright (C) 2016-2021  LaTeX Project and American Mathematical Society.
+Copyright (C) 2016-2022  LaTeX Project and American Mathematical Society.
 
 This work may be distributed and/or modified under the
 conditions of the LaTeX Project Public License, either version 1.3c

Modified: trunk/Master/texmf-dist/source/latex/amsmath/amsgen.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/amsmath/amsgen.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/amsmath/amsgen.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -2,7 +2,7 @@
 % \iffalse meta-comment
 %
 % Copyright (C) 1995, 1999 American Mathematical Society.
-% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
+% Copyright (C) 2016-2022 LaTeX Project and American Mathematical Society.
 %
 % This work may be distributed and/or modified under the
 % conditions of the LaTeX Project Public License, either version 1.3c
@@ -49,7 +49,7 @@
 %    distribution. Some of these might eventually make it into the \latex/
 %    kernel.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %    Standard package info.
 %    Using \cs{ProvidesFile} rather than \cs{ProvidesPackage} because

Modified: trunk/Master/texmf-dist/source/latex/amsmath/amsgen.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/amsmath/amsgen.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/amsmath/amsgen.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -25,7 +25,7 @@
 \preamble
 
 Copyright (C) 1995, 1999 American Mathematical Society.
-Copyright (C) 2016-2021  LaTeX Project and American Mathematical Society.
+Copyright (C) 2016-2022  LaTeX Project and American Mathematical Society.
 
 This work may be distributed and/or modified under the
 conditions of the LaTeX Project Public License, either version 1.3c

Modified: trunk/Master/texmf-dist/source/latex/amsmath/amsmath.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/amsmath/amsmath.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/amsmath/amsmath.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -2,7 +2,7 @@
 % \iffalse meta-comment
 %
 % Copyright (C) 1995, 2000, 2013 American Mathematical Society.
-% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
+% Copyright (C) 2016-2022 LaTeX Project and American Mathematical Society.
 %
 % This work may be distributed and/or modified under the
 % conditions of the LaTeX Project Public License, either version 1.3c
@@ -68,7 +68,7 @@
 %    provided here is found in the AMSmath Users' Guide,
 %    \fn{amsldoc.tex}.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %    Standard file identification.
 %    \begin{macrocode}
@@ -86,7 +86,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesPackage{amsmath}[2021/10/15 v2.17l AMS math features]
+\ProvidesPackage{amsmath}[2022/04/08 v2.17n AMS math features]
 %    \end{macrocode}
 %
 % \section{Catcode defenses}
@@ -615,7 +615,8 @@
 %    abbreviations for some commonly needed mathstyle overrides. To
 %    conserve csnames we avoid making \cn{dfrac} and \cn{tfrac} robust
 %    (\cn{genfrac} is itself robust).
-%    \changes{v2.17i}{2020/09/23}{added \cs{Ustack} for luatex (moved patch from lualatex-math)}
+% \changes{v2.17i}{2020/09/23}{added \cs{Ustack} for luatex (moved patch from lualatex-math)}
+% \changes{v2.17n}{2022/04/08}{Make fraction commands robust (gh/123)}
 %    \begin{macrocode}
 %
 \ifx\directlua\@undefined
@@ -623,8 +624,8 @@
 \else
 \DeclareRobustCommand{\frac}[2]{{\Ustack{\begingroup#1\endgroup\@@over#2}}}
 \fi
-\newcommand{\dfrac}{\genfrac{}{}{}0}
-\newcommand{\tfrac}{\genfrac{}{}{}1}
+\DeclareRobustCommand{\dfrac}{\genfrac{}{}{}0}
+\DeclareRobustCommand{\tfrac}{\genfrac{}{}{}1}
 %    \end{macrocode}
 %    The \cn{binom} command for binomial notation works like \cn{frac}
 %    and has similar variants. Note that we do not use \cs{z@} in
@@ -632,10 +633,11 @@
 %    like \cn{binom}, and so the \cs{z@} with the potentially
 %    problematic \qc{\@} character would become visible when writing one
 %    of those commands to a \fn{.toc} file.
+% \changes{v2.17n}{2022/04/08}{Make binom commands robust (gh/123)}
 %    \begin{macrocode}
 \DeclareRobustCommand{\binom}{\genfrac()\z@{}}
-\newcommand{\dbinom}{\genfrac(){0pt}0}
-\newcommand{\tbinom}{\genfrac(){0pt}1}
+\DeclareRobustCommand{\dbinom}{\genfrac(){0pt}0}
+\DeclareRobustCommand{\tbinom}{\genfrac(){0pt}1}
 %    \end{macrocode}
 %
 %  \begin{macro}{\genfrac}
@@ -938,8 +940,9 @@
 %    an equation or piece of an equation. (Not including the equation
 %    number.) This isn't trivial for end-users to do it properly
 %    with \cs{fbox} so we provide a command for them.
+% \changes{v2.17n}{2022/04/08}{Make \cs{boxed} command robust (gh/123)}
 %    \begin{macrocode}
-\newcommand{\boxed}[1]{\fbox{\m at th$\displaystyle#1$}}
+\DeclareRobustCommand{\boxed}[1]{\fbox{\m at th$\displaystyle#1$}}
 %    \end{macrocode}
 %    \end{macro}
 %
@@ -980,8 +983,9 @@
 %    small space on the left, larger space on the right. The \qc{\:}
 %    character by itself is treated as a \cs{mathrel} i.e. large, equal
 %    spacing on both sides.
+% \changes{v2.17n}{2022/04/08}{Make \cs{colon} command robust (gh/123)}
 %    \begin{macrocode}
-\renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript
+\DeclareRobustCommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript
   \mkern-\thinmuskip{:}\mskip6muplus1mu\relax}
 %    \end{macrocode}
 %    \end{macro}
@@ -1386,10 +1390,10 @@
  {{\cdotp}\mkern1mu{\cdotp}\mkern1mu{\cdotp}}%
  {{\cdotp}\mkern1mu{\cdotp}\mkern1mu{\cdotp}}}
 %
-\ams at newcommand{\iint}{\DOTSI\protect\MultiIntegral{2}}
-\ams at newcommand{\iiint}{\DOTSI\protect\MultiIntegral{3}}
-\ams at newcommand{\iiiint}{\DOTSI\protect\MultiIntegral{4}}
-\newcommand{\idotsint}{\DOTSI\protect\MultiIntegral{0}}
+\ams at newcommand{\iint}{\DOTSI\MultiIntegral{2}}
+\ams at newcommand{\iiint}{\DOTSI\MultiIntegral{3}}
+\ams at newcommand{\iiiint}{\DOTSI\MultiIntegral{4}}
+\newcommand{\idotsint}{\DOTSI\MultiIntegral{0}}
 %    \end{macrocode}
 %    \end{macro}
 %    \end{macro}
@@ -1403,8 +1407,9 @@
 %    the left-hand space a bit to make the subscript visually centered.
 %
 %    \verb'#1' is the multiplicity.
+% \changes{v2.17n}{2022/04/08}{Make \cs{MultiIntegral} command robust (gh/123)}
 %    \begin{macrocode}
-\newcommand{\MultiIntegral}[1]{%
+\DeclareRobustCommand{\MultiIntegral}[1]{%
   \edef\ints at c{\noexpand\intop
     \ifnum#1=\z@\noexpand\intdots@\else\noexpand\intkern@\fi
     \ifnum#1>\tw@\noexpand\intop\noexpand\intkern@\fi
@@ -1582,11 +1587,12 @@
 %    the \latex/ kernel; the macro |\n at space| is then superfluous (since
 %    it is only used once) and should be removed to avoid wasting hash
 %    table space unnecessarily.
+% \changes{v2.17n}{2022/04/08}{Make biggg commands robust (gh/123)}
 %    \begin{macrocode}
-\renewcommand{\big}{\bBigg@\@ne}
-\renewcommand{\Big}{\bBigg@{1.5}}
-\renewcommand{\bigg}{\bBigg@\tw@}
-\renewcommand{\Bigg}{\bBigg@{2.5}}
+\DeclareRobustCommand{\big}{\bBigg@\@ne}
+\DeclareRobustCommand{\Big}{\bBigg@{1.5}}
+\DeclareRobustCommand{\bigg}{\bBigg@\tw@}
+\DeclareRobustCommand{\Bigg}{\bBigg@{2.5}}
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -1666,6 +1672,17 @@
   {\mathop{\kern\z@#1}\limits^{\vbox to-1.4\ex@{\kern-\tw@\ex@
    \hbox{\,\normalfont....}\vss}}}}
 %    \end{macrocode}
+%    
+%    We make the commands robust only at the end of the preamble as
+%    \pkg{amsmath} interacts with \pkg{stix} (which should also move
+%    to robust commands).
+% \changes{v2.17n}{2022/04/08}{Make dddot commands robust (gh/123)}
+%    \begin{macrocode}
+\AtBeginDocument{%
+  \MakeRobust\dddot
+  \MakeRobust\ddddot
+  }
+%    \end{macrocode}
 %    \end{macro}
 %    \end{macro}
 %
@@ -2087,14 +2104,16 @@
 %    \begin{macro}{\mod}
 %    The commands \cn{bmod}, \cn{pmod}, \cn{pod}, \cn{mod} aren't
 %    currently robust. [mjd, 1994/09/05]
+%    Now they are
+% \changes{v2.17n}{2022/04/08}{Make mod commands robust (gh/123)}
 %    \begin{macrocode}
-\renewcommand{\bmod}{\nonscript\mskip-\medmuskip\mkern5mu\mathbin
+\DeclareRobustCommand{\bmod}{\nonscript\mskip-\medmuskip\mkern5mu\mathbin
   {\operator at font mod}\penalty900
   \mkern5mu\nonscript\mskip-\medmuskip}
-\newcommand{\pod}[1]{\allowbreak
+\DeclareRobustCommand{\pod}[1]{\allowbreak
   \if at display\mkern18mu\else\mkern8mu\fi(#1)}
-\renewcommand{\pmod}[1]{\pod{{\operator at font mod}\mkern6mu#1}}
-\newcommand{\mod}[1]{\allowbreak\if at display\mkern18mu
+\DeclareRobustCommand{\pmod}[1]{\pod{{\operator at font mod}\mkern6mu#1}}
+\DeclareRobustCommand{\mod}[1]{\allowbreak\if at display\mkern18mu
   \else\mkern12mu\fi{\operator at font mod}\,\,#1}
 %    \end{macrocode}
 %    \end{macro}
@@ -2109,8 +2128,9 @@
 %    fraction rules to line up. The \cs{strut} keeps the numerator of
 %    a subsidiary cfrac from coming too close to the fraction rule above
 %    it.
+% \changes{v2.17n}{2022/04/08}{Make \cs{cfrac} command robust (gh/123)}
 %    \begin{macrocode}
-\newcommand{\cfrac}[3][c]{{\displaystyle\frac{%
+\DeclareRobustCommand{\cfrac}[3][c]{{\displaystyle\frac{%
   \strut\ifx r#1\hfill\fi#2\ifx l#1\hfill\fi}{#3}}%
   \kern-\nulldelimiterspace}
 %    \end{macrocode}
@@ -2123,13 +2143,15 @@
 %    naturally accept limits. \cs{binrel@@} uses information collected
 %    by \cs{binrel@} to make the resulting construction be of type
 %    mathrel or mathbin if the base symbol is either of those types.
+% \changes{v2.17n}{2022/04/08}{Make \cs{overset}, \cs{underset} and
+%                              \cs{overunderset} commands robust (gh/123)}
 %    \begin{macrocode}
-\newcommand{\overset}[2]{\binrel@{#2}%
+\DeclareRobustCommand{\overset}[2]{\binrel@{#2}%
   \binrel@@{\mathop{\kern\z@#2}\limits^{#1}}}
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\newcommand{\underset}[2]{\binrel@{#2}%
+\DeclareRobustCommand{\underset}[2]{\binrel@{#2}%
   \binrel@@{\mathop{\kern\z@#2}\limits_{#1}}}
 %    \end{macrocode}
 %    \end{macro}
@@ -2141,7 +2163,7 @@
 %    something that is sometimes needed.
 % \changes{v2.17c}{2019/04/01}{New command \cs{overunderset}}
 %    \begin{macrocode}
-\newcommand{\overunderset}[3]{\binrel@{#3}%
+\DeclareRobustCommand{\overunderset}[3]{\binrel@{#3}%
   \binrel@@{\mathop{\kern\z@#3}\limits^{#1}_{#2}}}
 %    \end{macrocode}
 %  \end{macro}
@@ -2157,8 +2179,9 @@
 %    have to read and measure the top and bottom limits and use
 %    mathchoice to always get the right mathstyle for each piece,
 %    etc., etc.
+% \changes{v2.17n}{2022/04/08}{Make \cs{sideset} command robust (gh/123)}
 %    \begin{macrocode}
-\newcommand{\sideset}[3]{%
+\DeclareRobustCommand{\sideset}[3]{%
   \@mathmeasure\z@\displaystyle{#3}%
 %    \end{macrocode}
 %    Use a global box assignment here since the depth override is
@@ -2182,9 +2205,10 @@
 %    denoting the part of the formula to be smashed.
 % \changes{v2.17b}{2018/12/01}{Start LR-mode for \cs{smash}
 %   if necessary (github/49)}
+% \changes{v2.17n}{2022/04/08}{Make \cs{smash} command robust (gh/123)}
 %    \begin{macrocode}
 \ifx\leavevmode at ifvmode\@undefined
-\renewcommand{\smash}[1][tb]{%
+\DeclareRobustCommand{\smash}[1][tb]{%
   \def\mb at t{\ht}\def\mb at b{\dp}\def\mb at tb{\ht\z@\z@\dp}%
   \edef\finsm at sh{\csname mb@#1\endcsname\z@\z@\box\z@}%
   \ifmmode \@xp\mathpalette\@xp\mathsm at sh
@@ -2192,7 +2216,7 @@
   \fi
 }
 \else
-\renewcommand{\smash}[1][tb]{%
+\DeclareRobustCommand{\smash}[1][tb]{%
   \def\mb at t{\ht}\def\mb at b{\dp}\def\mb at tb{\ht\z@\z@\dp}%
   \edef\finsm at sh{\csname mb@#1\endcsname\z@\z@ \leavevmode at ifvmode\box\z@}%
   \ifmmode \@xp\mathpalette\@xp\mathsm at sh
@@ -2240,9 +2264,10 @@
 %
 %    \begin{macro}{\relbar}
 %    \begin{macro}{\Relbar}
+% \changes{v2.17n}{2022/04/08}{Make commands robust (gh/123)}
 %    \begin{macrocode}
-\ams at def\relbar{\mathrel{\mathpalette\mathsm at sh\std at minus}}
-\ams at def\Relbar{\mathrel\std at equal}
+\ams at DeclareRobustCommand\relbar{\mathrel{\mathpalette\mathsm at sh\std at minus}}
+\ams at DeclareRobustCommand\Relbar{\mathrel\std at equal}
 %    \end{macrocode}
 %    \end{macro}
 %    \end{macro}
@@ -2272,6 +2297,17 @@
 \ams at newcommand{\overleftrightarrow}{%
   \mathpalette{\overarrow@\leftrightarrowfill@}}
 %    \end{macrocode}
+%    Again we delay making commands robut for \pkg{stix}.  
+% \changes{v2.17n}{2022/04/08}{Make commands robust (gh/123)}
+%    \begin{macrocode}
+\AtBeginDocument{%
+  \expandafter\let\csname overleftarrow \endcsname\@undefined
+  \expandafter\let\csname overrightarrow \endcsname\@undefined
+  \MakeRobust\overrightarrow
+  \MakeRobust\overleftarrow
+  \MakeRobust\overleftrightarrow
+  }
+%    \end{macrocode}
 %
 %    \begin{macrocode}
 \def\underarrow@#1#2#3{%
@@ -2285,8 +2321,19 @@
   \mathpalette{\underarrow@\leftrightarrowfill@}}
 %    \end{macrocode}
 %
+%    
+% \changes{v2.17n}{2022/04/08}{Make commands robust (gh/123)}
 %    \begin{macrocode}
-%\newcommand{\xrightarrow}[2][]{\ext at arrow 0359\rightarrowfill@{#1}{#2}}
+\AtBeginDocument{%
+  \MakeRobust\underrightarrow
+  \MakeRobust\underleftarrow
+  \MakeRobust\underleftrightarrow
+  }
+%    \end{macrocode}
+%
+% \changes{v2.17n}{2022/04/08}{Make commands robust (gh/123)}
+%    \begin{macrocode}
+%\DeclareRobustCommand{\xrightarrow}[2][]{\ext at arrow 0359\rightarrowfill@{#1}{#2}}
 \def\ext at arrow#1#2#3#4#5#6#7{%
   \mathrel{\mathop{%
 %    \end{macrocode}
@@ -2315,8 +2362,8 @@
 %    sub/superscripts. These commands are robust because they take an
 %    optional argument.
 %    \begin{macrocode}
-\newcommand{\xrightarrow}[2][]{\ext at arrow 0359\rightarrowfill@{#1}{#2}}
-\newcommand{\xleftarrow}[2][]{\ext at arrow 3095\leftarrowfill@{#1}{#2}}
+\DeclareRobustCommand{\xrightarrow}[2][]{\ext at arrow 0359\rightarrowfill@{#1}{#2}}
+\DeclareRobustCommand{\xleftarrow}[2][]{\ext at arrow 3095\leftarrowfill@{#1}{#2}}
 %    \end{macrocode}
 %
 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -2406,8 +2453,9 @@
 % \begin{macro}{\substack}
 %    The \cn{substack} command is just an abbreviation for the
 %    most common use of \env{subarray}.
+% \changes{v2.17n}{2022/04/08}{Make command robust (gh/123)}
 %    \begin{macrocode}
-\newcommand{\substack}[1]{\subarray{c}#1\endsubarray}
+\DeclareRobustCommand{\substack}[1]{\subarray{c}#1\endsubarray}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -2630,8 +2678,9 @@
 %    numbered within sections. The \LaTeX{} kernel contains a similar command
 %    \cs{counterwithin} (with a slightly extended syntax) that can be used
 %    as a drop-in replacement for \cs{numberwithin}.
+% \changes{v2.17n}{2022/04/08}{Make command robust (gh/123)}
 %    \begin{macrocode}
-\newcommand{\numberwithin}[3][\arabic]{%
+\DeclareRobustCommand{\numberwithin}[3][\arabic]{%
   \@ifundefined{c@#2}{\@nocounterr{#2}}{%
     \@ifundefined{c@#3}{\@nocnterr{#3}}{%
       \@addtoreset{#2}{#3}%
@@ -2645,8 +2694,9 @@
 %    To make references to equation numbers easier, we provide
 %    \cn{eqref}.  We almost don't need \cn{textup}, except that
 %    \cs{tagform@} doesn't supply the italic correction.
+% \changes{v2.17n}{2022/04/08}{Make command robust (gh/123)}
 %    \begin{macrocode}
-\newcommand{\eqref}[1]{\textup{\tagform@{\ref{#1}}}}
+\DeclareRobustCommand{\eqref}[1]{\textup{\tagform@{\ref{#1}}}}
 %    \end{macrocode}
 %    \end{macro}
 %
@@ -2685,8 +2735,9 @@
 %    The \cn{allowdisplaybreaks} command. Since this is intended for use
 %    outside displayed formulas (typically in the preamble), it does not
 %    need to use \cs{new at ifnextchar}.
+% \changes{v2.17n}{2022/04/08}{Make command robust (gh/123)}
 %    \begin{macrocode}
-\newcommand{\allowdisplaybreaks}[1][4]{%
+\DeclareRobustCommand{\allowdisplaybreaks}[1][4]{%
   \interdisplaylinepenalty\getdsp at pen{#1}\relax
 }
 %    \end{macrocode}
@@ -2709,8 +2760,9 @@
 % \begin{macro}{\dspbrk at context}
 % \begin{macro}{\nogood at displaybreak}
 %    For breaks in a certain row of a alignment.
+% \changes{v2.17n}{2022/04/08}{Make command robust (gh/123)}
 %    \begin{macrocode}
-\newcommand{\displaybreak}{\new at ifnextchar[\dspbrk@{\dspbrk@[4]}}
+\DeclareRobustCommand{\displaybreak}{\new at ifnextchar[\dspbrk@{\dspbrk@[4]}}
 \chardef\dspbrk at context=\sixt@@n
 %    \end{macrocode}
 %
@@ -6130,15 +6182,16 @@
 %    in his \fn{amstex.doc} Spivak indicates those commands should never
 %    be used on a first or last line. Perhaps better to leave the
 %    question open unless/until real-life examples turn up.
+% \changes{v2.17m}{2022/02/03}{Make \cs{shoveright} robust (if def is not trival)}
 %    \begin{macrocode}
 \iftagsleft@
-    \def\shoveright#1{%
+    \protected\def\shoveright#1{%
         #1%
         \hfilneg
         \hskip\multlinegap
     }
 \else
-    \def\shoveright#1{%
+    \protected\def\shoveright#1{%
         #1%
         \hfilneg
         \iftag@
@@ -6153,12 +6206,14 @@
         \fi
     }
 \fi
-
+%    \end{macrocode}
+% \changes{v2.17m}{2022/02/03}{Make \cs{shoveleft} robust (if def is not trival)}
+%    \begin{macrocode}
 \if at fleqn
     \def\shoveleft#1{#1}%
 \else
     \iftagsleft@
-        \def\shoveleft#1{%
+        \protected\def\shoveleft#1{%
             \setboxz at h{$\m at th\displaystyle{}#1$}%
             \setbox\@ne\hbox{$\m at th\displaystyle#1$}%
             \hfilneg
@@ -6173,17 +6228,23 @@
                 \hskip\multlinegap
             \fi
             \hskip.5\wd\@ne
-            \hskip-.5\wdz@
+%    \end{macrocode}
+% \changes{v2.17m}{2022/02/03}{Added missing \cs{relax} for (gh/716)}
+%    \begin{macrocode}
+            \hskip-.5\wdz@ \relax
             #1%
         }
     \else
-        \def\shoveleft#1{%
+        \protected\def\shoveleft#1{%
             \setboxz at h{$\m at th\displaystyle{}#1$}%
             \setbox\@ne\hbox{$\m at th\displaystyle#1$}%
             \hfilneg
             \hskip\multlinegap
             \hskip.5\wd\@ne
-            \hskip-.5\wdz@
+%    \end{macrocode}
+% \changes{v2.17m}{2022/02/03}{Added missing \cs{relax} for (gh/716)}
+%    \begin{macrocode}
+            \hskip-.5\wdz@ \relax
             #1%
         }
     \fi

Modified: trunk/Master/texmf-dist/source/latex/amsmath/amsmath.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/amsmath/amsmath.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/amsmath/amsmath.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 %%
 %% Copyright (C) 2010 American Mathematical Society.
-%% Copyright (C) 2016-2021  LaTeX Project and American Mathematical Society.
+%% Copyright (C) 2016-2022  LaTeX Project and American Mathematical Society.
 %%
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License, either version 1.3c
@@ -25,7 +25,7 @@
 \preamble
 
 Copyright (C) 1995, 1999, 2000, 2013 American Mathematical Society.
-Copyright (C) 2016-2021  LaTeX Project and American Mathematical Society.
+Copyright (C) 2016-2022  LaTeX Project and American Mathematical Society.
 
 This work may be distributed and/or modified under the
 conditions of the LaTeX Project Public License, either version 1.3c

Modified: trunk/Master/texmf-dist/source/latex/amsmath/amsopn.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/amsmath/amsopn.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/amsmath/amsopn.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -2,7 +2,7 @@
 % \iffalse meta-comment
 %
 % Copyright (C) 1995, 1999 American Mathematical Society.
-% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
+% Copyright (C) 2016-2022 LaTeX Project and American Mathematical Society.
 %
 % This work may be distributed and/or modified under the
 % conditions of the LaTeX Project Public License, either version 1.3c
@@ -52,13 +52,13 @@
 %    similar to the standard function names \cn{sin}, \cn{lim},
 %    \cn{max}, etc.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %    Standard file identification.
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX)
 [1994/12/01]% LaTeX date must December 1994 or later
-\ProvidesPackage{amsopn}[2021/08/26 v2.02 operator names]
+\ProvidesPackage{amsopn}[2022/04/08 v2.04 operator names]
 %    \end{macrocode}
 %
 %    What \cs{nolimits@} does is keep a \cn{limits} typed by the user
@@ -151,41 +151,42 @@
 \@onlypreamble\@declmathop
 %    \end{macrocode}
 %
+% \changes{v2.04}{2022/04/08}{Make operators \cs{protected} (gh/123)}
 %    \begin{macrocode}
-\def\arccos{\qopname\relax o{arccos}}
-\def\arcsin{\qopname\relax o{arcsin}}
-\def\arctan{\qopname\relax o{arctan}}
-\def\arg{\qopname\relax o{arg}}
-\def\cos{\qopname\relax o{cos}}
-\def\cosh{\qopname\relax o{cosh}}
-\def\cot{\qopname\relax o{cot}}
-\def\coth{\qopname\relax o{coth}}
-\def\csc{\qopname\relax o{csc}}
-\def\deg{\qopname\relax o{deg}}
-\def\det{\qopname\relax m{det}}
-\def\dim{\qopname\relax o{dim}}
-\def\exp{\qopname\relax o{exp}}
-\def\gcd{\qopname\relax m{gcd}}
-\def\hom{\qopname\relax o{hom}}
-\def\inf{\qopname\relax m{inf}}
-\def\injlim{\qopname\relax m{inj\,lim}}
-\def\ker{\qopname\relax o{ker}}
-\def\lg{\qopname\relax o{lg}}
-\def\lim{\qopname\relax m{lim}}
-\def\liminf{\qopname\relax m{lim\,inf}}
-\def\limsup{\qopname\relax m{lim\,sup}}
-\def\ln{\qopname\relax o{ln}}
-\def\log{\qopname\relax o{log}}
-\def\max{\qopname\relax m{max}}
-\def\min{\qopname\relax m{min}}
-\def\Pr{\qopname\relax m{Pr}}
-\def\projlim{\qopname\relax m{proj\,lim}}
-\def\sec{\qopname\relax o{sec}}
-\def\sin{\qopname\relax o{sin}}
-\def\sinh{\qopname\relax o{sinh}}
-\def\sup{\qopname\relax m{sup}}
-\def\tan{\qopname\relax o{tan}}
-\def\tanh{\qopname\relax o{tanh}}
+\protected\def\arccos{\qopname\relax o{arccos}}
+\protected\def\arcsin{\qopname\relax o{arcsin}}
+\protected\def\arctan{\qopname\relax o{arctan}}
+\protected\def\arg{\qopname\relax o{arg}}
+\protected\def\cos{\qopname\relax o{cos}}
+\protected\def\cosh{\qopname\relax o{cosh}}
+\protected\def\cot{\qopname\relax o{cot}}
+\protected\def\coth{\qopname\relax o{coth}}
+\protected\def\csc{\qopname\relax o{csc}}
+\protected\def\deg{\qopname\relax o{deg}}
+\protected\def\det{\qopname\relax m{det}}
+\protected\def\dim{\qopname\relax o{dim}}
+\protected\def\exp{\qopname\relax o{exp}}
+\protected\def\gcd{\qopname\relax m{gcd}}
+\protected\def\hom{\qopname\relax o{hom}}
+\protected\def\inf{\qopname\relax m{inf}}
+\protected\def\injlim{\qopname\relax m{inj\,lim}}
+\protected\def\ker{\qopname\relax o{ker}}
+\protected\def\lg{\qopname\relax o{lg}}
+\protected\def\lim{\qopname\relax m{lim}}
+\protected\def\liminf{\qopname\relax m{lim\,inf}}
+\protected\def\limsup{\qopname\relax m{lim\,sup}}
+\protected\def\ln{\qopname\relax o{ln}}
+\protected\def\log{\qopname\relax o{log}}
+\protected\def\max{\qopname\relax m{max}}
+\protected\def\min{\qopname\relax m{min}}
+\protected\def\Pr{\qopname\relax m{Pr}}
+\protected\def\projlim{\qopname\relax m{proj\,lim}}
+\protected\def\sec{\qopname\relax o{sec}}
+\protected\def\sin{\qopname\relax o{sin}}
+\protected\def\sinh{\qopname\relax o{sinh}}
+\protected\def\sup{\qopname\relax m{sup}}
+\protected\def\tan{\qopname\relax o{tan}}
+\protected\def\tanh{\qopname\relax o{tanh}}
 %    \end{macrocode}
 %
 % \begin{macro}{\operator at font}
@@ -198,8 +199,16 @@
 %    more accessible so that users can call this font for use in special
 %    constructs that are not ordinary operator names but conceptually
 %    related.
+%
+%    \cs{operator at font} is also declared by the \LaTeX{} kernel (for
+%    at least 14 years), thus defining it here effectively means
+%    ``resetting it'' to the kernel value, which is counterproductive
+%    in situations where the user (or a class) has altered its
+%    definition and at a later point \pkg{amsopn} got added.
+% \changes{v2.03}{2022/01/20}{Do not reset \cs{operator at font} it is
+%    already defined in the LaTeX kernel (gh/734)}
 %    \begin{macrocode}
-\def\operator at font{\mathgroup\symoperators}
+%\def\operator at font{\mathgroup\symoperators} % commented out in 2.03
 \def\operatorfont{\operator at font}
 %    \end{macrocode}
 % \end{macro}
@@ -218,23 +227,24 @@
 %    vertical spacing may not be optimal in script and scriptscript
 %    sizes. Unfortunately \tex/ provides no easy way to do math mode
 %    vertical spacing that varies with current math style like mu units.
+% \changes{v2.04}{2022/04/08}{Make operators \cs{protected} (gh/123)}
 %    \begin{macrocode}
-\def\varlim@#1#2{%
+\protected\def\varlim@#1#2{%
   \vtop{\m at th\ialign{##\cr
     \hfil$#1\operator at font lim$\hfil\cr
     \noalign{\nointerlineskip\kern1.5\ex@}#2\cr
     \noalign{\nointerlineskip\kern-\ex@}\cr}}%
 }
-\def\varinjlim{%
+\protected\def\varinjlim{%
   \mathop{\mathpalette\varlim@{\rightarrowfill@\textstyle}}\nmlimits@
 }
-\def\varprojlim{%
+\protected\def\varprojlim{%
   \mathop{\mathpalette\varlim@{\leftarrowfill@\textstyle}}\nmlimits@
 }
-\def\varliminf{\mathop{\mathpalette\varliminf@{}}\nmlimits@}
+\protected\def\varliminf{\mathop{\mathpalette\varliminf@{}}\nmlimits@}
 \def\varliminf@#1{\@@underline{\vrule\@depth.2\ex@\@width\z@
    \hbox{$#1\m at th\operator at font lim$}}}
-\def\varlimsup{\mathop{\mathpalette\varlimsup@{}}\nmlimits@}
+\protected\def\varlimsup{\mathop{\mathpalette\varlimsup@{}}\nmlimits@}
 \def\varlimsup@#1{\@@overline{\hbox{$#1\m at th\operator at font lim$}}}
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/amsmath/amsopn.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/amsmath/amsopn.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/amsmath/amsopn.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 %%
 %% Copyright (C) 2010 American Mathematical Society.
-%% Copyright (C) 2016-2021  LaTeX Project and American Mathematical Society.
+%% Copyright (C) 2016-2022  LaTeX Project and American Mathematical Society.
 %%
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License, either version 1.3c
@@ -25,7 +25,7 @@
 \preamble
 
 Copyright (C) 1995, 1999 American Mathematical Society.
-Copyright (C) 2016-2021  LaTeX Project and American Mathematical Society.
+Copyright (C) 2016-2022  LaTeX Project and American Mathematical Society.
 
 This work may be distributed and/or modified under the
 conditions of the LaTeX Project Public License, either version 1.3c

Modified: trunk/Master/texmf-dist/source/latex/amsmath/amstext.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/amsmath/amstext.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/amsmath/amstext.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -2,7 +2,7 @@
 % \iffalse meta-comment
 %
 % Copyright (C) 1995, 1999 American Mathematical Society.
-% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
+% Copyright (C) 2016-2022 LaTeX Project and American Mathematical Society.
 %
 % This work may be distributed and/or modified under the
 % conditions of the LaTeX Project Public License, either version 1.3c
@@ -72,7 +72,7 @@
 %    macro called \cs{mathhexbox} so that commands like \cn{dag}
 %    or \cn{P} will change sizes if used in math subscripts.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %    Package information.
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX)

Modified: trunk/Master/texmf-dist/source/latex/amsmath/amstext.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/amsmath/amstext.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/amsmath/amstext.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 %%
 %% Copyright (C) 2010 American Mathematical Society.
-%% Copyright (C) 2016-2021  LaTeX Project and American Mathematical Society.
+%% Copyright (C) 2016-2022  LaTeX Project and American Mathematical Society.
 %%
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License, either version 1.3c
@@ -25,7 +25,7 @@
 \preamble
 
 Copyright (C) 1995, 1999 American Mathematical Society.
-Copyright (C) 2016-2021  LaTeX Project and American Mathematical Society.
+Copyright (C) 2016-2022  LaTeX Project and American Mathematical Society.
 
 This work may be distributed and/or modified under the
 conditions of the LaTeX Project Public License, either version 1.3c

Modified: trunk/Master/texmf-dist/source/latex/amsmath/amsxtra.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/amsmath/amsxtra.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/amsmath/amsxtra.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -2,7 +2,7 @@
 % \iffalse meta-comment
 %
 % Copyright (C) 1995, 1999 American Mathematical Society.
-% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
+% Copyright (C) 2016-2022 LaTeX Project and American Mathematical Society.
 %
 % This work may be distributed and/or modified under the
 % conditions of the LaTeX Project Public License, either version 1.3c
@@ -53,7 +53,7 @@
 %    documents using the \pkg{amstex} package these commands are just
 %    wasted overhead.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %    \begin{macrocode}
 \ProvidesPackage{amsxtra}[1999/11/15 v1.2c AMS extra commands]

Modified: trunk/Master/texmf-dist/source/latex/amsmath/amsxtra.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/amsmath/amsxtra.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/amsmath/amsxtra.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 %%
 %% Copyright (C) 2010 American Mathematical Society.
-%% Copyright (C) 2016-2021  LaTeX Project and American Mathematical Society.
+%% Copyright (C) 2016-2022  LaTeX Project and American Mathematical Society.
 %%
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License, either version 1.3c
@@ -25,7 +25,7 @@
 \preamble
 
 Copyright (C) 1995, 1999 American Mathematical Society.
-Copyright (C) 2016-2021  LaTeX Project and American Mathematical Society.
+Copyright (C) 2016-2022  LaTeX Project and American Mathematical Society.
 
 This work may be distributed and/or modified under the
 conditions of the LaTeX Project Public License, either version 1.3c

Modified: trunk/Master/texmf-dist/source/latex/base/alltt.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/alltt.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/alltt.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -104,7 +104,7 @@
 %  The glyph at the position of the $ in an italic font: \textit{$}.
 %    \end{alltt}
 %
-%  \StopEventually{}
+%  \MaybeStop{}
 %
 %  \section{The Implementation}
 %

Modified: trunk/Master/texmf-dist/source/latex/base/alltt.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/alltt.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/alltt.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/classes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/classes.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/classes.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -230,7 +230,7 @@
 % \maketitle
 % \tableofcontents
 %
-% \StopEventually{}    ^^A
+% \MaybeStop{}    ^^A
 %
 % \section{The {\sc docstrip} modules}
 %

Modified: trunk/Master/texmf-dist/source/latex/base/classes.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/classes.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/classes.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/cmextra.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/cmextra.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/cmextra.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/cmfonts.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/cmfonts.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/cmfonts.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/doc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/doc.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/doc.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,7 +1,7 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
-% The LaTeX Project and any individual authors listed elsewhere
+% Copyright 1993-2022
+% The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
 % This file is part of the LaTeX base system.
@@ -33,10 +33,20 @@
 % ^^A category for `<'
 %\catcode`\<=14
 %<+package|shortvrb>\NeedsTeXFormat{LaTeX2e}[1994/12/01]
-%<+package> \ProvidesPackage{doc}
+%<+package>
+%<+package>\providecommand\DeclareRelease[3]{}
+%<+package>\providecommand\DeclareCurrentRelease[2]{}
+%<+package>
+%<+package>\DeclareRelease{v2.1g}{2016-02-15}
+%<+package>                      {doc-2016-02-15.sty}
+%<+package>\DeclareRelease{v2}{2021-06-01}
+%<+package>                   {doc-2021-06-01.sty}
+%<+package>\DeclareCurrentRelease{v3}{2022-06-01}
+%<+package>
+%<+package>\ProvidesPackage{doc}
 %<+shortvrb>\ProvidesPackage{shortvrb}
-%<+package|shortvrb>  [2021/10/04 v2.1n
-%<+package|shortvrb>   Standard LaTeX documentation package (FMi)]
+%<+package|shortvrb>  [2022/06/08 v3.0j
+%<+package|shortvrb>   Standard LaTeX documentation package V3 (FMi)]
 %\catcode`\<=12
 %
 %%
@@ -47,7 +57,7 @@
 %
 %
 %% Package `doc' to use with LaTeX 2e
-%% Copyright (C) 1989-2020 Frank Mittelbach, all rights reserved.
+%% Copyright (C) 1989-2022 Frank Mittelbach, all rights reserved.
 %
 %
 % Version:     Date:     Changes:
@@ -128,18 +138,104 @@
 % \DoNotIndex{\selectfont,\mathcode,\newmathalphabet,\rmdefault}
 % \DoNotIndex{\bfdefault}
 %
-% \MakeShortVerb{\"}
+% \MakeShortVerb{\|}
 % \setcounter{StandardModuleDepth}{1}
 %
 % {\catcode`\p=12 \catcode`\t=12 ^^A hack used later on to print
-% \gdef\dimenvalue#1pt{$#1$pt}}  ^^A register values with a - sign
+% \gdef\dimenvalue#1pt{$#1$pt}}  ^^A a register value with a - sign
 %
-% \newcommand{\DOC}{\texttt{doc}}
+% \newcommand{\DOC}{\texttt{doc}\xspace}
 %
+% \changes{v3.0j}{2022/06/02}{Use \cs{providecommand} to define \cs{pkg}}
+% \providecommand\env{\texttt}
+% \providecommand\opt{\texttt}
+% \providecommand\cls{\texttt}
+% \providecommand\pkg{\texttt}
+% \providecommand\prg{\textsf}
+%
+% \newcommand\DOX{\env{DoX}\xspace}
+% \newcommand\api{\textsc{api}\xspace}
+%
+% \newcommand\fmi[1]{\par\textbf{TODO: }\textit{#1}\par}
+%
+% \newcommand\NewIn[1]{\leavevmode
+%         \marginpar{\hfill\fbox{\fbox{New in #1}}\hspace*{1em}}\ignorespaces}
+%
+%
+%\RenewDocElement[macrolike = true ,
+%		 toplevel  = false,
+%                idxtype   = ,
+%                idxgroup  = LaTeX comands\actualchar\LaTeX{} commands ,
+%                printtype =
+%               ]{Macro}{macro}
+%
+%\RenewDocElement[macrolike = false ,
+%		 toplevel  = false,
+%                idxtype   = env.  ,
+%                idxgroup  = Package environments,
+%                printtype = \textit{env.}
+%               ]{Env}{environment}
+%
+%
+%\NewDocElement[macrolike = true ,
+%               toplevel  = false,
+%               idxtype   = ,
+%               idxgroup  = Package commands,
+%               printtype =
+%               ]{InterfaceMacro}{imacro}
+%
+%\NewDocElement[macrolike = true ,
+%		 toplevel  = false,
+%                idxtype   = ,
+%                idxgroup  = Package commands (obsolete),
+%                printtype =
+%               ]{ObsoleteInterfaceMacro}{omacro}
+%
+%\NewDocElement[macrolike = false ,
+%		 toplevel  = false,
+%                idxtype   =  counter  ,
+%                idxgroup  = LaTeX counters\actualchar \LaTeX{} counters ,
+%                printtype = \textit{counter}
+%               ]{LaTeXCounter}{lcounter}
+%
+%\NewDocElement[macrolike = true ,
+%		 toplevel  = false,
+%                idxtype   =  counter  ,
+%                idxgroup  = TeX counters\actualchar \protect\TeX{} counters ,
+%                printtype = \textit{counter}
+%               ]{TeXCounter}{tcounter}
+%
+%
+%\NewDocElement[macrolike = true ,
+%		 toplevel  = false,
+%                idxtype   =  skip  ,
+%                idxgroup  = LaTeX length\actualchar \LaTeX{} length (skip) ,
+%                printtype = \textit{skip}
+%               ]{LaTeXSkip}{lskip}
+%
+%\NewDocElement[macrolike = true ,
+%		 toplevel  = false,
+%                idxtype   =  dimen  ,
+%                idxgroup  = LaTeX length\actualchar \LaTeX{} length (dimen) ,
+%                printtype = \textit{dimen}
+%               ]{LaTeXDimen}{ldimen}
+%
+%\NewDocElement[macrolike = false ,
+%		 toplevel  = false,
+%                idxtype   = option  ,
+%                idxgroup  = Package options ,
+%                printtype = \textit{option}
+%               ]{Option}{option}
+%
+% \renewcommand\code[1]{\mbox{$\ell$-#1}}
+% \renewcommand\main[1]{\underline{\mbox{$\ell$-#1}}}
+% \setcounter{IndexColumns}{2}
+%
+%
 % \changes{v1.9t}{1995/05/11}{Use \cs{GetFileInfo}}
 % \GetFileInfo{doc.sty}
 %
-% \CheckSum{2213}  ^^A % keep the checksum in this file
+% \CheckSum{0}  ^^A % keep the checksum in this file but not now :-)
 %
 % \title{The \DOC{} and \texttt{shortvrb} Packages\thanks
 %    {This file has version number \fileversion{} dated \filedate{}.}}
@@ -149,192 +245,79 @@
 %        provided by Andrew Mills; fairly substantial additions,
 %        particularly from \texttt{newdoc},  and
 %        documentation of post-v1.5q features added at v1.7a by Dave
-%        Love (SERC Daresbury Lab). Extraction of \texttt{shortvrb}
-%        package added by Joachim Schrod (TU~Darmstadt).}}
+%        Love (SERC Daresbury Lab).}~\thanks
+%        {Extraction of \texttt{shortvrb}
+%        package added by Joachim Schrod (TU~Darmstadt).}~\thanks
+%        {Version~3 now integrates code from Didier Verna's
+%        \DOX package and some of his documentation was
+%        reused (a.k.a.\ stolen).}}
+% \date{Printed \today}
 %
 % \MaintainedByLaTeXTeam{latex}
+%
 % \maketitle
 %
 % \begin{abstract}
-%    This package contains the definitions that are necessary to
-%    format the documentation of package files.  The package was
-%    developed in Mainz in cooperation with the Royal Military College
-%    of Science.  This is an update which documents various changes
-%    and new features in \DOC{} and integrates the features of
-%    \textsf{newdoc}.
+%    Roughly 30 years ago (version 1.0 was dated 1988/05/05) I wrote
+%    the first version of the \DOC package, a package to provide code
+%    documentation for \TeX{} code. Since then it has be used all over
+%    the place to document the \LaTeX{} kernel and most of the
+%    packages that are nowadays available. The core code of version 2
+%    (which is the current version) exists since 1998, i.e., for 20
+%    years.
+%
+%    If I would restart from scratch I would do a lot of things
+%    differently these days and in fact several other people have
+%    tried to come up with better solutions. However, as the saying
+%    goes, a bad standard is better than none, \DOC has prevailed and
+%    changing it now in incompatible ways is probably not really
+%    helpful.
+%
+%    So this is version 3 of the package with some smaller extensions
+%    that are upwards compatible but hopefully serve well. Most
+%    important modifications are the integration of the
+%    \pkg{hypdoc} package to enable links within the document (in
+%    particular from the index) if so desired. Also integrated are the
+%    ideas from the \DOX package by Didier Verna (although I
+%    offer a different interface that imho fits better with the rest
+%    of \DOC's interfaces). Finally I updated a few odds and ends.
 % \end{abstract}
 %
-% \newif\ifmulticols
-% \IfFileExists{multicol.sty}{\multicolstrue}{}
 %
-% \ifmulticols
+% \newpage
+%
 % \addtocontents{toc}{\protect\begin{multicols}{2}}
-% \fi
 %
-% {\parskip 0pt                ^^A We have to reset \parskip
+% ^^A{\parskip 0pt                ^^A We have to reset \parskip
 %                              ^^A (bug in \LaTeX)
 % \tableofcontents
-% }
+% ^^A}
 %
 % \changes{v1.7a}{1992/02/25}{Miscellaneous small changes to the text}
+% \changes{v3.0a}{2018/03/04}{Integrated DoX package}
+% \changes{v3.0a}{2018/03/04}{Interfaced hypdoc package}
 %
-% \ifmulticols
-% \begin{multicols}{2}[\section*{Preface to version 1.7}]
-% \else \section*{Preface to version 1.7} \fi
 %
-% This version of \texttt{doc.dtx} documents changes which have occurred
-% since the last published version \cite{art:doc} but which have been
-% present in distributed versions of \texttt{doc.sty} for some time.  It
-% also integrates the (undocumented) features of the distributed
-% \texttt{newdoc.sty}.
 %
-% The following changes and additions have been made to the user
-% interface since the published version~\cite{art:doc}.  See
-% \S\ref{sec:interface} for more details.
-% \begin{description}
-% \item[Driver mechanism] "\DocInput" is now used in the driver file
-%    to input possibly multiple independent \DOC{} files and \DOC{} no
-%    longer has to be the last package.  "\IndexListing" is replaced
-%    by "\IndexInput";
-% \item[Indexing] is controlled by "\PageIndex" and "\CodelineIndex",
-%    one of which must be specified to produce an index---there is no
-%    longer a "\makeindex" in the default "\DocstyleParms";
-% \item[The \texttt{macro} environment] now takes as argument the
-%    macro name {\em with\/} the backslash;
-% \item[Verbatim text] Newlines are now forbidden inside "\verb" and
-%    commands "\MakeShortVerb" and "\DeleteShortVerb" are provided for
-%    verbatim shorthand;
-% \item[\texttt{\bslash par}] can now be used in "\DoNotIndex";
-% \item[Checksum/character table support] for ensuring the integrity
-%    of distributions is added;
-% \item[\texttt{\bslash printindex}] becomes "\PrintIndex";
-% \item[\texttt{multicol.sty}] is no longer necessary to use \DOC{} or
-%    print the documentation (although it is recommended);
-% \item[`Docstrip' modules] are recognised and formatted specially.
-% \end{description}
-%
-% As well as adding some completely new stuff,
-% the opportunity has been taken to add some commentary to the code
-% formerly in \texttt{newdoc.sty} and that added after version 1.5k of
-% \texttt{doc.sty}.  Since (as noted in the sections concerned) this
-% commentary wasn't written by Frank Mittelbach but the code was, it is
-% probably {\em not\/} true in this case that ``if the code and
-% comments disagree both are probably wrong''!
-%
-% \subsection*{Bugs}
-%
-% There are some known bugs in this version:
-% \begin{itemize}
-% \item The "\DoNotIndex" command doesn't work for some single
-%    character commands most noticeable "\%".
-% \item The `General changes' glossary entry would come out after
-%    macro names with a leading "!" and possibly a leading |"|;
-% \item If you have an old version of \textsf{makeindex} long "\changes"
-%    entries will come out strangely and you may find the section
-%    header amalgamated with the first changes entry.  Try to get an
-%    up-to-date one (see p.~\pageref{makeindex:version});
-% \item Because the accompanying \textsf{makeindex} style files support
-%    the inconsistent attribute specifications of older and newer
-%    versions \textsf{makeindex} always complains about three `unknown
-%    specifier's when sorting the index and changes entries.
-% \item If "\MakeShortVerb" and "\DeleteShortVerb" are used with
-%    single character arguments, e.g., "{|}" instead of "{\|}" chaos
-%    may happen.
-% \end{itemize}
-% (Some `features' are documented below.)
-%
-% \subsection*{Wish list}
-%
-% \begin{itemize}
-% \item Hooks to allow "\DescribeMacro" and "\DescribeEnv" to write
-% out to a special file information about the package's `exported'
-% definitions which they describe.  This could subsequently be
-% included in the \texttt{docstrip}ped \texttt{.sty} file in a
-% suitable form for use by smart editors in command completion,
-% spelling checking etc., based on the packages used in a document.
-% This would need agreement on a `suitable form'.  \item Indexing of
-% the modules used in \texttt{docstrip}'s "%<" directives.  I'm not
-% sure how to index directives containing module combinations; \item
-% Writing out bibliographic information about the package; \item Allow
-% turning off use of the special font for, say, the next guarded
-% block.
-% \end{itemize}
-%
-% \ifmulticols
-% \end{multicols}
-%
-% \begin{multicols}{2}[\medskip \rule{\textwidth}{.3pt}
-%                      \section{Introduction}]
-% \else
 % \section{Introduction}
-% \fi
 %
-% The \TeX{} macros which are described here allow definitions and
-% documentation to be held in one and the same file.  This has the
-% advantage that normally very complicated instructions are made
-% simpler to understand by comments inside the definition. In addition
-% to this, updates are easier and only one source file needs to be
-% changed.  On the other hand, because of this, the package files are
-% considerably longer: thus \TeX{} takes longer to load them.  If this
-% is a problem, there is an easy remedy: one needs only to run the
-% \texttt{docstrip.tex} program that removes nearly all lines that begin
-% with a
-% percent sign.
+% This is a new version of the \DOC package, written roughly 30 years
+% after the initial release. As the package has been used for so long
+% (and largely unchanged)
+% it is absolutely important to preserve existing interfaces, even if
+% we can agree that they could have been done better.
 %
-% The idea of integrated documentation was born with the development
-% of the \TeX{} program; it was crystallized in Pascal with the \Web{}
-% system.  The advantages of this method are plain to see (it's easy
-% to make comparisons \cite{art:Knuthliterat}).  Since this
-% development, systems similar to \Web{} have been developed for other
-% programming languages. But for one of the most complicated
-% programming languages (\TeX) the documentation has however been
-% neglected.  The \TeX{} world seems to be divided between:---
-% \begin{itemize} \item a couple of ``wizards'', who produce many
-% lines of completely unreadable code ``off the cuff'', and \item many
-% users who are amazed that it works just how they want it to do.  Or
-% rather, who despair that certain macros refuse to do what is
-% expected of them.\end{itemize}
+% So this is a light-weight change, basically adding hyperlink support
+% and adding a way to provide generally \DOC elements (not just macros
+% and environments) and try to do this properly (which wasn't the case
+% for environments either in the past). The ideas for this have been
+% stolen from the \DOX package by Didier Verna even though I
+% didn't keep his interfaces.
 %
-% I do not think that the \Web{} system is {\em the\/} reference work;
-% on the contrary, it is a prototype which suffices for the
-% development of programs within the \TeX{} world.  It is sufficient,
-% but not totally sufficient.\footnote{I know that this will be seen
-% differently by a few people, but this product should not be seen as
-% the finished product, at least as far as applications concerning
-% \TeX{} are concerned.  The long-standing debate over `multiple
-% change files' shows this well.} As a result of \Web, new programming
-% perspectives have been demonstrated; unfortunately, though, they
-% haven't been developed further for other programming languages.
+% Most of the documentation below is from the earlier release  which
+% accounts for some inconsistencies in presentation, mea culpa.
 %
-% The method of documentation of \TeX{} macros which I have introduced
-% here should also only be taken as a first sketch.  It is designed
-% explicitly to run under \LaTeX{} alone.  Not because I was of the
-% opinion that this was the best starting point, but because from this
-% starting point it was the quickest to develop.\footnote{This
-% argument is a bad one, however, it is all too often trotted out.} As
-% a result of this design decision, I had to move away from the
-% concept of modularization; this was certainly a step backward.
 %
-% I would be happy if this article could spark off discussion over
-% \TeX\ documentation.  I can only advise anyone who thinks that they
-% can cope without documentation to ``Stop Time'' until he or she
-% completely understands the \AmSTeX{} source code.
-%
-%
-%
-%
-%
-% \subsection{Using the \DOC{} package}
-%
-% Just like any other package, invoke it by requesting it with a
-% |\usepackage| command in the preamble. \textsf{Doc}'s use of
-% |\reversemarginpars| may make it incompatible with some classes.
-% \changes{v1.7a}{1992/02/25}{Altered usage info}
-%
-%
-% \ifmulticols\end{multicols}\fi
-%
-%
 % \section{The User Interface}\label{sec:interface}
 % \subsection{The driver file}
 %
@@ -342,16 +325,16 @@
 % package one has to prepare a special driver file which produces the
 % formatted document. This driver file has the following
 % characteristics:
-%
-% \noindent |\documentclass[|\meta{options}]^^A
-%           |{|\meta{document-class}|}|\\[1pt]
+% \begin{quote}
+% \noindent |\documentclass|\oarg{options}^^A
+%           \marg{document-class}\\[1pt]
 % |\usepackage{doc}|\\[3pt]
 % \hspace*{10pt}\meta{preamble}\\[3pt]
 % |\begin{document}|\\[3pt]
 % \hspace*{10pt}\meta{special input commands}\\[3pt]
 % |\end{document}|
-%
-% The \meta{document-class} might be any document class, I normally
+% \end{quote}
+% The \meta{document-class} might be any document class, I usually
 % use \texttt{article}.
 %
 % In the \meta{preamble} one should place declarations which
@@ -358,20 +341,22 @@
 % manipulate the behavior of the \DOC{} package like
 % |\DisableCrossrefs| or |\OnlyDescription|.
 %
-% \DescribeMacro\DocInput \DescribeMacro\IndexInput
-% Finally the \meta{special input commands} part should contain one or
-% more |\DocInput|\meta{file name} and/or
-% |\IndexInput|\meta{file name} commands.  The
+%
+% \DescribeInterfaceMacro\DocInput \DescribeInterfaceMacro\IndexInput
+% Finally
+% the \meta{special input commands} part should contain one or
+% more |\DocInput|\marg{file name} and/or
+% |\IndexInput|\marg{file name} commands.  The
 % |\DocInput| command is used for files prepared for the
 % \DOC{} package whereas |\IndexInput| can be used for all kinds of
 % macro files.  See page \pageref{..Input} for more details of
-% "\IndexInput".  Multiple "\DocInput"s can be used with a
+% |\IndexInput|.  Multiple |\DocInput|s can be used with a
 % number of included files which are each self-contained
 % self-documenting packages---for instance, each containing
-% "\maketitle".
+% |\maketitle|.
 %
 % As an example, the driver file for the \DOC{} package itself is
-% the following text surrounded by "%<*driver>" and "%</driver>".
+% the following text surrounded by |%<*driver>| and |%</driver>|.
 % To produce the documentation you can simply run the \texttt{.dtx}
 % file through \LaTeX{} in which case this code will be executed
 % (loading the document class \texttt{ltxdoc}, etc.) or you can
@@ -379,7 +364,7 @@
 % the \texttt{docstrip} program.
 % The line numbers below are added by
 % \DOC{}'s formatting.
-% Note that the class \textsf{ltxdoc} has the \DOC{} package
+% Note that the class \cls{ltxdoc} has the \DOC{} package
 % preloaded.
 % \changes{v1.7a}{1992/03/06}{Added
 %                 docstrip-derivable driver file as example.}
@@ -387,14 +372,20 @@
 %    \begin{macrocode}
 %<*driver>
 \documentclass{ltxdoc}
+
+\usepackage[T1]{fontenc}
+\usepackage{xspace}          
+
+\OnlyDescription
+
 \EnableCrossrefs
- %\DisableCrossrefs % Say \DisableCrossrefs if index is ready
+ %\DisableCrossrefs     % Say \DisableCrossrefs if index is ready
 \CodelineIndex
-\RecordChanges                  % Gather update information
- %\OnlyDescription  % comment out for implementation details
- %\OldMakeindex     % use if your MakeIndex is pre-v2.9
-\setlength\hfuzz{15pt}  % dont make so many
-\hbadness=7000          % over and under full box warnings
+\RecordChanges          % Gather update information
+\SetupDoc{reportchangedates}
+ %\OnlyDescription      % comment out for implementation details
+\setlength\hfuzz{15pt}  % don't show so many
+\hbadness=7000          % over- and underfull box warnings
 \begin{document}
    \DocInput{doc.dtx}
 \end{document}
@@ -401,7 +392,64 @@
 %</driver>
 %    \end{macrocode}
 %
+% \RecordIndexType{\CodelineIndex}{InterfaceMacro}
+% \RecordIndexType{\DisableCrossrefs}{InterfaceMacro}
+% \RecordIndexType{\DocInput}{InterfaceMacro}
+% \RecordIndexType{\EnableCrossrefs}{InterfaceMacro}
+% \RecordIndexType{\OnlyDescription}{InterfaceMacro}
+% \RecordIndexType{\RecordChanges}{InterfaceMacro}
+% \RecordIndexType{\hbadness}{TeXCounter}
+% \RecordIndexType{\hfuzz}{LaTeXDimen}
 %
+%
+% \subsection{Package options}
+%
+% \NewIn{v3}
+% Starting with version~3 the \DOC package now offers a small number
+% of package options to modify its overall behavior. These are:
+% \DescribeOption[noprint]{multicol}
+% \DescribeOption[noprint]{nomulticol}
+% \DescribeOption[noprint]{hyperref}
+% \DescribeOption[noprint]{nohyperref}
+% \DescribeOption[noprint]{debugshow}
+% \DescribeOption[noprint]{noindex}
+% \DescribeOption[noprint]{noprint}
+% \DescribeOption[noprint]{reportchangedates}
+% \begin{description}
+% \item[\opt{hyperref}, \opt{nohyperref}] Boolean (default \texttt{true}). Load the
+%    \pkg{hyperref} package and make index references to code lines
+%    and pages and other items clickable links. \opt{nohyperref} is
+%    the complementary key.
+%
+% \item[\opt{multicol}, \opt{nomulticol}] Boolean (default \texttt{true}). Load the
+%    \pkg{multicol} package for use in typesetting the index and the
+%    list of changes. \opt{nomulticol} is
+%    the complementary key.
+%
+% \item[\opt{debugshow}] Boolean (default \texttt{false}). Provide
+%    various tracing information at the terminal and in the transcript
+%    file. In particular show which elements are indexed.
+%
+% \item[\opt{noindex}] Boolean (default \texttt{false}). If set, all
+%    automatic indexing is suppressed. This option can also be used on
+%    individual elements as described below.
+%
+% \item[\opt{noprint}] Boolean (default \texttt{false}). If set, then
+%    printing of element names in the margin will be suppressed. This
+%    option can also be used on individual elements as described
+%    below.
+% \item[\opt{reportchangedates}] Boolean (default \texttt{false}). If
+%    set, then change entries list the date after the version number in
+%    the change log.
+% \end{description}
+%
+% \DescribeInterfaceMacro{\SetupDoc} Instead of providing options to the \DOC
+%    package you can call \cs{SetupDoc} and provide them there. This
+%    allows, for example,  to change default values in case \DOC was already
+%    loaded earlier.
+%
+%
+%
 % \subsection{General conventions}
 %
 % A \TeX{} file prepared to be used with the `doc' package
@@ -413,10 +461,18 @@
 % \LaTeX{} commands except that the character `|%|' cannot be
 % used as a comment character.
 % \SortIndex{\string^\string^A}{\string\verb\verbatimchar
-% \string^\string^A\verbatimchar \encapchar usage} To allow user
-% comments, the |^^A| character is defined as a comment character
-% later on.  Such `metacomments' may be also be included simply by
-% surrounding them with "\iffalse" \ldots~"\fi".
+% \string^\string^A\verbatimchar \encapchar usage}^^A
+% \SortIndex{\string^\string^X}{\string\verb\verbatimchar
+% \string^\string^X\verbatimchar \encapchar usage}
+% To allow user
+% comments, the characters |^^A| and |^^X| are both defined as a comment character
+% later on.\footnote{In version 2 it was only
+%    \texttt{\string^\string^A}, but many keyboards combine
+%    \texttt{\string^} and \texttt{A} and automatically turn it into
+%    ``Ä''; so \texttt{\string^\string^X} was added as an
+%    alternative in version 3.}
+% Such `metacomments' may be also be included simply by
+% surrounding them with |\iffalse| \ldots~|\fi|.
 %
 % All other parts of the file are called `definition parts'.  They
 % contain fractions of the macros described in the `documentation
@@ -430,13 +486,17 @@
 % \DescribeEnv{macrocode}
 % On the other hand, if the documentation of these macros is to be
 % produced, the `definition parts' should be typeset verbatim. To
-% achieve this, these parts are surrounded by the \textsf{macrocode}
+% achieve this, these parts are surrounded by the \env{macrocode}
 % environment.
 % More exactly: before a `definition part' there should be a line
-% containing\\
-% \hspace*{\MacroIndent}\verb*+%    \begin{macrocode}+\\
-% and after this part a line\\
-% \hspace*{\MacroIndent}\verb*+%    \end{macrocode}+\\
+% containing
+% \begin{flushleft}
+%   \hspace*{\MacroIndent}\verb*+%    \begin{macrocode}+
+% \end{flushleft}
+% and after this part a line
+% \begin{flushleft}
+%   \hspace*{\MacroIndent}\verb*+%    \end{macrocode}+
+% \end{flushleft}
 % There must be {\em exactly\/} four spaces between the |%|
 % and |\end{macrocode}| --- \TeX{} is looking for this string
 % and not for the macro while processing a `definition part'.
@@ -444,16 +504,16 @@
 % Inside a `definition part' all \TeX{} commands are allowed; even the
 % percent sign could be used to suppress unwanted spaces etc.
 %
-% \DescribeEnv{macrocode*} Instead of the \textsf{macrocode}
-% environment one can also use the \textsf{macrocode$*$} environment
+% \DescribeEnv{macrocode*} Instead of the \env{macrocode}
+% environment one can also use the \env{macrocode$*$} environment
 % which produces the same results except that spaces are printed as
 % \nopagebreak\verb*+ + characters.
 %
 %
 %
-% \subsection{Describing the usage of new macros}
+% \subsection{Describing the usage of macros and environments}
 %
-% \DescribeMacro\DescribeMacro
+% \DescribeInterfaceMacro\DescribeMacro
 % When you describe a new macro you may use |\DescribeMacro| to
 % indicate that at this point the usage of a specific macro is
 % explained. It takes one argument which will be printed in the margin
@@ -461,35 +521,38 @@
 % |\DescribeMacro{\DescribeMacro}| to make clear that this is the
 % point where the usage of |\DescribeMacro| is explained.
 %
-% \DescribeMacro\DescribeEnv
-% An analogous macro |\DescribeEnv| should be used to indicate
-% that a \LaTeX{} environment is explained. It will produce a somewhat
-% different index entry. Below I used |\DescribeEnv{verbatim}|.
+% As the argument to |\DescribeMacro| is a command name, many people
+% got used to using the (incorrect) short form, i.e., omitting the
+% braces around the argument as in |\DescribeMacro\foo|. This does
+% work as long as the macro name consists only of ``letters''.
+% However, if the name contains special characters that are normally
+% not of type ``letter'' (such as |@|, or in case of \pkg{expl3} |_|
+% and |:|) this will fail dramatically. |\DescribeMacro| would then
+% receive only a partial command name (up to the first ``non-letter'')
+% e.g., |\DescribeMacro\foo at bar| would be equivalent to
+% |\DescribeMacro{\foo} @bar| and you can guess that this can
+% resulting in both incorrect output and possibly low-level error
+% messages.
 %
-% \DescribeEnv{verbatim}
-% It is often a good idea to include examples of the usage of new macros
-% in the text. Because of the |%| sign in the first column of every
-% row, the \textsf{verbatim} environment is slightly altered to suppress
-% those
-% characters.\footnote{These macros were written by Rainer
-%                      Sch\"opf~\cite{art:verbatim}. He also
-%                      provided a new \textsf{verbatim} environment
-%                      which can be used inside of other macros.}
-% \DescribeEnv{verbatim*}
-% The \textsf{verbatim$*$} environment is changed in the same way.
-% \changes{v1.7a}{1992/02/26}{Documented \cs{verb} change.}
-% \DescribeMacro\verb
-% The "\verb" command is re-implemented to give an error report if a
-% newline appears in its argument.
-% The \textsf{verbatim} and \textsf{verbatim$*$} environments set text
-% in the style defined by "\MacroFont"~(\S\ref{sec:macrofont}).
+% \DescribeInterfaceMacro\DescribeEnv
+% An analogous macro |\DescribeEnv| should be used to indicate that a
+% \LaTeX{} environment is explained. It will produce a somewhat
+% different index entry and a slightly different display in the
+% margin. Below I used |\DescribeEnv{verbatim}|.
 %
 %
+% \NewIn{v3}
+% Starting with version~3 the \cs{Describe...} commands accept an
+% optional argument in which you can specify either \opt{noindex}
+% or \opt{noprint} to suppress indexing or printing for that
+% particular instance. Using both would be possible too, but pointless
+% as then the commands wouldn't do anything any more.
 %
-% \subsection{Describing the definition of new macros}
 %
+% \subsection{Describing the definition of macros and environments}
+%
 % \DescribeEnv{macro}
-% To describe the definition of a new macro we use the \textsf{macro}
+% To describe the definition of a (new) macro we use the \env{macro}
 % environment. It has one argument: the name of the new
 % macro.\footnote{This is a change to the style design I described in
 %                ^^A \TUB ^^A removed in case ltugboat.sty not used
@@ -505,20 +568,26 @@
 % labels in the margin are placed under each other.
 % \changes{v1.7a}{1992/02/26}{Note on need for some text in macro env.}
 % There should be some text---even  if it's just an empty
-% "\mbox{}"---in this environment before "\begin{macrocode}" or the
+% |\mbox{}|---in this environment before |\begin{macrocode}| or the
 % marginal label won't print in the right place.
 %
-% \DescribeMacro\MacrocodeTopsep
-% \DescribeMacro\MacroTopsep
+% \NewIn{v3}
+% In fact it is now allowed to specify several macros in the argument,
+% separated by commas. This is a short form for starting several
+% \env{macro} environments in direct succession. Of course, you
+% should then have also only one matching |\end{macro}|.
+%
+% \DescribeLaTeXSkip\MacrocodeTopsep
+% \DescribeLaTeXSkip\MacroTopsep
 % There also exist four style parameters: |\MacrocodeTopsep| and
 % |\MacroTopsep| are used to control the vertical spacing above
-% and below the \textsf{macrocode} and the \textsf{macro}
-% \DescribeMacro\MacroIndent
+% and below the \env{macrocode} and the \env{macro}
+% \DescribeLaTeXDimen\MacroIndent
 % environment, |\MacroIndent| is used to indent the lines of code
 % and
-% \DescribeMacro\MacroFont \label{sec:macrofont}
+% \DescribeInterfaceMacro\MacroFont \label{sec:macrofont}
 % |\MacroFont| holds the font and a possible size change command
-% for the code lines, the "verbatim"["*"] environment and the macro
+% for the code lines, the |verbatim|[|*|] environment and the macro
 % names printed in the margin.  If you want
 % to change their default values in a
 % class file (like \texttt{ltugboat.cls}) use the |\DocstyleParms|
@@ -526,17 +595,34 @@
 % be changed directly as long as the redefinition happens before
 % the |\begin{document}|.
 %
+% \DescribeEnv{environment}
+% For documenting the definition of environments one can use the
+% environment \texttt{environment} which works like the \texttt{macro}
+% environment, except that it expects an \meta{env-name}
+% (without a backslash)
+% as its argument and internally provides different index
+% entries suitable for environments.
+% Nowadays you can alternatively specify a comma-separated list of environments.
 %
+% \NewIn{v3}
+% Starting with version~3 these environments accept an optional
+% argument in which you can specify \opt{noindex} or \opt{noprint} or
+% both to suppress indexing or printing for that particular
+% instance. If any such setting is made on the environment level it
+% overwrites whatever default was given when the \DOC element was
+% defined or when the package was loaded.
 %
 %
-% \subsection{Formatting the margins}
 %
-% \DescribeMacro\PrintDescribeMacro
-% \DescribeMacro\PrintDescribeEnv
-% \DescribeMacro\PrintMacroName
-% \DescribeMacro\PrintEnvName
-% As mentioned earlier, some macros and the \textsf{macro} environment
-% print their arguments in the margin. This is actually done by four
+%
+% \subsection{Formatting names in the margin}
+%
+% \DescribeInterfaceMacro\PrintDescribeMacro
+% \DescribeInterfaceMacro\PrintDescribeEnv
+% \DescribeInterfaceMacro\PrintMacroName
+% \DescribeInterfaceMacro\PrintEnvName
+% As mentioned earlier, some macros and environment
+% print their arguments in the margin. The actual formatting is done by four
 % macros which are user
 % definable.\footnote{You may place the changed definitions in a
 %                     separate package
@@ -544,33 +630,157 @@
 %                     file.
 %                     For example, if you don't like any names in the
 %                     margin
-%                     but want a fine index you can simply
-%                     \texttt{\bslash let}
-%                     these macros equal \texttt{\bslash @gobble}.
-%                     The doc package won't redefine any existing
-%                     definitions of these macros.}
-% They are named |\PrintDescribeMacro|, |\PrintDescribeEnv|,
-% |\PrintMacroName| (called by the \textsf{macro} environment) and
-% |\PrintEnvName| (called by the \textsf{environment} environment).
+%                     but want a fine index you can simply redefine them
+% accept their argument and do nothing with it.}
+% They are named |\PrintDescribeMacro| and |\PrintDescribeEnv| (defining
+% how |\DescribeMacro| and |\DescribeEnv| behave) and
+% |\PrintMacroName| and
+% |\PrintEnvName| (called by the \env{macro} and \env{environment}
+% environments, respectively).
 %
 %
+% \subsection{Providing further documentation items}
+%
+% Out of the box the \DOC package offers the above commands and
+% environments to document macros and environments.
+% \NewIn{v3}
+% With version 3
+% this has now been extended in a generic fashion so that you can
+% easily provide your own items, such as counters, length register,
+% options etc.
+%
+% \DescribeInterfaceMacro{\NewDocElement}
+% The general syntax for providing a new \DOC element is
+% \begin{quote}
+%   \cs{NewDocElement}\oarg{options}\marg{element-name}\marg{env-name}
+% \end{quote}
+% By convention the \meta{element-name} has the first letter
+% uppercased as in \texttt{Env} or \texttt{Macro}.
+%
+% Such a declaration will define for you
+% \begin{itemize}
+% \item the command |\Describe|\meta{element-name} which has the
+%    syntax
+%    \begin{quote}
+%      |\Describe|\meta{element-name}\oarg{options}\marg{element}
+%    \end{quote}
+%
+% \item the environment \meta{env-name} which has the syntax
+%    \begin{quote}
+%      \cs{begin}\marg{env-name}\oarg{options}\marg{element}
+%    \end{quote}
+%
+% \item the display command |\PrintDescribe|\meta{element-name} with
+%    the syntax
+%    \begin{quote}
+%      |\PrintDescribe|\meta{element-name}\marg{element}
+%    \end{quote}
+%
+% \item and the
+% |\Print|\meta{element-name}|Name|  display command for the
+% environment.
+% \end{itemize}
+% If any of the commands or the environment is already defined (which
+% especially with the \meta{env-name} is a danger) then you will
+% receive an error telling you so.
+%
+% \DescribeInterfaceMacro{\RenewDocElement}
+% If you want to modify an existing \DOC element use
+% |\RenewDocElement| instead.
+%
+% For example, the already provided ``\texttt{Env}'' \DOC element could have been
+% defined simply by making the declaration
+%   |\NewDocElement{Env}{environment}|
+% though that's not quite what has been done, as we will see later.
+%
+% \DescribeOption[noprint]{macrolike}
+% \DescribeOption[noprint]{envlike}
+% \DescribeOption[noprint]{toplevel}
+% \DescribeOption[noprint]{notoplevel}
+% \DescribeOption[noprint]{idxtype}
+% \DescribeOption[noprint]{printtype}
+% \DescribeOption[noprint]{idxgroup}
+% The \meta{options} are keyword/value and define further details on
+% how that \DOC element should behave. They are:
+% \begin{description}
+% \item[\opt{macrolike}] Boolean (default \opt{false}). Does this \DOC
+%   element starts with a backslash?
+%
+% \item[\opt{envlike}] Boolean. Complementary option to
+%   \opt{macrolike}.
+%
+% \item[\opt{toplevel}] Boolean (default \opt{true}). Should all
+%   a top-level index entry be made? If set to \texttt{false} then
+%   either no index entries are produced or only grouped index entries
+%   (see \opt{idxgroup} for details).
+%
+% \item[\opt{notoplevel}] Boolean.  Complementary option to
+%   \opt{toplevel}.
+%
+% \item[\opt{idxtype}] String (default \meta{env-name}). What to put
+%   (in parentheses if non-empty) at the end of a top-level index entry.
+%
+% \item[\opt{printtype}] String (default \meta{env-name}). What to put
+%   (in parentheses if non-empty) after an element name in the margin.
+%
+% \item[\opt{idxgroup}] String (default
+%   \meta{env-name}\texttt{s}). Name of the top-level index entry if
+%   entries are grouped. They are only grouped if this option is
+%   non-empty.
+%
+% \item[\opt{noindex}] Boolean (default \texttt{false}).  If set this
+%   will suppress indexing for elements of this type. This setting
+%   overwrite any global setting of \opt{noindex}.
+%
+% \item[\opt{noprint}] Boolean (default \texttt{false}).  If set this
+%   will suppress printing the element name in the margin. This setting
+%   overwrite any global setting of \opt{noprint}.
+% \end{description}
+% As usual giving a boolean option without a value sets it to
+% \texttt{true}.
+
+
+
+
+% \subsection{Displaying sample code verbatim}
+%
+% \DescribeEnv{verbatim}
+% It is often a good idea to include examples of the usage of new macros
+% in the text. Because of the |%| sign in the first column of every
+% row, the \env{verbatim} environment is slightly altered to suppress
+% those
+% characters.\footnote{These macros were written by Rainer
+%                      Schöpf~\cite{art:verbatim}. He also
+%                      provided a new \env{verbatim} environment
+%                      which can be used inside of other macros.}
+% \DescribeEnv{verbatim*}
+% The \env{verbatim$*$} environment is changed in the same way.
+% \changes{v1.7a}{1992/02/26}{Documented \cs{verb} change.}
+% \DescribeInterfaceMacro\verb
+% The |\verb| command is re-implemented to give an error report if a
+% newline appears in its argument.
+% The \env{verbatim} and \env{verbatim$*$} environments set text
+% in the style defined by |\MacroFont|~(\S\ref{sec:macrofont}).
+%
+%
+
 % \subsection{Using a special escape character}
 %
-% \DescribeMacro\SpecialEscapechar
+% \DescribeInterfaceMacro\SpecialEscapechar
 % If one defines complicated macros it is sometimes necessary to
 % introduce a new escape character because the `|\|' has got a
 % special |\catcode|. In this case one can use
 % |\SpecialEscapechar| to indicate which character is actually
 % used to play the r\^ole of the `|\|'. A scheme like this is
-% needed because the \textsf{macrocode} environment and its counterpart
-% \textsf{macrocode$*$} produce an index entry for every occurrence of a
+% needed because the \env{macrocode} environment and its counterpart
+% \env{macrocode$*$} produce an index entry for every occurrence of a
 % macro name. They would be very confused if you didn't tell them that
 % you'd changed |\catcode|$\,$s.  The argument to
 % |\SpecialEscapechar| is a single-letter control sequence, that
-% is, one has to use "\|" for example to denote that `\verb+|+'
+% is, one has to use \verb=\|= for example to denote that `\verb+|+'
 % is used as an escape character. |\SpecialEscapechar| only
-% changes the behavior of the next \textsf{macrocode} or
-% \textsf{macrocode$*$} environment.
+% changes the behavior of the next \env{macrocode} or
+% \env{macrocode$*$} environment.
 %
 %  The actual index entries created will all be printed with |\|
 % rather than \verb+|+, but this probably reflects their usage, if not
@@ -582,20 +792,24 @@
 %
 % \subsection{Cross-referencing all macros used}
 %
-% \DescribeMacro\DisableCrossrefs \DescribeMacro\EnableCrossrefs As
-% already mentioned, every new macro name used within a
-% \textsf{macrocode} or \textsf{macrocode$*$} environment will produce
-% an index entry. In this way one can easily find out where a specific
-% macro is used.  Since \TeX{} is considerably slower when it has to
-% produce such a bulk of index entries one can turn off this feature
-% by using |\DisableCrossrefs| in the driver file. To turn it on again
-% just use |\EnableCrossrefs|.\footnote{Actually, \texttt{\bslash
-% EnableCrossrefs} changes things more drastically; any following
-% \texttt{\bslash DisableCrossrefs} which might be present in the
-% source will be ignored.}
+% \DescribeInterfaceMacro\DisableCrossrefs \DescribeInterfaceMacro\EnableCrossrefs As
+% already mentioned, every macro name used within a
+% \env{macrocode} or \env{macrocode$*$} environment will produce an
+% index entry. In this way one can easily find out where a specific
+% macro is used.  Since \TeX{} is considerably slower\footnote{This
+% comment was written about 30 years ago. \TeX{} is still considerably
+% slower but while it took minutes to process a large document (such
+% as the \LaTeX{} kernel documentation) it takes seconds or less these
+% days. Thus \cs{DisableCrossrefs} isn't really that necessary these
+% days.}  when it has to produce such a bulk of index entries one can
+% turn off this feature by using |\DisableCrossrefs| in the driver
+% file. To turn it on again just use
+% |\EnableCrossrefs|.\footnote{Actually, \cs{EnableCrossrefs} changes
+% things more drastically; any following call to \cs{DisableCrossrefs}
+% which might be present in the source will be ignored.}
 %
 %
-% \DescribeMacro\DoNotIndex
+% \DescribeInterfaceMacro\DoNotIndex
 % But also finer control is provided. The |\DoNotIndex| macro
 % takes a list of macro names separated by commas. Those names won't
 % show up in the index. You might use several |\DoNotIndex|
@@ -605,26 +819,28 @@
 %
 % All three above declarations are local to the current group.
 %
-% Production (or not) of the index (via the "\makeindex" commend) is
+% Production (or not) of the index (via the |\makeindex| commend) is
 % controlled by using or omitting the following declarations in the
 % driver file preamble; if neither is used, no index is produced.
-% \DescribeMacro\PageIndex Using "\PageIndex" makes all index
+% \DescribeInterfaceMacro\PageIndex Using |\PageIndex| makes all index
 % entries refer to their page number; with
-% \DescribeMacro\CodelineIndex "\CodelineIndex", index entries
-% produced by "\DescribeMacro" and "\DescribeEnv" refer to page number
-% but those produced by the \textsf{macro} environment refer to the
+% \DescribeInterfaceMacro\CodelineIndex |\CodelineIndex|, index entries
+% produced by |\DescribeMacro| and |\DescribeEnv| and possibly further
+% |\Describe...| commands refer to a page number
+% but those produced by the \env{macro} environment (or other \DOC
+% element environments) refer to the
 % code lines, which will be numbered automatically.\footnote{The line
 % number is actually that of the first line of the first
-% \textsf{macrocode} environment in the \textsf{macro} environment.}
-% \DescribeMacro\theCodelineNo
+% \env{macrocode} environment in the \env{macro} environment.}
+% \DescribeInterfaceMacro\theCodelineNo
 % The style of this numbering can be controlled by defining the macro
-% "\theCodelineNo".  Its default definition is to use scriptsize
+% |\theCodelineNo|.  Its default definition is to use scriptsize
 % arabic numerals; a user-supplied definition won't be overwritten.
 %
-% \DescribeMacro\CodelineNumbered
+% \DescribeInterfaceMacro\CodelineNumbered
 % When you don't wish to get an index but want your code lines
-% numbered use "\CodelineNumbered" instead of "\CodelineIndex". This
-% prevents the generation of an unnecessary ".idx" file.
+% numbered use |\CodelineNumbered| instead of |\CodelineIndex|. This
+% prevents the generation of an unnecessary |.idx| file.
 %
 %
 % \subsection{Producing the actual index entries}
@@ -632,7 +848,7 @@
 % Several of the aforementioned macros will produce some sort of index
 % entries. These entries have to be sorted by an external
 % program---the current implementation assumes that the
-% \textsf{makeindex} program by Chen~\cite{art:Chen} is used.
+% \prg{makeindex} program by Chen~\cite{art:Chen} is used.
 %
 % But this isn't built in: one has only to redefine some of the
 % following macros to be able to use any other index program.  All
@@ -644,25 +860,25 @@
 %
 %  To allow the user to change the specific characters recognized by
 %  his or her index program all characters which have special meaning
-%  in the \textsf{makeindex} program are given symbolic
+%  in the \prg{makeindex} program are given symbolic
 %  names.\footnote{I don't know if there exists a program which needs
 %                  more command characters, but I hope not.}
 % However, all characters used should be of |\catcode| other than
 % `letter' (11).
 %
-% \DescribeMacro{\actualchar}
+% \DescribeInterfaceMacro{\actualchar}
 % The |\actualchar| is used to separate the `key' and the actual
 % index entry.
-% \DescribeMacro{\quotechar}
+% \DescribeInterfaceMacro{\quotechar}
 % The |\quotechar| is used before a special index program
 % character to suppress its special meaning.
-% \DescribeMacro{\encapchar}
+% \DescribeInterfaceMacro{\encapchar}
 %  The |\encapchar| separates the indexing information from a
-% letter string which \textsf{makeindex} uses as a \TeX{} command to
+% letter string which \prg{makeindex} uses as a \TeX{} command to
 % format the page number associated with a special entry.  It is used
 % in this package to apply the |\main| and the |\usage|
 % commands.
-% \DescribeMacro{\levelchar}
+% \DescribeInterfaceMacro{\levelchar}
 %  Additionally |\levelchar| is used to separate `item',
 % `subitem' and `subsubitem' entries.
 %
@@ -670,33 +886,54 @@
 % which index program is used. In this way your files will be
 % portable.
 %
-% \DescribeMacro\SpecialMainIndex
-% \DescribeMacro\SpecialMainEnvIndex
+% \fmi{describe old \cs{SpecialMainIndex} and \cs{SpecialUsageIndex}}
+%
+% \DescribeInterfaceMacro\SpecialMainMacroIndex
+% \DescribeInterfaceMacro\SpecialMainEnvIndex
 % To produce a main index entry for a macro the
-% |\SpecialMainIndex| macro\footnote{This macro is called by the
-% \textsf{macro} environment.} may be used.  It is called `special'
+% |\SpecialMainMacroIndex| macro\footnote{This macro is called by the
+% \env{macro} environment.} may be used.  It is called `special'
 % because it has to print its argument verbatim.
 % A similar macro, called |\SpecialMainEnvIndex| is used for indexing
 % the main definition point of an
 % environment.\footnote{This macro is called by the
-% \textsf{environment} environment.}
-% \DescribeMacro\SpecialIndex
-% If you want a normal index entry for a macro name
-% |\SpecialIndex| might be used.\footnote{This macro is called
-% within the \textsf{macrocode} environment when encountering a macro
-% name.}
-% \DescribeMacro\SpecialUsageIndex
-% \DescribeMacro\SpecialEnvIndex
+% \env{environment} environment.}
+%
+% \DescribeInterfaceMacro\SpecialMacroIndex
+% \DescribeInterfaceMacro\SpecialEnvIndex
 % To index the usage of a macro or an environment
-% |\SpecialUsageIndex| and |\SpecialEnvIndex| may be used.
-% \DescribeMacro\SortIndex
-% Additionally a |\SortIndex| command is provided.  It takes two
-% arguments---the sort key and the actual index entry.
+% |\SpecialMacroIndex| and |\SpecialEnvIndex| may be used.
 %
 % All these macros are normally used by other macros; you will need
 % them only in an emergency.
 %
-% \DescribeMacro\verbatimchar
+% \NewIn{v3}
+% If further code elements are declared with
+% |\NewDocElement|\marg{name}\texttt{...} then this sets up
+% additional indexing commands, e.g.,
+% \cs{SpecialMain\meta{name}Index}.
+%
+% \DescribeInterfaceMacro\SpecialIndex
+% The \env{macrocode} environment is automatically indexing macros
+% (normally by code line number). You can (with care) also do this
+% manually by
+% |\SpecialIndex|. However, note that if |\CodelineIndex| is used
+% this will generate an entry referring to the last code line which is
+% usually not what you want. It does, however, make some sense if you
+% always refer to pages only, i.e., if you use |\PageIndex|.
+%
+% \DescribeInterfaceMacro\SpecialShortIndex
+% \NewIn{v3}
+% For single character macros, e.g., |\{|, doesn't always work
+% correctly.
+% For this reason there is now also
+% a special variant the can produce correct index entries for them.
+%
+% \DescribeInterfaceMacro\SortIndex
+% Additionally a |\SortIndex| command is provided.  It takes two
+% arguments---the sort key and the actual index entry.
+%
+% \DescribeInterfaceMacro\verbatimchar
 % But there is one characteristic worth mentioning: all macro names in
 % the index are typeset with the |\verb*| command. Therefore one
 % special character is needed to act as a delimiter for this command.
@@ -704,12 +941,14 @@
 % referenced indirectly, by the macro |\verbatimchar|. It expands
 % by default to \verb?+?  but if your code lines contain macros with
 % `\texttt{+}' characters in their names (e.g.\ when you use \verb?\+?)
-% you will end up with an index entry containing \verb?\verb+\++?
-% which will be typeset as `\verb+\++' and not as `\verb?\+?'. In this
-% case you should redefine |\verbatimchar| globally or locally to
-% overcome this problem.
+% then that caused a problem because you ended up with an
+% index entry containing \verb?\verb+\++?
+% which will be typeset as `\verb+\++' and not as `\verb?\+?'.
+% \NewIn{v3}
+% In version 3 this is now automatically taken care of (with the help
+% of the |\SpecialShortIndex| command).
 %
-% \DescribeMacro\*
+% \DescribeInterfaceMacro\*
 % We also provide a |\*| macro.  This is intended to be used for
 % index entries like
 % \begin{quote}
@@ -721,30 +960,18 @@
 %   \index{index entries\levelchar Special macros for \*}
 %\end{verbatim}
 %
-% \DescribeMacro\OldMakeindex
-% Versions of \textsf{makeindex} prior to 2.9 had some bugs affecting
-% \DOC{}.  One of these,
-% pertaining to the "%" character doesn't have a work-around
-% appropriate for versions with and without the
-% bug.\label{makeindex:version}  If
-% you have an old version, invoke "\OldMakeindex" in a
-% package file or the driver file to prevent problems with index entries
-% such as "\%", although you'll probably normally want to turn off
-% indexing of "\%" anyway.  Try to get an up-to-date \textsf{makeindex}
-% from one of the \TeX{} repositories.
 %
-%
 % \subsection{Setting the index entries}
 %
 % \changes{v1.7a}{1992/03/11}{Usage note on gind.ist.} After the first
 % formatting pass through the \texttt{.dtx} file you need to sort the
 % index entries written to the \texttt{.idx} file using
-% \textsf{makeindex} or your favourite alternative.  You need a
-% suitable style file for \textsf{makeindex} (specified by the
+% \prg{makeindex} or your favorite alternative.  You need a
+% suitable style file for \prg{makeindex} (specified by the
 % \texttt{-s} switch).  A suitable one is supplied with \DOC{},
 % called \texttt{gind.ist}.
 %
-% \DescribeMacro\PrintIndex
+% \DescribeInterfaceMacro\PrintIndex
 % To read in and print the sorted index, just put the
 % |\PrintIndex| command as the last (commented-out, and thus
 % executed during the documentation pass through the file) command
@@ -751,19 +978,21 @@
 % in your package file.  Precede it by any bibliography commands
 % necessary for your citations.
 % Alternatively, it may be more convenient to put all such calls
-% amongt the arguments of the |\StopEventually| macro, in
+% amongst the arguments of the |\MaybeStop| macro, in
 % which case a |\Finale| command should appear at the end of
 % your file.
 %
 % \DescribeEnv{theindex}
 % Contrary to standard \LaTeX, the index is typeset in three columns
-% by default. This is controlled by the \LaTeX{} counter
+% by default.
+% \DescribeLaTeXCounter{IndexColumns}
+% This is controlled by the \LaTeX{} counter
 % `\textsf{IndexColumns}' and can therefore be changed with a
 % |\setcounter| declaration.  Additionally one doesn't want to
-% start a new page unnecessarily.  Therefore the \textsf{theindex}
+% start a new page unnecessarily.  Therefore the \env{theindex}
 % environment is redefined.
-% \DescribeMacro\IndexMin
-% When the \textsf{theindex} environment starts it will measure how much
+% \DescribeLaTeXDimen\IndexMin
+% When the \env{theindex} environment starts it will measure how much
 % space is left on the current page. If this is more than
 % |\IndexMin| then the index will start on this page. Otherwise
 % |\newpage| is called.
@@ -771,7 +1000,7 @@
 % Then a short introduction about the meaning of several index entries
 % is typeset (still in onecolumn mode). Afterwards the actual index
 % entries follow in multi-column mode.
-% \DescribeMacro\IndexPrologue
+% \DescribeInterfaceMacro\IndexPrologue
 % You can change this prologue with the help of the
 % |\IndexPrologue| macro. Actually the section heading is also
 % produced in this way, so you'd better write something like:
@@ -778,16 +1007,16 @@
 % \begin{verbatim}
 %   \IndexPrologue{\section*{Index} The index entries underlined ...}
 %\end{verbatim}
-% When the \textsf{theindex} environment is finished the last page will
+% When the \env{theindex} environment is finished the last page will
 % be reformatted to produce balanced columns. This improves the layout
 % and allows the next article to start on the same page.
-% \DescribeMacro\IndexParms
+% \DescribeInterfaceMacro\IndexParms
 % Formatting of the index columns (values for |\columnssep|
 % etc.)\ is controlled by the |\IndexParms| macro. It assigns the
 % following values:
-% \SpecialUsageIndex{\parindent}\SpecialUsageIndex{\columnsep}^^A
-% \SpecialUsageIndex{\parskip}\SpecialUsageIndex{\rightskip}^^A
-% \SpecialUsageIndex{\mathsurround}\SpecialUsageIndex{\parfillskip}
+% \SpecialLaTeXDimenIndex{\parindent}\SpecialLaTeXDimenIndex{\columnsep}^^A
+% \SpecialLaTeXSkipIndex{\parskip}\SpecialLaTeXSkipIndex{\rightskip}^^A
+% \SpecialLaTeXDimenIndex{\mathsurround}\SpecialLaTeXSkipIndex{\parfillskip}
 % \begin{center}
 %  \begin{tabular}{l@{\,=\,}ll@{\,=\,}l}
 %  |\parindent|    & \IndexParms \the\parindent    &
@@ -800,24 +1029,27 @@
 %                         \expandafter\dimenvalue\the\parfillskip
 %  \end{tabular}
 % \end{center}
-% \DescribeMacro{\@idxitem}
+% \DescribeInterfaceMacro{\@idxitem}
 % Additionally it defines |\@idxitem| (which will be used when an
 % |\item| command is encountered) and selects |\small| size.
 % If you want to change any of these values you have to define them
 % all.
 %
-% \DescribeMacro\main
-% \DescribeMacro\usage
+% \DescribeInterfaceMacro\main
+% \DescribeInterfaceMacro\usage
+% \DescribeInterfaceMacro\code
 % The page numbers for main index entries are encapsulated by the
 % |\main| macro (underlining its argument) and the numbers
 % denoting the description are encapsulated by the |\usage| macro
-% (which produces {\em italics}). As usual these commands are user
+% (which produces \textit{italics}). |\code| encapsulates page or code
+%    line numbers in entries generated by parsing the code inside
+%    \env{macrocode} environments. As usual these commands are user
 % definable.
 %
 %
 % \subsection{Changing the default values of style parameters}
 %
-% \DescribeMacro\DocstyleParms If you want to overwrite some default
+% \DescribeInterfaceMacro\DocstyleParms If you want to overwrite some default
 % settings made by the \DOC{} package, you can either put your
 % declarations in the driver file (that is after \texttt{doc.sty} is
 % read in) or use a separate package file for doing this work. In the
@@ -828,10 +1060,13 @@
 %
 % The doc package currently assigns values to the following
 % registers:
-% \SpecialUsageIndex{\IndexMin}\SpecialUsageIndex{\MacrocodeTopsep}^^A
-% \SpecialUsageIndex{\MacroTopsep}^^A
-% \SpecialUsageIndex{\MacroIndent}\SpecialUsageIndex{\marginparpush}^^A
-% \SpecialUsageIndex{\marginparwidth}\SpecialUsageIndex{\tolerance}
+% \SpecialLaTeXDimenIndex{\IndexMin}^^A
+% \SpecialLaTeXSkipIndex{\MacrocodeTopsep}^^A
+% \SpecialLaTeXSkipIndex{\MacroTopsep}^^A
+% \SpecialLaTeXDimenIndex{\MacroIndent}^^A
+% \SpecialLaTeXDimenIndex{\marginparpush}^^A
+% \SpecialLaTeXDimenIndex{\marginparwidth}^^A
+% \SpecialTeXCounterIndex{\tolerance}
 % \begin{center}
 %  \begin{tabular}{l@{\,=\,}ll@{\,=\,}l}
 %  |\IndexMin|      & \the\IndexMin    &
@@ -847,34 +1082,34 @@
 %
 % \subsection{Short input of verbatim text pieces}
 %
-% \DescribeMacro\MakeShortVerb
-% \DescribeMacro{\MakeShortVerb*} \DescribeMacro\DeleteShortVerb It is
-% awkward to have to type, say, "\verb|"\ldots"|" continually when
+% \DescribeInterfaceMacro\MakeShortVerb
+% \DescribeInterfaceMacro{\MakeShortVerb*} \DescribeInterfaceMacro\DeleteShortVerb It is
+% awkward to have to type, say, \verb"\verb|"\ldots\verb"|" continually when
 % quoting
 % verbatim bits (like macro names) in the text, so an abbreviation
 % mechanism is provided.  Pick a character \meta{c}---one which
 % normally has catcode `other' unless you have very good reason not
 % to---which you don't envisage using in the text, or not using often.
-% (I like |"|, but you may prefer "|" if you have |"| active to do
+% (I like |"|, but you may prefer \verb"|" if you have |"| active to do
 % umlauts, for instance.)  Then if you say
-% "\MakeShortVerb{\"\meta{c}"}" you can subsequently use
+% |\MakeShortVerb{\|\meta{c}|}| you can subsequently use
 % \meta{c}\meta{text}\meta{c} as the equivalent of
-% "\verb"\meta{c}\meta{text}\meta{c};  analogously, the "*"-form
-% "\MakeShortVerb*{\"\meta{c}"}" gives you the equivalent of
-% "\verb*"\meta{c}\meta{text}\meta{c}.  Use
-% "\DeleteShortVerb{\"\meta{c}"}" if you subsequently want \meta{c} to
+% |\verb|\meta{c}\meta{text}\meta{c};  analogously, the |*|-form
+% |\MakeShortVerb*{\|\meta{c}|}| gives you the equivalent of
+% |\verb*|\meta{c}\meta{text}\meta{c}.  Use
+% |\DeleteShortVerb{\|\meta{c}|}| if you subsequently want \meta{c} to
 % revert to its previous meaning---you can always turn it on again
 % after the unusual section.  The `short verb' commands make global
-% changes.  The abbreviated "\verb" may not appear in the argument of
-% another command just like "\verb".  However the `short verb'
-% character may be used freely in the \textsf{verbatim} and
-% \textsf{macrocode} environments without ill effect.
-% "\DeleteShortVerb" is silently ignored if its argument does not
+% changes.  The abbreviated |\verb| may not appear in the argument of
+% another command just like |\verb|.  However the `short verb'
+% character may be used freely in the \env{verbatim} and
+% \env{macrocode} environments without ill effect.
+% |\DeleteShortVerb| is silently ignored if its argument does not
 % currently represent a short verb character.  Both commands type a
 % message to tell you the meaning of the character is being changed.
 %
-% Please remember that the command "\verb" cannot be used in arguments
-% of other commands. Therefore abbreviation characters for "\verb"
+% Please remember that the command |\verb| cannot be used in arguments
+% of other commands. Therefore abbreviation characters for |\verb|
 % cannot be used there either.
 %
 % This feature is also available as a sole package, \texttt{shortvrb}.
@@ -885,24 +1120,33 @@
 % We provide macros for logos such as \Web, \AmSTeX, \BibTeX,
 % \SliTeX{} and \PlainTeX. Just type |\Web|, |\AmSTeX|,
 % |\BibTeX|, |\SliTeX| or |\PlainTeX|, respectively.
-% \LaTeX{} and \TeX{} are already defined in the \LaTeX{} format.
+% \LaTeX{} and \TeX{} are already defined in \texttt{latex.tex}.
 %
-% \DescribeMacro\meta
+% \DescribeInterfaceMacro\meta
 % Another useful macro is |\meta| which has one argument and
 % produces something like \meta{dimen parameter}.
 %
-% \DescribeMacro\OnlyDescription
-% \DescribeMacro\StopEventually
+% \DescribeInterfaceMacro\OnlyDescription
+% \DescribeInterfaceMacro\MaybeStop
+% \DescribeObsoleteInterfaceMacro\StopEventually
 % You can use the |\OnlyDescription| declaration in the driver
 % file to suppress the last part of your document (which presumably
 % exhibits the code). To make this work
-% you have to place the command |\StopEventually| at a suitable
-% point in your file.  This macro has one argument in which you put
+% \NewIn{v3}
+% you have to place the command |\MaybeStop| at a suitable
+% point in your file.  This macro\footnote{For about 30 years this
+%    macro was called \cs{StopEventually} which was due to a ``false
+%    friend'' misunderstanding. In the German language the word
+%    ``eventuell'' mean roughly ``perhaps'' which isn't quite the same
+%    as ``eventually''. But given that this is now used for so long
+%    and all over the place we can't drop the old name. So it is still
+%    there to allow processing all the existing documentation.}
+% has one argument in which you put
 % all information you want to see printed if your document ends at
 % this point (for example a bibliography which is normally printed at
 % the very end). When the |\OnlyDescription| declaration is
-% missing the |\StopEventually|
-% \DescribeMacro\Finale
+% missing the |\MaybeStop|
+% \DescribeInterfaceMacro\Finale
 % macro saves its argument in a macro called |\Finale| which can
 % afterwards be used to get things back (usually at the very end).
 % Such a scheme makes changes in two places unnecessary.
@@ -910,17 +1154,17 @@
 % Thus you can use this feature to produce a local guide for the
 % \TeX{} users which describes only the usage of macros (most of them
 % won't be interested in your definitions anyway).  For the same
-% reason the |\maketitle| \DescribeMacro\maketitle command is slightly
+% reason the |\maketitle| \DescribeInterfaceMacro\maketitle command is slightly
 % changed to allow multiple titles in one document.  So you can make
 % one driver file reading in several articles at once.
-% \DescribeMacro{\ps at titlepage} To avoid an unwanted
+% \DescribeInterfaceMacro{\ps at titlepage} To avoid an unwanted
 % \textsf{pagestyle} on the title page the |\maketitle| command issues
 % a |\thispagestyle{titlepage}| declaration which produces a
 % \textsf{plain} page if the \textsf{titlepage} page style is
-% undefined.  This allows class files like \textsf{ltugboat.cls} to
+% undefined.  This allows class files like \cls{ltugboat.cls} to
 % define their own page styles for title pages.
 %
-% \DescribeMacro\AlsoImplementation
+% \DescribeInterfaceMacro\AlsoImplementation
 % Typesetting the whole document is the default. However, this default
 % can also be explicitly selected using the declaration
 % |\AlsoImplementation|. This overwrites any previous
@@ -933,24 +1177,23 @@
 % \end{quote}
 % to make sure that all documents will show the code part.
 %
-% \DescribeMacro\IndexInput \label{..Input} Last but not least I
+% \DescribeInterfaceMacro\IndexInput \label{..Input} Last but not least I
 % defined an |\IndexInput| macro which takes a file name as an
 % argument and produces a verbatim listing of the file, indexing every
 % command as it goes along.  This might be handy, if you want to learn
 % something about macros without enough documentation.  I used this
-% feature to cross-reference \texttt{latex.tex} (these days
-% called \texttt{latex.ltx}) getting a verbatim
+% feature to cross-reference \texttt{latex.tex} getting a verbatim
 % copy with about 15 pages index.\footnote{It took quite a long time
 % and the resulting \texttt{.idx} file was longer than the
 % \texttt{.dvi} file.  Actually too long to be handled by the
-% \textsf{makeindex} program directly (on our MicroVAX) but the final
+% \prg{makeindex} program directly (on our MicroVAX) but the final
 % result was worth the trouble.}
 %
 % \changes{v2.1d}{2006/02/02}{Corrected description of \cs{changes}
 % macro.}
-% \DescribeMacro\changes
+% \DescribeInterfaceMacro\changes
 % To maintain a change history within the file, the |\changes|
-% command may be placed amongt the description part of the changed
+% command may be placed amongst the description part of the changed
 % code.  It takes three arguments, thus:
 % \begin{quote}
 % |\changes{|\meta{version}|}{|\meta{date}|}{|^^A
@@ -960,7 +1203,7 @@
 % |\glossary| mechanism is used for this) which may be printed
 % after suitable formatting. The |\changes| macro generates the
 % printed entry in such a change history; because old
-% versions\footnote{Before 2.6.} of the \textsf{makeindex}
+% versions\footnote{Before 2.6.} of the \prg{makeindex}
 % program limit such fields to 64 characters, care should be taken
 % not to exceed this limit when describing the change. The actual
 % entry consists of the \meta{version}, the |\actualchar|, the current
@@ -970,101 +1213,38 @@
 % text |\generalname| is used instead of the macro name.  When
 % referring to macros in change descriptions it is conventional to use
 % |\cs{|\meta{macroname}|}| rather than attempting to format it properly
-% and using up valuable characters in the entry with old \textsf{makeindex}
+% and using up valuable characters in the entry with old \prg{makeindex}
 % versions.
 %
 % \changes{v1.7a}{1992/02/26}{Description of \cs{RecordChanges} etc.
 % added
-% to interface section.} \DescribeMacro\RecordChanges To cause the
-% change information to be written out, include "\RecordChanges" in
-% the driver file.  \DescribeMacro\PrintChanges To read in and print
+% to interface section.} \DescribeInterfaceMacro\RecordChanges To cause the
+% change information to be written out, include |\RecordChanges| in
+% the driver file.  \DescribeInterfaceMacro\PrintChanges To read in and print
 % the sorted change history (in two columns), just put the
 % |\PrintChanges| command as the last (commented-out, and thus
 % executed during the documentation pass through the file) command in
 % your package file.  Alternatively, this command may form one of the
-% arguments of the |\StopEventually| command, although a change
+% arguments of the |\MaybeStop| command, although a change
 % history is probably {\em not\/} required if only the description is
-% being printed.  The command assumes that \textsf{makeindex} or some
+% being printed.  The command assumes that \prg{makeindex} or some
 % other program has processed the \texttt{.glo} file to generate a
-% sorted \texttt{.gls} file.  You need a special \textsf{makeindex}
+% sorted \texttt{.gls} file.  You need a special \prg{makeindex}
 % style file; a suitable one is supplied with \DOC{}, called
-% \texttt{gglo.ist}.  \DescribeMacro\GlossaryMin
-% \DescribeMacro\GlossaryPrologue \DescribeMacro\GlossaryParms The
-% "\GlossaryMin", "\GlossaryPrologue" and "\GlossaryParms" macros are
-% analogous to the "\Index"\ldots\ versions.  (The \LaTeX{} `glossary'
+% \texttt{gglo.ist}.
+%
+% \DescribeLaTeXDimen\GlossaryMin
+% \DescribeInterfaceMacro\GlossaryPrologue
+% \DescribeInterfaceMacro\GlossaryParms
+% \DescribeLaTeXCounter{GlossaryColumns}
+%  The
+% |\GlossaryMin|, |\GlossaryPrologue| and |\GlossaryParms| macros and
+% the counter \texttt{GlossaryColumns} are
+% analogous to the |\Index|\ldots\ versions.  (The \LaTeX{} `glossary'
 % mechanism is used for the change entries.)
 %
-% \label{sec:checksum}
-% \DescribeMacro\CharacterTable
-% \DescribeMacro\CheckSum
-% To overcome some of the problems of sending files over the networks
-% we developed two macros which should detect corrupted files. If one
-% places the lines
-% \begin{flushleft}
-% \small\ttfamily        ^^A \ttfamily to get the blanks between "..."s
-%                        ^^A right
-%"%%\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  "\verb=\"=
-%"    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         \~}"\\
-%"%%"
-%\end{flushleft}
-% at the beginning of the file then character translation failures
-% will be detected, provided of course, that the used \DOC{}
-% package has a correct default table.  The percent
-% signs\footnote{There are two percent signs in each line. This has
-% the effect that these lines are not removed by the
-% \texttt{docstrip.tex} program.} at the beginning of the lines should
-% be typed in, since only the \DOC{} package should look at this
-% command.
 %
-%
-% Another problem of mailing files is possible truncation.  To detect
-% these sort of errors we provide a |\CheckSum| macro.  The check-sum
-% of a file is simply the number of backslashes in the code, i.e.\ all
-% lines between the \textsf{macrocode} environments.  But don't be
-% afraid: you don't have count the code-lines yourself; this is done
-% by the \DOC{} package for you.  You simply have add
-% \begin{quote}
-%    |%   \CheckSum{0}|
-% \end{quote}
-% near the beginning of the file and
-% use
-% the |\StopEventually| (which starts looking for backslashes) and the
-% |\Finale| command.  The latter will inform you either that your file
-% has no check-sum (telling you the right number) or that your number
-% is incorrect if you put in anything other than zero but guessed wrong (this time
-% telling you both the correct and the
-% incorrect one).  Then you go to the top of your file again and change the
-% line to the right number, i.e.
-% line
-% \begin{quote}
-%    |%   \CheckSum{|\meta{number}|}|
-% \end{quote}
-% and that's all.
-%
-% While |\CharacterTable| and |\CheckSum| have been important features
-% in the early days of the public internet when \DOC{} was written as
-% the mail gateways back then were rather unreliable and often mangled
-% files they are these days more a nuisance than any help. They are
-% therefore now fully optional and no longer recommended for use with new files.
-%
-%
-% \DescribeMacro\bslash
+% \DescribeInterfaceMacro\bslash
 % From time to time, it is necessary to print a |\| without
 % being able to use the |\verb| command because the
 % |\catcode|$\,$s of the symbols are already firmly
@@ -1072,25 +1252,25 @@
 % |\bslash| presupposing, of course, that the actual font in
 % use at this point contains a `backslash' as a symbol.  Note that
 % this definition of |\bslash| is expandable; it inserts a
-% $"\"_{12}$.  This means that you have to |\protect|
+% $|\|_{12}$.  This means that you have to |\protect|
 % it if it is used in `moving arguments'.
 %
-% \DescribeMacro\MakePrivateLetters
+% \DescribeInterfaceMacro\MakePrivateLetters
 % \changes{v1.7a}{1992/02/26}{Documented \cs{MakePrivateLetters} in
 %                           interface section}^^A
-% If your macros "\catcode" anything other than "@" to `letter', you
-% should redefine "\MakePrivateLetters" so that it also makes the
+% If your macros |\catcode| anything other than |@| to `letter', you
+% should redefine |\MakePrivateLetters| so that it also makes the
 % relevant characters `letters' for the benefit of the indexing.  The
-% default definition is just "\makeatletter".
+% default definition is just |\makeatletter|.
 %
-% \DescribeMacro\DontCheckModules \DescribeMacro\CheckModules
-% \DescribeMacro\Module \DescribeMacro\AltMacroFont The `module'
-% directives of the \textsf{docstrip} system \cite{art:docstrip} are
-% normally recognised and invoke special formatting.  This can be
+% \DescribeInterfaceMacro\DontCheckModules \DescribeInterfaceMacro\CheckModules
+% \DescribeInterfaceMacro\Module \DescribeInterfaceMacro\AltMacroFont The `module'
+% directives of the \prg{docstrip} system \cite{art:docstrip} are
+% normally recognized and invoke special formatting.  This can be
 % turned on and off in the \texttt{.dtx} file or the driver file using
-% "\CheckModules" and "\DontCheckModules".  If checking for module
+% |\CheckModules| and |\DontCheckModules|.  If checking for module
 % directives is on (the default) then code in the scope of the
-% directives is set as determined by the hook "\AltMacroFont", which
+% directives is set as determined by the hook |\AltMacroFont|, which
 % gives {\small\ttfamily\itshape small italic type\-writer\/} by
 % default in the New Font Selection Scheme but just ordinary
 % {\small\ttfamily small type\-writer} in the old one, where a font
@@ -1097,22 +1277,22 @@
 % such as italic typewriter can't be used portably (plug for NFSS);
 % you will need to override this if you don't have the italic
 % typewriter font available.  Code is in such a scope if it's on a
-% line beginning with "%<" or is between lines starting with
-% "%<*"\meta{name list}">" and "%</"\meta{name list}">".  The
-% directive is formatted by the macro "\Module" whose single argument
+% line beginning with |%<| or is between lines starting with
+% |%<*|\meta{name list}|>| and |%</|\meta{name list}|>|.  The
+% directive is formatted by the macro |\Module| whose single argument
 % is the text of the directive between, but not including, the angle
 % brackets; this macro may be re-defined in the driver or package file
 % and by default produces results like \Module{+foo\string|bar} with no
 % following space.
 %
-% \DescribeMacro{StandardModuleDepth} Sometimes (as in this file) the
+% \DescribeLaTeXCounter{StandardModuleDepth} Sometimes (as in this file) the
 % whole code is surrounded by modules to produce several files from a
 % single source. In this case it is clearly not appropriate to format
-% all code lines in a special "\AltMacroFont". For this reason a
-% counter "StandardModuleDepth" is provided which defines the level of
+% all code lines in a special |\AltMacroFont|. For this reason a
+% counter |StandardModuleDepth| is provided which defines the level of
 % module nesting which is still supposed to be formatted in
-% "\MacroFont" rather then "\AltMacroFont". The default setting is
-% "0", for this documentation it was set to
+% |\MacroFont| rather then |\AltMacroFont|. The default setting is
+% |0|, for this documentation it was set to
 %\begin{verbatim}
 %   \setcounter{StandardModuleDepth}{1}
 %\end{verbatim}
@@ -1119,6 +1299,8 @@
 % at the beginning of the file.
 %
 %
+% \section{Examples and basic usage summary}
+%
 % \subsection{Basic usage summary}
 % \changes{v1.7a}{1992/03/11}{Added basic usage summary to spell
 %                             it out.}
@@ -1126,27 +1308,483 @@
 % To sum up, the basic structure of a \texttt{.dtx} file without any
 % refinements is like this:
 % \begin{verse}\small
-% "% "\meta{waffle}\ldots\\
+% |% |\meta{waffle}\ldots\\
 % \quad\ldots \\
-% "% \DescribeMacro{\fred}"\\
-% "% "\meta{description of fred's use}\\
+% |% \DescribeMacro{\fred}|\\
+% |% |\meta{description of fred's use}\\
 % \quad\ldots\\
-% "% \StopEventually{"\meta{finale code}"}"\\
+% |% \MaybeStop{|\meta{finale code}|}|\\
 % \quad\ldots\\
-% "% \begin{macro}{\fred}"\\
-% "% "\meta{commentary on macro fred}\\
+% |% \begin{macro}{\fred}|\\
+% |% |\meta{commentary on macro fred}\\
 % \verb*+%    \begin{macrocode}+\\
 % \meta{code for macro fred}\\
 % \verb*+%    \end{macrocode}+\\
-% "% \end{macro}"\\
+% |% \end{macro}|\\
 % \quad\ldots\\
-% "% \Finale \PrintIndex \PrintChanges"
+% |% \Finale \PrintIndex \PrintChanges|
 % \end{verse}
-% For examples of the use of most---if not all---of the features
-% described above consult the \texttt{doc.dtx} source itself.
+% For further examples of the use of most---if not all---of the features
+% described above, consult the \texttt{doc.dtx} source itself.
 %
-% \subsection{Acknowledgements}
 %
+%
+% \subsection{Examples}
+%
+% The default setup includes definitions for the \DOC elements
+% ``macro'' and ``environment''. They correspond to the following
+% declarations:
+%\begin{verbatim}
+% \NewDocElement[macrolike = true ,
+%                 idxtype   = ,
+%                 idxgroup  = ,
+%                 printtype =
+%                ]{Macro}{macro}
+%
+% \NewDocElement[macrolike = false ,
+%                 idxtype   = env.  ,
+%                 idxgroup  = environments ,
+%                 printtype = \textit{env.}
+%                ]{Env}{environment}
+%\end{verbatim}
+%
+% To showcase the new features of \DOC version 3 to some extend, the
+% current documentation is done by redefining these declarations and
+% also adding a few additional declarations on top.
+%
+% For any internal command we document we use \texttt{Macro} and put
+% all of them under the heading ``\LaTeX{} commands'' (note the use of \cs{actualchar}):
+%\begin{verbatim}
+%\RenewDocElement[macrolike = true ,
+%                toplevel  = false,
+%                idxtype   = ,
+%                idxgroup  = LaTeX comands\actualchar\LaTeX{} commands ,
+%                printtype =
+%               ]{Macro}{macro}
+%\end{verbatim}
+%
+% We only have package environments so we use \texttt{Env} for those
+% and group them as well:
+%\begin{verbatim}
+%\RenewDocElement[macrolike = false ,
+%                toplevel  = false,
+%                idxtype   = env.  ,
+%                idxgroup  = Package environments,
+%                printtype = \textit{env.}
+%               ]{Env}{environment}
+%\end{verbatim}
+%
+%
+% All the interface commands are also grouped together under the label
+% ``Package commands'', we use \texttt{InterfaceMacro} for them:
+%\begin{verbatim}
+%\NewDocElement[macrolike = true ,
+%                toplevel  = false,
+%                idxtype   = ,
+%                idxgroup  = Package commands,
+%                printtype =
+%               ]{InterfaceMacro}{imacro}
+%\end{verbatim}
+%
+% And since we also have a few obsolete interfaces we add yet another category:
+%\begin{verbatim}
+%\NewDocElement[macrolike = true ,
+%                toplevel  = false,
+%                idxtype   = ,
+%                idxgroup  = Package commands (obsolete),
+%                printtype =
+%               ]{ObsoleteInterfaceMacro}{omacro}
+%\end{verbatim}
+%
+% Another type of category are the package keys:
+%\begin{verbatim}
+%\NewDocElement[macrolike = false ,
+%                toplevel  = false,
+%                idxtype   = key  ,
+%                idxgroup  = Package keys ,
+%                printtype = \textit{key}
+%               ]{Key}{key} 
+%\end{verbatim}
+%
+% Finally we have \TeX{} counters (with a backslash in front) and
+% \LaTeX{} counters (no backslash) and the two types of \LaTeX{}
+% length registers:
+%\begin{verbatim}
+%\NewDocElement[macrolike = true ,
+%                toplevel  = false,
+%                idxtype   =  counter  ,
+%                idxgroup  = TeX counters\actualchar \protect\TeX{} counters ,
+%                printtype = \textit{counter}
+%               ]{TeXCounter}{tcounter}
+%
+%\NewDocElement[macrolike = false ,
+%                toplevel  = false,
+%                idxtype   =  counter  ,
+%                idxgroup  = LaTeX counters\actualchar \LaTeX{} counters ,
+%                printtype = \textit{counter}
+%               ]{LaTeXCounter}{lcounter}
+%
+%\NewDocElement[macrolike = true ,
+%                toplevel  = false,
+%                idxtype   =  skip  ,
+%                idxgroup  = LaTeX length\actualchar \LaTeX{} length (skip) ,
+%                printtype = \textit{skip}
+%               ]{LaTeXSkip}{lskip}
+%
+%\NewDocElement[macrolike = true ,
+%                toplevel  = false,
+%                idxtype   =  dimen  ,
+%                idxgroup  = LaTeX length\actualchar \LaTeX{} length (dimen) ,
+%                printtype = \textit{dimen}
+%               ]{LaTeXDimen}{ldimen}
+%
+%\end{verbatim}
+%
+% And we modify the appearance of the index: just 2 columns not 3 and
+% all the code-line entries get prefixed with an ``$\ell$'' (for line)
+% so that they can easily be distinguished from page index entries.
+%\begin{verbatim}
+% \renewcommand\code[1]{\mbox{$\ell$-#1}}
+% \renewcommand\main[1]{\underline{\mbox{$\ell$-#1}}}
+% \setcounter{IndexColumns}{2}
+%\end{verbatim}
+%
+%
+%
+% \section{Incompatibilities between version 2 and 3}
+%
+% The basic approach when developing version~3 was to provide a very
+% high level of compatibility with version~2 so that nearly all
+% older documents should work out of the box without the need for
+% any adjustments.
+%
+% But as with any change there are situations where that change can
+% result in some sort of incompatibility, e.g., if a newly introduce
+% command name was already been defined in the user document then
+% there will be a conflict that is nearly impossible to avoid
+% 100\%.
+%
+% As mentioned earlier, \DOC now supports options on several commands
+% and environments and as a result it is necessary to use braces
+% around the argument for \cs{DescribeMaro} if the ``macro to be
+% described'' uses private letters such as |@| or |_| as part of its
+% name. That was always the official syntax but in the past you could
+% get away with leaving out the braces more often than you can now.
+%
+% The old \DOC documentation also claimed that redefinitions of things
+% like \cs{PrintDescribeMacro} could be done before loading the
+% package (and not only afterwards) and \DOC would in that case not
+% change those commands. As the setup mechanisms are now much more
+% powerful and general such an approach is not really good. So with
+% \DOC version~3 modifications have to be done after the \DOC package
+% got loaded and the last modification will always win.
+%
+% I'm temped to drop compatibility with \LaTeX~2.09  (but so far I
+% have left it in).
+%
+% In the past it was possible to use macros declared with \cs{outer}
+% in the argument of \verb=\begin{macro}= or \cs{DoNotIndex} even
+% though \cs{outer} is not a concept supported in \LaTeX{}. This is no
+% longer possible. More exactly, it is no longer possible to prevent
+% them from being indexed (as \cs{DoNotIndex} can't be used), but you
+% can pass them to the \env{macro} environment as follows:
+%\begin{verbatim}
+%     \begin{macro}[outer]{\foo}
+%\end{verbatim}
+% if \cs{foo} is a macro declared with \cs{outer}. The technical
+% reason for this change is that in the past various other commands,
+% such as |\{| or |\}| did not work properly in these arguments when
+% they where passed as ``strings'' and not as single macro tokens. But
+% by switching to macro tokens we can't have \cs{outer} macros because
+% their feature is to be not allowed in arguments. So what happens
+% above when you use \texttt{[outer]} is that the argument is read as
+% a string with four character tokens so that it is not recognized as
+% being \cs{outer}.
+%
+%
+% \section{Old interfaces no longer really needed}
+%
+% Thirty years is a long time in the life of computer programs, so
+% there are a good number of interfaces within \DOC that are really
+% only of historical interest (or when processing equally old sources.
+% We list them here, but in general we suggest that for new
+% documentation they should not be used.
+%
+%
+% \subsection{\prg{makeindex} bugs}
+%
+% \DescribeObsoleteInterfaceMacro\OldMakeindex
+% Versions of \prg{makeindex} prior to 2.9 had some bugs affecting
+% \DOC{}.  One of these,
+% pertaining to the |%| character doesn't have a work-around
+% appropriate for versions with and without the
+% bug.\label{makeindex:version}  If
+% you really still have an old version, invoke |\OldMakeindex| in a
+% package file or the driver file to prevent problems with index entries
+% such as |\%|, although you'll probably normally want to turn off
+% indexing of |\%| anyway.  Try to get an up-to-date \prg{makeindex}
+% from one of the \TeX{} repositories.
+%
+% \subsection{File transmission issues}
+%
+% In the early days of the Internet file transmission issues have been
+% a serious problem. There was a famous gateway in Rochester, UK that
+% handled the traffic from the European continent to the UK and that
+% consisted of two IBM machines running with different codepages (that
+% had non-reversible differences). As a result ``strange'' \TeX{}
+% characters got replaced with something else with the result that the
+% files became unusable.
+%
+% To guard against this problem (or rather to detect it if something
+% got broken in transfer I added code to \DOC to check a static
+% character table and also to have a very simple checksum feature
+% (counting backslashes).
+%
+% These days the \cs{CheckSum} is of little value (and a lot of pain
+% for the developer) and character scrambling doesn't happen any more
+% so the \cs{CharacterTable} is essentially useless. Thus neither
+% should be used in new developments.
+%
+% \label{sec:checksum}
+% \DescribeObsoleteInterfaceMacro\CharacterTable
+% \DescribeObsoleteInterfaceMacro\CheckSum
+% To overcome some of the problems of sending files over the networks
+% we developed two macros which should detect corrupted files. If one
+% places the lines
+% \begin{flushleft}
+% \small\ttfamily        ^^A \ttfamily to get the blanks between "..."s
+%                        ^^A right
+%|%%\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  |\verb=|=\\
+%|%%  Right brace   \}     Tilde         \~}|\\
+%|%%|
+%\end{flushleft}
+% at the beginning of the file then character translation failures
+% will be detected, provided of course, that the used \DOC{}
+% package has a correct default table.  The percent
+% signs\footnote{There are two percent signs in each line. This has
+% the effect that these lines are not removed by the
+% \texttt{docstrip.tex} program.} at the beginning of the lines should
+% be typed in, since only the \DOC{} package should look at this
+% command.
+%
+%
+% Another problem of mailing files is possible truncation.  To detect
+% these sort of errors we provide a |\CheckSum| macro.  The check-sum
+% of a file is simply the number of backslashes in the code, i.e.\ all
+% lines between the \env{macrocode} environments.  But don't be
+% afraid: you don't have count the code-lines yourself; this is done
+% by the \DOC{} package for you.  You simply have add
+% \begin{quote}
+%    |%   \CheckSum{0}|
+% \end{quote}
+% near the beginning of the file and use the |\MaybeStop| (which
+% starts looking for backslashes) and the |\Finale| command.  The
+% latter will inform you either that your file has no check-sum
+% (telling you the right number) or that your number is incorrect if
+% you put in anything other than zero but guessed wrong (this time
+% telling you both the correct and the incorrect one).  Then you go to
+% the top of your file again and change the line to the right number,
+% i.e.,  line
+% \begin{quote}
+%    |%   \CheckSum{|\meta{number}|}|
+% \end{quote}
+% and that's all.
+%
+% While |\CharacterTable| and |\CheckSum| have been important features
+% in the early days of the public internet when \DOC{} was written as
+% the mail gateways back then were rather unreliable and often mangled
+% files they are these days more a nuisance than any help. They are
+% therefore now fully optional and no longer recommended for use with
+% new files.
+%
+%
+
+
+
+% ^^A =============================================================
+
+
+
+% \begin{multicols}{2}[\medskip \noindent\rule{\textwidth}{.3pt}
+%                      \section{Introduction to previous releases}]
+%
+% \begin{quote}
+%   \textbf{Original abstract:}
+%    This package contains the definitions that are necessary to
+%    format the documentation of package files.  The package was
+%    developed in Mainz in cooperation with the Royal Military College
+%    of Science.  This is an update which documents various changes
+%    and new features in \DOC{} and integrates the features of
+%    \env{newdoc}.
+% \end{quote}
+%
+% The \TeX{} macros which are described here allow definitions and
+% documentation to be held in one and the same file.  This has the
+% advantage that normally very complicated instructions are made
+% simpler to understand by comments inside the definition. In addition
+% to this, updates are easier and only one source file needs to be
+% changed.  On the other hand, because of this, the package files are
+% considerably longer: thus \TeX{} takes longer to load them.  If this
+% is a problem, there is an easy remedy: one needs only to run the
+% \texttt{docstrip.tex} program that removes nearly all lines that begin
+% with a
+% percent sign.
+%
+% The idea of integrated documentation was born with the development
+% of the \TeX{} program; it was crystallized in Pascal with the \Web{}
+% system.  The advantages of this method are plain to see (it's easy
+% to make comparisons \cite{art:Knuthliterat}).  Since this
+% development, systems similar to \Web{} have been developed for other
+% programming languages. But for one of the most complicated
+% programming languages (\TeX) the documentation has however been
+% neglected.  The \TeX{} world seems to be divided between:---
+% \begin{itemize} \item a couple of ``wizards'', who produce many
+% lines of completely unreadable code ``off the cuff'', and \item many
+% users who are amazed that it works just how they want it to do.  Or
+% rather, who despair that certain macros refuse to do what is
+% expected of them.\end{itemize}
+%
+% I do not think that the \Web{} system is {\em the\/} reference work;
+% on the contrary, it is a prototype which suffices for the
+% development of programs within the \TeX{} world.  It is sufficient,
+% but not totally sufficient.\footnote{I know that this will be seen
+% differently by a few people, but this product should not be seen as
+% the finished product, at least as far as applications concerning
+% \TeX{} are concerned.  The long-standing debate over `multiple
+% change files' shows this well.} As a result of \Web, new programming
+% perspectives have been demonstrated; unfortunately, though, they
+% haven't been developed further for other programming languages.
+%
+% The method of documentation of \TeX{} macros which I have introduced
+% here should also only be taken as a first sketch.  It is designed
+% explicitly to run under \LaTeX{} alone.  Not because I was of the
+% opinion that this was the best starting point, but because from this
+% starting point it was the quickest to develop.\footnote{This
+% argument is a bad one, however, it is all too often trotted out.} As
+% a result of this design decision, I had to move away from the
+% concept of modularization; this was certainly a step backward.
+%
+% I would be happy if this article could spark off discussion over
+% \TeX\ documentation.  I can only advise anyone who thinks that they
+% can cope without documentation to ``Stop Time'' until he or she
+% completely understands the \AmSTeX{} source code.
+%
+% \subsection*{Using the \DOC{} package}
+%
+% Just like any other package, invoke it by requesting it with a
+% |\usepackage| command in the preamble. \DOC's use of
+% |\reversemarginpars| may make it incompatible with some classes.
+% \changes{v1.7a}{1992/02/25}{Altered usage info}
+%
+%
+% \end{multicols}
+%
+%
+%
+%
+% \begin{multicols}{2}[\subsection*{Preface to version 1.7 (from
+%    around 1992)}]
+%
+% This version of \texttt{doc.dtx} documents changes which have occurred
+% since the last published version \cite{art:doc} but which have been
+% present in distributed versions of \texttt{doc.sty} for some time.  It
+% also integrates the (undocumented) features of the distributed
+% \texttt{newdoc.sty}.
+%
+% The following changes and additions have been made to the user
+% interface since the published version~\cite{art:doc}.  See
+% \S\ref{sec:interface} for more details.
+% \begin{description}
+% \item[Driver mechanism] |\DocInput| is now used in the driver file
+%    to input possibly multiple independent \DOC{} files and \DOC{} no
+%    longer has to be the last package.  |\IndexListing| is replaced
+%    by |\IndexInput|;
+% \item[Indexing] is controlled by |\PageIndex| and |\CodelineIndex|,
+%    one of which must be specified to produce an index---there is no
+%    longer a |\makeindex| in the default |\DocstyleParms|;
+% \item[The \texttt{macro} environment] now takes as argument the
+%    macro name {\em with\/} the backslash;
+% \item[Verbatim text] Newlines are now forbidden inside |\verb| and
+%    commands |\MakeShortVerb| and |\DeleteShortVerb| are provided for
+%    verbatim shorthand;
+% \item[\texttt{\bslash par}] can now be used in |\DoNotIndex|;
+% \item[Checksum/character table support] for ensuring the integrity
+%    of distributions is added;
+% \item[\texttt{\bslash printindex}] becomes |\PrintIndex|;
+% \item[\texttt{multicol.sty}] is no longer necessary to use \DOC{} or
+%    print the documentation (although it is recommended);
+% \item[`Docstrip' modules] are recognized and formatted specially.
+% \end{description}
+%
+% As well as adding some completely new stuff,
+% the opportunity has been taken to add some commentary to the code
+% formerly in \pkg{newdoc} and that added after version 1.5k of
+% \DOC.  Since (as noted in the sections concerned) this
+% commentary wasn't written by Frank Mittelbach but the code was, it is
+% probably {\em not\/} true in this case that ``if the code and
+% comments disagree both are probably wrong''!
+%
+% \subsubsection*{Bugs}
+%
+% There are some known bugs in this version:
+% \begin{itemize}
+% \item The |\DoNotIndex| command doesn't work for some single
+%    character commands most noticeable |\%|.
+% \item The `General changes' glossary entry would come out after
+%    macro names with a leading |!| and possibly a leading |"|;
+% \item If you have an old version of \prg{makeindex} long |\changes|
+%    entries will come out strangely and you may find the section
+%    header amalgamated with the first changes entry.  Try to get an
+%    up-to-date one (see p.~\pageref{makeindex:version});
+% \item Because the accompanying \prg{makeindex} style files support
+%    the inconsistent attribute specifications of older and newer
+%    versions \prg{makeindex} always complains about three `unknown
+%    specifier's when sorting the index and changes entries.
+% \item If |\MakeShortVerb| and |\DeleteShortVerb| are used with
+%    single character arguments, e.g., \verb"{|}" instead of \verb"{\|}" chaos
+%    may happen.
+% \end{itemize}
+% (Some `features' are documented below.)
+%
+% \subsubsection*{Wish list}
+%
+% \begin{itemize}
+% \item Hooks to allow |\DescribeMacro| and |\DescribeEnv| to write
+% out to a special file information about the package's `exported'
+% definitions which they describe.  This could subsequently be
+% included in the \texttt{docstrip}ped \texttt{.sty} file in a
+% suitable form for use by smart editors in command completion,
+% spelling checking etc., based on the packages used in a document.
+% This would need agreement on a `suitable form'.  \item Indexing of
+% the modules used in \texttt{docstrip}'s |%<| directives.  I'm not
+% sure how to index directives containing module combinations; \item
+% Writing out bibliographic information about the package; \item Allow
+% turning off use of the special font for, say, the next guarded
+% block.
+% \end{itemize}
+%
+%
+% \end{multicols}
+
+
+% \subsection*{Acknowledgements}
+%
 % I would like to thank all folks at Mainz and at the Royal Military
 % College of Science for their help in this project. Especially Brian
 % and Rainer who pushed everything with their suggestions, bug fixes,
@@ -1158,14 +1796,14 @@
 % \texttt{doc.dtx} after its publication in \textsl{TUGboat\/} have
 % been never properly described. Beside this splendid work he kindly
 % provided additional code (like ``docstrip'' module formatting) which
-% I think every \textsf{doc.dtx} user will be grateful for.
+% I think every \DOC user will be grateful for.
 %
 %
-% \StopEventually{
+% \MaybeStop{
 %  \begin{thebibliography}{1}
 %    \bibitem{book:Buerger}  \textsc{G. A. B\"urger}.
-%      \newblock Wunderbare Reisen zu Wasser und zu Lande, Feldz\"uge
-%                und lustige Abenteuer des Freyherrn v.\ M\"unchhausen.
+%      \newblock Wunderbare Reisen zu Wasser und zu Lande, Feldzüge
+%                und lustige Abenteuer des Freyherrn v.\ Münchhausen.
 %      \newblock London, 1786 \& 1788.
 %    \bibitem{art:Knuthliterat} \textsc{D. E. Knuth}.
 %      \newblock Literate Programming.
@@ -1189,22 +1827,22 @@
 %      \newblock \texttt{docstrip.dtx} (to appear).
 %      \newblock The file is part of the DOC package.
 %    \bibitem{book:Raspe} \textsc{R. E. Raspe} (*1737, \dag 1797).
-%      \newblock Baron M\"unchhausens narrative of his marvellous
+%      \newblock Baron Münchhausens narrative of his marvelous
 %                travels and campaigns in Russia.
 %      \newblock Oxford, 1785.
-%    \bibitem{art:verbatim} \textsc{Rainer Sch\"opf}.
+%    \bibitem{art:verbatim} \textsc{Rainer Schöpf}.
 %      \newblock A New Implementation of \LaTeX's \texttt{verbatim} and
 %      \texttt{verbatim*} Environments.
 %      \newblock File \texttt{verbatim.doc}, version 1.4i.
 %  \end{thebibliography}
 %
-%  \ifmulticols
 %  \addtocontents{toc}{\protect\end{multicols}}
-%  \fi
 %
-% } ^^A end \StopEventually
+%  \PrintIndex
 %
+% } ^^A end \MaybeStop
 %
+%
 % \section{The Description of Macros}
 %
 % Most of the following code is destined for \texttt{doc.sty} after
@@ -1228,23 +1866,24 @@
 \@ifundefined{macro at cnt}{}{\endinput}
 %    \end{macrocode}
 %
-% \DescribeMacro\fileversion
-% \DescribeMacro\filedate
-% \DescribeMacro\docdate
+% \DescribeObsoleteInterfaceMacro\fileversion
+% \DescribeObsoleteInterfaceMacro\filedate
+% \DescribeObsoleteInterfaceMacro\docdate
 % As you can see I used macros like |\fileversion| to denote the
 % version number and the date. They are defined at the very beginning
-% of the package file (without a surrounding \textsf{macrocode}
+% of the package file (without a surrounding \env{macrocode}
 % environment), so I don't have to search for this place here when I
 % change the version number.  You can see their actual outcome in a
 % footnote to the title.
 %
 %
-% The first thing that we do next is to get ourselves a new comment
-% sign.  Because all sensible signs are already occupied, we will
-% choose one that can only be entered indirectly:
+% The first thing that we do next is to get ourselves two alternative comment
+% signs.  Because all sensible signs are already occupied, we will
+% choose some that can only be entered indirectly:
 % {\DoNotIndex{\^}^^A avoid misinterpretation !!!!! VERIFY
 %    \begin{macrocode}
 \catcode`\^^A=14
+\catcode`\^^X=14
 %    \end{macrocode}
 % We repeat this statement at the beginning of the document in case
 % the \texttt{inputenc} package is used disabling it again.
@@ -1251,27 +1890,187 @@
 % \changes{v2.0b}{1998/05/19}{Init docs private comment char at begin
 %  of document again (pr2581)}
 %    \begin{macrocode}
-\AtBeginDocument{\catcode`\^^A=14\relax}
+\AtBeginDocument{\catcode`\^^A=14\relax\catcode`\^^X=14\relax}
 %    \end{macrocode}
 %    \SortIndex{\string^\string^A}{\string\verb\verbatimchar
 %                                  \string^\string^A\verbatimchar
+%                                  \encapchar main}^^A
+%    \SortIndex{\string^\string^X}{\string\verb\verbatimchar
+%                                  \string^\string^X\verbatimchar
 %                                  \encapchar main}
 % }
 %
 %
-% \subsection{Options supported by \DOC{}}
+% \subsection{Keys supported by \DOC{}}
 %
-%   Not options available at the moment
+%    In the past this used \pkg{kvoptions} but this will be
+%    replaced by using \texttt{l3keys} at some point in the future.
+%    Right now this is only a lightweight shift---the code could and
+%    should be altered further.
+%    \fmi{cleanup replacement of kvoptions}
 %
 %    \begin{macrocode}
+\ExplSyntaxOn
 %    \end{macrocode}
+% Some keys are available as options for use in \cs{usepackage} some are
+% for the generated item \api's:
+% \fmi{cleanup documentation (and code once the new key interface is there)}
+%    \begin{macrocode}
+\newif \ifdoc at noprint
+\newif \ifdoc at noindex
+\newif \ifdoc at hyperref \doc at hyperreftrue
+\newif \ifdoc at multicol \doc at multicoltrue
+\newif \ifdoc at debugshow
+\newif \ifdoc at reportchangedates
+\keys_define:nn {doc}
+  {
+    noprint  .choice:,
+    noprint / true  .code:n = { \legacy_if_set_true:n  { doc at noprint } },
+    noprint / false .code:n = { \legacy_if_set_false:n { doc at noprint } },
+    noprint  .default:n = { true },
+    noindex  .choice:,
+    noindex / true  .code:n = { \legacy_if_set_true:n  { doc at noindex } },
+    noindex / false .code:n = { \legacy_if_set_false:n { doc at noindex } },
+    noindex  .default:n = { true },
+    hyperref  .choice:,
+    hyperref / true  .code:n = { \legacy_if_set_true:n  { doc at hyperref } },
+    hyperref / false .code:n = { \legacy_if_set_false:n { doc at hyperref } },
+    hyperref  .default:n = { true },
+%    \end{macrocode}
+% \changes{v3.0h}{2022/06/01}{fix choice key name (gh/750)}
+%    \begin{macrocode}
+    nohyperref  .choice:,
+    nohyperref / true  .code:n = { \legacy_if_set_false:n  { doc at hyperref } },
+    nohyperref / false .code:n = { \legacy_if_set_true:n { doc at hyperref } },
+    nohyperref  .default:n = { true },
+    multicol  .choice:,
+    multicol / true  .code:n = { \legacy_if_set_true:n  { doc at multicol } },
+    multicol / false .code:n = { \legacy_if_set_false:n { doc at multicol } },
+    multicol  .default:n = { true },
+    nomulticol  .choice:,
+    nomulticol / true  .code:n = { \legacy_if_set_false:n  { doc at multicol } },
+    nomulticol / false .code:n = { \legacy_if_set_true:n { doc at multicol } },
+%    \end{macrocode}
+% \changes{v3.0h}{2022/06/01}{fix default key name (gh/750)}
+%    \begin{macrocode}
+    nomulticol  .default:n = { true },
+    debugshow  .choice:,
+    debugshow / true  .code:n = { \legacy_if_set_true:n  { doc at debugshow } },
+    debugshow / false .code:n = { \legacy_if_set_false:n { doc at debugshow } },
+    debugshow  .default:n = { true },
+    reportchangedates  .choice:,
+    reportchangedates / true  .code:n = { \legacy_if_set_true:n  { doc at reportchangedates } },
+    reportchangedates / false .code:n = { \legacy_if_set_false:n { doc at reportchangedates } },
+    reportchangedates  .default:n = { true },
+  }
+%    \end{macrocode}
+% This one is for \cs{usepackage} and \cs{NewDocElement}:
+%    \begin{macrocode}
+\newif \ifdoc at toplevel \doc at topleveltrue
+\keys_define:nn {doc}
+  {
+    toplevel  .choice:,
+    toplevel / true  .code:n = { \legacy_if_set_true:n  { doc at toplevel } },
+    toplevel / false .code:n = { \legacy_if_set_false:n { doc at toplevel } },
+    toplevel  .default:n = { true },
+    notoplevel  .choice:,
+    notoplevel / true  .code:n = { \legacy_if_set_false:n  { doc at toplevel } },
+    notoplevel / false .code:n = { \legacy_if_set_true:n { doc at toplevel } },
+    notoplevel  .default:n = { true }
+  }
+%    \end{macrocode}
+% These are for \cs{NewDocElement}:
+%    \begin{macrocode}
+\newif \ifdoc at macrolike
+\keys_define:nn {doc}
+  {
+    macrolike  .choice:,
+    macrolike / true  .code:n = { \legacy_if_set_true:n  { doc at macrolike } },
+    macrolike / false .code:n = { \legacy_if_set_false:n { doc at macrolike } },
+    macrolike  .default:n = { true },
+    envlike  .choice:,
+    envlike / true  .code:n = { \legacy_if_set_false:n  { doc at macrolike } },
+    envlike / false .code:n = { \legacy_if_set_true:n { doc at macrolike } },
+    envlike  .default:n = { true }
+  }
+
+\keys_define:nn { doc }
+  {
+    idxtype  .tl_set:N = \doc at idxtype,
+    idxgroup .tl_set:N = \doc at idxgroup,
+    printtype .tl_set:N = \doc at printtype
+  }
+%    \end{macrocode}
+% And this one only for instances of doc elements in the document, it
+%    covers the case where you want to document a macro which is
+%    declared to be \cs{outer}. This is not a concept officially
+%    supported by \LaTeX{} but there are cases when it gets used.
+%    \begin{macrocode}
+\newif\ifdoc at outer
+\keys_define:nn {doc}
+  {
+    outer  .choice:,
+    outer / true  .code:n = { \legacy_if_set_true:n  { doc at outer } },
+    outer / false .code:n = { \legacy_if_set_false:n { doc at outer } },
+    outer  .default:n = { true },
+  }
+\ExplSyntaxOff
+%    \end{macrocode}
 %
+% \subsection{Processing the package keys}
 %
+%    \begin{macrocode}
+\ProcessKeyOptions
+%    \end{macrocode}
+%
+%
+% \begin{macro}{\ifscan at allowed}
+% \begin{macro}{\scan at allowedtrue}
+% \begin{macro}{\scan at allowedfalse}
+%    |\ifscan at allowed| is the switch used to determine if
+%    the |\active at escape@char|\SpecialIndex{\active at escape@char}
+%    should start the macro scanning mechanism.
+%    \begin{macrocode}
+\newif\ifscan at allowed    \scan at allowedtrue
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%  \begin{imacro}{\SetupDoc}
+%
+%    We need to save the default value for some options because \DOC elements
+%    can locally set them.
+% \fmi{Use 2e interface for \cs{keys\_set:nn} when available}
+%    \begin{macrocode}
+\def\SetupDoc#1{%
+  \csname keys_set:nn\endcsname{doc}{#1}%
+    \edef\doc at noprintdefault{\ifdoc at noprint true\else false\fi}%
+  \ifdoc at noindex
+%    \end{macrocode}
+%    If we do not index by default then we should also turn off
+%    \cs{scan at allowed}.
+%    \begin{macrocode}
+    \def\doc at noindexdefault{true}%
+    \scan at allowedfalse
+  \else
+    \def\doc at noindexdefault{false}%
+  \fi
+}
+%    \end{macrocode}
+%  \end{imacro}
+%
+%    \begin{macrocode}
+\SetupDoc{}              % just save the default values
+%    \end{macrocode}
+%
+%
+%
 % \subsection{Macros surrounding the `definition parts'}
 %
 % \begin{environment}{macrocode}
 %    Parts of the macro definition will be surrounded by the
-%    environment \textsf{macrocode}.  Put more precisely, they will be
+%    environment \env{macrocode}.  Put more precisely, they will be
 %    enclosed by a macro whose argument (the text to be set
 %    `verbatim') is terminated by the string
 % \verb*+%    \end{macrocode}+.  Carefully note the number of spaces.
@@ -1307,7 +2106,7 @@
 %    \begin{macrocode}
 \def\macro at code{%
 %    \end{macrocode}
-%    In theory it should consist of a \textsf{trivlist} environment, but
+%    In theory it should consist of a \env{trivlist} environment, but
 %    the empty space before and after the environment should not be
 %    too large.
 %    \begin{macrocode}
@@ -1384,7 +2183,7 @@
 % indexing by code lines is switched on the line number is incremented
 % and set appropriately.  We also check whether the start of the next
 % line indicates a \texttt{docstrip} module directive and process it
-% appropriately if so using "\check at module".
+% appropriately if so using |\check at module|.
 %    \begin{macrocode}
    \global\@newlistfalse
    \global\@minipagefalse
@@ -1408,9 +2207,9 @@
 % \begin{macro}{\blank at linetrue}
 % \begin{macro}{\blank at linefalse}
 %    |\ifblank at line| is the switch used in the definition above.
-%    In the original \textsf{verbatim} environment the |\if at tempswa|
+%    In the original \env{verbatim} environment the |\if at tempswa|
 %    switch is used. This is dangerous because its value may change
-%    while processing lines in the \textsf{macrocode} environment.
+%    while processing lines in the \env{macrocode} environment.
 %    \begin{macrocode}
 \newif\ifblank at line
 %    \end{macrocode}
@@ -1419,10 +2218,10 @@
 % \end{macro}
 %
 % \begin{macro}{\endmacrocode}
-%    Because we have begun a \textsf{trivlist} environment in the
-%    \textsf{macrocode} environment, we must also end it.  We must
-%    also act on the value of the "pm at module" flag (see below) and
-%    empty "\everypar".
+%    Because we have begun a \env{trivlist} environment in the
+%    \env{macrocode} environment, we must also end it.  We must
+%    also act on the value of the |pm at module| flag (see below) and
+%    empty |\everypar|.
 % \changes{v1.5r}{1989/11/04}{Support for code line no. (Undoc)}
 %    \begin{macrocode}
 \def\endmacrocode{%
@@ -1439,7 +2238,7 @@
 % \end{macro}
 %
 %
-% \begin{macro}{\MacroFont}
+% \begin{imacro}{\MacroFont}
 %    Here is the default definition for the |\MacroFont| macro.
 %    With the new math font handling in NFSS2 it isn't any longer
 %    correct to suppress the math font setup since this is now handled
@@ -1459,7 +2258,7 @@
 %    bothered since doc-sources should be up-to-date but since the
 %    request came from someone called David Carlisle \ldots :-)
 % \changes{v1.9y}{1996/01/26}{Support compat mode}
-%  \changes{v2.1l}{2019/12/16}{Use \cs{shapedefault} not
+% \changes{v2.1l}{2019/12/16}{Use \cs{shapedefault} not
 %    \cs{updefault} for extended NFSS}
 %    \begin{macrocode}
     \def\MacroFont{\small
@@ -1477,9 +2276,9 @@
   \fi
   }{}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
-% \begin{macro}{\AltMacroFont}
+% \begin{imacro}{\AltMacroFont}
 % \begin{macro}{\macro at font}
 % \changes{v1.7a}{1992/03/12}{Added to support distinction of modules.}
 % \changes{v1.7c}{1992/03/26}{Altered font change for OFSS.}
@@ -1487,9 +2286,9 @@
 % \changes{v1.8c}{1993/10/25}{NFSS standard}
 % \changes{v1.9t}{1995/05/26}{Removed \cs{math at fontsfalse} (different
 %                             math setup /pr1622}
-% Although most of the macro code is set in "\MacroFont" we want to be
-% able to switch to indicate module code set in "\AltMacroFont".
-% "\macro at font" keeps track of which one we're using.  We can't do the
+% Although most of the macro code is set in |\MacroFont| we want to be
+% able to switch to indicate module code set in |\AltMacroFont|.
+% |\macro at font| keeps track of which one we're using.  We can't do the
 % same thing sensibly in OFSS as in NFSS.
 %    \begin{macrocode}
 \@ifundefined{AltMacroFont}{%
@@ -1514,8 +2313,8 @@
  \fi
   }{}
 %    \end{macrocode}
-%    To allow changing the "\MacroFont" in the preamble we defer
-%    defining the internally used "\macro at font" until after the
+%    To allow changing the |\MacroFont| in the preamble we defer
+%    defining the internally used |\macro at font| until after the
 %    preamble.
 % \changes{v2.0a}{1998/05/16}{Support changing \cs{MacroFont} in
 %          preamble}
@@ -1523,23 +2322,23 @@
 \AtBeginDocument{\let\macro at font\MacroFont}
 %    \end{macrocode}
 % \end{macro}
-% \end{macro}
+% \end{imacro}
 %
 % \begin{macro}{\check at module}
 % \begin{macro}{\ifpm at module}
 % \changes{v1.7a}{1992/03/12}{Added.}
-% This is inserted by "\everypar" at the start of each macrocode line to
+% This is inserted by |\everypar| at the start of each macrocode line to
 % check whether it starts with module information.  (Such information is
-% of the form "%<"\meta{switch}">", where the "%" must be at the
+% of the form |%<|\meta{switch}|>|, where the |%| must be at the
 % start of the line and \meta{switch} comprises names with various
-% possible separators and a possible leading "+", "-", "*" or "/"
+% possible separators and a possible leading |+|, |-|, |*| or |/|
 % \cite{art:docstrip}.  All that concerns us here is what the first
-% character of \meta{switch} is.)  First it checks the "pm at module"
+% character of \meta{switch} is.)  First it checks the |pm at module|
 % flag in case the previous line had a non-block module
-% directive i.e., not "%<*" or "%</"; if it did we need to close the
-% group it started and unset the flag.  "\check at module" looks ahead at
-% the next token and then calls "\ch at percent" to take action depending
-% on whether or not it's a "%"; we don't want to expand the token at
+% directive i.e., not |%<*| or |%</|; if it did we need to close the
+% group it started and unset the flag.  |\check at module| looks ahead at
+% the next token and then calls |\ch at percent| to take action depending
+% on whether or not it's a |%|; we don't want to expand the token at
 % this stage.  This is all done conditionally so it can be turned off
 % if it causes problems with code that wasn't designed to be
 % \texttt{docstrip}ped.
@@ -1553,12 +2352,12 @@
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
-% \begin{macro}{\DontCheckModules}
-% \begin{macro}{\CheckModules}
+% \begin{imacro}{\DontCheckModules}
+% \begin{imacro}{\CheckModules}
 % \changes{v1.7a}{1992/03/12}{Added.}
 % \begin{macro}{\ifcheck at modules}
 % Here are two driver-file interface macros for turning the module
-% checking on and off using the "check at modules" switch.
+% checking on and off using the |check at modules| switch.
 %    \begin{macrocode}
 \def\DontCheckModules{\check at modulesfalse}
 \def\CheckModules{\check at modulestrue}
@@ -1565,13 +2364,15 @@
 \newif\ifcheck at modules  \check at modulestrue
 %    \end{macrocode}
 % \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{imacro}
+% \end{imacro}
+%
+%
 % \begin{macro}{\ch at percent}
 % \changes{v1.7a}{1992/03/12}{Added.}
-% If the lookahead token in "\next" is $"%"_{12}$ we go on to check
-% whether the following one is "<" and otherwise do nothing.  Note the
-% "\expandafter" to get past the "\fi".
+% If the lookahead token in |\next| is $|%|_{12}$ we go on to check
+% whether the following one is |<| and otherwise do nothing.  Note the
+% |\expandafter| to get past the |\fi|.
 %    \begin{macrocode}
 \def\ch at percent{%
   \if \percentchar\next
@@ -1582,7 +2383,7 @@
 %
 % \begin{macro}{\check at angle}
 % \changes{v1.7a}{1992/03/12}{Added.}
-% Before looking ahead for the "<" the "%" is gobbled by the
+% Before looking ahead for the |<| the |%| is gobbled by the
 % argument here.
 %    \begin{macrocode}
 \def\check at angle#1{\futurelet\next\ch at angle}
@@ -1591,9 +2392,9 @@
 % \begin{macro}{\ch at angle}
 % \changes{v1.7a}{1992/03/12}{Added.}
 % \changes{v1.9k}{1994/02/22}{Have \texttt{<} active}
-%    If the current lookahead token is "<" we are defined to be
-%    processing a module directive can go on to look for "+" etc.;
-%    otherwise we must put back the gobbled "%". With \LaTeXe{}
+%    If the current lookahead token is |<| we are defined to be
+%    processing a module directive can go on to look for |+| etc.;
+%    otherwise we must put back the gobbled |%|. With \LaTeXe{}
 %    \texttt{<} is active so we have to be a bit careful.
 %    \begin{macrocode}
 \begingroup
@@ -1644,13 +2445,13 @@
 % \end{macro}
 % \begin{macro}{\pm at module}
 % If we're not dealing with a block
-% directive ("*" or "/") i.e., it's a single special line, we set
-% everything up to the next ">" appropriately and then change to the
+% directive (|*| or |/|) i.e., it's a single special line, we set
+% everything up to the next |>| appropriately and then change to the
 % special macro font inside a group which will be ended at the start
 % of the next line.  If the apparent module directive is missing the
-% terminating ">" this will lose, but then so will the \texttt{docstrip}
+% terminating |>| this will lose, but then so will the \texttt{docstrip}
 % implementation.  An alternative strategy would be to have
-% "\pm at module" make ">" active and clear a flag set here to indicate
+% |\pm at module| make |>| active and clear a flag set here to indicate
 % processing the directive.  Appropriate action could then be taken if
 % the flag was found still to be set when processing the next line.
 % \changes{v1.7a}{1992/03/12}{Added.}
@@ -1663,8 +2464,8 @@
    \Module{#1}\begingroup
 %    \end{macrocode}
 %    We switch to a special font as soon the nesting is higher than
-%    the current value of "\c at StandardModuleDepth". We do a local
-%    update to the "\guard at level" here which will be restored after
+%    the current value of |\c at StandardModuleDepth|. We do a local
+%    update to the |\guard at level| here which will be restored after
 %    the current input line.
 %    \begin{macrocode}
      \advance\guard at level\@ne
@@ -1706,8 +2507,7 @@
 % \end{macro}
 % \end{macro}
 %
-%
-%  \begin{macro}{\c at StandardModuleDepth}
+%  \begin{lcounter}{StandardModuleDepth}
 % \changes{v1.7i}{1992/07/11}{Counter added.}
 %    Counter defining up to which level modules are considered part of
 %    the main code. If, for  example, the whole code is surrounded by
@@ -1716,16 +2516,17 @@
 %    \begin{macrocode}
 \newcounter{StandardModuleDepth}
 %    \end{macrocode}
-%  \end{macro}
+%  \end{lcounter}
 %
 %
-% \begin{macro}{\guard at level}
+% \begin{tcounter}{\guard at level}
 % \changes{v1.7f}{1992/05/16}{Added.}
 % We need a counter to keep track of the guard nesting.
 %    \begin{macrocode}
 \newcount \guard at level
 %    \end{macrocode}
-% \end{macro}
+% \end{tcounter}
+
 % \begin{macro}{\Module}
 % \changes{v1.7a}{1992/03/12}{Added.}
 % \changes{v1.7d}{1992/04/25}{Use sans font for modules.}
@@ -1732,22 +2533,22 @@
 % This provides a hook to determine the way the module directive is
 % set.  It gets as argument everything between the angle brackets.
 % The default is to set the contents in sans serif text between
-% $\langle\,\rangle$ with the special characters suitably "\mathcode"d
-% by "\mod at math@codes".  (You can't just set it in a sans text font
-% because normally "|" will print as an em-dash.)  This is done
+% $\langle\,\rangle$ with the special characters suitably |\mathcode|d
+% by |\mod at math@codes|.  (You can't just set it in a sans text font
+% because normally \verb"|" will print as an em-dash.)  This is done
 % differently depending on whether we have the NFSS or the old one.  In
-% the latter case we can easily change "\fam" appropriately.
+% the latter case we can easily change |\fam| appropriately.
 % \changes{v1.8c}{1993/10/25}{NFSS standard}
 %    \begin{macrocode}
 \@ifundefined{Module}{%
 %    \end{macrocode}
 %    With NFSS what we probably {\em should\/} do is change to a new
-%    "\mathversion" but I (Dave Love) haven't spotted an easy way to
+%    |\mathversion| but I (Dave Love) haven't spotted an easy way to
 %    do so correctly if the document uses a version other than
-%    "normal".  (We need to know in what font to set the other
+%    |normal|.  (We need to know in what font to set the other
 %    groups.)  This uses a new math alphabet rather than version and
 %    consequently has to worry about whether we're using
-%    \textsf{oldlfnt} or not.  I expect there's a better
+%    \env{oldlfnt} or not.  I expect there's a better
 % way\ldots
 %    \begin{macrocode}
       \def\Module#1{\mod at math@codes$\langle\mathsf{#1}\rangle$}
@@ -1759,11 +2560,11 @@
 % \changes{v1.7c}{1992/03/26}{Added.}
 % \changes{v2.1e}{2010/02/04}{Added mathcodes for +,-,:, and = (pr/4096)}
 %    As well as `words', the module
-%    directive text might contain any of the characters "*/+-,&|!()"
-%    for the current version of \textsf{docstrip}.  We only need
+%    directive text might contain any of the characters \verb"*/+-,&|!()"
+%    for the current version of \prg{docstrip}.  We only need
 %    special action for two of them in the math code changing required
-%    above: "|" is changed to a "\mathop" (it's normally |"026A|) and
-%    "&" is also made a "\mathop", but in family 0.  Remember that "&"
+%    above: \verb"|" is changed to a |\mathop| (it's normally |"026A|) and
+%    |&| is also made a |\mathop|, but in family 0.  Remember that |&|
 %    will not have a special catcode when it's encountered.
 %    \begin{macrocode}
 \def\mod at math@codes{\mathcode`\|="226A \mathcode`\&="2026
@@ -1772,27 +2573,9 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\mathsf}
-% \changes{v1.7c}{1992/03/26}{Added.}
-% \changes{v1.7d}{1992/04/25}{Use sans font for modules.}
-% \changes{v1.7n}{1993/02/21}{\cs{sfmath} Renamed to \cs{mathsf}.}
-% \changes{v1.8c}{1993/10/25}{NFSS standard}
-% If NFSS is in use we need a new math alphabet which uses a sans serif
-% font. To support both the release one and two of NFSS the alphabet
-% was renamed to "\mathsf" which is defined in NFSS2.
-%    \begin{macrocode}
-%\ifx\selectfont\undefined
-%\else
-%  \ifx\mathsf\undefined
-%    \newmathalphabet*{\mathsf}{\sfdefault}{m}{n}\fi
-%\fi
-%    \end{macrocode}
-% \end{macro}
 %
-%
-%
-% \begin{macro}{\MacrocodeTopsep}
-% \begin{macro}{\MacroIndent}
+% \begin{lskip}{\MacrocodeTopsep}
+% \begin{ldimen}{\MacroIndent}
 %    In the code above, we have used two registers. Therefore we have
 %    to allocate them. The default values might be overwritten with
 %    the help of the |\DocstyleParms| macro.
@@ -1805,8 +2588,8 @@
 \newdimen\MacroIndent
 \settowidth\MacroIndent{\rmfamily\scriptsize 00\ }
 %    \end{macrocode}
-% \end{macro}
-% \end{macro}
+% \end{ldimen}
+% \end{lskip}
 %
 %
 %
@@ -1813,14 +2596,14 @@
 %
 % \begin{environment}{macrocode*}
 % \begin{macro}{\endmacrocode*}
-%    Just as in the \textsf{verbatim} environment, there is also a
-%    `star' variant of the \textsf{macrocode} environment in which a
+%    Just as in the \env{verbatim} environment, there is also a
+%    `star' variant of the \env{macrocode} environment in which a
 %    space is shown by the symbol \verb*+ +.  Until this moment, I
 %    have not yet used it (it will be used in the description of the
 %    definition of |\xmacro at code| below) but it's exactly on this one
-%    occasion {\em here\/} that you can't use it (cf.\ M\"unchhausens
+%    occasion {\em here\/} that you can't use it (cf.\ Münchhausens
 %    Marsh problem)\footnote{Karl Friedrich Hieronymus Frhr.\ v.\
-%    M\"unchhausen (*1720, \dag1797).  Several books were written
+%    Münchhausen (*1720, \dag1797).  Several books were written
 %    about fantastic adventures supposedly told by him (see
 %    \cite{book:Raspe} or \cite{book:Buerger}). In one story he
 %    escaped from the marsh by pulling himself out by his hair.}
@@ -1865,7 +2648,7 @@
 %    \end{macrocode*}
 %    Additionally, we need to ensure that the symbols in the above
 %    string contain the |\catcode|$\,$s which are available
-%    within the \textsf{macrocode} environment.
+%    within the \env{macrocode} environment.
 %    \begin{macrocode*}
 \catcode`\{=12 \catcode`\}=12
 \catcode`\%=12 \catcode`\ =\active \catcode`\\=\active
@@ -1908,65 +2691,7 @@
 % \subsection{Macros for the `documentation parts'}
 %
 %
-% \begin{macro}{\DescribeMacro}
-% \begin{macro}{\Describe at Macro}
-% \changes{v1.5v}{1990/01/28}{Macro added.}
-% \changes{v1.5j}{1989/06/09}{\cs{ignorespaces} added as a temporary
-%                             fix}
-% \begin{macro}{\DescribeEnv}
-% \begin{macro}{\Describe at Env}
-% \changes{v1.5v}{1990/01/28}{Macro added.}
-% \changes{v1.5j}{1989/06/09}{\cs{ignorespaces} added as a temporary
-%                             fix}
-%    The |\DescribeMacro| and |\DescribeEnv| macros should
-%    print their arguments in the margin and produce an index entry.
-%    We simply use |\marginpar| to get the desired result. This
-%    is however not the best solution because the labels might be
-%    slightly misplaced. One also might get a lot of `marginpar moved'
-%    messages which are hard-wired into the \LaTeX{} output
-%    routine.\footnote{It might be better to change these macros into
-%    environments like the \textsf{macro} environment.} First we change
-%    to horizontal mode if necessary. The \LaTeX{} macros
-%    |\@bsphack| and |\@esphack| are used to make those
-%    commands invisible (i.e.\ to normalize the surrounding space and
-%    to make the |\spacefactor| transparent).
-% \changes{v1.5v}{1990/01/28}{\cs{MakePrivateLetters} added.}
-%    \begin{macrocode}
-\def\DescribeMacro{\leavevmode\@bsphack
-%    \end{macrocode}
-%    When documenting the code for the \texttt{amstex.sty} option we
-%    encountered a bug: the |\catcode| of |@| was active and
-%    therefore couldn't be used in command names. So we first have to
-%    make sure that we get all |\catcode|s right by calling
-%    |\MakePrivateLetters| inside a group. Then we call
-%    |\Describe at Macro| to do the work.
-% \changes{v2.0g}{1999/03/22}{Parse backslash as letter in argument
-%        to \cs{DescribeMacro}.}
-% \changes{v2.0h}{1999/03/25}{Correct errors introduced in v2.0g.}
-%    \begin{macrocode}
-   \begingroup\MakePrivateLetters\Describe at Macro}
-\def\Describe at Macro#1{\endgroup
-              \marginpar{\raggedleft\PrintDescribeMacro{#1}}%
-%    \end{macrocode}
-%    Note the use of |\raggedleft| to place the output flushed
-%    right. Finally we call a macro which produces the actual index
-%    entry and finish with |\@esphack| to leave no
-%    trace.\footnote{The whole mechanism won't work because
-%                    of the \texttt{\bslash leavevmode} in front.
-%                    As a temporary change \texttt{\bslash ignorespaces}
-%                    is added.}
-%    \begin{macrocode}
-              \SpecialUsageIndex{#1}\@esphack\ignorespaces}
-%    \end{macrocode}
-%    The |\DescribeEnv| macro is completely analogous.
-% \changes{v1.5v}{1990/01/28}{\cs{MakePrivateLetters} added.}
-%    \begin{macrocode}
-\def\DescribeEnv{\leavevmode\@bsphack\begingroup\MakePrivateLetters
-  \Describe at Env}
-\def\Describe at Env#1{\endgroup
-              \marginpar{\raggedleft\PrintDescribeEnv{#1}}%
-              \SpecialEnvIndex{#1}\@esphack\ignorespaces}
-%    \end{macrocode}
+
 %    To put the labels in the left margin we have to use the
 %    |\reversemarginpar| declaration. (This means that the
 %    \texttt{doc.sty} can't be used with all classes or packages.)
@@ -1978,12 +2703,12 @@
 \reversemarginpar
 \setlength\marginparpush{0pt}  \setlength\marginparwidth{8pc}
 %    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
 %
-% \begin{macro}{\bslash}
+%    \begin{macrocode}
+\setlength\marginparsep{\labelsep}
+%    \end{macrocode}
+%
+% \begin{imacro}{\bslash}
 % \changes{v1.7a}{1992/02/26}{Moved \cs{bslash} documentation to `user
 %                           interface' part}
 %    We start a new group in which to hide the alteration of
@@ -2000,7 +2725,7 @@
 %    \begin{macrocode}
 |gdef|bslash{\}}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
 %
 %
@@ -2007,7 +2732,7 @@
 % \begin{environment}{verbatim}
 % \begin{environment}{verbatim*}
 % \changes{v1.7i}{1992/07/12}{Added changed definition for verbatim!*.}
-%    The \textsf{verbatim} environment holds no secrets; it consists of
+%    The \env{verbatim} environment holds no secrets; it consists of
 %    the normal \LaTeX{} environment.  We also set the
 %    |\@beginparpenalty| and change to the font given by
 %    |\MacroFont|.
@@ -2032,7 +2757,7 @@
 % \begin{macro}{\@verbatim}
 %    Additionally we redefine the |\@verbatim| macro so that it
 %    suppresses |%| characters at the beginning of the line.  The
-%    first lines are copied literally from the \LaTeX{} format.
+%    first lines are copied literally from \texttt{latex.tex}.
 % \changes{v1.7i}{1992/07/12}{Added \cs{@@par} to clear possible
 %                             \cs{parshape}.}
 %    \begin{macrocode}
@@ -2056,7 +2781,7 @@
 %    \begin{macrocode}
    \check at percent}%
 %    \end{macrocode}
-%    The rest is again copied literally from the \LaTeX{} format (less
+%    The rest is again copied literally from \texttt{latex.tex} (less
 %    "\tt").
 % \changes{v1.7a}{1992/02/26}{Removed redundant \cs{tt}.}
 % \changes{v1.8b}{1993/09/21}{Changed to conform to new LaTeX verbatim,
@@ -2074,7 +2799,7 @@
 %    percent's |\catcode| so that it is seen by \TeX.  The definition
 %    itself is nearly trivial: grab the following character, check if
 %    it is a |%|, and insert it again if not.  At the end of the
-%    \textsf{verbatim} environment this macro will peek at the next
+%    \env{verbatim} environment this macro will peek at the next
 %    input line. In that case the argument to |\check at percent| might
 %    be a |\par| or a macro with arguments. Therefore we make the
 %    definition |\long| (|\par| allowed) and use the normal |\next|
@@ -2093,16 +2818,16 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\verb}
+% \begin{imacro}{\verb}
 % \changes{v1.7a}{1992/02/27}{Now warns about newlines (from
 %                           newdoc with `@noligs added).}
 % \changes{v1.8b}{1993/09/21}{Changed to conform to new LaTeX \cs{verb}}
-% We re-define "\verb" to check for newlines in its argument since a
+% We re-define |\verb| to check for newlines in its argument since a
 % missing delimiter is difficult to detect in \DOC{} source.
 % The code is the same as in \texttt{latex.tex} of September 19, 1993.
 % Perhaps there should be a font-changing
-% hook rather than just using "\ttfamily", but if so it probably should be
-% different from "\MacroFont" since that normally includes "\small"
+% hook rather than just using |\ttfamily|, but if so it probably should be
+% different from |\MacroFont| since that normally includes |\small|
 % and would look wrong inline.
 % \changes{v1.7a}{1992/02/28}{Added math mode check (from verbatim.sty)}
 %    \begin{macrocode}
@@ -2111,7 +2836,7 @@
     \ttfamily \verb at eol@error \let\do\@makeother \dospecials
     \@ifstar{\@sverb}{\@vobeyspaces \frenchspacing \@sverb}}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
 % \begin{macro}{\verb at balance@group}
 % \begin{macro}{\verb at egroup}
@@ -2118,17 +2843,20 @@
 % \begin{macro}{\verb at eol@error}
 % \changes{v1.8b}{1993/09/21}{Renamed \cs{verb at err} to
 %                   \cs{verb at eol@error}, as in new LaTeX verbatim.}
-% \changes{v2.1n}{2021/05/28}{Use same error message text as in format}
 %    \begin{macrocode}
 \let\verb at balance@group\@empty
-
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 \def\verb at egroup{\global\let\verb at balance@group\@empty\egroup}
-
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 \begingroup
   \obeylines%
   \gdef\verb at eol@error{\obeylines%
     \def^^M{\verb at egroup\@latex at error{%
-            \noexpand\verb ended by end of line}\@ehc}}%
+            \noexpand\verb command ended by end of line}\@ehc}}%
 \endgroup
 %    \end{macrocode}
 % \end{macro}
@@ -2155,7 +2883,7 @@
 %
 % \begin{macro}{\verbatim at nolig@list}
 % \begin{macro}{\do at noligs}
-%     These macros replace the old "\@noligs" mechanism by an
+%     These macros replace the old |\@noligs| mechanism by an
 %     extensible version to allow more ligatures to be added.
 %    \begin{macrocode}
 \def\verbatim at nolig@list{\do\`\do\<\do\>\do\,\do\'\do\-}
@@ -2168,240 +2896,29 @@
 % \end{macro}
 % \end{macro}
 %
-%
-% \begin{macro}{\macro}
-% \begin{macro}{\m at cro@}
-% \changes{v1.5v}{1990/01/28}{\cs{macro@} renamed to \cs{m at cro@}
-%                  since AmSTeX
-%      defines another macro of the same name.}
-% \begin{macro}{\macro at cnt}
-%    \label{page:macro} The \textsf{macro} environment is implemented as
-%    a \textsf{trivlist} environment, whereby in order that the macro
+% \begin{tcounter}{\macro at cnt}
+%    \label{page:macro} The \env{macro} environment is implemented as
+%    a \env{trivlist} environment, whereby in order that the macro
 %    names can be placed under one another in the margin
 %    (corresponding to the macro's nesting depth), the macro
 %    |\makelabel| must be altered.  In order to store the nesting
 %    depth, we use a counter. We also need a counter to count the
-%    number of nested \textsf{macro} environments.
+%    number of nested \env{macro} environments.
 % \changes{v1.5k}{1989/08/17}{Fix for save stack problem.}
 % \changes{v1.9k}{1994/02/22}{Fix probably no longer necessary}
 %    \begin{macrocode}
 \newcount\macro at cnt \macro at cnt=0
 %    \end{macrocode}
-%    The environment takes an argument---the macro name to be
-%    described.  Since this name may contain special `letters' we have
-%    to re-|\catcode| them before scanning the argument. This is done
-%    by the |\MakePrivateLetters| macro.
-% \changes{v1.5k}{1989/08/17}{Fix for save stack problem.}
-% \changes{v1.7a}{1992/02/26}{Catcode backslash to other (from newdoc).}
-% \changes{v1.9k}{1994/02/22}{Don't omit extra group}
-%    \begin{macrocode}
-\def\macro{\begingroup
-   \catcode`\\12
-   \MakePrivateLetters \m at cro@ \iftrue}
-%    \end{macrocode}
+% \end{tcounter}
 %
-% \begin{environment}{environment}
-% \changes{v1.8c}{1993/10/25}{Environment added}
-%    The ``environment'' environment will be implemented just like the
-%    ``macro'' environment flagging any differences in the code by
-%    passing |\iffalse| or |\iftrue| to the |\m at cro@| environment
-%    doing the actual work.
-%    \begin{macrocode}
-\def\environment{\begingroup
-   \catcode`\\12
-   \MakePrivateLetters \m at cro@ \iffalse}
-%    \end{macrocode}
-% \end{environment}
 %
-%    After scanning the argument we close the group to get the normal
-%    |\catcode|$\,$s back. Then we assign a special value to
-%    |\topsep| and start a \textsf{trivlist} environment.
-% \changes{v1.5f}{1989/05/07}{MacroTopsep parameter added.}
-% \changes{v1.5k}{1989/08/17}{Fix for save stack problem.}
-% \changes{v1.8c}{1993/10/25}{Support ``environment'' env}
-% \changes{v1.9k}{1994/02/22}{Remove \cs{macro at level}}
-%    \begin{macrocode}
-\long\def\m at cro@#1#2{\endgroup \topsep\MacroTopsep \trivlist
-%    \end{macrocode}
-% We also save the name being described in |\saved at macroname| for
-% use in conjunction with the |\changes| macro.
-%    \begin{macrocode}
-  \edef\saved at macroname{\string#2}%
-  #1
-%    \end{macrocode}
-%    If documenting an environment we put is name in |\saved at indexname|
-%    otherwise the name without the backslash.
-% \changes{v2.1g}{2016/02/15}{Use \cs{saved at indexname}}
-%    \begin{macrocode}
-    \let\saved at indexname\saved at macroname
-  \else
-    \edef\saved at indexname{\expandafter\@gobble\string#2}%
-  \fi
-%    \end{macrocode}
-%    Now there follows a variation of |\makelabel| which is used
-%    should the environment not be nested, or should it lie between
-%    two successive |\begin{macro}| instructions or explanatory
-%    text.  One can recognize this with the switch |\if at inlabel|
-%    which will be |true| in the case of successive |\item|
-%    commands.
-%    \begin{macrocode}
-  \def\makelabel##1{\llap{##1}}%
-%    \end{macrocode}
-%    If |@inlabel| is |true| and if $\verb=\macro at cnt= > 0$
-%    then the above definition needs to be changed, because in this
-%    case \LaTeX{} would otherwise put the labels all on the same line
-%    and this would lead to them being overprinted on top of each
-%    other.  Because of this |\makelabel| needs to be redefined
-%    in this case.
-%    \begin{macrocode}
-  \if at inlabel
-%    \end{macrocode}
-%    If |\macro at cnt| has the value $1$, then we redefine
-%    |\makelabel| so that the label will be positioned in the
-%    second line of the margin.  As a result of this, two macro names
-%    appear correctly, one under the other.  It's important whilst
-%    doing this that the generated label box is not allowed to have
-%    more depth than a normal line since otherwise the distance
-%    between the first two text lines of \TeX{} will be incorrectly
-%    calculated. The definition should then look like:
-%\begin{verbatim}
-%     \def\makelabel##1{\llap{\vtop to \baselineskip
-%          {\hbox{\strut}\hbox{##1}\vss}}}
-%\end{verbatim}
-%    Completely analogous to this is the case where labels need to be
-%    placed one under the other.  The lines above are only an example
-%    typeset with the \textsf{verbatim} environment. To produce the real
-%    definition we save the value of |\macro at cnt| in
-%    |\count@| and empty the temp macro |\@tempa| for later
-%    use.
-%    \begin{macrocode}
-    \let\@tempa\@empty \count@\macro at cnt
-%    \end{macrocode}
-%    In the following loop we append for every already typeset label
-%    an |\hbox{\strut}| to the definition of |\@tempa|.
-%    \begin{macrocode}
-    \loop \ifnum\count@>\z@
-      \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m at ne \repeat
-%    \end{macrocode}
-%    Now be put the definition of |\makelabel| together.
-% \changes{v1.5b}{1989/04/27}{vbox to vtop changed in makelabel (test)}
-% \changes{v1.5e}{1989/04/28}{ht strutbox changed to baselineskip
-%                             (test)}
-%    \begin{macrocode}
-    \edef\makelabel##1{\llap{\vtop to\baselineskip
-                               {\@tempa\hbox{##1}\vss}}}%
-%    \end{macrocode}
-%    Next we increment the value of the nesting depth counter.  This
-%    value inside the \textsf{macro} environment is always at least one
-%    after this point, but its toplevel definition is zero. Provided
-%    this environment has been used correctly, $|\macro at cnt|=0$
-%    should not occur when |@inlabel|=\textsf{true}.  It is
-%    however possible if this environment is used within other list
-%    environments (but this would have little point).
-%    \begin{macrocode}
-    \advance \macro at cnt \@ne
-%    \end{macrocode}
-%    If |@inlabel| is false we reset |\macro at cnt| assuming
-%    that there is enough room to print the macro name without
-%    shifting.
-%    \begin{macrocode}
-  \else  \macro at cnt\@ne  \fi
-%    \end{macrocode}
-%    Now the label will be produced using |\item|. The following
-%    line is only a hack saving the day until a better solution is
-%    implemented.  We have to face two problems: the argument might be
-%    a |\par| which is forbidden in the argument of other macros
-%    if they are not defined as |\long|, or it is something like
-%    |\iffalse| or |\else|, i.e.\ something which will be
-%    misinterpreted when \TeX{} is skipping conditional text. In both
-%    cases |\item| will bomb, so we protect the argument by using
-%    |\string|.
-%    \begin{macrocode}
-  \edef\@tempa{\noexpand\item[%
-%    \end{macrocode}
-%    Depending on whether we are inside a ``macro'' or ``environment''
-%    environment we use |\PrintMacroName| or |\PrintEnvName| to
-%    display the name.
-%    \begin{macrocode}
-     #1%
-       \noexpand\PrintMacroName
-     \else
-       \noexpand\PrintEnvName
-     \fi
-     {\string#2}]}%
-  \@tempa
-%    \end{macrocode}
-%    At this point we also produce an index entry.  Because it is not
-%    known which index sorting program will be used, we do not use the
-%    command |\index|, but rather a command
-%    |\SpecialMainIndex| after advancing the counter for indexing
-%    by line number.  This may be redefined by the user in
-%    order to generate an index entry which will be understood by the
-%    index program in use (note the definition of
-%    |\SpecialMainIndex| for our installation).
-% \changes{v1.5s}{1989/11/05}{Support for code line no. (Undoc)}
-% \changes{v1.9u}{1995/08/06}{Removed brace group which
-%           killed \cs{DoNotIndex}}
-%    We advance the current codeline number and after producing an
-%    index entry revert to the original value
-%    \begin{macrocode}
-  \global\advance\c at CodelineNo\@ne
-%    \end{macrocode}
-%    Again the macro to call depends on the environment we are
-%    actually in.
-%    \begin{macrocode}
-   #1%
-      \SpecialMainIndex{#2}\nobreak
-      \DoNotIndex{#2}%
-   \else
-      \SpecialMainEnvIndex{#2}\nobreak
-   \fi
-  \global\advance\c at CodelineNo\m at ne
-%    \end{macrocode}
-%    The |\nobreak| is needed to prevent a page break after the
-%    |\write| produced by the |\SpecialMainIndex| macro.  We
-%    exclude the new macro in the cross-referencing feature, to
-%    prevent spurious non-main entry references.  Regarding possibly
-%    problematic arguments, the implementation takes
-%    care of |\par| and the conditionals are uncritical.
-%  \changes{v1.7a}{1992/03/02}{Removed redundant code checking for
-%                             \cs{par}.}^^A
-%
-%    Because the space symbol should be ignored between the
-%    |\begin{macro}{...}| and the following text we must take
-%    care of this with |\ignorespaces|.
-%    \begin{macrocode}
-  \ignorespaces}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\endmacro}
-% \begin{macro}{\endenvironment}
-%     Older releases of this environment omit the |\endgroup| token,
-%     when being nested. This was done to avoid unnecessary stack usage.
-%     However it does not work if \textsf{macro} and
-%     \textsf{environment} environments are mixed, therefore we now
-%     use a simpler approach.
-% \changes{v1.5k}{1989/08/17}{Fix for save stack problem.}
-% \changes{v1.9k}{1994/02/22}{Don't checkfor nesting}
-%    \begin{macrocode}
-\let\endmacro \endtrivlist
-\let\endenvironment\endmacro
-%    \end{macrocode}
-%  \end{macro}
-%  \end{macro}
-%
-% \begin{macro}{\MacroTopsep}
+% \begin{lskip}{\MacroTopsep}
 %    Here is the default value for the |\MacroTopsep| parameter
 %    used above.
 %    \begin{macrocode}
 \newskip\MacroTopsep     \MacroTopsep = 7pt plus 2pt minus 2pt
 %    \end{macrocode}
-% \end{macro}
+% \end{lskip}
 %
 %
 %
@@ -2413,49 +2930,15 @@
 % Therefore we define those macros only if they have not already
 % been defined.
 %
-% \begin{macro}{\PrintMacroName}
-% \begin{macro}{\PrintEnvName}
-% \begin{macro}{\PrintDescribeMacro}
-% \begin{macro}{\PrintDescribeEnv}
-%    The formatting of the macro name in the left margin is done by
-%    these macros. We first set a |\strut| to get the height and
-%    depth of the normal lines. Then we change to the
-%    |\MacroFont| using |\string| to |\catcode| the
-%    argument to other (assuming that it is a macro name). Finally we
-%    print a space.  The font change remains local since this macro
-%    will be called inside an |\hbox|.
-%    \begin{macrocode}
-\@ifundefined{PrintMacroName}
-   {\def\PrintMacroName#1{\strut \MacroFont \string #1\ }}{}
-%    \end{macrocode}
-%    We use the same formatting conventions when describing a macro.
-%    \begin{macrocode}
-\@ifundefined{PrintDescribeMacro}
-   {\def\PrintDescribeMacro#1{\strut \MacroFont \string #1\ }}{}
-%    \end{macrocode}
-%    To format the name of a new environment there is no need to use
-%    |\string|.
-%    \begin{macrocode}
-\@ifundefined{PrintDescribeEnv}
-   {\def\PrintDescribeEnv#1{\strut \MacroFont #1\ }}{}
-\@ifundefined{PrintEnvName}
-   {\def\PrintEnvName#1{\strut \MacroFont #1\ }}{}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
 %
-%
-%
 % \subsection{Creating index entries by scanning `macrocode'}
 %
 %  The following macros ensure that index entries are created for each
 %  occurrence of a \TeX-like command (something starting with
-%  `|\|') providing indexing has been turned on with "\PageIndex"
-%  or "\CodelineIndex".  With the default definitions of
-%  |\SpecialMainIndex|, etc., the index file generated is
-%  intended to be processed by Chen's \textsf{makeindex} program
+%  `|\|') providing indexing has been turned on with |\PageIndex|
+%  or |\CodelineIndex|.  With the default definitions of
+%  |\specialMainMacroIndex|, etc., the index file generated is
+%  intended to be processed by Chen's \prg{makeindex} program
 %  \cite{art:Chen}.
 %
 %
@@ -2464,15 +2947,15 @@
 %  introduce command names at places where |\| has to belong to
 %  some other category.  Therefore, we may also need to recognize
 %  \verb+|+ as the introducer for a command when setting the text
-%  inside the \textsf{macrocode} environment.  Other users may have the
+%  inside the \env{macrocode} environment.  Other users may have the
 %  need to make similar reassignments for their macros.
 %
 %
-% \begin{macro}{\SpecialEscapechar}\label{sect:specialescapechar}
+% \begin{imacro}{\SpecialEscapechar}\label{sect:specialescapechar}
 % \begin{macro}{\active at escape@char}
 % \begin{macro}{\special at escape@char}
 %    The macro |\SpecialEscapechar| is used to denote a special escape
-%    character for the next \textsf{macrocode} environment. It has one
+%    character for the next \env{macrocode} environment. It has one
 %    argument---the new escape character given as a `single-letter'
 %    control sequence.  Its main purpose is defining
 %    |\special at escape@char| to produce the chosen escape character
@@ -2528,7 +3011,7 @@
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
-% \end{macro}
+% \end{imacro}
 %
 %
 %
@@ -2564,7 +3047,7 @@
 %    `|\|' first to 12 (at the end of |\macro at code|) then
 %    re-|\catcode| it to 13 in order to produce a $|\|_{12}$
 %    in case 3b) above.  This is done because we have to ensure that
-%    `|\|' has |\catcode| 13 within the \textsf{macrocode}
+%    `|\|' has |\catcode| 13 within the \env{macrocode}
 %    environment.  Otherwise the delimiter for the argument of
 %    |\xmacro at code| would not be found (parameter matching
 %    depends on |\catcode|$\,$s).
@@ -2574,7 +3057,7 @@
 \begingroup   \catcode`\|=\z@  \catcode`\\=\active
 %    \end{macrocode}
 %    We carry out tasks 2) and 3b) first.
-%    \SpecialEscapechar{\|}
+%    \SpecialEscapechar\|
 %    \begin{macrocode}
 |gdef|init at crossref{|catcode`|\|active   |let\|bslash
 %    \end{macrocode}
@@ -2613,7 +3096,7 @@
 %
 %
 %
-% \begin{macro}{\MakePrivateLetters}
+% \begin{imacro}{\MakePrivateLetters}
 %    Here is the default definition of this command, which makes just
 %    the |@| into a letter. The user may change it if he/she
 %    needs more or other characters masquerading as letters.
@@ -2621,7 +3104,7 @@
 \@ifundefined{MakePrivateLetters}
     {\let\MakePrivateLetters\makeatletter}{}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
 % \begin{macro}{\close at crossref}
 %    At the end of a cross-referencing part we prepare ourselves for
@@ -2642,10 +3125,10 @@
 %    The |\init at crossref| will have made |\active| our
 %    |\special at escape@char|, so that each
 %    |\active at escape@char| will invoke |\scan at macro| when
-%    within the \textsf{macrocode} environment.  By this means, we can
+%    within the \env{macrocode} environment.  By this means, we can
 %    automatically add index entries for every \TeX-like command which
 %    is met whilst setting (in verbatim) the contents of
-%    \textsf{macrocode} environments.
+%    \env{macrocode} environments.
 %    \begin{macrocode}
 \def\scan at macro{%
 %    \end{macrocode}
@@ -2658,7 +3141,7 @@
    \special at escape@char
    \step at checksum
 %    \end{macrocode}
-%    If the \textsf{macrocode} environment contains, for example, the
+%    If the \env{macrocode} environment contains, for example, the
 %    command |\\|, the second |\| should not start the
 %    scanning mechanism. Therefore we use a switch to decide if
 %    scanning of macro names is allowed.
@@ -2689,22 +3172,9 @@
 % \end{macro}
 %
 %
-% \begin{macro}{\ifscan at allowed}
-% \begin{macro}{\scan at allowedtrue}
-% \begin{macro}{\scan at allowedfalse}
-%    |\ifscan at allowed| is the switch used above to determine if
-%    the |\active at escape@char|\SpecialIndex{\active at escape@char}
-%    should start the macro scanning mechanism.
-%    \begin{macrocode}
-\newif\ifscan at allowed    \scan at allowedtrue
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
 %
-%
-% \begin{macro}{\EnableCrossrefs}
-% \begin{macro}{\DisableCrossrefs}
+% \begin{imacro}{\EnableCrossrefs}
+% \begin{imacro}{\DisableCrossrefs}
 %    At this point we might define two macros which allow the user to
 %    disable or enable the cross-referencing mechanism. Processing of
 %    files will be faster if only main index entries are generated
@@ -2718,8 +3188,8 @@
 \def\EnableCrossrefs{\@bsphack\scan at allowedtrue
                      \def\DisableCrossrefs{\@bsphack\@esphack}\@esphack}
 %    \end{macrocode}
-% \end{macro}
-% \end{macro}
+% \end{imacro}
+% \end{imacro}
 %
 %
 %
@@ -2750,6 +3220,10 @@
 %
 %
 % \begin{macro}{\short at macro}
+%
+% \fmi{this needs cleaning up too, the results in the index are
+% currently wrong for cases like `\cs{ }' and the like.}
+%
 % \changes{v1.5c}{1989/04/27}{Corrected bad bug by putting the
 %                         scan at allowedfalse macro before printing
 %                         the argument.}
@@ -2757,7 +3231,7 @@
 %           \cs{macro at namepart} as `letter' so index exclusion works.}
 %    This macro will be invoked (with a single character as parameter)
 %    when a single-character macro name has been spotted whilst
-%    scanning within the \textsf{macrocode} environment.
+%    scanning within the \env{macrocode} environment.
 %
 %    First we take a look at the |\index at excludelist| to see
 %    whether this macro name should produce an index entry.  This is
@@ -2775,14 +3249,14 @@
    \uccode`\&=\expandafter`\string#1%
    \uppercase{\def\x{\def\macro at namepart{&}}}%
    \expandafter\endgroup\x
-   \ifnot at excluded
 %    \end{macrocode}
-%    If necessary the index entry is produced by the macro
-%    |\produce at index|. Depending on the actual character seen,
-%    this macro has to do different things, so we pass the character
-%    as an argument.
+%    Any indexing is then delegated to
+%    |\maybe at index@short at macro|. Depending on the actual character seen,
+%    this macro has to do different things, which is why we keep it separate from
+%    |\maybe at index@macro| to avoid the special tests in the more
+%    common case of a multi-letter macro name.
 %    \begin{macrocode}
-     \produce at index{#1}\fi
+     \maybe at index@short at macro\macro at namepart
 %    \end{macrocode}
 %    Then we disable the cross-referencing mechanism with
 %    |\scan at allowedfalse| and print the actual character. The
@@ -2803,104 +3277,6 @@
 %
 %
 %
-% \begin{macro}{\produce at index}
-% \changes{v1.4s}{1989/04/23}{Added noexpand to all
-%                           \cs{if} tests
-%               to avoid garbage produced by new active chars}
-% \changes{v1.4s}{1989/04/23}{Used \texttt{\protect\bslash string} for
-%                          the same reason.}
-% \changes{v1.5c}{1989/04/27}{Corrected bad bug by placing the
-%                         scan at allowedfalse macro into short at macro}
-%    This macro is supposed to generate a suitable |\SortIndex|
-%    command for a given single-letter control sequence.  We test
-%    first for the cases which involve active characters (i.e.\ the
-%    backslash, the special escape character (if any), the space and
-%    the |^^M|).  Using the |\if| test (testing for
-%    character codes), we have to ensure that the argument isn't
-%    expanded.
-%    \begin{macrocode}
-\def\produce at index#1{%
-  \if\noexpand#1\special at escape@char
-%    \end{macrocode}
-%    If the character is the special escape character (or the
-%    `|\|' in case there was none) the |\it at is@a| macro is
-%    used to produce the actual |\SortIndex| call.
-%    \begin{macrocode}
-     \scan at allowedfalse \it at is@a\special at escape@char \else
-%    \end{macrocode}
-%    Next comes the test for a `|\|' which must be the
-%    $|\|_{13}$ expanding to |\bslash|.
-%    \begin{macrocode}
-     \if\noexpand#1\bslash \it at is@a\bslash \else
-%    \end{macrocode}
-%    Another possibility is \verb*+ +$_{13}$. Recall that |\space|
-%    produces a \verb*+ +$_{10}$.
-%    \begin{macrocode}
-       \if\noexpand#1\space \it at is@a\space \else
-%    \end{macrocode}
-%    The last\footnote{Well, it isn't the last active character after
-%    all. I added \texttt{\bslash @noligs} some days ago and now
-%    \texttt{`} too is active. So we have to make sure that such
-%    characters don't get expanded in the index.} possibility of an
-%    active character is |^^M|\@.  In this case we don't test for
-%    character codes, since it is easier to look if the character is
-%    equal to |\par|. (We are inside the \textsf{macrocode}
-%    environment.)
-%    \begin{macrocode}
-         \ifx#1\par
-%    \end{macrocode}
-%    If we end up here we have just scanned a |\^^M| or something
-%    similar. Since this will be treated like \verb*+\ + by \TeX{} we
-%    produce a corresponding index entry.
-%    \begin{macrocode}
-         \it at is@a\space \else
-%    \end{macrocode}
-%    If it is the token |\relax| we do nothing. This can't happen
-%    when the `doc' package is used in the way described here, but was
-%    added to allow extensions like the \texttt{idxverb} option.
-%  \changes{v1.5t}{1989/11/14}{Added \cs{relax} as a possible token to
-%                           allow extensions.}
-%    \begin{macrocode}
-         \ifx#1\relax \else
-%    \end{macrocode}
-%    The next three branches are needed because of bugs in
-%    our \textsf{makeindex} program. You can't produce unbalanced index
-%    entries\footnote{This is possible for \TeX{} if you use
-%                     \texttt{\string{$_{12}$ \rmfamily or
-%                     \ttfamily\string}$_{12}$},
-%                     but \textsf{makeindex} will complain.}
-%    and you have to double a percent character. To get around these
-%    restrictions we use special macros to produce the |\index|
-%    calls.\footnote{Brian \textsc{Hamilton Kelly} has written fixes for
-%                  all three
-%                  bugs. When they've found their way through all
-%                    installations,
-%                    the lines above will be removed. See
-%                    page~\pageref{bug:fixes} if you already have them.
-%                    (I'm not sure which versions incorporate these, but
-%                    2.11 is OK.  See also
-%                    \pageref{makeindex:version}.)}
-%    \begin{macrocode}
-           \if\noexpand#1\bgroup \LeftBraceIndex \else
-             \if\noexpand#1\egroup \RightBraceIndex \else
-               \if\noexpand#1\percentchar \PercentIndex \else
-%    \end{macrocode}
-%    All remaining characters are used directly to produce their index
-%    entries. This is possible even for the characters which have
-%    special meanings in the index program, provided we quote the
-%    characters.  (This is correctly done in |\it at is@a|.)
-%    \begin{macrocode}
-                 \it at is@a{\string#1}%
-%    \end{macrocode}
-%    We now need a whole pile of |\fi|$\,$s to match up with
-%    the |\if|$\,$s.
-%    \begin{macrocode}
-       \fi \fi \fi \fi \fi \fi \fi \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-%
 % \begin{macro}{\macro at name}
 %    We now come to the macro which assembles command names which
 %    consist of one or more `letters' (which might well include
@@ -2968,9 +3344,11 @@
 %    routine.  At this time \texttt{\bslash macro at namepart} might have a
 %    new value.}
 %    \begin{macrocode}
-  \ifnot at excluded
-     \edef\@tempa{\noexpand\SpecialIndex{\bslash\macro at namepart}}%
-     \@tempa  \fi}
+%  \ifnot at excluded
+%     \edef\@tempa{\noexpand\SpecialIndex{\bslash\macro at namepart}}%
+%     \@tempa  \fi
+  \maybe at index@macro \macro at namepart
+}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -2980,158 +3358,528 @@
 %
 % \subsection[The index exclude list]{The index exclude
 %             list\footnotemark}
-%            \footnotetext{Warning: the incomplete commentary on
+%            \footnotetext{Info: the incomplete commentary on
 %            \texttt{\bslash DoNotIndex} and the macros it calls
 %                          was written by Dave Love.}
 %
-%    The internal form of the index exclude list is
-% \begin{quote}
-% \meta{macro name}|,|\meta{macro name}|,|
-% \ldots|,|
-% \end{quote}
-% where \meta{macro name} is a macro name like
-% $"\"_{12}"p"{_{11}}"@"_{11}$ or $"\"_{12}"$"_{11}$.  Note that the "\"
-% has category `other' and the other characters in the name are all
-% `letter', regardless of their normal category.
 %
-% \begin{macro}{\DoNotIndex}
-%    This macro is used to suppress macro names in the index.  It
-%    starts off with a new group because we have to change the
-%    |\catcode|$\,$s of all characters which belong to `letters'
-%    while macros are defined.
+%
+
+% \def\MakePrivateLetters{%
+%    \makeatletter
+%    \catcode`\_11
+%    \catcode`\:11}
+%
+%
+% The following part of the code is a new implementation using the
+% \LaTeX3 programming layer as the constructs and types
+% provided therein are making programming much easier. Over time I
+% will probably replace the rest of that \DOC code too.
 %    \begin{macrocode}
-\def\DoNotIndex{\begingroup \MakePrivateLetters
-    \catcode`\\12
+\ExplSyntaxOn
 %    \end{macrocode}
-%    Then we call the macro which actually reads the argument given by
-%    the user.
+%
+%
+% \DescribeMacro\l__doc_donotindex_seq
+%    Local sequence that holds names (as strings) of commands that
+%    should not be indexed. Within a \DOC element environment that
+%    element is placed into the sequence so that it isn't
+%    unnecessarily index within that part of the code. As the sequence
+%    is local it will revert this setting at the end of the
+%    environment so that the command is indexed elsewhere (unless it
+%    is generally disabled from indexing.
+%
+% \DescribeMacro\g__doc_idxtype_prop
+%    Global property list that holds for all commands that are special
+%    \DOC elements the type of the element. The key is the command
+%    name without backslash and the  value is \DOC element type
+%    identifier, e.g., |\texttt{Length}| for length registers if that
+%    type has been set up. \DOC only indexes commands, that is things
+%    starting with an escape character, i.e., a backslash (by
+%    default). \DOC elements that do not start with an escape
+%    character, e.g., environments are not identified when parsing
+%    code so that aren't indexed automatically inside. Thus for them
+%    there is no point in keeping them in that property list.
+%
+% \DescribeMacro{\doc_dont_index:n}
+% \DescribeInterfaceMacro{\DoNotIndex}
+%    Takes a clist of commands (with backslash) as input and exclude
+%    all of them from the index. User facing we make this available as
+%    |\DoNotIndex|.
+%
+%
+% \DescribeInterfaceMacro\ShowIndexingState
+%    Displays the current list of the exclude index list in a fairly
+%    low-level form.
+%
+% \DescribeInterfaceMacro\RecordIndexType
+%    This command takes two arguments: a command (with escape char)
+%    and its type (i.e., first mandatory
+%    argument of a |\NewDocElement| declaration. If |#1| should not be
+%    included from the index, then the data is used to record that
+%    this command is of this type. The information is then used to
+%    generate appropriate index entries. Obviously, index entries
+%    generated earlier will be listing the wrong type. Therefore this
+%    information is also placed into the \texttt{.aux} file so that it
+%    will be available  at the beginning of further runs.
+%
+%    This command is internally executed as part of any \DOC element
+%    environment so  it only needs to be explicitly given if for some
+%    reason a command with a special type has no corresponding environment.
+%
+%
+%
+%
+%  \begin{macro}{\l__doc_donotindex_seq}
+%  \begin{macro}{\g__doc_idxtype_prop}
+%    Declarations.
 %    \begin{macrocode}
-    \do at not@index}
+\seq_new:N  \l__doc_donotindex_seq
+\prop_new:N \g__doc_idxtype_prop
 %    \end{macrocode}
-% \end{macro}
+%  \end{macro}
+%  \end{macro}
 %
+% ^^A --------------------------------------------------
 %
 %
-% \begin{macro}{\do at not@index}
-%    We make the |\do at not@index| macro |\long|
-%    since the user might want to exclude the |\par|
-%    macro.
+%  \begin{macro}{\__doc_trace:x}
+%    A helper for tracing\ldots
 %    \begin{macrocode}
-\long\def\do at not@index#1{%
+\cs_new:Npn\__doc_trace:x {
+  \legacy_if:nTF{ doc at debugshow }{ \iow_term:x } { \use_none:n }
+}
 %    \end{macrocode}
-%    It just adds to a token list after finishing the group in which
-%    the catcodes were changed.
-%    \changes{v1.7a}{1992/02/26}{Replaced with newdoc version.}
+%  \end{macro}
+%
+%
+% ^^A --------------------------------------------------
+%
+%  \begin{macro}{\doc_dont_index:n}
+%  \begin{macro}{\__doc_dont_index:n}
+%  \begin{macro}{\__doc_dont_index_aux:n}
+%
+%    Parses the argument a clist of commands with
+%    |\MakePrivateLetters| in force (so that special characters are
+%    recognized as being part of command names) and puts each command
+%    without is backslash as a string into the sequence
+%    |\l__doc_donotindex_seq|.
 %    \begin{macrocode}
-    \endgroup
-    \addto at hook\index at excludelist{#1,}}
+\cs_new:Npn \doc_dont_index:n {
+  \group_begin:
+    \MakePrivateLetters
+    \__doc_dont_index:n
+}
 %    \end{macrocode}
-% \end{macro}
 %
-% \begin{macro}{\addto at hook}
-% The code for adding tokens (the second argument) to a token list
-% (the first argument) is taken from~\cite{art:verbatim}, but it needs
-% to be "\long" in case "\par" is amongt the tokens.
 %    \begin{macrocode}
-\long\def\addto at hook#1#2{#1\expandafter{\the#1#2}}
+\cs_new:Npn \__doc_dont_index:n #1 {
+  \group_end:
 %    \end{macrocode}
-% \end{macro}
 %
-% \begin{macro}{\index at excludelist}
-% We need an initially-empty register for the excluded list.
 %    \begin{macrocode}
-\newtoks\index at excludelist
-\index at excludelist{}
+  \__doc_trace:x{Disable~ indexing~ for~ '\tl_to_str:n{#1}' }
 %    \end{macrocode}
-% \end{macro}
+%    Adding the commands to the |\l__doc_donotindex_seq| sequence is
+%    done by mapping the function |\__doc_dont_index_aux:n|  on each
+%    element in the clist.
+%    \begin{macrocode}
+  \clist_map_function:nN {#1} \__doc_dont_index_aux:n
+}
+%    \end{macrocode}
+%    We record each command by using its name as a string.
+%    This means more tokens in the sequence but it allows
+%    to compare names not ``action'' which is important as different
+%    commands may have the same meaning (e.g., they may not be defined
+%    at all),
+%    \begin{macrocode}
+\cs_new:Npn \__doc_dont_index_aux:n #1 {
+  \seq_put_right:Nx \l__doc_donotindex_seq {\expandafter\@gobble \string#1}
+}
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%  \end{macro}
 %
-% \begin{macro}{\ifnot at excluded}
-%    \changes{v1.7a}{1992/02/26}{Replaced with newdoc version.}
-% \begin{macro}{\expanded at notin}
-%    Now we take a look at the |\index at excludelist| to see
-%    whether a macro name saved in |\macro at namepart| should
-%    produce an index entry. This macro is a pseudo |\if|; it
-%    should expand to |\iftrue| or |\iffalse| depending on
-%    the contents of |\index at excludelist|.
+%  \begin{macro}{\DoNotIndex}
+%    The document-level interface
 %    \begin{macrocode}
-\begingroup
+\cs_set_eq:NN \DoNotIndex \doc_dont_index:n
 %    \end{macrocode}
-%    First we change "\catcode"s so that "\" is `other' and "|" a
-%    temporary for the escape character. This is necessary since our
-%    macro names are stored that way in the "\index at excludelist".
+%  \end{macro}
+%
+%
+%  \begin{macro}{\ShowIndexingState}
+%    Some tracing information that may be helpful.
 %    \begin{macrocode}
-\catcode`\|=0%
-\catcode`\\=12
+\def \ShowIndexingState {
+  \__doc_trace:x{Show~ doc~ indexing~ state:}
+  \seq_show:N  \l__doc_donotindex_seq
+%  \tl_analysis_show:N\l__doc_donotindex_seq
+  \prop_show:N \g__doc_idxtype_prop
+}
 %    \end{macrocode}
-%    Then we define "\ifnot at excluded" to call "\expanded at notin" with
-%    two arguments: the first is the string "\" followed by the
-%    contents of "\macro at namepart" followed by a "," and the second is
-%    "\the" followed by "\index at excludelist". To achieve the expansion
-%    of "\macro at namepart", i.e.\ to pass its contents, we need a
-%    suitable number of "\expandafter"s.
-%    \SpecialEscapechar{\|}
+%  \end{macro}
+
+
+
+% ^^A --------------------------------------------------
+%
+%
+%  \begin{macro}{\__doc_idxtype_put:Nn}
+%  \begin{imacro}{\RecordIndexType}
+%  \fmi{Change name of interface command!}
+%  \begin{macro}{\RecordIndexTypeAux}
+%    This is the internal form for |\RecordIndexType|. The first
+%    argument is turned into a string and the rest of the processing
+%    is then done by |\__doc_idxtype_put:nn|
 %    \begin{macrocode}
-|gdef|ifnot at excluded{|expandafter
-     |expanded at notin|expandafter{|expandafter
-     \|macro at namepart,}{|the|index at excludelist}}
-|endgroup
+\cs_new:Npn \__doc_idxtype_put:Nn #1#2 {
+  \exp_args:Nx \__doc_idxtype_put:nn { \cs_to_str:N #1 }{#2}
 %    \end{macrocode}
-%    The macro "\expanded at notin" now does the dirty work. It first
-%    defines a macro "\in@@" with a very special parameter text. If
-%    you look closely "\in@@" has three arguments, the first one is
-%    delimited by the first argument of "\expanded at notin" (i.e.\ by
-%    the string starting with a "\" and ending with a "," above), the
-%    second is undelimited (which means that it will get the next
-%    token after our string, and the third is delimited again and will
-%    get the rest up to the token "\in@@". In other words the token
-%    "\in@@" is also used as a delimiter.
+%    We also make an entry in the \texttt{.aux} file so that this
+%    declaration becomes immediately available in the next
+%    run. However, for this we aren't reusing |\__doc_idxtype_put:N|
+%    (a.k.a.\ |\RecordIndexType|) since that would result in doubling
+%    such lines each time the document is run. Instead we use
+%    |\RecordIndexTypeAux| which is only updating the data structures
+%    without writing to the \texttt{.aux} file.
 %    \begin{macrocode}
-\def\expanded at notin#1#2{%
- \def\in@@##1#1##2##3\in@@{%
+  \protected at write\@auxout{}
+     {\string\RecordIndexTypeAux {\string#1 }{#2} }
+}
 %    \end{macrocode}
-%    Now the replacement text simply compares the second argument
-%    (i.e.\ the undelimited one after our string) to the token
-%    "\expanded at notin". This is an unclosed "\ifx" statement which
-%    means that this macro behaves similar to a normal \TeX{}
-%    conditional.
+%    When we execute this code from the \texttt{.aux} we better not
+%    generate a new line in the \texttt{.aux}. Otherwise those would
+%    cumulate over time.
 %    \begin{macrocode}
-  \ifx\expanded at notin##2}%
+\cs_new:Npn \RecordIndexTypeAux #1#2 {
+  \exp_args:Nx \__doc_idxtype_put:nn { \cs_to_str:N #1 }{#2}
+}
 %    \end{macrocode}
-%    After all these preparations we call "\in@@". First we expand the
-%    token after "\in@@" (which is "\the" from the second argument to
-%    "\expanded at notin"). As a result we get the contents of the
-%    "\index at excludelist" inserted after "\in@@". After this contents
-%    we add once more the string we are looking for, then the token
-%    "\expanded at notin" and finally the token "\in@@".
+%    Similarly, when the \texttt{.aux} is read at the end of the run we
+%    should disable that command to avoid unnecessary processing.
 %    \begin{macrocode}
- \expandafter\in@@#2#1\expanded at notin\in@@}
+\AtEndDocument{
+  \cs_set_eq:NN \RecordIndexTypeAux \use_none:nn
+}
 %    \end{macrocode}
-%    Now what happens when the macro "\in@@" above gets called? The
-%    first argument to "\in@@" is delimited by our string. In other
-%    words it will get everything from the contents of
-%    "\index at excludelist" before this string. If the string is not in
-%    "\index at excludelist" then it gets the whole contents, since after
-%    it we had inserted the string one more. In this case the next
-%    token is "\expanded at notin" which gets assigned to the second
-%    argument and the third argument will be empty. If, on the other
-%    hand, the string was inside "\index at excludelist" then the second
-%    argument will not be the token "\expanded at notin" and the third
-%    argument will be all the garbage up to "\in@@". Therefore testing
-%    the seconded argument, as done in the definition of "\in@@" will
-%    tell us  whether or not the string is in "\index at includelist" and
-%    this was exactly what we wanted. (Deep breath.) You got
-%    that?\footnote{\TeX{}book page 125. The code described above is
-%    originally due to Michael Spivak who used a similar method within
-%    the \AmSTeX{} macros.}
-% \end{macro}
-% \end{macro}
+%    Finally, we provide the user-level interface
+%    \begin{macrocode}
+\cs_set_eq:NN \RecordIndexType \__doc_idxtype_put:Nn
+%    \end{macrocode}
+%  \end{macro}
+%  \end{imacro}
+%  \end{macro}
 %
 %
+%  \begin{macro}{\__doc_idxtype_put_scan:nn}
+%    When we want to record an index type for a scanned name we can't
+%    turn that into a csname and then call |\__doc_idxtype_put:Nn|
+%    because turning it into a csname may change the meaning of the
+%    name from ``undefined'' to |\relax|. Got bitten by that when
+%    processing the kernel sources containing |\@undefined| within the
+%    code: suddenly that wasn't undefined any longer.
+%    So here is another version that works only on characters as
+%    input. As we don't know whether or not they are proper strings
+%    already we first make sure that this is the case.
+%    \begin{macrocode}
+\cs_new:Npn \__doc_idxtype_put_scan:nn #1#2 {
+  \exp_args:Nf \__doc_idxtype_put:nn { \tl_to_str:n {#1} }{#2}
+%    \end{macrocode}
+%    In this case we also have to append a backslash when writing to
+%    the \texttt{.aux} file.
+%    \begin{macrocode}
+  \protected at write\@auxout{}
+     {\string\RecordIndexTypeAux {\bslash #1 }{#2} }
+}
+%    \end{macrocode}
+%  \end{macro}
 %
+%  \begin{macro}{\__doc_idxtype_put_scan:on}
+%    And here is the one we really need since the characters are
+%    stored in some macro.
+%    \begin{macrocode}
+\cs_generate_variant:Nn \__doc_idxtype_put_scan:nn {o}
+%    \end{macrocode}
+%  \end{macro}
 %
+%  \begin{macro}{\record at index@type at save}
+%    And here is the interface to the rest of the code:
+%    \begin{macrocode}
+\cs_set_eq:NN \record at index@type at save \__doc_idxtype_put_scan:on
+%    \end{macrocode}
+%  \end{macro}
 %
 %
+%  \begin{macro}{\__doc_idxtype_put:nn}
+%    This internal command takes two arguments: a command name as
+%    string (no backslash) and its type (i.e., first mandatory
+%    argument of a |\NewDocElement| declaration. If |#1| is not in
+%    |\l__doc_donotindex_seq| it will add this data to the property
+%    list |\g__doc_idxtype_prop| using |#1| as key and |#2| as its
+%    value. If the key already exist its value will be overwritten. If
+%    the command is later marked for exclusion from the index the
+%    property list setting remains unchanged but as long as no index
+%    is produced for the command it will not be consulted.
 %
+%   Note: the command assumes that |#1| is already in string form
+%    \begin{macrocode}
+\cs_new:Npn \__doc_idxtype_put:nn #1#2 {
+%    \end{macrocode}
+%    No mystery here: if the command is not marked for exclusion from
+%    the index add the property. The extra |\tl_to_str:n| is a safety
+%    measure in case the input wasn't already in that form (should
+%    only be the case with broken input but \ldots)
+%    \begin{macrocode}
+  \exp_args:NNf
+  \seq_if_in:NnTF \l__doc_donotindex_seq {\tl_to_str:n{#1}}
+%    \end{macrocode}
+%    Some tracing info \ldots{}
+%    \begin{macrocode}
+     {
+       \__doc_trace:x{Not~ recording~ index~ type~ for~ '\bslash #1' }
+     }
+     {
+       \__doc_trace:x{Recording~ index~ type~ for~ '\bslash #1' ~ as~ #2 }
+%    \end{macrocode}
+%    Stick the data into the property list:
+%    \begin{macrocode}
+       \prop_gput:Nnn \g__doc_idxtype_prop {#1}{#2}
+     }
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+% ^^A --------------------------------------------------
+%
+%
+%  \begin{macro}{\exp_args:co}
+%    A helper: construct a function and call it with its first argument
+%    expanded once:
+%    \begin{macrocode}
+\cs_new:Npn \exp_args:co #1#2
+   { \cs:w #1 \exp_after:wN \cs_end:\exp_after:wN {#2} }
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \begin{macro}{\tl_to_str:o}
+%    Another helper: take some token list variable, expand it and turn
+%    it into a string.
+%    \begin{macrocode}
+\cs_generate_variant:Nn \tl_to_str:n {o}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+% ^^A --------------------------------------------------
+%
+%
+%
+% \DescribeMacro\maybe at index@macro
+%
+%    This takes a macro name (without backslash) as parsed within a
+%    \env{macrocode} environment and checks if it should get indexed
+%    (i.e., is not on the exclude list) and if so how (i.e., gets it
+%    index type property and makes the right choice depending on that.
+%
+
+
+%  \begin{macro}{\maybe at index@macro}
+%  \begin{macro}{\__doc_maybe_index:o}
+%    We first make sure that the argument is really a string (so that
+%    we have a defined situation) and then
+%    pass it on to |\__doc_maybe_index_aux:nN| to do the work.
+%    The second argument defines the indexing operation
+%    \cs{SpecialIndex} for multi-letter macros and below
+%    \cs{SpecialShortIndex} for single character macros.
+%    \begin{macrocode}
+\cs_new:Npn \__doc_maybe_index:o #1 {
+  \exp_args:Nf \__doc_maybe_index_aux:nN { \tl_to_str:o {#1} }
+                                         \SpecialIndex
+}
+%    \end{macrocode}
+%    And here is what we call it in the older non-expl3 code:
+%    \begin{macrocode}
+\cs_set_eq:NN \maybe at index@macro \__doc_maybe_index:o
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%
+%
+%  \begin{macro}{\maybe at index@short at macro}
+%  \begin{macro}{\__doc_maybe_index_short:o}
+%    Single character macros are handled similarly but there the
+%    indexing is done by \cs{SpecialShortIndex}.
+%    \begin{macrocode}
+\cs_new:Npn \__doc_maybe_index_short:o #1 {
+  \exp_args:Nf \__doc_maybe_index_aux:nN { \tl_to_str:o {#1} }
+                                         \SpecialShortIndex
+}
+\cs_set_eq:NN \maybe at index@short at macro \__doc_maybe_index_short:o
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%
+%
+%
+%  \begin{macro}{\__doc_maybe_index_aux:nN}
+%    Take a string (representing a macro without backslash) and make
+%    the right choices with respect to indexing.
+%    \begin{macrocode}
+\cs_new:Npn \__doc_maybe_index_aux:nN #1#2 {
+%    \end{macrocode}
+%    A bit of tracing:
+%    \begin{macrocode}
+  \__doc_trace:x{Searching~ for~ '\bslash #1'}
+%    \end{macrocode}
+%    If the name is on the exclude list do nothing.
+%    \begin{macrocode}
+  \seq_if_in:NnTF \l__doc_donotindex_seq {#1}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+    {
+     \__doc_trace:x{Not~ indexing~ '\bslash #1' }
+    }
+%    \end{macrocode}
+%    Otherwise check if this name has an index type property attached
+%    to it.
+%    \begin{macrocode}
+    {
+     \prop_get:NnNTF \g__doc_idxtype_prop {#1} \l__doc_idxtype_tl
+%    \end{macrocode}
+%    If so construct and execute
+%    |\Code|\meta{idxtype}|Index|\footnote{I guess this should really
+%    be an internal name not a user-level one.} which is done inside
+%    |\__doc_maybe_index_aux|
+%    \begin{macrocode}
+       {
+        \exp_args:Ncno \__doc_maybe_index_aux:Nnn
+              { Code \tl_use:N \l__doc_idxtype_tl Index }
+              {code} {\bslash #1}
+        }
+%    \end{macrocode}
+%    Otherwise execute |\SpecialIndex| which is a short form for
+%    |\CodeMacroIndex{code}| or execute \cs{SpecialShortIndex} which
+%    deals with some special cases for single letter macros.
+%    \begin{macrocode}
+        {
+          \__doc_trace:x{Indexing~ '\bslash #1'\space (\string #2)}
+          \exp_args:No #2 {\bslash #1}
+        }
+    }
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+%  \begin{macro}{\SpecialShortIndex}
+%    \fmi{to be documented; also needs cleaning up as it is a mix of
+%    old and new right now}
+%    \begin{macrocode}
+\cs_new:Npn \SpecialShortIndex #1 {
+    \@SpecialIndexHelper@ #1\@nil
+  \@bsphack
+  \ifdoc at noindex \else
+    \str_case_e:nnF {\@gtempa }
+        {
+          {\cs_to_str:N \^^M } {\def\reserved at a{ \string \space \actualchar }
+                                \def\reserved at b { \space }
+                                \let\reserved at c \@empty                          }
+          { }                  {\def\reserved at a{ \string \space \actualchar }
+                                \def\reserved at b { \space }
+                                \let\reserved at c \@empty                          }
+          {\c_left_brace_str} { \def\reserved at a{ \bgroup \actualchar }
+                                \def\reserved at b { \c_left_brace_str }
+                                \def\reserved at c { \noexpand\iffalse
+                                                  \c_right_brace_str
+                                                  \noexpand\fi }                 }
+          {\c_right_brace_str} { \def\reserved at a{ \egroup \actualchar
+                                                  \noexpand\iffalse
+                                                    \c_left_brace_str
+                                                  \noexpand\fi }
+                                 \def\reserved at b { \c_right_brace_str }
+                                 \let\reserved at c \@empty                         }
+%    \end{macrocode}
+%    The case of \cs{verbatimchar} is tricky. We can't stick it into
+%    the normal \cs{verb} because we would then get something like
+%    \verb=\verb+\++= which would comes out as ``\verb+\++'' instead
+%    of \verb=\+=. So we use the \cs{verb} to only generate the
+%    backslash and then use \cs{texttt} on the \cs{verbatimchar}
+%    itself. However, that is not enough if we are unlucky and
+%    somebody (like Will :-)) has used something like \verb=&= with a
+%    special catcode for the \cs{verbatimchar}. We therefore also
+%    apply \cs{string} to it when we read it back.
+%    \begin{macrocode}
+          {\verbatimchar}  { \def\reserved at a{ \quotechar\verbatimchar
+                                              \actualchar }
+                             \let\reserved at b \@empty
+                             \def\reserved at c
+                                 { \string\texttt{\string\string\verbatimchar} } }
+        }
+        { \def\reserved at a {\quotechar \@gtempa \actualchar }
+          \def\reserved at b {\quotechar \@gtempa  }
+          \let\reserved at c \@empty                             }
+    \special at index {
+    \reserved at a
+    \string\verb
+    \quotechar *\verbatimchar \quotechar \bslash
+    \reserved at b
+    \verbatimchar
+    \reserved at c
+    \encapchar code}
+  \fi
+  \@esphack
+}
+%    \end{macrocode}
+%  \end{macro}
+
+
+
+
+
+%  \begin{macro}{\__doc_maybe_index_aux:Nnn}
+%    Execute the function passed on as first argument taking argument
+%    2 and 3 as input.
+%    \begin{macrocode}
+\cs_new:Npn \__doc_maybe_index_aux:Nnn #1#2#3 {
+%    \end{macrocode}
+%    We have to be a little careful: as that function name is
+%    constructed it may not actually exist (as constructions generate
+%    |\relax| in \TeX{} in that case). In that case we raise an error,
+%    otherwise we execute (with a little bit of tracing info):
+%    \begin{macrocode}
+    \cs_if_exist:NTF #1
+      {
+        \__doc_trace:x{Indexing~ '#3'\space as~
+                       \tl_use:N \l__doc_idxtype_tl }
+        #1{#2}{#3}
+      }
+      {
+        \PackageError{doc}{Doc~ element~
+           '\tl_use:N \l__doc_idxtype_tl'~ unknown}%
+
+          {When~ using~ '\string\RecordIndexType'~ the~ type~ must~
+           be~ known~\MessageBreak
+           to~ the~ system,~ i.e.,~ declared~ via~
+           '\string\NewDocElement'\MessageBreak
+           before~ it~ can~ be~ used~ in~ indexing.}
+     }
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%    Back to old style coding \ldots
+%    \begin{macrocode}
+\ExplSyntaxOff
+%    \end{macrocode}
+%
+%
+%
 % \subsection{Macros for generating index entries}
 %
 % Here we provide default definitions for the macros invoked to create
@@ -3138,20 +3886,20 @@
 % index entries; these are either invoked explicitly, or automatically
 % by |\scan at macro|.  As already mentioned, the definitions given
 % here presuppose that the |.idx| file will be processed by
-% Chen's \textsf{makeindex} program --- they may be redefined for use
-% with the user's favourite such program.
+% Chen's \prg{makeindex} program --- they may be redefined for use
+% with the user's favorite such program.
 %
 % To assist the reader in locating items in the index, all such
 % entries are sorted alphabetically {\em ignoring\/} the initial
 % `|\|'; this is achieved by issuing an |\index| command which
-% contains the `actual' operator for \textsf{makeindex}.  The default
+% contains the `actual' operator for \prg{makeindex}.  The default
 % value for the latter operator is `|@|', but the latter character is
 % so popular in \LaTeX\ package files that it is necessary to substitute
-% another character.  This is indicated to \textsf{makeindex} by means
+% another character.  This is indicated to \prg{makeindex} by means
 % of an `index style file'; the character selected for this function
 % is |=|, and therefore this character too must be specially treated
 % when it is met in a \TeX\ command.  A suitable index style file is
-% provided amongt the supporting files for this style file in
+% provided amongst the supporting files for this style file in
 % \texttt{gind.ist} and is generated from this source by processing
 % with \texttt{docstrip} to extract the module \textbf{gind}.  A
 % similar style file \texttt{gglo.ist} is supplied for sorting the
@@ -3172,12 +3920,12 @@
 %<+gind|gglo>
 %    \end{macrocode}
 %
-% \begin{macro}{\actualchar}
-% \begin{macro}{\quotechar}
-% \begin{macro}{\levelchar}
+% \begin{imacro}{\actualchar}
+% \begin{imacro}{\quotechar}
+% \begin{imacro}{\levelchar}
 %    First come the definitions of |\actualchar|,
 %    |\quotechar| and |\levelchar|. Note, that our defaults
-%    are not the ones used by the \textsf{makeindex} program without a
+%    are not the ones used by the \prg{makeindex} program without a
 %    style file.
 %    \begin{macrocode}
 %<*package>
@@ -3190,85 +3938,39 @@
 %<+gind|gglo>level '>'
 %<*package>
 %    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{imacro}
+% \end{imacro}
+% \end{imacro}
 %
 %
-% \begin{macro}{\encapchar}
-%    The \textsf{makeindex} default for the |\encapchar| isn't
+% \begin{imacro}{\encapchar}
+%    The \prg{makeindex} default for the |\encapchar| isn't
 %    changed.
 %    \begin{macrocode}
 \@ifundefined{encapchar}{\def\encapchar{|}}{}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
 %
-% \begin{macro}{\verbatimchar}
+% \begin{imacro}{\verbatimchar}
 %    We also need a special character to be used as a delimiter for
 %    the |\verb*| command used in the definitions below.
 %    \begin{macrocode}
 \@ifundefined{verbatimchar}{\def\verbatimchar{+}}{}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
 %
-% \begin{macro}{\SpecialIndex}
-%    The |\SpecialIndex| command creates index entries for
-%    macros.  If the argument is |\|$xyz$, the command produces
-%    \verb|\indexentry{|$xyz$\verb|=\verb!*+\|$xyz$\verb|+}{|$n$\verb|}|
-%    given the above defined defaults for |\actualchar|,
-%    |\quotechar| and |\verbatimchar|.  We first remove the
-%    initial `|\|' to get a better index.
-% \changes{v1.5s}{1989/11/05}{Support for code line no. (Undoc)}
-%    \begin{macrocode}
-\def\SpecialIndex#1{\@bsphack\special at index{\expandafter\@gobble
-                                      \string#1\actualchar
-%    \end{macrocode}
-%    Then follows the actual entry. A |\quotechar| is placed
-%    before the |*| to allow its use as a special \textsf{makeindex}
-%    character.  Again |\@bsphack| and |\@esphack| are used
-%    to make the macros invisible.
-%    \begin{macrocode}
-      \string\verb\quotechar*\verbatimchar\string#1\verbatimchar}%
-    \@esphack}
-%    \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\SpecialMainIndex}
-% \begin{macro}{\SpecialMainEnvIndex}
-% \begin{macro}{\SpecialUsageIndex}
-%    The |\SpecialMainIndex| macro is used to cross-reference the
-%    names introduced by the \textsf{macro} environment.  The action is
-%    as for |\SpecialIndex|, except that \textsf{makeindex} is
-%    instructed to `encap'sulate the entry with the string
-%    \verb=|main= to cause it to generate a call of the |\main|
-%    macro.
-% \changes{v1.5s}{1989/11/05}{Support for code line no. (Undoc)}
-% \changes{v2.0c}{1998/08/22}{Correctly handle single character
-%                   control sequences like \cs{<}.}
 %
-%    |\SpecialMainIndex| passes the macro name to be indexed on to the
-%    macro |\SpecialIndex@|.
+% \begin{macro}{\@SpecialIndexHelper@}
+%    \fmi{doc or drop}
 %    \begin{macrocode}
-\def\SpecialMainIndex#1{\@bsphack\SpecialIndex@{#1}{\encapchar main}%
-                        \@esphack}
-%    \end{macrocode}
-%
-% \begin{macro}{\SpecialIndex@}
-% \changes{v2.0c}{1998/08/22}{Macro added.}
-% \changes{v2.0f}{1999/02/27}{Temp fix to allow strange code in arg 1
-%                             (PR 2968)}
-%    The macro |\SpecialIndex@| does the real work for |\SpecialMainIndex|
-%    and |\SpecialUsageIndex|. It takes two arguments: the macro to be
-%    indexed (as a control sequence or list of character tokens) and the
-%    additional text for the index.
-% \changes{v2.0g}{1999/03/22}{Correct so-called temp fix. I'm not going to
-%                   explain this.}
-%    \begin{macrocode}
 \begingroup
  \catcode`\|=0
  \catcode`\\=12
+%    \end{macrocode}
+%    \SpecialEscapechar\|
+%    \begin{macrocode}
  |gdef|@SpecialIndexHelper@#1#2|@nil{%
    |if |noexpand#1\%
      |gdef|@gtempa{#2}%
@@ -3279,137 +3981,13 @@
      |endgroup
    |fi}
 |endgroup
-\def\SpecialIndex@#1#2{%
 %    \end{macrocode}
-%    The first thing it does is to convert the macro into a list of
-%    characters. Note that a character token list remains (mostly) unchanged.
-%    \begin{macrocode}
-   \@SpecialIndexHelper@#1\@nil
-%    \end{macrocode}
-%    The macro name \verb*|\ | has to handled in a special way. The reason
-%    is that the space token is skipped when \TeX\ is scanning macro
-%    parameters, so that the trick used below will not work.
-%    So, we check whether the replacement text of |\@tempa| starts with
-%    a space token and write the appropriate index entry.
-%    \begin{macrocode}
-   \def\@tempb{ }%
-   \ifcat \@tempb\@gtempa
-      \special at index{\quotechar\space\actualchar
-                     \string\verb\quotechar*\verbatimchar
-                     \quotechar\bslash\quotechar\space\verbatimchar#2}%
-   \else
-%    \end{macrocode}
-%    Having handled this special case we have to distinguish control
-%    sequences consisting of one or more
-%    letters and those that consists of exactly one nonletter. As character
-%    tokens in the replacement text of the macro |\@gtempa| have all
-%    category code $12$ (other), this is difficult. For simplicity, we treat
-%    all single character control sequences alike, irregardless of whether
-%    the character is a letter or not. This has the advantage that it works
-%    even for strange settings of the category codes.
 %
-%    We define a utility macro |\@tempb| with two arguments, the second
-%    delimited by |\relax|.
-%    It will be called later so that the first argument is the first character
-%    of the macro name, and the second argument receives the rest of the
-%    characters. So we distinguish the two cases above by checking whether
-%    the second argument is empty.
-%    \begin{macrocode}
-     \def\@tempb##1##2\relax{\ifx\relax##2\relax
-%    \end{macrocode}
-%    If so, we define the helper macro |\@tempc| in a way that it
-%    adds quotechars in critical places.
-%    \begin{macrocode}
-          \def\@tempc{\special at index{\quotechar##1\actualchar
-                      \string\verb\quotechar*\verbatimchar
-                      \quotechar\bslash\quotechar##1\verbatimchar#2}}%
-%    \end{macrocode}
-%    Otherwise we write the characters as in |\SpecialIndex|.
-%    \begin{macrocode}
-        \else
-          \def\@tempc{\special at index{##1##2\actualchar
-                       \string\verb\quotechar*\verbatimchar
-                       \bslash##1##2\verbatimchar#2}}%
-        \fi}%
-%    \end{macrocode}
-%    Now pass the list of characters to \@tempb and call \@tempc to do the
-%    work.
-%    \begin{macrocode}
-     \expandafter\@tempb\@gtempa\relax
-     \@tempc
-   \fi}
-%    \end{macrocode}
 % \end{macro}
 %
-%    Slightly simpler is the main entry for environments
-% \changes{v1.9e}{1994/02/03}{use \cs{ttfamily} with \cs{string}}
-% \changes{v1.9f}{1994/02/07}{should have used \cs{noexpand}, sigh}
-% \changes{v1.9i}{1994/02/11}{should have used \cs{protect}}
-% \changes{v1.9j}{1994/02/16}{Back to string:-)}
-% \changes{v1.9s}{1994/10/14}{Added missing percent and changed to
-%                             \cs{ttfamily}}
-% \changes{v2.0d}{1998/12/20}{Correctly handle second index entry
-%    by using \cs{special at index} not \cs{index} (PR/2928).}
-% \changes{v2.0e}{1998/12/28}{Use \cs{string}, not \cs{protect} in argument to
-%             \cs{special at index}.}
-% \changes{v2.1c}{2004/07/23}{environment names incorrectly sorted in
-%           index (pr/3615)}
-%    \begin{macrocode}
-\def\SpecialMainEnvIndex#1{\@bsphack\special at index{%
-                                      #1\actualchar
-                                      {\string\ttfamily\space#1}
-                                         (environment)%
-                                      \encapchar main}%
-    \special at index{environments:\levelchar#1\actualchar{%
-                   \string\ttfamily\space#1}\encapchar
-           main}\@esphack}
-%    \end{macrocode}
-%    The |\SpecialUsageIndex| is similar to |\SpecialMainIndex|, except
-%    that it uses the standard |\index| command.
-%    \texttt{usage} instead of \texttt{main}.
-%    \begin{macrocode}
-\def\SpecialUsageIndex#1{\@bsphack
-   {\let\special at index\index\SpecialIndex@{#1}{\encapchar usage}}%
-   \@esphack}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
 %
 %
-%
-%
-% \begin{macro}{\SpecialEnvIndex}
-%    Indexing environments is done a little bit differently; we produce
-%    two index entries with the |\SpecialEnvIndex| macro:
-% \changes{v1.9e}{1994/02/03}{The index needs protecting}
-% \changes{v1.9g}{1994/02/08}{should have used \cs{noexpand}, sigh}
-% \changes{v1.9i}{1994/02/11}{should have used \cs{protect}}
-%    \begin{macrocode}
-\def\SpecialEnvIndex#1{\@bsphack
-%    \end{macrocode}
-%    First we sort the environment under its own name stating in the
-%    actual entry that this is an environment.
-%    \begin{macrocode}
-    \index{#1\actualchar{\protect\ttfamily#1}
-           (environment)\encapchar usage}%
-%    \end{macrocode}
-%    The second entry is sorted as a subitem under the key
-%    `environments:'.
-% \changes{v2.1b}{2004/02/09}{environment names incorrectly sorted in
-%           index (pr/3615)}
-%    \begin{macrocode}
-    \index{environments:\levelchar#1\actualchar
-          {\protect\ttfamily#1}\encapchar usage}\@esphack}
-%    \end{macrocode}
-%    Because both entries correspond to `descriptions' of the
-%    environment, we encapsulate the page numbers with the
-%    |\usage| macro.
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\SortIndex}
+% \begin{imacro}{\SortIndex}
 %    This macro is used to generate the index entries for any
 %    single-character command that |\scan at macro| encounters.  The
 %    first parameter specifies the lexical order for the character,
@@ -3417,77 +3995,88 @@
 %    the entry. It can also be used directly to generate index entries
 %    which differ in sort key and actual entry.
 %    \begin{macrocode}
-\def\SortIndex#1#2{\index{#1\actualchar#2}}
+\def\SortIndex#1#2{%
+  \ifdoc at noindex\else
+    \index{#1\actualchar#2}%
+  \fi
+}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
 %
 %
-% \begin{macro}{\it at is@a}
-%    This macro is supposed to produce a correct |\SortIndex|
-%    entry for a given character. Since this character might be
-%    recognised as a `command' character by the index program used,
-%    all characters are quoted with the |\quotechar|.
-% \changes{v1.5s}{1989/11/05}{Support for code line no. (Undoc)}
-%    \begin{macrocode}
-\def\it at is@a#1{\special at index{\quotechar #1\actualchar
-                          \string\verb\quotechar*\verbatimchar
-                          \quotechar\bslash\quotechar#1\verbatimchar}}
-%    \end{macrocode}
-% \end{macro}
 %
-%
-%
-% \begin{macro}{\LeftBraceIndex}
+% \begin{imacro}{\LeftBraceIndex}
 % \changes{v1.5s}{1989/11/05}{Support for code line no. (Undoc)}
-% \begin{macro}{\RightBraceIndex}
+% \begin{imacro}{\RightBraceIndex}
 % \changes{v1.5s}{1989/11/05}{Support for code line no. (Undoc)} These
-%    two macros fix the problems with \textsf{makeindex}.  Note the
+%    two macros fix the problems with \prg{makeindex}.  Note the
 %    `hack' with |\iffalse}\fi| to satisfy both \TeX{} and the
-%    \textsf{makeindex} program. When this is written to the
+%    \prg{makeindex} program. When this is written to the
 %    \texttt{.idx} file \TeX{} will see both braces (so we get a
-%    balanced text).  \textsf{makeindex} will also see balanced braces
+%    balanced text).  \prg{makeindex} will also see balanced braces
 %    but when the actual index entry is again processed by \TeX{} the
 %    brace in between |\iffalse| |\fi| will vanish.
 %    \begin{macrocode}
 \@ifundefined{LeftBraceIndex}{\def\LeftBraceIndex{%
-   \special at index{\bgroup\actualchar\string\verb\quotechar*\verbatimchar
-          \quotechar\bslash{\verbatimchar\string\iffalse}\string\fi}}}{}
+   \special at index{\bgroup\actualchar
+                  \string\verb% % to fool emacs highlighting
+                  \quotechar*\verbatimchar
+                  \quotechar\bslash{\verbatimchar\string\iffalse}\string\fi}}}{}
 
 \@ifundefined{RightBraceIndex}{\def\RightBraceIndex{%
- \special at index{\egroup\actualchar\string\iffalse{\string\fi\string\verb
+ \special at index{\egroup\actualchar\string\iffalse{\string\fi
+           \string\verb% % to fool emacs highlighting
            \quotechar*\verbatimchar\quotechar\bslash}\verbatimchar}}}{}
 %    \end{macrocode}
-% \end{macro}
-% \end{macro}
+% \end{imacro}
+% \end{imacro}
 %
 %
-% \begin{macro}{\PercentIndex}
+% \begin{imacro}{\PercentIndex}
 % \changes{v1.5s}{1989/11/05}{Support for code line no. (Undoc)}
 % \changes{v1.7c}{1992/03/25}{Default now for bug-fixed makeindex}
-% By default we assume a version of \textsf{makeindex} without the
+% By default we assume a version of \prg{makeindex} without the
 % percent bug is being used.
 %    \begin{macrocode}
 \@ifundefined{PercentIndex}
   {\def\PercentIndex{\it at is@a\percentchar}}{}
 %    \end{macrocode}
-% \end{macro}
-% \begin{macro}{\OldMakeindex}
+% \end{imacro}
+%
+%
+% \begin{omacro}{\OldMakeindex}
 % \changes{v1.7c}{1992/03/26}{Replaced \cs{NewMakeIndex}.}
-% \begin{macro}{\percentchar}
-%    Here is one solution for the percent bug in \textsf{makeindex}.
+% \begin{imacro}{\percentchar}
+%    Here is one solution for the percent bug in \prg{makeindex}.
 %    The macro |\percentchar| denotes a |%|$_{12}$.  Calling this from
 %    a package or the driver file sets things up
 %    appropriately.\label{bug:fixes}
 %    \begin{macrocode}
 \def\OldMakeindex{\def\PercentIndex{%
-    \special at index{\quotechar\percentchar\actualchar\string\verb
+    \special at index{\quotechar\percentchar\actualchar
+           \string\verb% % to fool emacs highlighting
            \quotechar*\verbatimchar\quotechar\bslash
            \percentchar\percentchar\verbatimchar}}}
 {\catcode`\%=12 \gdef\percentchar{%}}
 %    \end{macrocode}
+% \end{imacro}
+% \end{omacro}
+%
+%
+% \begin{macro}{\it at is@a}
+%    This macro is supposed to produce a correct |\SortIndex|
+%    entry for a given character. Since this character might be
+%    recognized as a `command' character by the index program used,
+%    all characters are quoted with the |\quotechar|.
+% \changes{v1.5s}{1989/11/05}{Support for code line no. (Undoc)}
+%    \begin{macrocode}
+\def\it at is@a#1{\special at index{\quotechar #1\actualchar
+                          \string\verb% % to fool emacs highlighting
+                          \quotechar*\verbatimchar
+                          \quotechar\bslash\quotechar#1\verbatimchar}}
+%    \end{macrocode}
 % \end{macro}
-% \end{macro}
 %
 %
 %
@@ -3494,7 +4083,7 @@
 %
 %
 %
-% \subsection{Redefining the \textsf{index} environment}
+% \subsection{Redefining the \env{index} environment}
 %
 %\changes{v1.4r}{1989/04/22}{twocols env. placed into separate file}
 %\changes{v1.4?}{1989/04/19}{use DEK's algorithm and implement
@@ -3502,34 +4091,10 @@
 %\changes{v1.4?}{1989/04/16}{changes to the index env.}
 %\changes{v1.5a}{1989/04/26}{Now input multicol.sty instead of
 %                         multcols.sty}
-% \begin{macro}{\ifhave at multicol}
-% \changes{v1.7a}{1992/03/04}{Added to support avoiding multicol.sty} By
-%    default the index is set in three columns, and will start on the
-%    same page as, and underneath, the last part of the text of the
-%    documented package file, if possible.  The last page will be
-%    reformatted with balanced columns.  This requires the
-%    \textsf{multicols} environment which is described elsewhere.  So
-%    that \DOC{} can be run independently of
-%    \texttt{multicol.sty} we first check for its existence and set
-%    the "have at multicol" flag appropriately for use below.
-%  \changes{v1.9a}{1993/12/02}{Use \cs{IfFileExists}}
-%  \changes{v1.9m}{1994/04/28}{Use \cs{RequirePackage} to load multicol}
-%    \begin{macrocode}
-\newif\ifhave at multicol
-%    \end{macrocode}
-%    If we found \texttt{multicol.sty} we use it.  It would be nice to
-%    delay this (and the re-definition of "theindex") until we knew
-%    whether an index was actually required \ldots
-%    \begin{macrocode}
-\IfFileExists{multicol.sty}{\have at multicoltrue
-                            \RequirePackage{multicol}%
-                           }{}
-%    \end{macrocode}
-% \end{macro}
 
 %
-% \begin{macro}{\IndexMin}
-% \begin{macro}{\c at IndexColumns}
+% \begin{ldimen}{\IndexMin}
+% \begin{lcounter}{IndexColumns}
 %    \changes{v1.4t}{1989/04/24}{Counter added.}
 %    If \texttt{multicol} is in use,
 %    when the index is started we compute the remaining space on the
@@ -3542,10 +4107,11 @@
 \newdimen\IndexMin         \IndexMin       = 80pt
 \newcount\c at IndexColumns   \c at IndexColumns = 3
 %    \end{macrocode}
-% \end{macro}
-% \end{macro}
+% \end{lcounter}
+% \end{ldimen}
 %
 %
+%
 % \begin{environment}{theindex}
 %    Now we start the multi-column mechanism, if appropriate. We use the
 %    \LaTeX{} counter |\c at IndexColumns|  declared above to denote
@@ -3557,7 +4123,14 @@
 %    \changes{v1.6e}{1991/04/03}{Turned into env definition.}
 %    \changes{v1.7a}{1992/03/04}{Include test for multicols.}
 %    \begin{macrocode}
-\ifhave at multicol
+\ifdoc at multicol
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \RequirePackage{multicol}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
   \renewenvironment{theindex}
     {\begin{multicols}\c at IndexColumns[\index at prologue][\IndexMin]%
 %    \end{macrocode}
@@ -3570,17 +4143,15 @@
 %
 % \begin{macro}{\endtheindex}
 %    \changes{v1.4t}{1989/04/24}{Incorporated new multicols env.}
-%    At the end of the index, we have only to end the \textsf{multicols}
+%    At the end of the index, we have only to end the \env{multicols}
 %    environment.
 %    \begin{macrocode}
     {\end{multicols}}
 %    \end{macrocode}
-%    If we can't use \textsf{multicols} we warn the user and use an
+%    If we can't use \env{multicols} we warn the user and use an
 %    environment that's basically the one from \texttt{article.sty}.
 %    \begin{macrocode}
 \else
-  \typeout{Can't find multicol.sty -- will use normal index layout if
-     necessary.}
   \def\theindex{\@restonecoltrue\if at twocolumn\@restonecolfalse\fi
     \columnseprule \z@  \columnsep 35\p@
     \twocolumn[\index at prologue]%
@@ -3591,8 +4162,8 @@
 % \end{macro}
 % \end{environment}
 %
-% Here are the necessary \textsf{makeindex} declarations. We disable
-% scanning of macro names inside the index with "\scan at allowedfalse\n"
+% Here are the necessary \prg{makeindex} declarations. We disable
+% scanning of macro names inside the index with |\scan at allowedfalse\n|
 % to avoid recursion.
 %    \begin{macrocode}
 %</package>
@@ -3604,7 +4175,7 @@
 %    \end{macrocode}
 %
 %
-% \begin{macro}{\IndexPrologue}
+% \begin{imacro}{\IndexPrologue}
 % \begin{macro}{\index at prologue}
 % \changes{v1.9w}{1995/12/27}{Text changed}
 % \changes{v1.9x}{1996/01/11}{Text depends on code lines used}
@@ -3639,11 +4210,11 @@
                  }}{}
 %    \end{macrocode}
 % \end{macro}
-% \end{macro}
+% \end{imacro}
 %
 %
 %
-% \begin{macro}{\IndexParms}
+% \begin{imacro}{\IndexParms}
 %    These are some last-minute assignments for formatting the index
 %    entries. They are defined in a separate macro so that a user can
 %    substitute different definitions.  We start by defining the
@@ -3678,7 +4249,7 @@
        \def\subsubitem{\@idxitem\hspace*{25pt}}%
 %    \end{macrocode}
 % \begin{macro}{\indexspace}
-%    The \textsf{makeindex} program generates an |\indexspace|
+%    The \prg{makeindex} program generates an |\indexspace|
 %    before each new alphabetic section commences. After this final
 %    definition we end the |\@ifundefined| and the definition of
 %    |\IndexParms|.
@@ -3690,10 +4261,10 @@
 % \end{macro}
 % \end{macro}
 % \end{macro}
-% \end{macro}
+% \end{imacro}
 %
 %
-% \begin{macro}{\efill}
+% \begin{imacro}{\efill}
 %    This definition of |\efill| is intended to be used after index
 %    items which have no following text (for example, ``\textit{
 %    see\/}'' entries).  It just ensures that the current line is
@@ -3706,25 +4277,23 @@
 %<+gind>item_x2   "\\efill \n \\subsubitem "
 %<*package>
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
 %
 %
-% \begin{macro}{\pfill}
-% \begin{macro}{\dotfil}
-% \begin{macro}{\dotfill}
+% \begin{imacro}{\pfill}
 %     The following definitions provide the |\pfill| command; if
-%    this is specified in the index style file to \textsf{makeindex} as
+%    this is specified in the index style file to \prg{makeindex} as
 %    the delimiter to appear after index items, then the intervening
 %    space before the referenced page numbers will be filled with
 %    dots, with a little white space interpolated at each end of the
 %    dots.  If the line is broken the dots will show up on both lines.
-%  \changes{v2.1i}{2018/09/25}{Guard against following \cs{unskip} (git/23)}
 %    \begin{macrocode}
-\def\dotfill{\leaders\hbox to.6em{\hss .\hss}\hskip\z@ plus  1fill\kern\z@}%
-\def\dotfil{\leaders\hbox to.6em{\hss .\hss}\hfil\kern\z@}%
-\def\pfill{\unskip~\dotfill\penalty500\strut\nobreak
-               \dotfil~\ignorespaces}%
+\def\pfill{\unskip~%
+           \leaders\hbox to.6em{\hss .\hss}\hfill
+           \penalty500\strut\nobreak
+           \leaders\hbox to.6em{\hss .\hss}\hfil
+           ~\ignorespaces}%
 %</package>
 %<+gind|gglo>delim_0   "\\pfill "
 %<+gind|gglo>delim_1   "\\pfill "
@@ -3731,26 +4300,24 @@
 %<+gind|gglo>delim_2   "\\pfill "
 %<*package>
 %    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{imacro}
 %
 %
 %
-% \begin{macro}{\*}
+% \begin{imacro}{\*}
 %    Here is the definition for the |\*| macro. It isn't used in
 %    this set of macros.
 %    \begin{macrocode}
 \def\*{\leavevmode\lower.8ex\hbox{$\,\widetilde{\ }\,$}}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
 %
-% \begin{macro}{\main}
+% \begin{imacro}{\main}
 %    The \textit{defining\/} entry for a macro name is flagged with
 %    the string \texttt{\encapchar main}\footnote{With the current
 %    definition of \texttt{\bslash encapchar} substituted for
-%    \texttt{\encapchar}} in the |\index| command; \textsf{makeindex}
+%    \texttt{\encapchar}} in the |\index| command; \prg{makeindex}
 %    processes this so that the |\main| macro will be invoked to
 %    underline the page number(s) on which the {\em definition\/} of
 %    the macro will be found.
@@ -3757,9 +4324,9 @@
 %    \begin{macrocode}
 \@ifundefined{main}{\def\main#1{\underline{#1}}}{}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
-% \begin{macro}{\usage}
+% \begin{imacro}{\usage}
 %    The |\usage| macro is used to indicate entries describing
 %    the usage of a macro. The corresponding page number(s) will be
 %    set in \textit{italics}.
@@ -3766,44 +4333,40 @@
 %    \begin{macrocode}
 \@ifundefined{usage}{\def\usage#1{\textit{#1}}}{}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
+% \begin{imacro}{\code}
+%    The |\code| macro is used to indicate index entries to code lines
+%    that aren't main entries.
+%    By default we do nothing special with them
+%    the usage of a macro.
+%    \begin{macrocode}
+\@ifundefined{code}{\def\code#1{#1}}{}
+%    \end{macrocode}
+% \end{imacro}
 %
-% \begin{macro}{\PrintIndex}
+%
+% \begin{imacro}{\PrintIndex}
 % \changes{v1.5k}{1989/09/04}{\cs{printindex} changed to
 %                             \cs{PrintIndex}}
 % \changes{v1.7a}{1992/02/26}{Documentation moved to interface section.}
 % \changes{v1.9h}{1994/02/10}{Use \cs{@input@} instead of \cs{@input}.}
 % \changes{v1.9w}{1995/12/29}{Turn the cmd into a noop after use.}
-%    This is the same as "\printindex" in the \textsf{makeidx} package.
+%    This is the same as |\printindex| in the \pkg{makeidx} package.
 %    \begin{macrocode}
 \def\PrintIndex{\@input@{\jobname.ind}%
                 \global\let\PrintIndex\@empty}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
-% \begin{macro}{\printindex}
-%    Since the above macro was called |\printindex| in older versions
-%    of \texttt{doc.sty} the following definition was provided up to
-%    version 1.9y.
-% \changes{v1.9z}{1996/04/17}{Commented out}
-%    \begin{macrocode}
-%\def\printindex{\typeout{\string\printindex\space is obsolete!}%
-%                \typeout{Please use \string\PrintIndex\space
-%                         if you are a macro implementor^^J
-%                         or get a newer version of the documented
-%                         software if you are a user}%
-%                \PrintIndex}
-%    \end{macrocode}
-% \end{macro}
 %
 % We want headings in the index (and changes list) according to the
 % initial character of the next block of entries and have to instruct
-% \textsf{makeindex} appropriately.  Unfortunately the specification
+% \prg{makeindex} appropriately.  Unfortunately the specification
 % for this changed sometime between versions 2.4 and 2.11 of
-% \textsf{makeindex}.  We provide both ways of doing it but
+% \prg{makeindex}.  We provide both ways of doing it but
 % unfortunately this will always produce a warning message from
-% \textsf{makeindex}.  This is for older versions:
+% \prg{makeindex}.  This is for older versions:
 % \changes{v1.7h}{1992/07/01}{Turn off headings in gls file}
 %    \begin{macrocode}
 %</package>
@@ -3839,13 +4402,13 @@
 % is otherwise ignored, but the others are written out and may be used
 % to generate a history of changes, to be printed at the end of the
 % document.  However, note that older versions of Chen's standard
-% \textsf{makeindex}
+% \prg{makeindex}
 % program limit any textual field to just 64 characters; therefore,
 % is important that the number of characters in the second and third
 % parameters should not exceed 61 altogether (to allow for the
 % parentheses placed around the date).
 %
-% \begin{macro}{\changes}
+% \begin{imacro}{\changes}
 % \changes{BHK}{1989/04/26}{Documented \texttt{\protect\bslash changes}
 %                         command.}
 % \changes{BHK}{1989/04/26}{Changed definition of
@@ -3855,9 +4418,9 @@
 %    change in \LaTeX{} 2.09 changed the command name in the
 %    \texttt{.glo} file from \texttt{\bslash indexentry} to
 %    \texttt{\bslash glossaryentry}.  It is therefore necessary to
-%    have a special \textsf{makeindex} style file called
+%    have a special \prg{makeindex} style file called
 %    \texttt{gglo.ist} to process this file correctly.} Thus
-%    \textsf{makeindex} or a similar program can be used to process
+%    \prg{makeindex} or a similar program can be used to process
 %    the output into a sorted ``glossary''.  The |\changes| command
 %    commences by taking the usual measures to hide its spacing, and
 %    then redefines |\protect| for use within the argument of the
@@ -3880,42 +4443,57 @@
    \catcode`\\\z@ \catcode`\ 10 \MakePercentIgnore
    \changes@}
 \def\changes@#1#2#3{%
-  \protected at edef\@tempa{\noexpand\glossary{#1\levelchar
+  \protected at edef\@tempa{\noexpand\glossary{#1%
 %    \end{macrocode}
+%    If asked for we also show the date of in the change log (after
+%    the version).
+% \changes{v3.0g}{2022/06/01}{Show change dates if asked for (gh/531)}
+%    \begin{macrocode}
+                   \ifdoc at reportchangedates
+                     \space -- #2\fi
+                   \levelchar
+%    \end{macrocode}
 % \changes{v1.9u}{1995/08/06}{Use value of \cs{saved at macroname} to
 %          find out about change entries at outer level}
-%    If the macro "\saved at macroname" doesn't contain any macro name
+%    If the macro |\saved at macroname| doesn't contain any macro name
 %    (ie is empty) the current changes entry was done at top-level.
-%    In this case we precede it by "\generalname".
+%    In this case we precede it by |\generalname|.
 %    \begin{macrocode}
-                                 \ifx\saved at macroname\@empty
-                                   \space
-                                   \actualchar
-                                   \generalname
-                                 \else
+                   \ifx\saved at macroname\@empty
 %    \end{macrocode}
+%    Putting a |!| at the beginning of the entry hopefully moves this
+%    entry to the very beginning during sorting.
+%    \begin{macrocode}
+                      \quotechar!%
+                      \actualchar
+                      \generalname
+                   \else
+%    \end{macrocode}
 % \changes{v2.1g}{2016/02/15}{Use \cs{saved at indexname}}
 %    \begin{macrocode}
-                                   \saved at indexname
-                                   \actualchar
-                                   \string\verb\quotechar*%
-                                   \verbatimchar\saved at macroname
-                                   \verbatimchar
-                                 \fi
-                                 :\levelchar #3}}%
+                      \saved at indexname
+                      \actualchar
+                      \string\verb% % to fool emacs highlighting
+                      \quotechar*%
+                      \verbatimchar\saved at macroname
+                      \verbatimchar
+                   \fi
+                   :\levelchar #3}}%
   \@tempa\endgroup\@esphack}
 %    \end{macrocode}
+% \end{imacro}
 %
+%
 % \begin{macro}{\saved at macroname}
-% \changes{BHK}{1989/04/26}{Provided for sorting outside \textsf{macro}
+% \changes{BHK}{1989/04/26}{Provided for sorting outside \env{macro}
 %    environment} The entries are sorted for convenience by the name
 %    of the most recently introduced macroname (i.e., that in the most
 %    recent |\begin{macro}| command).  We therefore provide
 %    |\saved at macroname| to record that argument, and provide a default
-%    definition in case |\changes| is used outside a \textsf{macro}
+%    definition in case |\changes| is used outside a \env{macro}
 %    environment.  (This is a {\em wicked\/} hack to get such entries
 %    at the beginning of the sorted list!  It works providing no macro
-%    names start with "!" or |"|.)  \changes{v1.7a}{1992/03/02}{Changed
+%    names start with |!| or |"|.)  \changes{v1.7a}{1992/03/02}{Changed
 %    string used for better sorting.}
 % \changes{v1.9u}{1995/08/06}{Now empty by default}
 %    \begin{macrocode}
@@ -3932,7 +4510,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\generalname}
+% \begin{imacro}{\generalname}
 % \changes{v1.9u}{1995/08/06}{Macro added}
 %    This macro holds the string placed before changes entries on
 %    top-level.
@@ -3939,10 +4517,10 @@
 %    \begin{macrocode}
 \def\generalname{General}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
 %
-% \begin{macro}{\RecordChanges}
+% \begin{imacro}{\RecordChanges}
 % \changes{BHK}{1989/04/26}{Renames former \texttt{\protect\bslash
 %                         PrintChanges} command.}
 %    To cause the changes to be written (to a \texttt{.glo}) file, we
@@ -3951,17 +4529,16 @@
 %    \begin{macrocode}
 \let\RecordChanges\makeglossary
 %    \end{macrocode}
-% \end{macro}
-% \end{macro}
+% \end{imacro}
 %
 %
-% \begin{macro}{\GlossaryMin}
+% \begin{ldimen}{\GlossaryMin}
 %    \changes{BHK}{1989/04/26}{Added to support
 %                            \texttt{\protect\bslash changes}.}
-% \begin{macro}{\c at GlossaryColumns}
+% \begin{lcounter}{GlossaryColumns}
 %    \changes{BHK}{1989/04/26}{Added to support \texttt{\protect\bslash
 %    changes}.} The remaining macros are all analogues of those used
-%    for the \textsf{theindex} environment.  When the glossary is
+%    for the \env{theindex} environment.  When the glossary is
 %    started we compute the space which remains at the bottom of the
 %    current page; if this is greater than |\GlossaryMin| then the
 %    first part of the glossary will be placed in the available space.
@@ -3972,8 +4549,8 @@
 \newdimen\GlossaryMin         \GlossaryMin       = 80pt
 \newcount\c at GlossaryColumns   \c at GlossaryColumns = 2
 %    \end{macrocode}
-% \end{macro}
-% \end{macro}
+% \end{lcounter}
+% \end{ldimen}
 %
 %
 % \begin{environment}{theglossary}
@@ -3983,13 +4560,12 @@
 %    \changes{v1.6e}{1991/04/03}{Turned into env definition.}
 %    \changes{v1.7a}{1992/03/10}{Changed to work without multicols if
 %                              necessary.}
-% \begin{macro}{\endglossary}
 %    \changes{BHK}{1989/04/26}{Added to support
 %                            \texttt{\protect\bslash changes}.}
-%    The environment \textsf{theglossary} is defined in the same manner
-%    as the \textsf{theindex} environment.
+%    The environment \env{theglossary} is defined in the same manner
+%    as the \env{theindex} environment.
 %    \begin{macrocode}
-\ifhave at multicol
+\ifdoc at multicol
   \newenvironment{theglossary}{%
     \begin{multicols}\c at GlossaryColumns
                      [\glossary at prologue][\GlossaryMin]%
@@ -4004,10 +4580,9 @@
     {\if at restonecol\onecolumn\else\clearpage\fi}
 \fi
 %    \end{macrocode}
-% \end{macro}
 % \end{environment}
 %
-% Here are the necessary \textsf{makeindex} declarations with scanning
+% Here are the necessary \prg{makeindex} declarations with scanning
 % disabled as for the index.
 %    \begin{macrocode}
 %</package>
@@ -4025,7 +4600,7 @@
 %    \end{macrocode}
 %
 %
-% \begin{macro}{\GlossaryPrologue}
+% \begin{imacro}{\GlossaryPrologue}
 %    \changes{BHK}{1989/04/26}{Added to support
 %                            \texttt{\protect\bslash changes}.}
 % \begin{macro}{\glossary at prologue}
@@ -4050,9 +4625,9 @@
                  }}{}
 %    \end{macrocode}
 % \end{macro}
-% \end{macro}
+% \end{imacro}
 %
-% \begin{macro}{\GlossaryParms}
+% \begin{imacro}{\GlossaryParms}
 %    \changes{BHK}{1989/04/26}{Added to support
 %                            \texttt{\protect\bslash changes}.}
 % Unless the user specifies otherwise, we set the change history
@@ -4067,8 +4642,9 @@
      \parfillskip -15pt plus -1fil\relax}
 }{}
 %    \end{macrocode}
-% \end{macro}
-% \begin{macro}{\PrintChanges}
+% \end{imacro}
+%
+% \begin{imacro}{\PrintChanges}
 %    \changes{BHK}{1989/04/26}{Added to support
 %                            \texttt{\protect\bslash changes}.}
 %    To read in and print the sorted change history, just put the
@@ -4075,11 +4651,11 @@
 %    |\PrintChanges| command as the last (commented-out, and thus
 %    executed during the documentation pass through the file) command
 %    in your package file.  Alternatively, this command may form one of
-%    the arguments of the |\StopEventually| command, although a
+%    the arguments of the |\MaybeStop| command, although a
 %    change history is probably {\em not\/} required if only the
 %    description is being printed.
 %
-%    The command assumes that \textsf{makeindex} or some other program
+%    The command assumes that \prg{makeindex} or some other program
 %    has processed the \texttt{.glo} file to generate a sorted
 %    \texttt{.gls} file.
 % \changes{v1.9h}{1994/02/10}{Use \cs{@input@} instead of \cs{@input}.}
@@ -4088,7 +4664,7 @@
 \def\PrintChanges{\@input@{\jobname.gls}%
                   \global\let\PrintChanges\@empty}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
 %
 %
@@ -4096,14 +4672,14 @@
 %
 % \subsection{Bells and whistles}
 %
-% \begin{macro}{\StopEventually}
+% \begin{imacro}{\MaybeStop}
 % \changes{v1.5k}{1989/09/04}{Support for checksum.}
-% \begin{macro}{\Finale}
+% \begin{imacro}{\Finale}
 % \changes{v1.5k}{1989/09/04}{Support for checksum.}
 % \changes{v1.5z}{1990/04/22}{Define \cs{Finale} globally.}
-% \begin{macro}{\AlsoImplementation}
+% \begin{imacro}{\AlsoImplementation}
 % \changes{v1.9w}{1995/12/27}{Macro added}
-% \begin{macro}{\OnlyDescription}
+% \begin{imacro}{\OnlyDescription}
 %    If |\AlsoImplementation| is in force the whole documentation
 %    including the code part will be typeset. This is the default.
 %    \begin{macrocode}
@@ -4110,11 +4686,11 @@
 \newcommand\AlsoImplementation{%
 %    \end{macrocode}
 %    To make this happen we have to define
-%    |\StopEventually| in a way that its argument is typeset at the
+%    |\MaybeStop| in a way that its argument is typeset at the
 %    very end or more exactly at |\Finale|. For this we
 %    save its argument in the macro |\Finale|.
 %    \begin{macrocode}
-   \long\def\StopEventually##1{\@bsphack\gdef\Finale{##1%
+   \long\def\MaybeStop##1{\@bsphack\gdef\Finale{##1%
 %    \end{macrocode}
 %    But |\Finale| will be called at the very end of a file. This
 %    is exactly the point were we want to know if the file is
@@ -4123,7 +4699,7 @@
 %    \begin{macrocode}
                   \check at checksum}%
 %    \end{macrocode}
-%    On the other hand: |\StopEventually| is more or less a
+%    On the other hand: |\MaybeStop| is more or less a
 %    dividing point between description and code. So we start to look
 %    for the check-sum of the documented file by calling
 %    |\init at checksum|.
@@ -4134,35 +4710,44 @@
 %    \end{macrocode}
 %
 %    Since |\AlsoImplementation| should be the default we execute it
-%    and thus |\StopEventually| gets the desired meaning.
+%    and thus |\MaybeStop| gets the desired meaning.
 %    \begin{macrocode}
 \AlsoImplementation
 %    \end{macrocode}
 %    When the user places an |\OnlyDescription| declaration in
 %    the driver file the document should only be typeset up to
-%    |\StopEventually|. We therefore have to redefine this macro.
+%    |\MaybeStop|. We therefore have to redefine this macro.
 %    \begin{macrocode}
-\def\OnlyDescription{\@bsphack\long\def\StopEventually##1{%
+\def\OnlyDescription{\@bsphack\long\def\MaybeStop##1{%
 %    \end{macrocode}
-%    In this case the argument of |\StopEventually| should be set
+%    In this case the argument of |\MaybeStop| should be set
 %    and afterwards \TeX{} should stop reading from this file.
 %    Therefore we finish this macro with
 %    \begin{macrocode}
            ##1\endinput}\@esphack}
 %    \end{macrocode}
-%    If no |\StopEventually| command is given we silently ignore a
+%    If no |\MaybeStop| command is given we silently ignore a
 %    |\Finale| issued.
 % \changes{v1.9n}{1994/04/28}{Ignore \cs{Finale} if no
-%                  \cs{StopEventually} is given}
+%                  \cs{MaybeStop} is given}
 %    \begin{macrocode}
 \let\Finale\relax
 %    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{imacro}
+% \end{imacro}
+% \end{imacro}
+% \end{imacro}
 %
-% \begin{macro}{\meta}
+%
+%  \begin{omacro}{\StopEventually}
+%    The old wrong name for |\MaybeStop|. We need to use |\def|
+%    (i.e., expansion) as |\MaybeStop| gets redefined once in a while.
+%    \begin{macrocode}
+\def\StopEventually{\MaybeStop}
+%    \end{macrocode}
+%  \end{omacro}
+%
+% \begin{imacro}{\meta}
 % \changes{v1.4t}{1989/04/24}{Macro added.}
 % \changes{v1.5w}{1990/02/03}{Breaks at space allowed.}
 % \changes{v1.6a}{1990/05/24}{Extra space bug corrected.}
@@ -4216,7 +4801,7 @@
      }\ensuremath\rangle
 }
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
 %
 % \begin{macro}{\meta at font@select}
@@ -4228,7 +4813,7 @@
 % \end{macro}
 %
 %
-% \begin{macro}{\IndexInput}
+% \begin{imacro}{\IndexInput}
 %    This next macro may be used to read in a separate file (possibly
 %    a package file that is {\em not\/} documented by this means) and
 %    set it verbatim, whilst scanning for macro names and indexing the
@@ -4243,7 +4828,7 @@
 %    \begin{macrocode}
      \begingroup \macro at code
 %    \end{macrocode}
-%    We also make spacing behave as in the \textsf{macrocode}
+%    We also make spacing behave as in the \env{macrocode}
 %    environment, because otherwise all the spaces will be shown
 %    explicitly.
 %    \begin{macrocode}
@@ -4260,10 +4845,10 @@
 %    \begin{macrocode}
      \endgroup}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
 %
-% \begin{macro}{\maketitle}
+% \begin{imacro}{\maketitle}
 %    The macro to generate titles is easily altered in order that it
 %    can be used more than once (an article with many titles).  In the
 %    original, diverse macros were concealed after use with
@@ -4299,15 +4884,15 @@
       \gdef\@date{\today}\gdef\@thanks{}%
       \gdef\@author{}\gdef\@title{}}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
 %
-% \begin{macro}{\ps at titlepage}
+% \begin{imacro}{\ps at titlepage}
 % \changes{v1.5k}{1989/09/04}{Added \texttt{\protect\bslash
 %    ps at titlepage}} When a number of articles are concatenated into a
 %    journal, for example, it is not usual for the title pages of such
 %    documents to be formatted differently.  Therefore, a class
-%    such as \textsf{ltugboat} can define this macro in advance.
+%    such as \cls{ltugboat} can define this macro in advance.
 %    However, if no such definition exists, we use pagestyle
 %    \texttt{plain} for title pages.
 %    \begin{macrocode}
@@ -4314,41 +4899,41 @@
 \@ifundefined{ps at titlepage}
     {\let\ps at titlepage=\ps at plain}{}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
-% \begin{macro}{\MakeShortVerb}
+% \begin{imacro}{\MakeShortVerb}
 % \changes{v1.7a}{1992/02/27}{Added (from newdoc but now alters
 %                           \cs{dospecials}, \cs{@sanitize}).}
-% This arranges an abbreviation for "\verb" such that if you say
-% "\MakeShortVerb{\"\meta{c}"}" subsequently using
+% This arranges an abbreviation for |\verb| such that if you say
+% |\MakeShortVerb{\|\meta{c}|}| subsequently using
 % \meta{c}\meta{text}\meta{c} is equivalent to
-% "\verb"\meta{c}\meta{text}\meta{c}.\footnote{Warning:
+% |\verb|\meta{c}\meta{text}\meta{c}.\footnote{Warning:
 % the commentary in the rest of this section was written by Dave
 % Love.}  In addition, the fact
 % that \meta{c} is made active is recorded for the benefit of the
-% \textsf{verbatim} and \textsf{macrocode} environments.
+% \env{verbatim} and \env{macrocode} environments.
 % Note particularly that the definitions below are global.
 % The first thing we do (it needn't be first) is to record
-% the---presumably new---special character in "\dospecials" and
-% "\@sanitize" using "\add at special".
+% the---presumably new---special character in |\dospecials| and
+% |\@sanitize| using |\add at special|.
 %
 % \changes{v1.9e.2}{1994/02/07}{-js: Check if \protect\meta{c} is
 %                              already an
 %                              abbreviation for \cs{verb}.}
-% Some unwary user might issue "\MakeShortVerb" for a second time, we
+% Some unwary user might issue |\MakeShortVerb| for a second time, we
 % better protect against this. We assume that this happened if a
-% control sequence "\cc\"\meta{c} is bound, the probability that this
+% control sequence |\cc\|\meta{c} is bound, the probability that this
 % name is used by another module is low. We will output a warning
 % below, so that a possible error might be noticed by the programmer
-% if he reads the "LOG" file. (Should have used module internal names,
+% if he reads the |LOG| file. (Should have used module internal names,
 % 'though.)
 %
-% \begin{macro}{\MakeShortVerb*}
+% \begin{imacro}{\MakeShortVerb*}
 % \changes{v2.1a}{2003/12/09}{(HjG) Added \texttt{*} form}
-% This arranges an abbreviation for "\verb*" such that if you say
-% "\MakeShortVerb*{\"\meta{c}"}" subsequently using
+% This arranges an abbreviation for |\verb*| such that if you say
+% |\MakeShortVerb*{\|\meta{c}|}| subsequently using
 % \meta{c}\meta{text}\meta{c} is equivalent to
-% "\verb*"\meta{c}\meta{text}\meta{c}.
+% |\verb*|\meta{c}\meta{text}\meta{c}.
 %    \begin{macrocode}
 %</package>
 %<*package|shortvrb>
@@ -4357,7 +4942,10 @@
     {\def\@shortvrbdef{\verb*}\@MakeShortVerb}%
     {\def\@shortvrbdef{\verb}\@MakeShortVerb}}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
+% \end{imacro}
+%
+% \begin{macro}{\@MakeShortVerb}
 %    \begin{macrocode}
 \def\@MakeShortVerb#1{%
   \expandafter\ifx\csname cc\string#1\endcsname\relax
@@ -4367,19 +4955,19 @@
     \@shortvrbinfo{Made }{#1}\@shortvrbdef
     \add at special{#1}%
 %    \end{macrocode}
-% Then the character's current catcode is stored in "\cc\"\meta{c}.
+% Then the character's current catcode is stored in |\cc\|\meta{c}.
 %    \begin{macrocode}
     \expandafter
     \xdef\csname cc\string#1\endcsname{\the\catcode`#1}%
 %    \end{macrocode}
 % The character is spliced into the definition using the same trick as
-% used in "\verb" (for instance), having activated "~" in a group.
+% used in |\verb| (for instance), having activated |~| in a group.
 %    \begin{macrocode}
     \begingroup
       \catcode`\~\active  \lccode`\~`#1%
       \lowercase{%
 %    \end{macrocode}
-% The character's old meaning is recorded in "\ac\"\meta{c} prior to
+% The character's old meaning is recorded in |\ac\|\meta{c} prior to
 % assigning it a new one.
 %    \begin{macrocode}
       \global\expandafter\let
@@ -4398,20 +4986,24 @@
 %    \end{macrocode}
 % \changes{v1.9v}{1995/11/03}{(DPC) Use \cs{@shortvrbinfo}}
 %    \begin{macrocode}
-    \@shortvrbinfo\@empty{#1 already}{\@empty\verb(*)}%
+    \@shortvrbinfo\@empty{#1 already}%
+                         {\@empty\verb% % to fool emacs highlighting
+                          (*)}%
   \fi}
 %    \end{macrocode}
 % \end{macro}
-% \begin{macro}{\DeleteShortVerb}
+%
+%
+% \begin{imacro}{\DeleteShortVerb}
 % \changes{v1.7a}{1992/02/27}{Added (from newdoc but now alters
 %                           \cs{dospecials}, \cs{@sanitize}).}
-% Here's the means of undoing a "\MakeShortVerb", for instance in a
+% Here's the means of undoing a |\MakeShortVerb|, for instance in a
 % region where you need to use the character outside a verbatim
-% environment.  It arranges for "\dospecials" and "\@sanitize" to be
+% environment.  It arranges for |\dospecials| and |\@sanitize| to be
 % altered appropriately, restores the saved catcode and, if necessary,
 % the character's meaning (as stored by
-% "\MakeShortVerb").  If the catcode wasn't stored in
-% "\cc\"\meta{c} (by "\MakeShortVerb") the command is silently
+% |\MakeShortVerb|).  If the catcode wasn't stored in
+% |\cc\|\meta{c} (by |\MakeShortVerb|) the command is silently
 % ignored.
 % \changes{v1.7a}{1992/02/28}{Check for previous matched
 %                           \cs{MakeShortVerb}
@@ -4423,19 +5015,24 @@
 % \changes{v2.1a}{2003/12/10}{(HjG) Notify user
 %             if it's not a short verb character}
 %    \begin{macrocode}
-    \@shortvrbinfo\@empty{#1 not}{\@empty\verb(*)}%
+    \@shortvrbinfo\@empty{#1 not}%
+                         {\@empty\verb% % to fool emacs highlighting
+                          (*)}%
   \else
 %    \end{macrocode}
 % \changes{v1.9v}{1995/11/03}{(DPC) Use \cs{@shortvrbinfo}}
 %    \begin{macrocode}
-    \@shortvrbinfo{Deleted }{#1 as}{\@empty\verb(*)}%
+    \@shortvrbinfo{Deleted }{#1 as}%
+                            {\@empty\verb% % to fool emacs
+                                           % highlighting
+                            (*)}%
     \rem at special{#1}%
     \global\catcode`#1\csname cc\string#1\endcsname
 %    \end{macrocode}
 % \changes{v1.9e.2}{1994/02/07}{-js: Reset `cc`\protect\meta{c} in
-%                       \cs{DeleteShortVerb}}
-% We must not forget to reset "\cc\"\meta{c}, otherwise the check in
-% "\MakeShortVerb" for a repeated definition will not work.
+%                       in \cs{DeleteShortVerb}}
+% We must not forget to reset |\cc\|\meta{c}, otherwise the check in
+% |\MakeShortVerb| for a repeated definition will not work.
 %    \begin{macrocode}
     \global \expandafter\let \csname cc\string#1\endcsname \relax
     \ifnum\catcode`#1=\active
@@ -4446,7 +5043,7 @@
           \csname ac\string#1\endcsname}%
       \endgroup \fi \fi}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
 %  \begin{macro}{\@shortvrbinfo}
 % \changes{v1.9v}{1995/11/03}{(DPC) Macro added}
@@ -4465,12 +5062,12 @@
 % \begin{macro}{\add at special}
 % \changes{v1.7a}{1992/02/27}{Added for short verb facility.}
 % This helper macro adds its argument to the
-% "\dospecials" macro which is conventionally used by verbatim macros
+% |\dospecials| macro which is conventionally used by verbatim macros
 % to alter the catcodes of the currently active characters.  We need
-% to add "\do\"\meta{c} to the expansion of "\dospecials" after
+% to add |\do\|\meta{c} to the expansion of |\dospecials| after
 % removing the character if it was already there to avoid multiple
-% copies building up should "\MakeShortVerb" not be balanced by
-% "\DeleteShortVerb" (in case anything that uses "\dospecials" cares
+% copies building up should |\MakeShortVerb| not be balanced by
+% |\DeleteShortVerb| (in case anything that uses |\dospecials| cares
 % about repetitions).
 %    \begin{macrocode}
 \def\add at special#1{%
@@ -4478,8 +5075,8 @@
   \expandafter\gdef\expandafter\dospecials\expandafter
     {\dospecials \do #1}%
 %    \end{macrocode}
-% Similarly we have to add "\@makeother\"\meta{c} to "\@sanitize"
-% (which is used in things like "\index" to re-catcode all special
+% Similarly we have to add |\@makeother\|\meta{c} to |\@sanitize|
+% (which is used in things like |\index| to re-catcode all special
 % characters except braces).
 %    \begin{macrocode}
   \expandafter\gdef\expandafter\@sanitize\expandafter
@@ -4486,13 +5083,15 @@
     {\@sanitize \@makeother #1}}
 %    \end{macrocode}
 % \end{macro}
+%
+%
 % \begin{macro}{\rem at special}
 % \changes{v1.7a}{1992/02/27}{Added for short verb facility.}
-% The inverse of "\add at special" is slightly trickier.  "\do" is
+% The inverse of |\add at special| is slightly trickier.  |\do| is
 % re-defined to expand to nothing if its argument is the character of
 % interest, otherwise to expand simply to the argument.  We can then
-% re-define "\dospecials" to be the expansion of itself.  The space
-% after "=`##1" prevents an expansion to "\relax"!
+% re-define |\dospecials| to be the expansion of itself.  The space
+% after |=`##1| prevents an expansion to |\relax|!
 %    \begin{macrocode}
 \def\rem at special#1{%
   \def\do##1{%
@@ -4499,8 +5098,8 @@
     \ifnum`#1=`##1 \else \noexpand\do\noexpand##1\fi}%
   \xdef\dospecials{\dospecials}%
 %    \end{macrocode}
-% Fixing "\@sanitize" is the same except that we need to re-define
-% "\@makeother" which obviously needs to be done in a group.
+% Fixing |\@sanitize| is the same except that we need to re-define
+% |\@makeother| which obviously needs to be done in a group.
 %    \begin{macrocode}
   \begingroup
     \def\@makeother##1{%
@@ -4511,21 +5110,8 @@
 %<*package>
 %    \end{macrocode}
 % \end{macro}
-% \begin{macro}{\MakeShortverb}
-% \begin{macro}{\DeleteShortverb}
-% \changes{v1.7a}{1992/02/27}{Added (from newdoc).}
-% These commands from \textsf{newdoc} are now obsolete.
-%    \begin{macrocode}
-\def\MakeShortverb{\typeout{*** Switch to \noexpand\MakeShortVerb
-                         syntax, this is obsolete ***}\MakeShortVerb}
-\def\DeleteShortverb{\typeout{*** Switch to \noexpand\DeleteShortVerb
-                         syntax, this is obsolete ***}\DeleteShortVerb}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
 %
 %
-%
 % \subsection[Providing a checksum and character table]
 %        {Providing a checksum and character table\footnotemark}
 %        \footnotetext{Warning: the commentary in this section was
@@ -4535,7 +5121,7 @@
 % \begin{macro}{\init at checksum}
 % The checksum mechanism works by counting backslashes in the
 % macrocode.  This initializes the count (when called from
-% "\StopEventually").
+% |\MaybeStop|).
 % \changes{v1.5k}{1989/09/04}{Macro added to support checksum.}
 %    \begin{macrocode}
 \def\init at checksum{\relax
@@ -4546,8 +5132,8 @@
 %
 % \begin{macro}{\check at checksum}
 % \changes{v1.5k}{1989/09/04}{Macro added to support checksum.}
-% This reports the sum compared with the value ("\bslash at cnt") the
-% file advertises.  It's called from "\Finale" (if that hasn't been
+% This reports the sum compared with the value (|\bslash at cnt|) the
+% file advertises.  It's called from |\Finale| (if that hasn't been
 % re-defined).
 % \changes{v2.1f}{2016/02/12}{Suppress \cs{CheckSum} check if no checksum
 %    is specified in the file}
@@ -4581,12 +5167,12 @@
 % \end{macro}
 %
 %
-% \begin{macro}{\check at sum}
+% \begin{tcounter}{\check at sum}
 % \changes{v1.5k}{1989/09/04}{Macro added to support checksum.}
-% \begin{macro}{\bslash at cnt}
+% \begin{tcounter}{\bslash at cnt}
 % \changes{v1.5k}{1989/09/04}{Macro added to support checksum.}
-% We need to define counters, "\bslash at cnt" for the number of
-% backslashes counted and "\check at sum" for the value advertised by the
+% We need to define counters, |\bslash at cnt| for the number of
+% backslashes counted and |\check at sum| for the value advertised by the
 % file if any. A negative value means there is no checksum checking which is the default.
 % \changes{v2.1f}{2016/02/12}{Suppress \cs{CheckSum} check if no checksum
 %    is specified in the file}
@@ -4594,17 +5180,17 @@
 \newcount\check at sum           \check at sum  = \m at ne
 \newcount\bslash at cnt          \bslash at cnt = \z@
 %    \end{macrocode}
-% \end{macro}
-% \end{macro}
+% \end{tcounter}
+% \end{tcounter}
 %
 %
-% \begin{macro}{\CheckSum}
+% \begin{omacro}{\CheckSum}
 % \changes{v1.5k}{1989/09/04}{Macro added to support checksum.}
-% This is the interface to setting "\check at sum".
+% This is the interface to setting |\check at sum|.
 %    \begin{macrocode}
 \def\CheckSum#1{\@bsphack\global\check at sum#1\relax\@esphack}
 %    \end{macrocode}
-% \end{macro}
+% \end{omacro}
 %
 %
 %
@@ -4617,13 +5203,13 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\CharacterTable}
+% \begin{omacro}{\CharacterTable}
 %    The user interface to the character table-checking does some
-%    "\catcode"ing and then compares the following table with the
-%    stored version. We need to have "@" of type ``other'' within the
+%    |\catcode|ing and then compares the following table with the
+%    stored version. We need to have |@| of type ``other'' within the
 %    table since this is the way it is usually returned when reading
 %    in a normal document. To nevertheless have a private letter we
-%    use "~" for this purpose. "~" does no harm as a ``letter'' as it
+%    use |~| for this purpose. |~| does no harm as a ``letter'' as it
 %    comes last in the table and therefore will not gobble following
 %    space.
 % \changes{v1.5m}{1989/09/20}{Macro added to check character translation
@@ -4635,12 +5221,14 @@
 %    \begin{macrocode}
 \def\CharacterTable{\begingroup \CharTableChanges \character at table}
 %    \end{macrocode}
-% \end{macro}
+% \end{omacro}
+%
 % \def\MakePrivateLetters{\catcode`\~=11\makeatletter}
+%
 % \begin{macro}{\character at table}
 % This does the work of comparing the tables and reporting the result.
 % Note that the following code is enclosed in a group
-% with "~" catcoded to letter.
+% with |~| catcoded to letter.
 %    \begin{macrocode}
 \begingroup
   \catcode`\~=11
@@ -4659,22 +5247,22 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\CharTableChanges}
+% \begin{omacro}{\CharTableChanges}
 %    When the character table is read in we need to scan it with a
-%    fixed set of "\catcode"s. The reference table below  was defined by
-%    assuming the normal "\catcode"s of \TeX{}, i.e.\ "@" is of type
+%    fixed set of |\catcode|s. The reference table below  was defined by
+%    assuming the normal |\catcode|s of \TeX{}, i.e.\ |@| is of type
 %    other and the only token of type ``letter'' are the usual letters
 %    of the alphabet. If, for some reason, other characters are made
-%    ``letters'' then their "\catcode"s need to be restored before
+%    ``letters'' then their |\catcode|s need to be restored before
 %    checking the table. Otherwise spaces in the table are gobbled and
 %    we get the information that the tables are different, even if
-%    they are actually equal. For this reason "\CharTableChanges" can
-%    be set up to locally restore the "\catcode"s of such ``letters''
+%    they are actually equal. For this reason |\CharTableChanges| can
+%    be set up to locally restore the |\catcode|s of such ``letters''
 %    to ``other''.
 %    \begin{macrocode}
   \global\let\CharTableChanges\@empty
 %    \end{macrocode}
-% \end{macro}
+% \end{omacro}
 %
 % \begin{macro}{\default~table}
 % Here's what the table {\em should\/} look like (modulo spaces).
@@ -4719,34 +5307,40 @@
 %
 % The code in this section allows index entries to refer to code line
 % numbers---the number of the first line of macrocode in the
-% \textsf{macro} environment.
+% \env{macro} environment.
 %
 %
 % \begin{macro}{\codeline at index}
-% Indexing by code line is controlled by the "codeline at index" switch.
+% Indexing by code line is controlled by the |codeline at index| switch.
 % \changes{v1.5s}{1989/11/05}{Support for code line no. (Undoc)}
 % \changes{v1.7a}{1992/02/24}{Documented code line no. support.}
-% \begin{macro}{\CodelineNumbered}
+% \begin{imacro}{\CodelineNumbered}
 % \changes{v1.8a}{1993/05/19}{Macro added}
 %    \begin{macrocode}
 \newif\ifcodeline at index \codeline at indexfalse
 \let\CodelineNumbered\codeline at indextrue
 %    \end{macrocode}
+% \end{imacro}
 % \end{macro}
-% \end{macro}
+%
 % \begin{macro}{\codeline at wrindex}
-%    The code index entries are written out by "\special at index".  If
-%    indexing is by code line this is "\let" to "\codeline at wrindex";
-%    if indexing is by page it is just "\index".  However, if
-%    "\nofiles" is given, we omit writing such an index entry at all.
+%    The code index entries are written out by |\special at index|.  If
+%    indexing is by code line this is |\let| to |\codeline at wrindex|;
+%    if indexing is by page it is just |\index|.  However, if
+%    |\nofiles| is given, we omit writing such an index entry at all.
 % \changes{v1.7j}{1992/08/14}{Added \cs{if at filesw}.}
 %    \begin{macrocode}
 \def\codeline at wrindex#1{\if at filesw
+     \begingroup
+        \set at display@protect
         \immediate\write\@indexfile
             {\string\indexentry{#1}%
-            {\number\c at CodelineNo}}\fi}
+             {\number\c at CodelineNo}}%
+      \endgroup
+    \fi}
 %    \end{macrocode}
 % \end{macro}
+%
 % \begin{macro}{\special at index}
 % By default no index entries are written out.
 %    \begin{macrocode}
@@ -4756,8 +5350,8 @@
 % \begin{macro}{\CodelineIndex}
 % \changes{v1.5u}{1989/11/14}{Added \cs{PageIndex} and
 %                  \cs{CodelineIndex} (Undoc)}
-% This switches on use of the index file with "\makeindex", sets the
-% switch to indicate code line numbering and defines "\special at index"
+% This switches on use of the index file with |\makeindex|, sets the
+% switch to indicate code line numbering and defines |\special at index|
 % appropriately.
 %    \begin{macrocode}
 \def\CodelineIndex{\makeindex
@@ -4765,17 +5359,17 @@
                    \let\special at index\codeline at wrindex}
 %    \end{macrocode}
 % \end{macro}
-% \begin{macro}{\PageIndex}
-% "\PageIndex" is similar.
+% \begin{imacro}{\PageIndex}
+% |\PageIndex| is similar.
 %    \begin{macrocode}
 \def\PageIndex{\makeindex
                \codeline at indexfalse
                \let\special at index\index}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
 %
-% \begin{macro}{\c at CodelineNo}
+% \begin{lcounter}{CodelineNo}
 % \changes{v1.5l}{1989/09/10}{Counter added to support code line
 %                             numbers}
 % \changes{v1.5y}{1990/02/24}{Default changed.}
@@ -4785,7 +5379,8 @@
 %    \begin{macrocode}
 \newcount\c at CodelineNo  \c at CodelineNo\z@
 %    \end{macrocode}
-% \end{macro}
+% \end{lcounter}
+%
 % \begin{macro}{\theCodelineNo}
 % \changes{v1.7a}{1992/02/25}{Existing definition not overwritten.}
 % \changes{v1.7a}{1992/03/12}{Use \cs{reset at font} for NFSS.}
@@ -4817,7 +5412,6 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \DeleteShortVerb{\"}
 %
 % The following |\mathcode| definitions allow the characters
 % `|\|'
@@ -4835,9 +5429,9 @@
 %                \texttt{\bslash mathcode}$\,$s
 %                to work with any family assignments. For an example
 %                see the article about the new font selection scheme.}
-% particularly for something like $|\@abc|=1$.
+% particularly for something like |\@abc=1|.
 %
-% If an {\em old\/} version of the \textsf{german} package is in
+% If an {\em old\/} version of the \pkg{german} package is in
 % force, then the `|"|' character is active and would upset the
 % definition of the \meta{16-bit number} quantities below, therefore
 % we change the |\catcode| of |"| inside a group, and use
@@ -4907,8 +5501,8 @@
 %
 % \subsection{Changing the \texttt{\protect\bslash catcode} of \%}
 %
-% \begin{macro}{\MakePercentIgnore}
-% \begin{macro}{\MakePercentComment}
+% \begin{imacro}{\MakePercentIgnore}
+% \begin{imacro}{\MakePercentComment}
 %    And finally the most important bit: we change the |\catcode|
 %    of `|%|' so that it is ignored (which is how we are able to
 %    produce this document!). We provide two commands to do the actual
@@ -4919,10 +5513,10 @@
 \def\MakePercentIgnore{\catcode`\%9\relax}
 \def\MakePercentComment{\catcode`\%14\relax}
 %    \end{macrocode}
-% \end{macro}
-% \end{macro}
+% \end{imacro}
+% \end{imacro}
 %
-% \begin{macro}{\DocInput}
+% \begin{imacro}{\DocInput}
 %    The two macros above are now used to define the |\DocInput| macro
 %    which was introduced in version v1.5l (or so) of the \DOC{}
 %    package. In older versions |\MakePercentIgnore| was placed
@@ -4930,7 +5524,7 @@
 %    \begin{macrocode}
 \def\DocInput#1{\MakePercentIgnore\input{#1}\MakePercentComment}
 %    \end{macrocode}
-% \end{macro}
+% \end{imacro}
 %
 % \subsection{GetFileInfo}
 %
@@ -4951,6 +5545,779 @@
 %    \end{macrocode}
 % \end{macro}
 %
+
+
+
+
+% \section{Integrating hypdoc}
+%
+%    If the option \texttt{hyperref} is selected (which is the
+%    default), then we load the \pkg{hypdoc} package. We do that as
+%    late as possible so that we don't generate option clashes if it
+%    is also loaded in the preamble. That package currently changes
+%    more commands than it should (not knowing about their new
+%    definitions defined below) so we have to save and restore a few.
+%
+%    Midterm all this code in \pkg{hypdoc} should be directly included
+%    in \DOC. For now, while they are separate we have to do this
+%    juggling.
+%    \begin{macrocode}
+\AddToHook{begindocument/before}[doc/hyperref]{%
+ \ifdoc at hyperref
+%    \end{macrocode}
+%    Annoying to code around issue \#22
+%    \begin{macrocode}
+  \expandafter\let\expandafter\doc at eoph@@k\csname doc.sty-h@@k\endcsname
+%    \end{macrocode}
+%    We require the package without any option so if it was already
+%    loaded there is no option clash.
+%    \begin{macrocode}
+  \RequirePackage{hypdoc}
+  \expandafter\let\csname doc.sty-h@@k\endcsname\doc at eoph@@k
+%    \end{macrocode}
+%    After \pkg{hypdoc} got loaded we need to undefine those macros
+%    again so that later on \texttt{Macro} and \texttt{Env} \DOC items
+%    appear to be undefined.
+%    \begin{macrocode}
+  \let\PrintDescribeMacro \@@PrintDescribeMacro
+  \let\PrintDescribeEnv \@@PrintDescribeEnv
+  \let\PrintMacroName \@@PrintMacroName
+  \let\PrintEnvName \@@PrintEnvName
+  \let\SpecialUsageIndex \@@SpecialUsageIndex
+  \let\SpecialEnvIndex \@@SpecialEnvIndex
+  \let\SortIndex \@@SortIndex
+  \let\DescribeMacro \@@DescribeMacro
+  \let\DescribeEnv \@@DescribeEnv
+%    \end{macrocode}
+%    The package adds new definitions for \cs{special at index} into
+%    \cs{CodelineIndex} and \cs{PageIndex} but since we are loading it
+%    very late we are already past them (in the preamble). So we test
+%    the final state and do it here, if necessary.
+%    \begin{macrocode}
+  \ifx\special at index\@gobble  % do we write index entries at all?
+  \else
+    \ifcodeline at index
+      \let\special at index\HD at codeline@wrindex
+    \else
+      \let\special at index\HD at page@wrindex
+    \fi
+  \fi
+%    \end{macrocode}
+%    The \pkg{amsmath} documentation uses \cs{env} in headings and
+%    with \pkg{hyperref} enabled this causes trouble in bookmarks.
+% \fmi{fix elsewhere eventually}
+%    \begin{macrocode}
+  \AddToHook{class/amsdtx/after}{%
+     \pdfstringdefDisableCommands{\let\env\@empty }}%
+%    \end{macrocode}
+%    That package also adds extra code into |\index| entries but it doesn't
+%    know about all the stuff that \DOC does (now). So we need to provide
+%    us with two helpers that handle the |\encapchar| case in some entries.
+%    \begin{macrocode}
+  \def\doc at providetarget{\HD at target}%
+  \def\doc at handleencap#1{\encapchar hdclindex{\the\c at HD@hypercount}{#1}}%
+%    \end{macrocode}
+%    If that package is not loaded these helpers do little to nothing.
+%    \begin{macrocode}
+ \else
+  \let\doc at providetarget\@empty
+  \def\doc at handleencap#1{\encapchar #1}%
+%    \end{macrocode}
+%    We define the next commands just in case the user changed the option
+%    \texttt{hyperref} from \texttt{true} to \texttt{false} without
+%    removing the auxiliary files.
+%    \begin{macrocode}
+  \def\hdclindex#1#2{\ifx\@nil#2\@nil\else\csname #2\expandafter\endcsname\fi}%
+  \def\hdpindex   #1{\ifx\@nil#1\@nil\else\csname #1\expandafter\endcsname\fi}%
+\fi
+}  
+%    \end{macrocode}
+%
+%
+%
+%
+%
+% \section{Integrating the \DOX package code}
+%
+% The code in this section is largely taken over from the \DOX package
+% by Didier with only minor modifications (so far). This means it is a
+% bit back and forth and both the code and the documentation need
+% further updates.
+%
+% \subsection{\DOX environments}
+
+% \begin{macro}{\@doc at env,\@doc at env@}
+% \fmi{original doc -- fix}
+%   \marg{are-we-macrolike}\marg{item}\marg{indextype}\marg{name}\\
+%   In \texttt{doc.sty}, the \texttt{macro} and \texttt{environment}
+%   environments go through the \cs{m at cro@} macro which implements specific
+%   parts by testing a boolean condition as its first argument. This mechanism
+%   is not extensible, so I have to hack away a more generic version that
+%   would work for any new \texttt{dox} item, only which looks pretty much
+%   like the original one (with the addition of options management).
+%
+%    First step is to see if we have a comma-separated list of names
+%    in |#3| and if so we call the macro doing the work individually
+%    for each
+%    \begin{macrocode}
+\ExplSyntaxOn
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\long\def\@doc at env#1#2#3{
+%    \end{macrocode}
+%    The |\endgroup| here closes the scanning of names (using special catcodes.
+%    \begin{macrocode}
+  \endgroup
+  \clist_map_inline:nn {#3} { \@doc at env@{#1}{#2}{##1} }
+}
+
+\ExplSyntaxOff
+%    \end{macrocode}
+%
+%    And here is the payload for each name from the given list:
+%    \begin{macrocode}
+\long\def\@doc at env@#1#2#3{%
+  \topsep\MacroTopsep
+  \trivlist
+    \edef\saved at macroname{\string#3}%
+%    \end{macrocode}
+% Since version 2.1g, \texttt{doc} creates a \cs{saved at indexname} command
+% which in used by \cs{changes}. We now support that as well. The expansion of
+% this command depends on whether the documented item is macrolike or not,
+% which we don't know here (it's only know by \cs{NewDocElement}). That's why we
+% need one specific command generating \cs{saved at indexname} the right way for
+% every single item. These commands are
+%    named\cs{@Save\meta{item}IndexName};
+% they are technically part of the generated API, only not meant for public
+% use.
+%
+% \fmi{above docu is no longer right (but code needs further changes
+% anyway}
+%
+%    |#1| is either \texttt{TT} (for true = macrolike) or \texttt{TF}.
+%    If true then we drop the first char from |\saved at macroname| and
+%    store the result in |\saved at indexname| and use the latter for
+%    sorting in the index.
+%    \begin{macrocode}
+    \if #1%
+      \edef\saved at indexname{\expandafter\@gobble\saved at macroname}%
+%
+%    \end{macrocode}
+%    If the \DOC element described is macrolike but not a normal
+%    ``macro'' then its type should be recorded and this is the places
+%    where this happens. For macros (which should make up the bulk of
+%    these items we don't do this and for anything else that looks
+%    from an indexing perspective like a macro we don't do that either
+%    to keep the list of exceptions small. That would be the case if
+%    the indexing command |\Code|\meta{doc-element}|Index| is
+%    equivalent to \cs{CodeMacroIndex}.
+%    \begin{macrocode}
+      \expandafter\ifx
+                  \csname Code#2Index\endcsname
+                  \CodeMacroIndex
+      \else
+        \record at index@type at save
+          {\saved at indexname}{#2}%
+      \fi
+    \else
+      \let\saved at indexname\saved at macroname
+    \fi
+%
+    \def\makelabel##1{\llap{##1}}%
+    \if at inlabel
+      \let\@tempa\@empty
+      \count@\macro at cnt
+      \loop\ifnum\count@>\z@
+        \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m at ne
+      \repeat
+      \edef\makelabel##1{\llap{\vtop to\baselineskip{\@tempa\hbox{##1}\vss}}}%
+      \advance\macro at cnt\@ne
+    \else
+      \macro at cnt\@ne
+    \fi
+    \ifdoc at noprint
+      \item
+    \else
+      \edef\@tempa{%
+        \noexpand\item[%
+%    \end{macrocode}
+% The second notable modification to the original macro involves dynamically
+% constructing the name of the print macro:
+%    \begin{macrocode}
+        \noexpand\doc at providetarget
+        \noexpand\strut
+        \noexpand\@nameuse{Print#2Name}{\saved at macroname}]}%
+      \@tempa
+    \fi
+    \ifdoc at noindex\else
+      \global\advance\c at CodelineNo\@ne
+%    \end{macrocode}
+% and the third one involves dynamically constructing the name of the index
+% macro:
+%    \begin{macrocode}
+      \csname SpecialMain#2Index\expandafter\endcsname
+        \expandafter{\saved at macroname}\nobreak
+      \global\advance\c at CodelineNo\m at ne
+    \fi
+%    \end{macrocode}
+%    Suppress further |\index| entries when we are within a
+%    \texttt{macrolike} environment. (There is no point doing that for
+%    non-\texttt{macrolike} environments are index entries are only
+%    generated for items starting with a backslash anyway.
+% \fmi{fix}
+%    \begin{macrocode}
+    \if#1\expandafter\DoNotIndex \expandafter {\saved at macroname}\fi
+    \ignorespaces}
+%    \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%
+%
+% \begin{macro}{\doc at env}
+%   \marg{true-value}\marg{item}\oarg{options}\\
+%   Handle optional arguments and call \cs{@doc at env}. Because environments can
+%   be nested, we can't rely on grouping for getting options default values.
+%   Hence, we need to reset the options at every call.
+% \fmi{Use 2e interface for \cs{keys\_set:nn} when available}
+%    \begin{macrocode}
+\def\doc at env#1#2[#3]{%
+  \@nameuse{doc at noprint\doc at noprintdefault}%
+  \@nameuse{doc at noindex\doc at noindexdefault}%
+  \csname keys_set:nn\endcsname{doc}{#3}%
+  \begingroup
+    \ifdoc at outer
+      \catcode`\\12
+    \fi
+    \MakePrivateLetters
+    \@doc at env{#1}{#2}%
+}
+%    \end{macrocode}
+% \end{macro}
+
+
+
+% \subsection{\DOC descriptions}
+%
+% \begin{macro}{\@doc at describe}
+%   \marg{item}\marg{name}\\
+%    \begin{macrocode}
+\def\@doc at describe#1#2{%
+    \ifdoc at noprint\else
+      \marginpar{\raggedleft
+%    \end{macrocode}
+%    The hyperref target has to be in horizontal mode (which is the
+% case if it is after the \cs{strut}).
+%    \begin{macrocode}
+                 \strut
+                 \doc at providetarget
+                 \@nameuse{PrintDescribe#1}{#2}}%
+    \fi
+    \ifdoc at noindex\else
+      \@nameuse{Special#1Index}{#2}%
+    \fi
+  \@esphack
+  \endgroup
+  \ignorespaces}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\doc at describe}
+%   \marg{item}\oarg{options}\\
+%   Handle optional arguments and call \cs{@doc at describe}.
+% \fmi{Use 2e interface for \cs{keys\_set:nn} when available}
+%    \begin{macrocode}
+\def\doc at describe#1[#2]{%
+  \leavevmode\@bsphack
+  \csname keys_set:nn\endcsname{doc}{#2}%
+  \@doc at describe{#1}}
+%    \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \subsection{API construction}
+%
+%
+%  \begin{macro}{\@temptokenb}
+%    A scratch register (which may have been defined elsewhere)
+%    \begin{macrocode}
+\@ifundefined{temptokenb}{\newtoks\@temptokenb}{}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+% \begin{macro}{\doc at createspecialmainindex}
+%   \marg{item}\marg{idxtype}\marg{idxcat}
+% \begin{macro}{\doc at createspecialmainmacrolikeindex}
+%   \marg{item}\marg{idxtype}\marg{idxcat}\\
+% \fmi{original doc -- fix}
+%   The ``macrolike'' version does something similar to |doc|'s
+%   \cs{SpecialIndex@} macro, but simplified. Let's just hope nobody will ever
+%   define \verb*|\ | or nonletter macros as macrolike \DOC elements\ldots
+%    \begin{macrocode}
+\def\doc at createspecialindexes#1#2#3{%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \@temptokena{\space (#2)}%
+  \@temptokenb{#3:}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \@nameedef{SpecialMain#1Index}##1{%
+    \noexpand\@bsphack
+  \ifdoc at toplevel
+    \noexpand\special at index{##1\noexpand\actualchar
+    {\string\ttfamily\space##1}%
+    \ifx\@nil#2\@nil\else \the\@temptokena \fi
+    \noexpand\encapchar main}%
+  \fi
+  \ifx\@nil#3\@nil\else
+    \noexpand\special at index{\the\@temptokenb\noexpand\levelchar
+      ##1\noexpand\actualchar{\string\ttfamily\space##1}%
+      \noexpand\encapchar main}%
+  \fi
+    \noexpand\@esphack}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \@nameedef{Special#1Index}##1{%
+    \noexpand\@bsphack
+  \ifdoc at toplevel
+    \noexpand\doc at providetarget
+    \noexpand\index{##1\noexpand\actualchar{\string\ttfamily\space##1}%
+    \ifx\@nil#2\@nil\else \the\@temptokena \fi
+           \noexpand\doc at handleencap{usage}}%
+  \fi
+  \ifx\@nil#3\@nil\else
+    \noexpand\index{\the\@temptokenb\noexpand\levelchar
+       ##1\noexpand\actualchar{\string\ttfamily\space##1}%
+           \noexpand\doc at handleencap{usage}}%
+  \fi
+    \noexpand\@esphack}}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\def\doc at createspecialmacrolikeindexes#1#2#3{%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \@temptokena{\space (#2)}%
+  \@temptokenb{#3:}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \@nameedef{Code#1Index}##1##2{%
+    \noexpand\@SpecialIndexHelper@##2\noexpand\@nil
+    \noexpand\@bsphack
+  \noexpand\ifdoc at noindex\noexpand\else
+    \ifdoc at toplevel
+      \noexpand\special at index{\noexpand\@gtempa\noexpand\actualchar
+	\string\verb% % to fool emacs highlighting
+	\noexpand\quotechar*\noexpand\verbatimchar
+	\noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar
+	\ifx\@nil#2\@nil\else \the\@temptokena \fi
+	\noexpand\encapchar ##1}%
+    \fi
+    \ifx\@nil#3\@nil\else
+      \noexpand\special at index{\the\@temptokenb\noexpand\levelchar
+	\noexpand\@gtempa\noexpand\actualchar
+	\string\verb% % to fool emacs highlighting
+	\noexpand\quotechar*\noexpand\verbatimchar
+	\noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar
+	\noexpand\encapchar ##1}%
+    \fi
+  \noexpand\fi
+    \noexpand\@esphack}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \@nameedef{SpecialMain#1Index}##1{%
+    \expandafter\noexpand\csname Code#1Index\endcsname
+        {main}{##1}}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \@nameedef{Special#1Index}##1{%
+    \noexpand\@SpecialIndexHelper@##1\noexpand\@nil
+    \noexpand\@bsphack
+  \noexpand\ifdoc at noindex\noexpand\else
+    \ifdoc at toplevel
+      \noexpand\doc at providetarget
+      \noexpand\index{\noexpand\@gtempa\noexpand\actualchar
+	\string\verb% % to fool emacs highlighting
+	\noexpand\quotechar*\noexpand\verbatimchar
+	\noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar
+	\ifx\@nil#2\@nil\else \the\@temptokena \fi
+	\noexpand\doc at handleencap{usage}}%
+    \fi
+    \ifx\@nil#3\@nil\else
+      \noexpand\index{\the\@temptokenb\noexpand\levelchar
+	\noexpand\@gtempa\noexpand\actualchar
+	\string\verb% % to fool emacs highlighting
+	\noexpand\quotechar*\noexpand\verbatimchar
+	\noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar
+	\noexpand\doc at handleencap{usage}}%
+    \fi
+  \noexpand\fi
+    \noexpand\@esphack}}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+
+
+
+% \begin{macro}{\doc at createdescribe}
+%   \marg{item}
+%    \begin{macrocode}
+\def\doc at createdescribe#1{%
+  \@namedef{Describe#1}{%
+%    \end{macrocode}
+%    Because of the optional argument we have to set
+%    |\MakePrivateLetters| already before parsing that (fingers
+%    crossed). Otherwise incorrect but quite common usage, such as
+%    |\DescribeMacro\foo at bar| will break because the scan for the
+%    optional argument will tokenize the following input (i.e., |\foo|
+%    in that case) before the |@| sign becomes a letter. As a result
+%    |DescribeMacro| would receive only |\foo| as its argument.
+%    \begin{macrocode}
+    \begingroup
+      \MakePrivateLetters
+      \@ifnextchar[%]
+      {\doc at describe{#1}}{\doc at describe{#1}[]}}}
+%    \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\doc at createenv}
+%   \marg{item}\marg{envname}
+%    \begin{macrocode}
+\def\doc at createenv#1#2#3{%
+  \@namedef{#3}{%
+    \@ifnextchar[%]
+    {\doc at env{#1}{#2}}{\doc at env{#1}{#2}[]}}%
+%    \end{macrocode}
+%    Instead of |\let|ting the end of the environment to
+%    |\endtrivlist| we use one level of expansion. This way any
+%    possible change in that environment (if that ever happens) is
+%    properly reflected.
+%    \begin{macrocode}
+  \@namedef{end#3}{\endtrivlist}%
+%  \expandafter\let\csname end#3\endcsname\endtrivlist
+}
+%    \end{macrocode}
+% \end{macro}
+
+
+%
+%  \begin{macro}{\@nameedef}
+%
+%    \begin{macrocode}
+\def\@nameedef#1{\expandafter\edef\csname #1\endcsname}
+%    \end{macrocode}
+%  \end{macro}
+
+%
+% \subsection{API creation}
+%
+% The whole user interface is created in one macro call.
+%
+%\begin{verbatim}
+% defaults:
+%
+%  idxtype   = #3
+%  idxgroup  = #3s
+%  printtype =
+%\end{verbatim}
+
+
+
+%  \begin{macro}{\doc at declareerror}
+%
+%    \begin{macrocode}
+\def\doc at declareerror#1#2{%
+   \PackageError{doc}{Doc element '#1/#2' already defined?\@gobble}%
+      {There is already a definition for
+       '\string\Print#1Name',\MessageBreak
+       '\string\PrintDescribe#1'
+       or the environment '#2'.\MessageBreak
+       Maybe you are overwriting something by mistake!\MessageBreak
+       Otherwise use '\string\RenewDocElement' instead.}%
+}
+%    \end{macrocode}
+%  \end{macro}
+
+%  \begin{macro}{\doc at notdeclarederror}
+%
+%    \begin{macrocode}
+\def\doc at notdeclarederror#1#2{%
+   \PackageError{doc}{Doc element '#1/#2' unknown}%
+      {I expected an existing definition for
+       '\string\Print#1Name',\MessageBreak
+       '\string\PrintDescribe#1' and
+       the environment '#2' but\MessageBreak
+       not all of them are defined.\MessageBreak
+       Maybe you wanted to use
+       '\string\NewDocElement'?}%
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+% \begin{imacro}{\NewDocElement}
+%   \oarg{options}\marg{name}\marg{envname}
+%
+%    \begin{macrocode}
+\newcommand\NewDocElement[3][]{%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \@ifundefined{Print#2Name}%
+      {\@ifundefined{PrintDescribe#2}%
+           {\@ifundefined{#3}%
+               {\@ifundefined{end#3}%
+                    {\@NewDocElement{#1}}%
+                    \doc at declareerror
+               }\doc at declareerror
+           }\doc at declareerror
+      }\doc at declareerror
+  {#2}{#3}%
+}
+%    \end{macrocode}
+%  \end{imacro}
+%
+% \begin{imacro}{\RenewDocElement}
+%   \oarg{options}\marg{name}\marg{envname}
+%
+%    \begin{macrocode}
+\newcommand\RenewDocElement[3][]{%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \@ifundefined{Print#2Name}\doc at notdeclarederror
+      {\@ifundefined{PrintDescribe#2}\doc at notdeclarederror
+           {\@ifundefined{#3}\doc at notdeclarederror
+               {\@ifundefined{end#3}\doc at notdeclarederror
+                    {\@NewDocElement{#1}}%
+               }%
+           }%
+      }%
+  {#2}{#3}%
+}
+%    \end{macrocode}
+%  \end{imacro}
+%
+%
+% \begin{macro}{\@NewDocElement}
+%   \marg{options}\marg{name}\marg{envname}
+%
+%    \begin{macrocode}
+\def\@NewDocElement#1#2#3{%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \doc at macrolikefalse
+  \doc at topleveltrue
+%    \end{macrocode}
+%
+% \fmi{Use 2e interface for \cs{keys\_set:nn} when available}
+%    \begin{macrocode}
+  \def\doc at idxtype{#3}%
+  \def\doc at idxgroup{#3s}%
+  \let\doc at printtype\@empty
+  \csname keys_set:nn\endcsname{doc}{#1}%
+%    \end{macrocode}
+%   \begin{imacro}{\Print...Name}
+%     \marg{name}
+% \fmi{extremely messy this with so many \cs{expandafter}s \ldots{}
+%       should reimplement in expl3}
+%    \begin{macrocode}
+  \ifx\doc at printtype\@empty
+    \@temptokena{}%
+  \else
+    \@temptokena\expandafter{\expandafter
+         \textnormal\expandafter{\expandafter
+         \space\expandafter
+         (\doc at printtype)}}%
+  \fi
+  \@nameedef{Print#2Name}##1{%
+     {\noexpand\MacroFont
+      \ifdoc at macrolike
+         \noexpand\string
+      \fi
+      ##1%
+      \the\@temptokena
+     }}%
+%    \end{macrocode}
+%   \end{imacro}
+%
+%   \begin{imacro}{\PrintDescribe...}
+%     \marg{name}
+%    \begin{macrocode}
+  \expandafter\let\csname PrintDescribe#2\expandafter\endcsname
+                  \csname Print#2Name\endcsname
+%    \end{macrocode}
+%   \end{imacro}
+%
+%   \begin{imacro}{\SpecialMain...Index}
+%     \marg{name}
+%   \begin{imacro}{\Special...Index}
+%     \marg{name}
+%    \begin{macrocode}
+  \edef\doc at expr{%
+     \ifdoc at macrolike
+       \noexpand\doc at createspecialmacrolikeindexes
+     \else
+       \noexpand\doc at createspecialindexes
+     \fi
+     {#2}%
+    }%
+   \expandafter\expandafter\expandafter
+   \doc at expr
+   \expandafter\expandafter\expandafter
+     {\expandafter\doc at idxtype\expandafter}\expandafter
+     {\doc at idxgroup}%
+%    \end{macrocode}
+%   \end{imacro}
+%   \end{imacro}
+%
+%   \begin{imacro}{\Describe...}
+%     \oarg{options}\marg{name}
+%    \begin{macrocode}
+  \doc at createdescribe{#2}%
+%    \end{macrocode}
+%   \end{imacro}
+%
+%   \begin{environment}{\meta{DocElement}}
+%  \fmi{can't have formatting in argument -- fix}
+%     \oarg{options}\marg{name}
+%    \begin{macrocode}
+    \ifdoc at macrolike
+      \doc at createenv{TT}{#2}{#3}%
+    \else
+      \doc at createenv{TF}{#2}{#3}%
+    \fi
+}
+%    \end{macrocode}
+%   \end{environment}
+% \end{macro}
+
+
+
+
+
+% \subsection{Setting up the default \DOC elements}
+
+% \subsubsection{Macro facilities}
+%
+%    Macros get only a single index entry (no index group, no index
+%    type) and they do not get any label either when printing in the margin.
+%    \begin{macrocode}
+\NewDocElement[macrolike = true ,
+                idxtype   = ,
+                idxgroup  = ,
+                printtype =
+               ]{Macro}{macro}
+%    \end{macrocode}
+
+
+%  \begin{macro}{SpecialMainIndex}
+%
+%    In \DOC v2 we had \cs{SpecialMainIndex} and
+%    \cs{SpecialMainEnvIndex} but now with additional \DOC elements we
+%    always add the element name after ``\texttt{Main}'' so this would
+%    be \cs{SpecialMainMacroIndex}. We use |\def| not |\let| so any
+%    redefinition of |\SpecialMainMacroIndex| will be transparent.
+%    \begin{macrocode}
+\def\SpecialMainIndex{\SpecialMainMacroIndex}
+%    \end{macrocode}
+%  \end{macro}
+
+%  \begin{macro}{SpecialUsageIndex}
+%    \DOC v2 also had \cs{SpecialUsageIndex} which is now called
+%    \cs{SpecialMacroIndex} generating the ``usage'' index entry  for
+%    a macro. Again we provide that as an alias via |\def|.
+%
+%    In fact the documentation of \DOC v2 claimed that one can use
+%    this for both macros and environments but that was never true as
+%    for environments the result was that the first character was
+%    dropped in sorting of the index. The correct way is to use
+%    \cs{SpecialEnvIndex} for this.
+%    \begin{macrocode}
+\def\SpecialUsageIndex{\SpecialMacroIndex}
+%    \end{macrocode}
+%  \end{macro}
+%
+
+%  \begin{macro}{\SpecialIndex}
+%    \begin{macrocode}
+\def\SpecialIndex     {\CodeMacroIndex{code}}
+%    \end{macrocode}
+%  \end{macro}
+
+
+%
+% \subsubsection{Environment facilities}
+%
+%    Providing documentation support for environments. Here we differ
+%    from \DOC V2 by marking the environments with ``(\textit{env.})''
+%    when printing the name in the margin.
+%    \begin{macrocode}
+\NewDocElement[macrolike = false ,
+                idxtype   = env.  ,
+                idxgroup  = environments ,
+                printtype = \textit{env.}
+               ]{Env}{environment}
+%    \end{macrocode}
+%
+%
+%
+%    To be able to restore the definition after \pkg{hypdoc} is loaded
+%    we better save them here. We only load the package at the end of
+%    the preamble, but the user might do this earlier and then chaos
+%    is ensured.
+%    \begin{macrocode}
+  \let\@@PrintDescribeMacro \PrintDescribeMacro
+  \let\@@PrintDescribeEnv \PrintDescribeEnv
+  \let\@@PrintMacroName \PrintMacroName
+  \let\@@PrintEnvName \PrintEnvName
+  \let\@@SpecialUsageIndex \SpecialUsageIndex
+  \let\@@SpecialEnvIndex \SpecialEnvIndex
+  \let\@@SortIndex \SortIndex
+  \let\@@DescribeMacro \DescribeMacro
+  \let\@@DescribeEnv \DescribeEnv
+%    \end{macrocode}
+%
+%
+% \section{Misc additions}
+
+% \begin{imacro}{\cs}
+%    \begin{macrocode}
+\DeclareRobustCommand\cs[1]{\texttt{\bslash #1}}
+%    \end{macrocode}
+%    \cls{amsdtx} has its own definition for \cs{cs} but that now
+%    gets overwritten because the class loads \pkg{doc} afterwards. So
+%    for now we reinstall it here.
+%    \fmi{fix elsewhere}
+%    \begin{macrocode}
+\AddToHook{class/amsdtx/after}{%
+  \DeclareRobustCommand\cs[1]{%
+    \@boxorbreak{%
+        \ntt
+        \addbslash#1\@empty
+        \@xp\@xp\@xp\@indexcs\@xp\@nobslash\string#1\@nil
+    }%
+  }%
+  \def\cn{\cs}%
+}
+%    \end{macrocode}
+% \end{imacro}
+
+
 % We can now finish the \texttt{docstrip} main module.
 %    \begin{macrocode}
 %</package>
@@ -4958,5 +6325,15 @@
 %
 %
 % \Finale
-% \PrintIndex \PrintChanges
+% \PrintChanges
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \endinput
+
+^^A  Needed for emacs
+^^A
+^^A  Local Variables: 
+^^A  mode: latex
+^^A  coding: utf-8-unix
+^^A  End: 

Modified: trunk/Master/texmf-dist/source/latex/base/docstrip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/docstrip.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/docstrip.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -935,7 +935,7 @@
 %       using*strange at programming<language>
 %\end{verbatim}
 %
-%\StopEventually{%
+%\MaybeStop{%
 %^^A \section{Conclusion}
 %  \PrintIndex
 %  \PrintChanges

Modified: trunk/Master/texmf-dist/source/latex/base/docstrip.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/docstrip.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/docstrip.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -52,7 +52,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 
@@ -98,6 +98,7 @@
 
 
 \generate{\file{ltxdoc.cls}{\from{ltxdoc.dtx}{class}}
+          \file{ltxdoc.cfg}{\from{ltxdoc.dtx}{cfg}}
          }
 
 \generate{\file{doc.sty}{\from{doc.dtx}{package}}

Modified: trunk/Master/texmf-dist/source/latex/base/ec.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ec.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ec.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/exscale.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/exscale.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/exscale.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -106,7 +106,7 @@
 % they are printed on another installation whereas when using the
 % package file they would come out the same on both sites.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \section{Implementation}

Modified: trunk/Master/texmf-dist/source/latex/base/exscale.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/exscale.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/exscale.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/fix-cm.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/fix-cm.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/fix-cm.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -216,7 +216,7 @@
 %
 %
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{Implementation}
 %

Modified: trunk/Master/texmf-dist/source/latex/base/fix-cm.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/fix-cm.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/fix-cm.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/fontdef.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/fontdef.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/fontdef.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -164,7 +164,7 @@
 % \end{quote}
 %
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{The \texttt{docstrip} modules}
 %

Modified: trunk/Master/texmf-dist/source/latex/base/format.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/format.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/format.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 
@@ -88,7 +88,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 2015-2021
+Copyright (C) 2015-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 
@@ -123,7 +123,7 @@
 
 This is a generated file.
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 
@@ -174,6 +174,7 @@
           \from{lterror.dtx}{2ekernel}
           \from{ltpar.dtx}{2ekernel}
           \from{ltpara.dtx}{2ekernel}         % L3 layer module
+          \from{ltmeta.dtx}{2ekernel}         % L3 layer module
           \from{ltspace.dtx}{2ekernel}
           \from{ltlogos.dtx}{2ekernel}
           \from{ltfiles.dtx}{2ekernel}
@@ -201,8 +202,10 @@
           \from{ltfloat.dtx}{2ekernel}
           \from{ltidxglo.dtx}{2ekernel}
           \from{ltbibl.dtx}{2ekernel}
+          \from{ltmarks.dtx}{trace,2ekernel}    % L3 layer module
           \from{ltpage.dtx}{2ekernel}
          \from{ltclass.dtx}{2ekernel,tracerollback}
+          \from{ltkeys.dtx}{2ekernel}           % L3 layer module
           \from{ltfilehook.dtx}{2ekernel}       % L3 layer module
           \from{ltshipout.dtx}{2ekernel}        % L3 layer module
           \from{ltoutput.dtx}{2ekernel}

Modified: trunk/Master/texmf-dist/source/latex/base/graphpap.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/graphpap.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/graphpap.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -65,7 +65,7 @@
 %    The default value of \emph{N} is 10.
 %    The arguments must all be integers.
 %
-% \StopEventually
+% \MaybeStop
 %
 %  First, we define three counters.  The first two are defined
 %  as raw TeX counters since multiplication and division must be

Modified: trunk/Master/texmf-dist/source/latex/base/graphpap.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/graphpap.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/graphpap.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/ifthen.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ifthen.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ifthen.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -42,7 +42,7 @@
 %<driver>\ProvidesFile{ifthen.drv}
 % \fi
 %         \ProvidesFile{ifthen.dtx}
-          [2020/11/24 v1.1c Standard LaTeX ifthen package (DPC)]
+          [2022/04/13 v1.1d Standard LaTeX ifthen package (DPC)]
 %
 % \iffalse
 %<*driver>
@@ -80,6 +80,7 @@
 % \changes{v1.0k}{1995/04/25}{Fix `driver' docstrip guards.}
 % \changes{v1.0n}{1997/11/03}{Documentation fix.}
 % \changes{v1.0o}{1998/08/17}{Documentation fix.}
+% \changes{v1.1d}{2022/04/13}{Make reference command locally expandable.}
 %
 % \section{Introduction}
 %
@@ -164,7 +165,7 @@
 % With \meta{test} as above, repeatedly executes \meta{while clause}
 % while the test remains true.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{The Implementation}
 %
@@ -263,7 +264,15 @@
 % macros expanding to |T| or |F| has been completely replaced by a
 % simpler system using |\iftrue|, which furthermore allows lazy
 % evaluation on the second pass.
+% With a LaTeX 2022/06/01 we have to ensure that |\pageref| is expandable.
 %    \begin{macrocode}
+\@ifl at t@r\fmtversion{2022/06/01}
+  {\def\TE at ref@exp{\let\pageref\@kernel at pageref@exp
+                  \let\ref\@kernel at ref@exp}}
+  {\def\TE at ref@exp{\def\@setref##1##2##3{%
+         \ifx##1\relax\z@\else\expandafter##2##1\fi}}}
+%    \end{macrocode}
+%    \begin{macrocode}
 \long\def\ifthenelse#1{%
 %    \end{macrocode}
 % \changes{v1.0h}{1994/05/14}{Use \cs{TE at repl}}
@@ -295,11 +304,11 @@
 % \changes{v1.0l}{1996/03/22}
 %      {Use \cs{begingroup} not \cs{bgroup} for latex/2105}
 % \changes{v1.1a}{1999/01/07}{\cs{isundefined} added for /2824}
+% \changes{v1.1d}{2022/04/13}{changed method to make \cs{pageref} and \cs{ref} locally expandable.}
 %    \begin{macrocode}
     \begingroup
         \let\protect\@unexpandable at protect
-        \def\@setref##1##2##3{%
-         \ifx##1\relax\z@\else\expandafter##2##1\fi}%
+        \TE at ref@exp
         \def\value##1{\the\csname c@##1\endcsname}%
         \let\equal\TE at equal \let\(\TE at lparen \let\)\TE at rparen
         \let\isodd\TE at odd \let\lengthtest\TE at length

Modified: trunk/Master/texmf-dist/source/latex/base/ifthen.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ifthen.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ifthen.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/inputenc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/inputenc.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/inputenc.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -379,9 +379,9 @@
 % as these commands haven't been available in \textsf{inputenc} distributed
 % with older releases of \LaTeX{}.
 %
-
-% \StopEventually{}
 %
+% \MaybeStop{}
+%
 % \section{Announcing the files}
 %
 % We announce the files:

Modified: trunk/Master/texmf-dist/source/latex/base/inputenc.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/inputenc.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/inputenc.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/latex209.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/latex209.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/latex209.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -166,7 +166,7 @@
 % \changes{v0.11}{1994/01/21}{Split package into head and tail.}
 % \changes{v0.23}{1994/05/11}{Added bezier option.}
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{Driver}
 %

Modified: trunk/Master/texmf-dist/source/latex/base/latex209.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/latex209.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/latex209.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/latexrelease.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/latexrelease.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/latexrelease.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -40,7 +40,7 @@
 %<*latexrelease>
 % \fi
 %         \ProvidesFile{latexrelease.dtx}
-          [2021/04/29 v1.0n LaTeX release emulation and tests
+          [2022/02/28 v1.0o LaTeX release emulation and tests
               (including releases up to \latexreleaseversion)]
 % \iffalse
 %</latexrelease>
@@ -471,7 +471,7 @@
 %
 %
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{Implementation}
 %
@@ -487,10 +487,9 @@
 % \begin{macro}{\sourceLaTeXdate}
 %   \changes{v1.0l}{2021/01/23}{\cs{sourceLaTeXdate} added}
 %   \changes{v1.0m}{2021/03/18}{Define \cs{sourceLaTeXdate} conditionally}
-%   Store the original \LaTeX{} format version
-%   as a number in the format |YYYYMMDD|.  This macro has to
-%   be defined conditionally, so that it isn't changed in case
-%   \file{latexrelease.sty} is loaded twice (for tests), but it
+%   Store the original \LaTeX{} format version as a number in the format
+%   |YYYYMMDD |.  This macro has to be defined conditionally, so that it
+%   isn't changed in case \file{latexrelease.sty} is reloaded, but it
 %   can't be defined in the kernel only, otherwise
 %   \file{latexrelease.sty} wouldn't work in older \LaTeX{} due
 %   to the missing macro.
@@ -619,7 +618,7 @@
   \catcode58=11 % :
   \catcode126=10 % ~
   \catcode32=09 % <space>
-  \xdef\latexrelease at postexpl{\unexpanded{%
+  \xdef\latexrelease at postltexpl{\unexpanded{%
 %<@@=latexrelease>
 %    \end{macrocode}
 %
@@ -691,14 +690,13 @@
 % store each in \cs{l_@@_restores_tl}, save a copy, and redefine each.
 %    \begin{macrocode}
 \tl_clear_new:N \l_@@_restores_tl
-\cs_gset:Npn \@@_tmp:w #1 #2
+\cs_gset:Npn \@@_redefines:w #1 #2
   {
-    \quark_if_recursion_tail_stop_do:Nn #1
-      { \cs_undefine:N \@@_tmp:w }
+    \quark_if_recursion_tail_stop:N #1
     \tl_put_right:Nn \l_@@_restores_tl {#1}
     \cs_set_eq:cN { @@_ \cs_to_str:N #1 } #1
     \cs_set_eq:NN #1 #2
-    \@@_tmp:w
+    \@@_redefines:w
   }
 %    \end{macrocode}
 %
@@ -731,12 +729,12 @@
 % \end{description}
 % And here we go:
 %    \begin{macrocode}
-\@@_tmp:w
+\@@_redefines:w
   \__kernel_chk_if_free_cs:N \use_none:n
   \e at alloc \@@_e at alloc:NnnnnN
   \__kernel_msg_error:nnx \use_none:nnn
   \msg_new:nnnn \msg_gset:nnnn
-  \NewDocumentCommand \DeclareDocumentCommand
+  % \NewDocumentCommand \DeclareDocumentCommand % after ltcmd.dtx
   \newcommand \@@_declare_command:w
 %    \end{macrocode}
 %    Temp addition \ldots
@@ -752,7 +750,23 @@
 \msg_redirect_name:nnn { hooks } { exists } { none }
 %    \end{macrocode}
 %
+% Now a one-off for |ltcmd.dtx|: we need to make \cs{NewDocumentCommand}
+% not complain on an already existing command, but it has to be done
+% after \cs{NewDocumentCommand} is defined, so this is separate from
+% the \cs{latexrelease at postltexpl} actions above:
+% \changes{v1.0o}{2022/02/28}
+%         {Move most redefinitions to right after ltexpl.dtx}
 %    \begin{macrocode}
+\cs_gset_protected:Npn \latexrelease at postltcmd
+  {
+    \@@_redefines:w
+      \NewDocumentCommand \DeclareDocumentCommand
+      \q_recursion_tail \q_recursion_tail
+      \q_recursion_stop
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
   }}%
 \endgroup
 %</latexrelease>

Modified: trunk/Master/texmf-dist/source/latex/base/latexrelease.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/latexrelease.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/latexrelease.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 
@@ -93,7 +93,7 @@
   \from{ltluatex.dtx}    {latexrelease}% empty 
   \from{ltexpl.dtx}      {latexrelease}% empty 
   \from{ltdefns.dtx}     {latexrelease}%
-  \from{ltcmd.dtx}       {latexrelease}%
+  \from{ltcmd.dtx}       {latexrelease}% L3 layer module
   \from{lthooks.dtx}     {latexrelease}% L3 layer module
   \from{ltcmdhooks.dtx}  {latexrelease}% L3 layer module
   \from{ltalloc.dtx}     {latexrelease}% empty
@@ -101,6 +101,7 @@
   \from{lterror.dtx}     {latexrelease}% empty
   \from{ltpar.dtx}       {latexrelease}% empty
   \from{ltpara.dtx}      {latexrelease}% empty
+  \from{ltmeta.dtx}      {latexrelease}% L3 layer module
   \from{ltspace.dtx}     {latexrelease}%
   \from{ltlogos.dtx}     {latexrelease}% L3 layer module
   \from{ltfiles.dtx}     {latexrelease}%
@@ -128,6 +129,7 @@
   \from{ltfloat.dtx}     {latexrelease}%
   \from{ltidxglo.dtx}    {latexrelease}% empty
   \from{ltbibl.dtx}      {latexrelease}% empty
+  \from{ltmarks.dtx}     {latexrelease}% L3 layer module
   \from{ltpage.dtx}      {latexrelease}% empty
   \from{ltclass.dtx}     {latexrelease,tracerollback}%
   \from{ltfilehook.dtx}  {latexrelease}% empty  % L3 layer module

Modified: trunk/Master/texmf-dist/source/latex/base/latexsym.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/latexsym.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/latexsym.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -84,7 +84,7 @@
 %    |\unrhd|~$\unrhd$
 %    \end{quote}
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{The \dst{} modules}
 %

Modified: trunk/Master/texmf-dist/source/latex/base/latexsym.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/latexsym.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/latexsym.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 
@@ -87,7 +87,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/letter.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/letter.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/letter.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -45,7 +45,7 @@
 %<*driver>
        \ProvidesFile{letter.drv}
 %</driver>
-              [2021/03/05 v1.3c
+              [2021/12/07 v1.3c
 %<+letter>               Standard LaTeX document class]
 %    \end{macrocode}
 %
@@ -178,7 +178,7 @@
 % \maketitle
 % \tableofcontents
 %
-% \StopEventually
+% \MaybeStop{}
 %
 %
 % \section{Initial Code}

Modified: trunk/Master/texmf-dist/source/latex/base/letter.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/letter.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/letter.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/ltalloc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltalloc.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltalloc.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -62,7 +62,7 @@
 %
 % This section deals with counter and other variable allocation.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %    \begin{macrocode}
 %<*2ekernel>

Modified: trunk/Master/texmf-dist/source/latex/base/ltbibl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltbibl.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltbibl.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -32,7 +32,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltbibl.dtx}
-             [2020/12/10 v1.1s LaTeX Kernel (Bibliography)]
+             [2022/03/10 v1.1t LaTeX Kernel (Bibliography)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltbibl.dtx}
@@ -106,7 +106,7 @@
 % |\nocite{*}| is special: it tells \BibTeX{} to put the whole of a
 % collection of references into the bibliography.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \changes{v1.0a}{1994/03/31}{Initial version of ltidxbib.dtx,
@@ -199,9 +199,42 @@
 % \begin{macro}{\cite}
 % \changes{v1.1j}{1995/10/16}{(DPC) Make robust}
 %    \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2022/06/01}%
+%<latexrelease>                 {\cite}{check for blank}%
 \DeclareRobustCommand\cite{%
-  \@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}
+  \@ifnextchar [{\@tempswatrue\@citex at checkblank}{\@tempswafalse\@citex at checkblank[]}}
 %    \end{macrocode}
+%    Due to the way \cs{@for} as used in \cs{@citex} behaves an empty
+%    argument to \cs{cite} did not produce any warning for a missing
+%    citation. So we now inject a command before calling \cs{@citex} that
+%    does the checking for us. It is not done in \cs{@citex} directly,
+%    because that command is altered by a number of packages/classes
+%    and this way it is more likely that the check survives.
+% \changes{v1.1t}{2022/03/10}{Ensure that an empty argument generates
+%    a warning (gh/790)}
+%    \begin{macrocode}
+\def\@citex at checkblank[#1]#2{%
+   \IfBlankTF {#2}%
+     {\@citex[#1]{\space}}%
+     {\@citex[#1]{#2}}%
+}
+%</2ekernel|latexrelease>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>                 {\cite}{check for blank}%
+%<latexrelease>
+%<latexrelease>\DeclareRobustCommand\cite{%
+%<latexrelease>  \@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}
+%<latexrelease>\let\@citex at checkblank\@undefined
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+%    \end{macrocode}
 %  \end{macro}
 %
 % \begin{macro}{\@citex}

Modified: trunk/Master/texmf-dist/source/latex/base/ltboxes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltboxes.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltboxes.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltboxes.dtx}
-             [2021/10/14 v1.4c LaTeX Kernel (Box Commands)]
+             [2022/01/31 v1.4c LaTeX Kernel (Box Commands)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltboxes.dtx}
@@ -212,7 +212,7 @@
 % \meta{height} \& \meta{depth} = actual height and depth of box in new
 % position.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \changes{v0.1e}{1994/03/02}{Remove need for drv file}
 % \changes{v0.1e}{1994/03/02}{Add 2ekernel module}
@@ -987,7 +987,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\parboxrestore}
+% \begin{macro}{\@parboxrestore}
 % Restore various paragraph parameters, and also |\\|.
 %    \begin{macrocode}
 \def\@parboxrestore{\@arrayparboxrestore\let\\\@normalcr}

Modified: trunk/Master/texmf-dist/source/latex/base/ltclass.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltclass.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltclass.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltclass.dtx}
-             [2021/08/25 v1.4f LaTeX Kernel (Class & Package Interface)]
+             [2022/04/16 v1.5b LaTeX Kernel (Class & Package Interface)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltclass.dtx}
@@ -338,7 +338,7 @@
 % or the old name \cs{@ifpackagelater}.
 
 % \DescribeMacro\IfFormatAtLeastTF
-% To test the format date use 
+% To test the format date use
 % \begin{quote}
 % |\IfFormatAtLeastTF{|\meta{date}|}{|^^A
 % \meta{true}|}{|\meta{false}|}|
@@ -434,7 +434,7 @@
 % standard (and other non-standard) distributions can put informative
 % strings in this argument.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{Implementation}
 %
@@ -1833,7 +1833,7 @@
 %</2ekernel|latexrelease>
 %<latexrelease>\EndIncludeInRelease
 %    \end{macrocode}
-%    
+%
 %    \begin{macrocode}
 %<latexrelease>\IncludeInRelease{0000/00/00}%
 %<latexrelease>                 {\RequirePackageWithOptions}{Unused options issue}%
@@ -2175,27 +2175,22 @@
 %    \begin{macrocode}
   \@ifl at aded\@currext\@currname
 %    \end{macrocode}
-%    If the package is already loaded, check that there were no option
-%    clashes:
-% \changes{v1.1b}{1998/05/07}
-%         {Modify help message for latex/2805}
+% \changes{v1.5b}{2022/03/18}{Switch to \cs{ProcessKeyOptions}}
+%    In the current preferred approach, a key family name will exist for
+%    processing using \pkg{ltkeys}. In that case, we replace the previous
+%    package options with the new ones, then call the key handler.
+%    Otherwise, we use the more classical clash handler.
 %    \begin{macrocode}
-    {\@if at ptions\@currext{\@currname}{#2}{}%
-      {\@latex at error
-        {Option clash for \@cls at pkg\space \@currname}%
-        {The package \@currname\space has already been loaded
-         with options:\MessageBreak
-         \space\space[\@ptionlist{\@currname.\@currext}]\MessageBreak
-         There has now been an attempt to load it
-          with options\MessageBreak
-         \space\space[#2]\MessageBreak
-         Adding the global options:\MessageBreak
-         \space\space
-              \@ptionlist{\@currname.\@currext},#2\MessageBreak
-         to your \noexpand\documentclass declaration may fix this.%
-         \MessageBreak
-         Try typing \space <return> \space to proceed.}}%
-     \@firstofone}%
+    {%
+      \@ifundefined{opt at fam@\@currname.\@currext}
+        {\@onefilewithoptions at clashchk{#2}}
+        {%
+          \@namedef{opt@\@currname.\@currext}{#2}%
+          \expandafter\expandafter\expandafter\ProcessKeyOptions
+            \expandafter\expandafter\expandafter
+              [\csname opt at fam@\@currname.\@currext\endcsname]%
+        }%
+    }%
     {\makeatletter
 %    \end{macrocode}
 %    The next line seems to be necessary for 2.09 compatibility (the
@@ -2298,7 +2293,35 @@
     \@reset at ptions}
 %    \end{macrocode}
 %
+% \begin{macro}{\@onefilewithoptions at clashchk}
+%    If the package is already loaded, check that there were no option
+%    clashes.
+% \changes{v1.1b}{1998/05/07}
+%         {Modify help message for latex/2805}
+% \changes{v1.5a}{2021/11/30}
+%         {Separated out from \cs{@onefilewithoptions}}
 %    \begin{macrocode}
+\def\@onefilewithoptions at clashchk#1{%
+  \@if at ptions\@currext{\@currname}{#1}{}%
+      {\@latex at error
+        {Option clash for \@cls at pkg\space \@currname}%
+        {The package \@currname\space has already been loaded
+         with options:\MessageBreak
+         \space\space[\@ptionlist{\@currname.\@currext}]\MessageBreak
+         There has now been an attempt to load it
+          with options\MessageBreak
+         \space\space[#1]\MessageBreak
+         Adding the global options:\MessageBreak
+         \space\space
+              \@ptionlist{\@currname.\@currext},#1\MessageBreak
+         to your \noexpand\documentclass declaration may fix this.%
+         \MessageBreak
+         Try typing \space <return> \space to proceed.}}%
+     \@firstofone}
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
 \let\@currpkg at reqd\@empty
 %    \end{macrocode}
 %
@@ -2622,7 +2645,7 @@
 %<latexrelease>\EndIncludeInRelease
 %<*2ekernel>
 %    \end{macrocode}
-%    
+%
 %    \begin{macrocode}
 \@onlypreamble\AtBeginDocument
 %    \end{macrocode}
@@ -2826,7 +2849,7 @@
 %    \end{macrocode}
 %
 % \changes{v1.3m}{2020-08-08}{define \cs{q at curr@file} directly as the
-%    quotes have already been removed (gh/220)} 
+%    quotes have already been removed (gh/220)}
 %    \begin{macrocode}
 \gdef\filec at ntents#1{%
   \set at curr@file{\filec at ntents@checkdir#1}%

Modified: trunk/Master/texmf-dist/source/latex/base/ltcmd.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltcmd.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltcmd.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -2,7 +2,7 @@
 %
 % Copyright (C) 1999 Frank Mittelbach, Chris Rowley, David Carlisle
 % Copyright (C) 2004-2008 Frank Mittelbach, The LaTeX3 Project
-% Copyright (C) 2009-2021
+% Copyright (C) 2009-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -34,8 +34,8 @@
 %%% From File: ltcmd.dtx
 %
 %    \begin{macrocode}
-\def\ltcmdversion{v1.0i}
-\def\ltcmddate{2021-12-02}
+\def\ltcmdversion{v1.0l}
+\def\ltcmddate{2022-03-18}
 %    \end{macrocode}
 %
 %<*driver>
@@ -67,7 +67,7 @@
 % documentation for \pkg{ltcmd} is provided as part of \texttt{usrguide3}. Here,
 % additional material aimed at programmers is provided
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %    \begin{macrocode}
 %<@@=cmd>
@@ -2352,15 +2352,17 @@
 %   Now just print everything in the required format.  The auxiliary
 %   \cs{@@_split_signature:n} stores a ready-to-print token list in
 %   \cs{l_@@_tmpa_tl}, so we ust use that here:
+% \changes{v1.0j}{2021/13/31}
+%         {Make \cs{ShowCommand} stop for interaction}
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_show_command_aux:nNNn #1 #2 #3 #4
   {
     \@@_split_signature:n {#4}
-    \iow_term:x
+    \tl_show:x
       {
-        > ~ \token_to_str:N #2 = #1: \iow_newline:
+        \token_to_str:N #2 = #1: \iow_newline:
         \tl_use:N \l_@@_tmpa_tl
-        -> \cs_replacement_spec:N #3 .
+        -> \cs_replacement_spec:N #3
       }
   }
 %    \end{macrocode}
@@ -2371,15 +2373,17 @@
 %   |\ShowCommand\foo| is used (if |foo| is an environment), we show
 %   |\endfoo| as well, and when |\ShowCommand\endfoo| is used, change
 %   that to |\ShowCommand\foo| and do the same.
+% \changes{v1.0j}{2021/13/31}
+%         {Make \cs{ShowCommand} stop for interaction}
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_show_environment:N #1
   {
     \exp_after:wN \@@_show_environment:Nnnw #1 \q_@@
-    \iow_term:x
+    \tl_show:x
       {
-        > ~ \token_to_str:N \end { \cs_to_str:N #1 } : \iow_newline:
+        \token_to_str:N \end { \cs_to_str:N #1 } : \iow_newline:
         -> \exp_args:Nc \cs_replacement_spec:N
-          { environment~ \cs_to_str:N #1 ~end~aux~ } .
+          { environment~ \cs_to_str:N #1 ~end~aux~ }
       }
   }
 \cs_new_protected:Npn \@@_show_environment:Nnnw #1 #2 #3 #4 \q_@@
@@ -4093,8 +4097,10 @@
 % \begin{macro}{\@@_cmd_type_cases:Nnnnn}
 % \changes{v1.0d}{2021/04/19}{Renamed \cs{__cmd_cmd_if_xparse:NTF} to
 %      \cs{__kernel_cmd_if_xparse:NTF} for cross-module usage}
-% \changes{v1.0d}{2021/07/30}{Added \cs{@@_cmd_type_cases:Nnnnn} for
+% \changes{v1.0d}{2021/07/30}{Added \cs{@@_cmd_type_cases:NnnnnF} for
 %      \cs{NewCommandCopy} and \cs{ShowCommand} support}
+% \changes{v1.0l}{2022/03/18}{Fix \cs{@@_cmd_type_cases:NnnnnF}
+%"     prematurely expanding macros (gh/795)}
 % \begin{macro}{\@@_cmd_if_xparse_aux:N}
 %
 %    To determine whether the command is an \pkg{xparse} command check
@@ -4113,22 +4119,14 @@
     \exp_args:Ne \str_case_e:nnF
       {
         \exp_args:Nf \tl_if_empty:nT { \cs_argument_spec:N #1 }
-          {
-            \token_if_macro:NT #1
-              {
-                \exp_after:wN \exp_after:wN
-                \exp_after:wN \token_to_str:N
-                \exp_after:wN \use_i_delimit_by_q_stop:nw
-                  #1 \scan_stop: \q_stop
-              }
-          }
+          { \exp_not:N \exp_not:n { \exp_not:e { \tl_head:N #1 } } }
       }
       {
-        { \token_to_str:N \@@_start:nNNnnn } {#2}
-        { \token_to_str:N \@@_start_expandable:nNNNNn } {#3}
-        { \token_to_str:N \@@_start_env:nnnnn } {#4}
+        { \exp_not:N \@@_start:nNNnnn } {#2}
+        { \exp_not:N \@@_start_expandable:nNNNNn } {#3}
+        { \exp_not:N \@@_start_env:nnnnn } {#4}
         {
-          \exp_after:wN \token_to_str:N
+          \exp_after:wN \exp_not:N
             \cs:w environment~
               \exp_last_unbraced:Ne \use_none:nnn
                 { \cs_to_str:N #1 } ~end~aux \cs_end:
@@ -4712,6 +4710,27 @@
 %    \end{macrocode}
 % \end{macro}
 %
+%
+% \begin{macro}{\IfBlankT, \IfBlankF, \IfBlankTF}
+%   Another simple re-naming.
+% \changes{v1.0k}{2022/02/19}{Added \cs{IfBlankTF} and friends}
+%    \begin{macrocode}
+%<latexrelease>\IncludeInRelease{2022/06/01}%
+%<latexrelease>                 {\IfBlankTF}{Testing~for~empty~or~blank}%
+\cs_new_eq:NN \IfBlankF  \tl_if_blank:nF
+\cs_new_eq:NN \IfBlankT  \tl_if_blank:nT
+\cs_new_eq:NN \IfBlankTF \tl_if_blank:nTF
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{2021/11/15}%
+%<latexrelease>                 {\IfBlankTF}{Testing~for~empty~or~blank}%
+%<latexrelease>\cs_undefine:N \IfBlankF
+%<latexrelease>\cs_undefine:N \IfBlankT
+%<latexrelease>\cs_undefine:N \IfBlankTF
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\ProcessedArgument}
 %   Processed arguments are returned using this name, which is reserved
 %   here although the definition will change.
@@ -4775,7 +4794,14 @@
 %<latexrelease>
 %<latexrelease>\EndModuleRelease
 \ExplSyntaxOff
-%<latexrelease>\@ifundefined{ExplSyntaxOff}{}{\latexrelease at postexpl}
+%    \end{macrocode}
+%
+% Now in |latexrelease| mode, redefine \cs{NewDocumentCommand} to not
+% complain on commands already defined.
+% \changes{v1.0k}{2022-02-28}
+%                {Move latexrelease redefinitions from ltcmd.dtx}
+%    \begin{macrocode}
+%<latexrelease>\@ifundefined{ExplSyntaxOff}{}{\latexrelease at postltcmd}
 %<latexrelease>\catcode`\^^@=\@latexrelease at catcode@null\relax
 %</2ekernel|latexrelease>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/base/ltcmdhooks.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltcmdhooks.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltcmdhooks.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -270,7 +270,7 @@
 % If you do that then both hooks automatically work and are patched
 % into the right places.
 %
-% \StopEventually{\setlength\IndexMin{200pt}  \PrintIndex  }
+% \MaybeStop{\setlength\IndexMin{200pt}  \PrintIndex  }
 %
 %
 %
@@ -1394,3 +1394,12 @@
 %
 % \Finale
 %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
+
+^^A  Needed for emacs
+^^A
+^^A  Local Variables: 
+^^A  mode: latex
+^^A  coding: utf-8-unix
+^^A  End: 

Modified: trunk/Master/texmf-dist/source/latex/base/ltcntrl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltcntrl.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltcntrl.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -66,7 +66,7 @@
 % This section defines a number of control structure macros, such as
 % while-loops and for-loops.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \begin{oldcomments}
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/base/ltcounts.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltcounts.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltcounts.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -124,7 +124,7 @@
 % the default for \meta{format}.
 % Star form omits redefining the print representation.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %    \begin{macrocode}
 %<*2ekernel>

Modified: trunk/Master/texmf-dist/source/latex/base/ltdefns.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltdefns.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltdefns.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -32,7 +32,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltdefns.dtx}
-             [2021/06/04 v1.5q LaTeX Kernel (definition commands)]
+             [2022/05/13 v1.5q LaTeX Kernel (definition commands)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltdefns.dtx}
@@ -96,7 +96,7 @@
 %
 % This section contains commands used in defining other macros.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %    \begin{macrocode}
 %<*2ekernel>
@@ -1601,7 +1601,7 @@
 %   But more importantly, the most common use case of copying a command is to
 %   redefine it later, while preserving the old definition, as in:
 % \begin{verbatim}
-%   \ProvideComandCopy \A \B
+%   \ProvideCommandCopy \A \B
 %   \renewcommand \B { ... \A ... }
 % \end{verbatim}
 %   then, if \verb=\A= is already defined the first line is skipped, an in this

Modified: trunk/Master/texmf-dist/source/latex/base/ltdirchk.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltdirchk.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltdirchk.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -37,7 +37,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltdirchk.dtx}
-             [2021/01/15 v1.3a LaTeX Kernel (System Dependent Parts)]
+             [2021/12/11 v1.3a LaTeX Kernel (System Dependent Parts)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltdirchk.dtx}
@@ -206,12 +206,26 @@
 % error messages that use the default settings with a current version of
 % \TeX, but this should not cause any confusion we hope.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{Initialization}
 % As this file is read at a very early stage, some definitions that
 % are normally considered to be part of the format must be made here.
 %
+% Most such definitions are repeated later in the ``right'' place,
+% usually (but not always) with different implementations. To be able
+% to spot this more easily if you look into the file
+% \texttt{latex.ltx} (which is stripped of comments) we add some
+% comment lines to that effect that survive the stripping process by
+% \texttt{docstrip}.
+% \changes{v1.3a}{2021/12/11}{Add comment lines into latex.ltx to
+%     indicate temp definitions that are later overwritten (gh/725)}
+%    \begin{macrocode}
+%<*dircheck>
+%% ---- START temporary definitions for bootstrapping; later overwritten ----
+%</dircheck>
+%    \end{macrocode}
+%
 % \subsection{INITEX}
 % \changes{v0.2i}{1994/01/25}
 %         {Protect against looping on \cs{@@input} and \cs{@@end}.}
@@ -1007,6 +1021,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
+%% ---- END temporary definitions for bootstrapping ----
 %</dircheck>
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/base/lterror.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/lterror.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/lterror.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -91,7 +91,7 @@
 %
 % This section defines \LaTeX's error commands.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/base/ltexpl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltexpl.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltexpl.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2019-2021
+% Copyright (C) 2019-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltexpl.dtx}
-             [2021/04/20 v1.3c LaTeX Kernel (expl3-dependent code)]
+             [2022/02/28 v1.3f LaTeX Kernel (expl3-dependent code)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltexpl.dtx}
@@ -57,7 +57,7 @@
 %
 % \section{\pkg{expl3}-dependent code}
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \changes{v0.0}{2019-10-02}{Initial version}
 %
@@ -288,6 +288,14 @@
 %<latexrelease>\EndIncludeInRelease
 %    \end{macrocode}
 %
+% Now in |latexrelease| mode, redefine a few commands to avoid ``already
+% defined'' errors.
+% \changes{v1.3f}{2022/02/28}
+%                {Move latexrelease redefinitions from ltcmd.dtx}
+%    \begin{macrocode}
+%<latexrelease>\@ifundefined{ExplSyntaxOff}{}{\latexrelease at postltexpl}
+%    \end{macrocode}
+%
 % \changes{v1.3a}{2021/01/21}
 %                {Move \pkg{xparse} rollback code to \texttt{ltcmd.dtx}}
 %
@@ -387,4 +395,125 @@
 %    \end{macrocode}
 %
 %
+%
+%
+%
+%
+% \section{Document-level command names for \pkg{expl3} functions}
+%
+%    Current home for L3 programing layer functions that we make
+%    directly available at the document level. This section may need
+%    to be moved later (after \cs{NewDocumentCommand} is defined in
+%    case we want to use that in the setup).
+%
+%
+% \DescribeMacro\fpeval
+%    The expandable command \cs{fpeval} takes as its argument a
+%    floating point expression and produces a result using the normal
+%    rules of mathematics. As this command is expandable it can be
+%    used where \TeX{} requires a number and for example within a
+%    low-level \cs{edef} operation to give a purely numerical
+%    result. See \texttt{usrguide3} for further explanation.
+%
+% \DescribeMacro\inteval
+% \DescribeMacro\dimeval
+% \DescribeMacro\skipeval
+%    The expandable command \cs{inteval} takes as its argument an
+%    integer expression and produces a result using the normal rules
+%    of mathematics. The operations recognised are |+|, |-|, |*| and
+%    |/| plus parentheses. Division occurs with \emph{rounding}, and
+%    ties are rounded away from zero. As this command is expandable it
+%    can be used where \TeX{} requires a number and for example within
+%    a low-level \cs{edef} operation to give a purely numerical
+%    result. See \texttt{usrguide3} for further explanation.
+%    \cs{dimeval} and \cs{skipeval} are similar, but generate fixed and
+%    rubber length values, respectively.
+%
+%
+%
+% \begin{macro}{\fpeval,\inteval,\dimeval,\skipeval}
+%    A document level wrapper around the code level function for
+%    floating point calculations.
+% \changes{v1.3d}{2021/11/30}{Moved over from \texttt{xfp} package (gh/711)}
+%    \begin{macrocode}
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2022/06/01}%
+%<latexrelease>                 {\fpeval}{fp and int calculations}%
+\ExplSyntaxOn
+\cs_new_eq:NN \fpeval \fp_eval:n
+%    \end{macrocode}
+%     And a few more, this time wrappers around the e\TeX{} primitives.
+%    \begin{macrocode}
+\cs_new_eq:NN \inteval \int_eval:n
+%    \end{macrocode}
+%    
+% \changes{v1.3d}{2021/12/07}{Added \cs{dimeval} and \cs{skipeval} (gh/711)}
+%    \begin{macrocode}
+\cs_new_eq:NN \dimeval  \dim_eval:n
+\cs_new_eq:NN \skipeval \skip_eval:n
+\ExplSyntaxOff
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>                 {\fpeval}{fp and int calculations}%
+%<latexrelease>
+%<latexrelease>\let\fpeval\@undefined
+%<latexrelease>\let\inteval\@undefined
+%<latexrelease>\let\dimeval\@undefined
+%<latexrelease>\let\skipeval\@undefined
+%<latexrelease>\EndIncludeInRelease
+%    \end{macrocode}
+%
+%
+% \DescribeMacro\UseName
+% \DescribeMacro\ExpandArgs
+%    When declaring new commands with \cs{NewDocumentCommand} or
+%    \cs{NewCommandCopy} or similar, it is sometimes necessary to
+%    ``construct'' the csname. As a general mechanism the L3
+%    programming layer has \cs{exp\_args:N...} for this, but there is
+%    no mechanism for it  if \cs{ExplSyntaxOn} is not active. We
+%    therefore offer a few of these commands also with CamelCase names.
+%
+%
+% \begin{macro}{\UseName,\ExpandArgs}
+%    A document wrapper for changing arguments to cs names for use
+%    with \cs{NewDocumentCommand} and similar functions.
+%
+% \changes{v1.3d}{2021/12/28}{Added document level names for \cs{exp\_args:Nc} and the like (gh/735)}
+% \changes{v1.3e}{2022/01/06}{Adjust document level names for \cs{exp\_args:Nc} and the like (gh/735)}
+%    \begin{macrocode}
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2022/06/01}%
+%<latexrelease>                 {\ExpandArgs}{Some pre-expansion commands}%
+\ExplSyntaxOn
+\cs_new_eq:NN \UseName \use:c
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\cs_new:Npn \ExpandArgs #1
+  {
+    \cs_if_exist_use:cF { exp_args:N #1 }
+      { \msg_expandable_error:nnn { kernel } { unknown-arg-expansion } {#1} }
+  }
+\msg_new:nnn { kernel } { unknown-arg-expansion }
+  { Unknown~arg~expansion~"#1" }
+\ExplSyntaxOff
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>                 {\ExpandArgs}{Some pre-expansion commands}%
+%<latexrelease>
+%<latexrelease>\let\UseName\@undefined
+%<latexrelease>\let\ExpandArgs\@undefined
+%<latexrelease>\EndIncludeInRelease
+%    \end{macrocode}
+%
 % \Finale

Modified: trunk/Master/texmf-dist/source/latex/base/ltfilehook.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltfilehook.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltfilehook.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2020-2021
+% Copyright (C) 2020-2022
 %     Frank Mittelbach, Phelype Oleinik & LaTeX Team
 %
 % This file is part of the LaTeX base system.
@@ -31,8 +31,8 @@
 %%% From File: ltfilehook.dtx
 %
 %    \begin{macrocode}
-\providecommand\ltfilehookversion{v1.0l}
-\providecommand\ltfilehookdate{2021/08/27}
+\providecommand\ltfilehookversion{v1.0m}
+\providecommand\ltfilehookdate{2022/04/01}
 %    \end{macrocode}
 %
 %<*driver>
@@ -39,21 +39,6 @@
 
 \documentclass{l3doc}
 
-% bug fix fo l3doc.cls
-\ExplSyntaxOn
-\cs_set_protected:Npn \__codedoc_macro_typeset_one:nN #1#2
-  {
-    \vbox_set:Nn \l__codedoc_macro_box
-      {
-        \vbox_unpack_drop:N \l__codedoc_macro_box
-        \hbox { \llap { \__codedoc_print_macroname:nN {#1} #2
-            \MacroFont       % <----- without it the \ is in lmr10 if a link is made
-            \
-        } }
-      }
-    \int_incr:N \l__codedoc_macro_int
-  }
-\ExplSyntaxOff
 
 \providecommand\InternalDetectionOff{}
 \providecommand\InternalDetectionOn{}
@@ -73,9 +58,10 @@
 %
 % \long\def\fmi#1{\begin{quote}\itshape Todo: #1\end{quote}}
 %
-% \let\hook\texttt
+% \providecommand\hook[1]{\texttt{#1}}
 %
-% \title{The \texttt{ltfilehook} package\thanks{This package has version
+%
+% \title{The \texttt{ltfilehook} documentation\thanks{This code has version
 %    \ltfilehookversion\ dated \ltfilehookdate, \copyright\ \LaTeX\
 %    Project.}}
 %
@@ -120,7 +106,7 @@
 %                   }
 %    These are:
 %    \begin{description}
-%    \item[\texttt{file/before}, \texttt{file/\meta{file-name}/before}]
+%    \item[\hook{file/before}, \hook{file/\meta{file-name}/before}]
 %
 %       These hooks are executed in that order just before the file is
 %       loaded for reading. The code of the first hook is used
@@ -128,16 +114,16 @@
 %       file with matching \meta{file-name} allowing you to specify
 %       code that only applies to one file.
 %
-%    \item[\texttt{file/\meta{file-name}/after}, \texttt{file/after}]
+%    \item[\hook{file/\meta{file-name}/after}, \hook{file/after}]
 %
 %       These hooks are after the file with name \meta{file-name} has
 %       been fully consumed. The order is swapped (the specific one
-%       comes first) so that the \texttt{before} and \texttt{after}
+%       comes first) so that the \hook{/before} and \hook{/after}
 %       hooks nest properly, which is important if any of them involve
 %       grouping (e.g., contain environments, for example).
 %       Furthermore both hooks are reversed hooks to support correct
 %       nesting of different packages adding code to both
-%       \texttt{/before} and \texttt{/after} hooks.
+%       \hook{/before} and \hook{/after} hooks.
 %
 %    \end{description}
 %  \end{variable}
@@ -216,7 +202,7 @@
 %    \cs{RequirePackage}, \cs{LoadPackageWithOptions}, etc.) offer the
 %    hooks from section~\ref{sec:general-file-hooks} when they are
 %    used to load a  package or class file, e.g.,
-%    \texttt{file/array.sty/after} would be called after the
+%    \hook{file/array.sty/after} would be called after the
 %    \pkg{array} package got loaded. But as packages and classes form as special group
 %    of files, there are some additional hooks available that only
 %    apply when a package or class is loaded.
@@ -230,21 +216,21 @@
 %                   }
 %    These are:
 %    \begin{description}
-%    \item[\texttt{package/before}, \texttt{package/after}]
+%    \item[\hook{package/before}, \hook{package/after}]
 %
 %      These hooks are called for each package being loaded.
 %
-%    \item[\texttt{package/\meta{name}/before},
-%    \texttt{package/\meta{name}/after}]
+%    \item[\hook{package/\meta{name}/before},
+%    \hook{package/\meta{name}/after}]
 %
 %      These hooks are additionally called if the package name is
 %      \meta{name} (without extension).
 %
-%    \item[\texttt{class/before}, \texttt{class/after}]
+%    \item[\hook{class/before}, \hook{class/after}]
 %
 %      These hooks are called for each class being loaded.
 %
-%    \item[\texttt{class/\meta{name}/before}, \texttt{class/\meta{name}/after}]
+%    \item[\hook{class/\meta{name}/before}, \hook{class/\meta{name}/after}]
 %
 %      These hooks are additionally called if the class name is
 %      \meta{name} (without extension).
@@ -269,8 +255,8 @@
 %    \>\cs{UseHook}\marg{\hook{package/\meta{package name}/after}} \\
 %    \>\cs{UseHook}\marg{\hook{package/after}}
 %  \end{tabbing}
-%    and similar for class file loading, except that \texttt{package/}
-%    is replaced by \texttt{class/} and \cs{AtEndOfPackage} by
+%    and similar for class file loading, except that \hook{package/}
+%    is replaced by \hook{class/} and \cs{AtEndOfPackage} by
 %    \cs{AtEndOfClass}.
 %
 %    If a package or class is not loaded (or it was loaded before the
@@ -321,7 +307,7 @@
 %    These are:
 %    \begin{description}
 %
-%    \item[\texttt{include/before}, \texttt{include/\meta{name}/before}]
+%    \item[\hook{include/before}, \hook{include/\meta{name}/before}]
 %
 %      These hooks are executed (in that order) after the initial
 %      \cs{clearpage} and after \texttt{.aux} file is changed to use
@@ -331,7 +317,7 @@
 %      file.
 %
 %
-%    \item[\texttt{include/\meta{name}/end}, \texttt{include/end}]
+%    \item[\hook{include/\meta{name}/end}, \hook{include/end}]
 %
 %      These hooks are executed (in that order) after \LaTeX{} has
 %      stopped reading from the \cs{include} file, but before it has
@@ -338,7 +324,7 @@
 %      issued a \cs{clearpage} to output any deferred floats.
 %
 %
-%    \item[\texttt{include/\meta{name}/after}, \texttt{include/after}]
+%    \item[\hook{include/\meta{name}/after}, \hook{include/after}]
 %
 %      These hooks are executed (in that order) after \LaTeX{} has
 %      issued the \cs{clearpage} but before is has switched back
@@ -349,6 +335,19 @@
 %      included material and bypassed if it is not loaded because of
 %      some \cs{includeonly} statement.\footnotemark
 %
+%    \item[\hook{include/excluded}, \hook{include/\meta{name}/excluded}]
+%
+%      The above hooks for \cs{include} files are only executed when
+%      the file is loaded (or more exactly the load is attempted). If,
+%      however, the \cs{include} file is explicitly excluded (through
+%      an \cs{includeonly} statement) the above
+%      hooks are bypassed and instead the \hook{include/excluded}
+%      hook followed by the \hook{include/\meta{name}/excluded} hook
+%      are executed. This happens after
+%      \LaTeX{} has loaded the \texttt{.aux} file for this include file,
+%      i.e., after \LaTeX{} has updated its counters to pretend that the file
+%      was seen.
+%
 %    \end{description}
 %  \end{variable}\footnotetext{For that reason
 %      another \cs{clearpage} is executed after these hooks which
@@ -359,6 +358,9 @@
 %    All \hook{include} hooks involving the name of the included file are implemented as
 %    one-time hooks (whereas all other such hooks are normal hooks).
 %
+%    If you want to execute code that is run for every \cs{include}
+%    regardless of whether or not it is excluded, use the
+%    \hook{cmd/include/before} or \hook{cmd/include/after} hooks.
 %
 %
 %
@@ -471,7 +473,7 @@
 %    the level value and search further for \texttt{LEVEL} with that value
 %    which should then be the \texttt{START}  level of the file you are in.
 %
-% \StopEventually{\setlength\IndexMin{200pt}  \PrintIndex  }
+% \MaybeStop{\setlength\IndexMin{200pt}  \PrintIndex  }
 %
 %
 % \section{The Implementation}
@@ -728,7 +730,7 @@
 % this declaration is done for you automatically and, indeed, they should
 % not be declared explicitly. 
 %
-% Those named \hook{.../after} and \texttt{include/.../end}
+% Those named \hook{.../after} and \hook{include/.../end}
 % are, when code is added, declared as reversed hooks.
 %
 %
@@ -742,8 +744,8 @@
 % \begin{macro}{\@input at file@exists at with@hooks}
 % \begin{macro}{\unqu at tefilef@und}
 %    \cs{InputIfFileExists} loads any file if it is available so we
-%    have to add the hooks \texttt{file/before} and
-%    \texttt{file/after} in the right places. If the file doesn't
+%    have to add the hooks \hook{file/before} and
+%    \hook{file/after} in the right places. If the file doesn't
 %    exist no hooks should be executed.
 %    \begin{macrocode}
 %</2ekernel>
@@ -783,7 +785,7 @@
 %    can't rely on that still being true after the file has been
 %    processed. Thus for using the name in the file hooks we need to
 %    preserve the name and then restore it for the
-%    \texttt{file/.../after} hook.
+%    \hook{file/.../after} hook.
 %
 %    The hook always refers to the file requested by the user.  The hook
 %    is \emph{always} loaded for \cs{CurrentFile} which usually is the
@@ -1046,7 +1048,8 @@
 %
 % \subsection{Selecting a file (\cs{set at curr@file})}
 %
-% \begin{macro}{\set at curr@file,\@curr at file,\@curr at file@reqd}
+% \begin{macro}{\set at curr@file,\set at curr@file at nosearch}
+% \begin{macro}{\@curr at file,\@curr at file@reqd}
 %  \changes{v1.0f}{2021/01/31}{set \cs{protect} to \cs{string} gh/481}
 %   Now we hook into \cs{set at curr@file} to resolve a possible file
 %   substitution, and add \cs{@expl@@@filehook at set@curr at file@@nNN}
@@ -1070,13 +1073,23 @@
 %   control sequence.
 %   \changes{v1.0i}{2021/04/20}
 %           {Make \string~ expand to a string (tracks change in l3kernel)}
+%   \changes{v1.0m}{2022/03/10}
+%           {Add \cs{set at curr@file at nosearch} for \pkg{graphicx}}
 %    \begin{macrocode}
 %</2ekernel>
 %<*2ekernel|latexrelease>
-%<latexrelease>\IncludeInRelease{2021/06/01}%
+%<latexrelease>\IncludeInRelease{2022/06/01}%
 %<latexrelease>          {\set at curr@file}{Setting current file name}%
-\def\set at curr@file#1{%
+\def\set at curr@file{%
   \begingroup
+    \set at curr@file at aux}
+\edef\set at curr@file at nosearch{%
+  \begingroup
+    \let\noexpand\input at path\noexpand\@empty
+    \csname seq_clear:N\endcsname
+      \expandafter\noexpand\csname l_file_search_path_seq\endcsname
+    \noexpand\set at curr@file at aux}
+\def\set at curr@file at aux#1{%
     \escapechar\m at ne
     \let\protect\string
     \edef~{\string~}%
@@ -1117,6 +1130,32 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
+%<latexrelease>\IncludeInRelease{2021/06/01}%
+%<latexrelease>          {\set at curr@file}{Setting current file name}%
+%<latexrelease>\def\set at curr@file#1{%
+%<latexrelease>  \begingroup
+%<latexrelease>    \escapechar\m at ne
+%<latexrelease>    \let\protect\string
+%<latexrelease>    \edef~{\string~}%
+%<latexrelease>    \expandafter\def\csname\expandafter\endcsname
+%<latexrelease>      \expandafter{\csname\endcsname}%
+%<latexrelease>    \@expl@@@filehook at if@no at extension@@nTF{#1}%
+%<latexrelease>      {\@tempswatrue}{\@tempswafalse}%
+%<latexrelease>    \@kernel at make@file at csname\@curr at file
+%<latexrelease>      \@expl@@@filehook at resolve@file at subst@@w {#1}%
+%<latexrelease>    \@expl@@@filehook at if@file at replaced@@TF
+%<latexrelease>      {\@kernel at make@file at csname\@curr at file@reqd
+%<latexrelease>         \@expl@@@filehook at normalize@file at name@@w{#1}%
+%<latexrelease>       \if at tempswa \@expl@@@filehook at drop@extension@@N\@curr at file@reqd \fi}%
+%<latexrelease>      {\if at tempswa \@expl@@@filehook at drop@extension@@N\@curr at file \fi
+%<latexrelease>       \global\let\@curr at file@reqd\@curr at file}%
+%<latexrelease>    \@expl@@@filehook at clear@replacement at flag@@
+%<latexrelease>  \endgroup}
+%<latexrelease>\let\set at curr@file at nosearch\@undefined
+%<latexrelease>\EndIncludeInRelease
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 %<latexrelease>\IncludeInRelease{2020/10/01}%
 %<latexrelease>          {\set at curr@file}{Setting current file name}%
 %<latexrelease>\def\set at curr@file#1{%
@@ -1136,6 +1175,7 @@
 %<latexrelease>       \global\let\@curr at file@reqd\@curr at file}%
 %<latexrelease>    \@expl@@@filehook at clear@replacement at flag@@
 %<latexrelease>  \endgroup}
+%<latexrelease>\let\set at curr@file at nosearch\@undefined
 %<latexrelease>\EndIncludeInRelease
 %    \end{macrocode}
 %
@@ -1152,6 +1192,7 @@
 %<latexrelease>        \csname\@firstofone#1\@empty\endcsname}}%
 %<latexrelease>  \endgroup
 %<latexrelease>}
+%<latexrelease>\let\set at curr@file at nosearch\@undefined
 %<latexrelease>\EndIncludeInRelease
 %    \end{macrocode}
 %
@@ -1159,10 +1200,12 @@
 %<latexrelease>\IncludeInRelease{0000/00/00}%
 %<latexrelease>          {\set at curr@file}{Setting current file name}%
 %<latexrelease>\let\set at curr@file\@undefined
+%<latexrelease>\let\set at curr@file at nosearch\@undefined
 %<latexrelease>\EndIncludeInRelease
 %<*2ekernel>
 %    \end{macrocode}
 % \end{macro}
+% \end{macro}
 %
 %
 %

Modified: trunk/Master/texmf-dist/source/latex/base/ltfiles.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltfiles.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltfiles.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -32,7 +32,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltfiles.dtx}
-             [2021/10/14 v1.2p LaTeX Kernel (File Handling)]
+             [2022/05/27 v1.2r LaTeX Kernel (File Handling)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltfiles.dtx}
@@ -106,7 +106,7 @@
 %   If the file exists on the system, execute \emph{then} and input
 %   \emph{NAME}  otherwise execute \emph{else}.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \changes{v1.0a}{1994/03/07}{Initial version, split from latex.dtx}
 % \changes{v1.0a}{1994/03/07}{Long lines wrapped to 72 columns}
@@ -817,7 +817,7 @@
 %    \begin{macrocode}
 %</2ekernel>
 %<*2ekernel|latexrelease>
-%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease>\IncludeInRelease{2022/06/01}%
 %<latexrelease>                 {\@include}{Spaces in file names and hooks}%
 %    \end{macrocode}
 %    
@@ -899,6 +899,16 @@
 %    \begin{macrocode}
     \deadcycles\z@
     \@nameuse{cp@#1}%
+%    \end{macrocode}
+%    We also execute a hook in this case, first a general used for
+%    every include file that is exclude and then a specific one that
+%    contains the name of the include file.
+% \changes{v1.2q}{2022/04/01}{Process some hooks is an include file is bypassed}
+%    \begin{macrocode}
+%-----------------------------------------
+    \UseHook{include/excluded}%
+    \UseOneTimeHook{include/#1/excluded}%
+%-----------------------------------------
   \fi
   \let\@auxout\@mainaux
 %    \end{macrocode}
@@ -917,13 +927,66 @@
 \NewHook{include/before}
 \NewReversedHook{include/end}
 \NewReversedHook{include/after}
+\NewHook{include/excluded}
 %<latexrelease>\EndIncludeInRelease
 %</2ekernel|latexrelease>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease>                 {\@include}{Spaces in file names and hooks}%
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\def\@include#1 {%
+%<latexrelease>\ifx\@nodocument\relax
+%<latexrelease>  \clearpage
+%<latexrelease>  \if at filesw
+%<latexrelease>    \immediate\write\@mainaux{\string\@input{#1.aux}}%
+%<latexrelease>  \fi
+%<latexrelease>  \@tempswatrue
+%<latexrelease>  \if at partsw
+%<latexrelease>    \@tempswafalse
+%<latexrelease>    \edef\reserved at b{#1}%
+%<latexrelease>    \@for\reserved at a:=\@partlist\do
+%<latexrelease>      {\ifx\reserved at a\reserved at b\@tempswatrue\fi}%
+%<latexrelease>  \fi
+%<latexrelease>  \if at tempswa
+%<latexrelease>    \let\@auxout\@partaux
+%<latexrelease>    \if at filesw
+%<latexrelease>      \immediate\openout\@partaux "#1.aux"
+%<latexrelease>      \immediate\write\@partaux{\relax}%
+%<latexrelease>    \fi
+%<latexrelease>    \@filehook at set@CurrentFile
+%<latexrelease>    \UseHook{include/before}%
+%<latexrelease>    \UseOneTimeHook{include/#1/before}%
+%<latexrelease>    \@input@{#1.tex}%
+%<latexrelease>    \UseOneTimeHook{include/#1/end}%
+%<latexrelease>    \UseHook{include/end}%
+%<latexrelease>    \clearpage
+%<latexrelease>    \UseOneTimeHook{include/#1/after}%
+%<latexrelease>    \UseHook{include/after}%
+%<latexrelease>    \clearpage
+%<latexrelease>    \@writeckpt{#1}%
+%<latexrelease>    \if at filesw
+%<latexrelease>      \immediate\closeout\@partaux
+%<latexrelease>    \fi
+%<latexrelease>  \else
+%<latexrelease>    \deadcycles\z@
+%<latexrelease>    \@nameuse{cp@#1}%
+%<latexrelease>  \fi
+%<latexrelease>  \let\@auxout\@mainaux
+%<latexrelease>\else
+%<latexrelease>\@latex at warning{%
+%<latexrelease>  \noexpand\include should only be used after \string\begin{document}}%
+%<latexrelease>\@input@{#1}%
+%<latexrelease>\fi}
+%<latexrelease>\NewHook{include/before}
+%<latexrelease>\NewReversedHook{include/end}
+%<latexrelease>\NewReversedHook{include/after}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 %<latexrelease>\IncludeInRelease{0000/00/00}%
-%<latexrelease>                 {\@include}{Spaces in file names}%
+%<latexrelease>                 {\@include}{Spaces in file names and hooks}%
 %<latexrelease>\def\@include#1 {%
 %<latexrelease>  \clearpage
 %<latexrelease>  \if at filesw
@@ -1577,6 +1640,7 @@
 %
 % \changes{v1.0o}{1994/11/30}
 %         {Use \cs{@dofilelist}}
+% \changes{v1.2r}{2022/05/27}{Try saved version string, if ver at .. is \cs{relax} (gh/825)}
 %    \begin{macrocode}
   \def\@dofilelist{%
      \typeout{^^J *File List*}%
@@ -1587,6 +1651,15 @@
           \ifx\filename at ext\relax tex\else\filename at ext\fi}%
        \expandafter\let\expandafter\reserved at b
                               \csname ver@\reserved at a\endcsname
+%    \end{macrocode}
+%    Packages that \cs{relax} their \cs{ver at ...} string to allow for
+%    multiple loading (e.g., \pkg{fontenc}) can use \cs{ver@@...} to
+%    store the version information instead.
+%    \begin{macrocode}
+       \ifx\reserved at b\relax
+         \expandafter\let\expandafter\reserved at b
+                         \csname ver@@\reserved at a\endcsname
+       \fi
        \expandafter\expandafter\expandafter\@listfiles\expandafter
              \filename at area\filename at base\\\\\\\\\\\\\\\\\\\@@
        \typeout{%

Modified: trunk/Master/texmf-dist/source/latex/base/ltfinal.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltfinal.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltfinal.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltfinal.dtx}
-             [2021/09/06 v2.2q LaTeX Kernel (Final Settings)]
+             [2022/06/02 v2.2u LaTeX Kernel (Final Settings)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltfinal.dtx}
@@ -57,12 +57,15 @@
 %
 %
 % \section{Final settings}
-% This section contains the final settings for \LaTeX.  It initializes
-% some debugging and typesetting parameters, sets the default
-% |\catcode|s and uc/lc codes, and inputs the hyphenation file.
 %
-% \StopEventually{}
+%    This section contains the final settings for \LaTeX.  It initializes
+%    some debugging and typesetting parameters, sets the default
+%    |\catcode|s and uc/lc codes, and inputs the hyphenation file.
 %
+%
+%
+% \MaybeStop{}
+%
 % \changes{v0.1a}{1994/03/07}{Initial version, split from latex.dtx}
 % \changes{v0.1a}{1994/03/07}{Remove oldcomments environment}
 % \changes{v0.1c}{1994/04/21}{Added comments, set the catcodes of
@@ -150,6 +153,34 @@
 %    \end{macrocode}
 % \end{macro}
 %
+%
+%    
+%    Allocate 3 mark classes to be used in \cs{markboth} and
+%    \cs{markright}. Should be done earlier but for that definition of
+%    \cs{newmarks} needs moving (which it should I guess).
+% \changes{v2.2s}{2022/04/03}{Integration of new mark management interface}
+%    \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2022/06/01}%
+%<latexrelease>                 {2e-left}{Delayed legacy marks}%
+\NewMarkClass {2e-left}     
+\NewMarkClass {2e-right}     
+\NewMarkClass {2e-right-nonempty}
+%    \end{macrocode}
+%    No rollback really, the marks will remain.
+%    \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>                 {2e-left}{Delayed legacy marks}%
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+%    \end{macrocode}
+
+
+%
 %\begin{macro}{\newXeTeXintercharclass}
 % \changes{v2.0a}{2014/12/30}{macro added}
 % \changes{v2.0b}{2015/01/23}{use reserved count 257}
@@ -242,9 +273,9 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}{trace_stack_levels}
+% \begin{macro}{trace\string_stack\string_levels}
 %   Now define the Lua function to emulate \cs{tracingstacklevels} and
-%   install it in the \texttt{input_level_string} callback.
+%   install it in the |input_level_string| callback.
 %    \begin{macrocode}
 %</2ekernel>
 %<*2ekernel|latexrelease>
@@ -1033,11 +1064,16 @@
 %
 % \begin{macro}{\MakeUppercase}
 % \begin{macro}{\MakeUppercase}
+% \begin{macro}{\NoCaseChange}
 % \begin{macro}{\@uclclist}
+% \begin{macro}{\@expl at text@lowercase@@n}
+% \begin{macro}{\@expl at text@uppercase@@n}
+% \begin{macro}{\@uclclist}
 %
+%
 % \changes{v1.1a}{1997/10/20}{Removed \cs{aa} and \cs{AA} from
 %    \cs{@uclclist} as these are macros.}
-%
+% \changes{v2.2r}{2022/02/20}{use \cs{text_lowercase:n}}%
 %    And whilst we're doing things with uc/lc tables, here are two
 %    commands to upper- and lower-case a string.
 %
@@ -1048,7 +1084,25 @@
 %    mathematics, environment names, labels, etc.  A much better
 %    long-term solution is to use all-caps fonts, but these aren't
 %    generally available.
+%
+% Two wrappers around the L3 case changing functions.
+% |\protected| to make them mostly safe as replacements for |uppercase|
+% and |\lowercase|.  
 %    \begin{macrocode}
+\ExplSyntaxOn
+\protected\def\@expl at text@lowercase@@n{\text_lowercase:n}
+\protected\def\@expl at text@uppercase@@n{\text_uppercase:n}
+%    \end{macrocode}
+%
+% \changes{v2.2u}{2022/06/02}{Add \cs{NoCaseChange}}
+% |\NoCaseChange| protects its argument from the case change functions.
+%    \begin{macrocode}
+\tl_put_right:Nn \l_text_case_exclude_arg_tl  { \NoCaseChange }
+\cs_new_protected:Npn \NoCaseChange #1 {#1}
+\ExplSyntaxOff
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 \DeclareRobustCommand{\MakeUppercase}[1]{{%
       \def\i{I}\def\j{J}%
       \def\reserved at a##1##2{\let##1##2\reserved at a}%
@@ -1056,20 +1110,17 @@
 %    \end{macrocode}
 %    Tell UTF-8 processing to process chars even though we are in an \cs{protected at edef}.
 % \changes{v2.1h}{2019/09/14}{Expand UTF8 chars when case changing (github/177)}
+% \changes{v2.2r}{2022/02/20}
+%                {Use \cs{@expl at text@uppercase@@n}, removing local redefinition of \cs{UTF at two@octets at noexpand}}%
+% \changes{v2.2t}{2022/04/21}{Support \cs{noexpand} in argument of \cs{@expl at text@uppercase@@n}}
 %    \begin{macrocode}
-      \let\UTF at two@octets at noexpand\@empty
-      \let\UTF at three@octets at noexpand\@empty
-      \let\UTF at four@octets at noexpand\@empty
-      \protected at edef\reserved at a{\uppercase{#1}}%
+      \protected at edef\reserved at a{\@expl at text@uppercase@@n{\noexpand\unexpanded{#1}}}%
       \reserved at a
    }}
 \DeclareRobustCommand{\MakeLowercase}[1]{{%
       \def\reserved at a##1##2{\let##2##1\reserved at a}%
       \expandafter\reserved at a\@uclclist\reserved at b{\reserved at b\@gobble}%
-      \let\UTF at two@octets at noexpand\@empty
-      \let\UTF at three@octets at noexpand\@empty
-      \let\UTF at four@octets at noexpand\@empty
-      \protected at edef\reserved at a{\lowercase{#1}}%
+      \protected at edef\reserved at a{\@expl at text@lowercase@@n{\noexpand\unexpanded{#1}}}%
       \reserved at a
    }}
 %    \end{macrocode}
@@ -1105,6 +1156,10 @@
 % \end{macro}
 % \end{macro}
 % \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
 %
 % \changes{v1.0h}{1994/05/13}{Added output enc stuff}
 % \changes{v1.0i}{1994/05/16}{moved output enc stuff to lfonts}

Modified: trunk/Master/texmf-dist/source/latex/base/ltfloat.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltfloat.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltfloat.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -83,7 +83,7 @@
 %  For example, `pht' specifies that the float can appear in any of
 %  three locations: page, here or top.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \changes{v1.0a}{1994/03/04}{Initial version, split from latex.dtx}

Modified: trunk/Master/texmf-dist/source/latex/base/ltfntcmd.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltfntcmd.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltfntcmd.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -271,7 +271,7 @@
 % amstex.sty} is used as this version can cause space to be removed
 % immediately before the |\/|.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \section{The implementation}

Modified: trunk/Master/texmf-dist/source/latex/base/ltfssaxes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltfssaxes.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltfssaxes.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2019-2021
+% Copyright (C) 2019-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -66,7 +66,7 @@
 %
 %
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \changes{v1.0h}{2020/12/04}{Reorganized the rollback data}
 %

Modified: trunk/Master/texmf-dist/source/latex/base/ltfssbas.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltfssbas.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltfssbas.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -76,7 +76,7 @@
 %  completely accurate.
 % \end{quote}
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \changes{v3.0v}{1998/08/17}{(RmS) Documentation fixes.}
 % \changes{v3.0j}{1995/10/22}{(RmS) New size function macro
@@ -2257,3 +2257,13 @@
 %
 % \Finale
 %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
+
+^^A  Needed for emacs
+^^A
+^^A  Local Variables: 
+^^A  mode: latex
+^^A  coding: utf-8-unix
+^^A  End: 
+ 

Modified: trunk/Master/texmf-dist/source/latex/base/ltfsscmp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltfsscmp.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltfsscmp.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -82,7 +82,7 @@
 %   kernel and  made available via \textsf{latexrelease} package so that
 %   backward compatibility remains ensured for very old documents.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \changes{v3.0b}{1995/06/15}

Modified: trunk/Master/texmf-dist/source/latex/base/ltfssdcl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltfssdcl.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltfssdcl.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -77,7 +77,7 @@
 %  completely accurate.
 % \end{quote}
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{Interface Commands}
 %

Modified: trunk/Master/texmf-dist/source/latex/base/ltfssini.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltfssini.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltfssini.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -70,7 +70,7 @@
 % distribution, or \emph{The \LaTeX\ Companion} for higher level
 % documentation of these commands.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \changes{v3.0i}{1998/08/17}{(RmS) Minor documentation fixes.}

Modified: trunk/Master/texmf-dist/source/latex/base/ltfsstrc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltfsstrc.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltfsstrc.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -138,7 +138,7 @@
 % \end{description}
 %
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{A driver for this document}
 %

Modified: trunk/Master/texmf-dist/source/latex/base/lthooks.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/lthooks.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/lthooks.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C)  2020-2021
+% Copyright (C) 2020-2022
 %       Frank Mittelbach, Phelype Oleinik & LaTeX Team
 %
 % This file is part of the LaTeX base system.
@@ -31,28 +31,13 @@
 %%% From File: lthooks.dtx
 %
 %    \begin{macrocode}
-\def\lthooksversion{v1.0s}
-\def\lthooksdate{2021/09/28}
+\def\lthooksversion{v1.0u}
+\def\lthooksdate{2022/05/19}
 %    \end{macrocode}
 %
 %<*driver>
 \documentclass{l3doc}
 
-% bug fix fo l3doc.cls
-\ExplSyntaxOn
-\cs_set_protected:Npn \__codedoc_macro_typeset_one:nN #1#2
-  {
-    \vbox_set:Nn \l__codedoc_macro_box
-      {
-        \vbox_unpack_drop:N \l__codedoc_macro_box
-        \hbox { \llap { \__codedoc_print_macroname:nN {#1} #2
-            \MacroFont       % <----- without it the \ is in lmr10 if a link is made
-            \
-        } }
-      }
-    \int_incr:N \l__codedoc_macro_int
-  }
-\ExplSyntaxOff
 
 \providecommand\InternalDetectionOff{}
 \providecommand\InternalDetectionOn{}
@@ -798,6 +783,7 @@
 % \begin{function}{\ShowHook,\LogHook}
 %   \begin{syntax}
 %     \cs{ShowHook} \Arg{hook}
+%     \cs{LogHook}  \Arg{hook}
 %   \end{syntax}
 %   Displays information about the \meta{hook} such as
 %   \begin{itemize}
@@ -1096,6 +1082,7 @@
 % \begin{function}{\hook_show:n,\hook_log:n}
 %   \begin{syntax}
 %     \cs{hook_show:n} \Arg{hook}
+%     \cs{hook_log:n}  \Arg{hook}
 %   \end{syntax}
 %   Displays information about the \meta{hook} such as
 %   \begin{itemize}
@@ -1391,7 +1378,7 @@
 %    in real documents.
 %
 %    For example, \pkg{babel} may want to provide hooks such as
-%    \hook{babel/afterextras/\meta{language}}.  Language support in
+%    \hook{babel/\meta{language}/afterextras}.  Language support in
 %    \pkg{babel} is often done through external language
 %    packages. Thus doing the activation for all languages inside the
 %    core \pkg{babel} code is not a viable approach. Instead it needs
@@ -1417,7 +1404,7 @@
 %    hook management (by adding various rules to ensure the
 %    appropriate ordering with respect to other code added by
 %    packages). However, this makes every document unnecessary
-%    slow, because there has to be sorting even through the result is
+%    slow, because there has to be sorting even though the result is
 %    predetermined. Furthermore it forces package writers to
 %    unnecessarily add such rules if they add further code to the hook
 %    (or break \LaTeX{}).
@@ -1502,9 +1489,6 @@
 %   Like \cs{AtBeginDocument} but for the \hook{enddocument} hook.
 % \end{function}
 %
-%    There is also \cs{AtBeginDvi}  which is discussed in conjunction
-%    with the shipout hooks.
-%
 %    \bigskip
 %
 %    The few hooks that existed previously in \LaTeXe{} used internally
@@ -1962,9 +1946,23 @@
 %    \end{description}
 %
 %
-% \StopEventually{\setlength\IndexMin{200pt}  \PrintIndex  }
 %
+% \subsection{Hook provided by the mark mechanism}
 %
+%    See \texttt{ltmarks-doc.pdf} for details.
+%    \begin{description}
+%
+%    \item[\hook{insertmark}]
+%
+%      This hook allows for a special setup while \cs{InsertMark}
+%      inserts a mark. It is executed in group so local changes only
+%      apply to the mark being inserted.
+%
+%    \end{description}
+%
+% \MaybeStop{\setlength\IndexMin{200pt}  \PrintIndex  }
+%
+%
 % \section{The Implementation}
 %
 %
@@ -2198,7 +2196,6 @@
 % \end{macro}
 %
 %
-%
 % \subsection{Providing new hooks}
 %
 % \subsubsection{The data structures of a hook}
@@ -2219,7 +2216,7 @@
 %    A token list holding the relation between \meta{label1} and
 %    \meta{label2} in the \meta{hook}.  The \meta{labels} are lexically
 %    (reverse) sorted to ensure that two labels always point to the same
-%    token list.  For global rules, the \meta{hook} name is |??|.
+%    token list.  For global rules, the \meta{hook} name is \texttt{??}.
 %
 %    \item[\cs{@@\textvisiblespace\meta{hook}}] The code that is actually executed
 %    when the hook is called in the document is stored in this token
@@ -3458,7 +3455,12 @@
   }
 \tl_const:cn { c_@@_generic_env/./begin_tl } { + }
 \tl_const:cn { c_@@_generic_env/./end_tl   } { + }
+%    \end{macrocode}
+%
+% \changes{v1.0t}{2022/04/01}{Support generic \texttt{include/.../excluded} hooks}
+%    \begin{macrocode}
 \tl_const:cn { c_@@_generic_include/./end_tl } { - }
+\tl_const:cn { c_@@_generic_include/./excluded_tl } { + }
 %    \end{macrocode}
 %
 %   Deprecated generic hooks:
@@ -3589,7 +3591,7 @@
 %    expansion in the code later on.
 %
 %    \cs{@@\textvisiblespace??} isn't used, but it has to be defined to trick
-%    the code into thinking that \verb=??= is actually a hook.
+%    the code into thinking that \texttt{??} is actually a hook.
 %    \begin{macrocode}
 \prop_new:c {g_@@_??_code_prop}
 \prop_new:c {@@~??}
@@ -3624,6 +3626,11 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
+%<latexrelease>\IncludeInRelease{2022/06/01}{\@@_gset_rule:nnnn}
+%<latexrelease>                 {Refuse~setting~rule~for~one-time~hooks}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 \cs_new_protected:Npn \@@_gset_rule:nnnn #1#2#3#4
   {
     \@@_if_deprecated_generic:nT {#1}
@@ -3631,8 +3638,14 @@
         \@@_deprecated_generic_warn:n {#1}
         \@@_do_deprecated_generic:Nn \@@_gset_rule:nnnn {#1}
           {#2} {#3} {#4}
-        \exp_after:wN \use_none:nnnnnnnnn \use_none:n
+        \@@_clean_to_scan:w
       }
+    \@@_if_execute_immediately:nT {#1}
+      {
+        \msg_error:nnnnnn { hooks } { rule-too-late }
+          {#1} {#2} {#3} {#4}
+        \@@_clean_to_scan:w
+      }
 %    \end{macrocode}
 %    First we ensure the basic data structure of the hook exists:
 %    \begin{macrocode}
@@ -3650,10 +3663,41 @@
           {#1} {#2} {#4}
         \@@_update_hook_code:n {#1}
       }
-      { \msg_error:nnnnnn { hooks } { unknown-rule }
-                          {#1} {#2} {#3} {#4}        }
+      {
+        \msg_error:nnnnnn { hooks } { unknown-rule }
+          {#1} {#2} {#3} {#4}
+      }
+    \s_@@_mark
   }
 %    \end{macrocode}
+%
+%    \begin{macrocode}
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{2020/10/01}{\@@_gset_rule:nnnn}
+%<latexrelease>                 {Refuse~setting~rule~for~one-time~hooks}
+%<latexrelease>\cs_new_protected:Npn \@@_gset_rule:nnnn #1#2#3#4
+%<latexrelease>  {
+%<latexrelease>    \@@_if_deprecated_generic:nT {#1}
+%<latexrelease>      {
+%<latexrelease>        \@@_deprecated_generic_warn:n {#1}
+%<latexrelease>        \@@_do_deprecated_generic:Nn \@@_gset_rule:nnnn {#1}
+%<latexrelease>          {#2} {#3} {#4}
+%<latexrelease>        \exp_after:wN \use_none:nnnnnnnnn \use_none:n
+%<latexrelease>      }
+%<latexrelease>    \@@_init_structure:n {#1}
+%<latexrelease>    \@@_rule_gclear:nnn {#1} {#2} {#4}
+%<latexrelease>    \cs_if_exist_use:cTF { @@_rule_#3_gset:nnn }
+%<latexrelease>      {
+%<latexrelease>          {#1} {#2} {#4}
+%<latexrelease>        \@@_update_hook_code:n {#1}
+%<latexrelease>      }
+%<latexrelease>      {
+%<latexrelease>        \msg_error:nnnnnn { hooks } { unknown-rule }
+%<latexrelease>          {#1} {#2} {#3} {#4}
+%<latexrelease>      }
+%<latexrelease>  }
+%<latexrelease>\EndIncludeInRelease
+%    \end{macrocode}
 % \end{macro}
 % \end{macro}
 %
@@ -3831,7 +3875,6 @@
 %  \end{macro}
 %
 %
-%
 %  \begin{macro}{\@@_initialize_hook_code:n}
 %    Initializing or reinitializing the fast execution hook code. In
 %    the preamble this is selectively done in case a hook gets used
@@ -3840,8 +3883,8 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_initialize_hook_code:n #1
   {
-    \@@_debug:n{ \iow_term:x{^^JUpdate~ code~ for~ hook~
-                                    '#1' \on at line :^^J} }
+    \@@_debug:n
+      { \iow_term:x { ^^J Update~code~for~hook~'#1' \on at line :^^J } }
 %    \end{macrocode}
 %    This does the sorting and the updates.
 %    First thing we do is to check if a legacy hook macro exists and
@@ -3859,6 +3902,7 @@
 %    \cs{@@_initialize_single:NNn} and pass to it ready made csnames
 %    as they are needed several times inside. This way we save a bit
 %    on processing time if we do that up front.
+% \changes{v1.0u}{2022/05/17}{Refuse sorting one-time hooks (gh/818).}
 %    \begin{macrocode}
     \@@_if_usable:nT {#1}
       {
@@ -3873,7 +3917,7 @@
           {
 %    \end{macrocode}
 %    By default the algorithm sorts the code chunks and then saves the
-%    result in a token list for fast execution; this is done by adding the code chunks 
+%    result in a token list for fast execution; this is done by adding the code chunks
 %    one after another, using \cs{tl_gput_right:NV}. When we sort code for
 %    a reversed hook, all we have to do is to add the code chunks in
 %    the opposite order into the token list. So all we have to do
@@ -3902,8 +3946,8 @@
 %    i.e., we are only interested in storing the keys and the value is
 %    arbitrary.
 %    \begin{macrocode}
-            \@@_debug:n{ \exp_args:NNx \prop_gput:Nnn
-                                       \g_@@_used_prop {#1}{} }
+            \@@_debug:n
+              { \exp_args:NNx \prop_gput:Nnn \g_@@_used_prop {#1} { } }
           }
       }
   }
@@ -4169,7 +4213,7 @@
 %    \meta{hook-code-plist}.  We are about to apply the next rule and
 %    enter it into the data structure.  \cs{@@_apply_label_pair:nnn} will
 %    just call \cs{@@_label_if_exist_apply:nnnF} for the \meta{hook}, and
-%    if no rule is found, also try the \meta{hook} name \verb=??=
+%    if no rule is found, also try the \meta{hook} name \texttt{??}
 %    denoting a default hook rule.
 %
 %    \cs{@@_label_if_exist_apply:nnnF} will check if the rule exists for
@@ -4286,7 +4330,7 @@
 %    out to be a real issue, we can improve the code.
 %
 %    Here the code is removed from \cs{l_@@_cur_hook_tl} rather than
-%    \verb=#3= because the latter may be \verb=??=, and the default
+%    \verb=#3= because the latter may be \texttt{??}, and the default
 %    hook doesn't store any code.  Removing it instead from \cs{l_@@_cur_hook_tl}
 %    makes the default rules \verb=->= and  \verb=<-= work properly.
 %    \begin{macrocode}
@@ -4320,16 +4364,17 @@
 %     \@@_apply_-rule_>:nnn,
 %     \@@_apply_-rule_<-:nnn,
 %     \@@_apply_-rule_->:nnn,
-%     \@@_apply_-rule_x:nnn,
+%     \@@_apply_-rule_xW:nnn,
+%     \@@_apply_-rule_xE:nnn,
 %   }
 %   Reversed rules.
 %    \begin{macrocode}
-\cs_new_eq:cc { @@_apply_-rule_<:nnn  } { @@_apply_rule_>:nnn }
-\cs_new_eq:cc { @@_apply_-rule_>:nnn  } { @@_apply_rule_<:nnn }
+\cs_new_eq:cc { @@_apply_-rule_<:nnn } { @@_apply_rule_>:nnn }
+\cs_new_eq:cc { @@_apply_-rule_>:nnn } { @@_apply_rule_<:nnn }
 \cs_new_eq:cc { @@_apply_-rule_<-:nnn } { @@_apply_rule_<-:nnn }
 \cs_new_eq:cc { @@_apply_-rule_->:nnn } { @@_apply_rule_->:nnn }
-\cs_new_eq:cc { @@_apply_-rule_xE:nnn  } { @@_apply_rule_xE:nnn }
-\cs_new_eq:cc { @@_apply_-rule_xW:nnn  } { @@_apply_rule_xW:nnn }
+\cs_new_eq:cc { @@_apply_-rule_xE:nnn } { @@_apply_rule_xE:nnn }
+\cs_new_eq:cc { @@_apply_-rule_xW:nnn } { @@_apply_rule_xW:nnn }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -4535,7 +4580,7 @@
 %   \meta{inline function} is executed with |#1|${}={}$\meta{relation},
 %   |#2|${}={}$\meta{label_1}\verb=|=\meta{label_2},
 %   and |#3|${}={}$\meta{hook} (the latter may be the argument |#1| to
-%   \cs{@@_list_rules:nn}, or |??| if it is a default rule).
+%   \cs{@@_list_rules:nn}, or \texttt{??} if it is a default rule).
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_list_rules:nn #1 #2
   {
@@ -4847,6 +4892,7 @@
 %   clears the hook so that any further call to \cs{hook_use:n} or
 %   \cs{hook_use_once:n} will expand to nothing.
 % \changes{v1.0r}{2021/09/06}{Clean up after \cs{UseOneTimeHook} (gh/606)}
+% \changes{v1.0u}{2022/05/13}{Check if prop exists to avoid l3debug error}
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_use_once_set:n #1
   { \@@_tl_gset:cn { g_@@_#1_reversed_tl } { I } }
@@ -4855,7 +4901,7 @@
     \@@_tl_gclear:c { @@~#1 }
     \@@_tl_gclear:c { @@_next~#1 }
     \@@_tl_gclear:c { @@_toplevel~#1 }
-    \prop_gclear:c { g_@@_#1_code_prop }
+    \prop_gclear_new:c { g_@@_#1_code_prop }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -4872,7 +4918,7 @@
 %   empty.
 % \changes{v1.0r}{2021/09/06}{Macro added (gh/606)}
 %    \begin{macrocode}
-\prg_new_conditional:Npnn \@@_if_execute_immediately:n #1 { F, TF }
+\prg_new_conditional:Npnn \@@_if_execute_immediately:n #1 { T, F, TF }
   {
     \@@_if_usable:nTF {#1}
       {
@@ -5113,7 +5159,8 @@
 %
 %    \begin{macrocode}
 \msg_new:nnnn { hooks } { unknown-rule }
-  { Unknown~ relationship~ '#3'~
+  {
+    Unknown~ relationship~ '#3'~
     between~ labels~ '#2'~ and~ '#4'~
     \str_if_eq:nnF {#1} {??} { ~in~hook~'#1' }. ~
     Perhaps~ a~ misspelling?
@@ -5130,6 +5177,22 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
+\msg_new:nnnn { hooks } { rule-too-late }
+  {
+    Sorting~rule~for~'#1'~hook~applied~too~late.\\
+    Try~setting~this~rule~earlier.
+  }
+  {
+    You~tried~to~set~the~ordering~of~hook~'#1'~using\\
+    \ \ \iow_char:N\\DeclareHookRule{#1}{#2}{#3}{#4}\\
+    but~hook~'#1'~was~already~used~as~a~one-time~hook,~
+    thus~sorting~is\\
+    no~longer~possible.~Declare~the~rule~
+    before~the~hook~is~used.
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 \msg_new:nnnn { hooks } { misused-top-level }
   {
     Illegal~use~of~\iow_char:N \\AddToHook{#1}[top-level]{...}.\\
@@ -5596,4 +5659,10 @@
 %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \endinput
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+^^A  Needed for emacs
+^^A
+^^A  Local Variables: 
+^^A  mode: latex
+^^A  coding: utf-8-unix
+^^A  End: 

Modified: trunk/Master/texmf-dist/source/latex/base/lthyphen.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/lthyphen.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/lthyphen.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -65,7 +65,7 @@
 % of \texttt{hyphen.ltx}.  See the comments below for additional
 % information.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % To produce the printed version of this file the following code
 % is used. It can be extracted with the \dst{} program, or one can run

Modified: trunk/Master/texmf-dist/source/latex/base/ltidxglo.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltidxglo.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltidxglo.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -68,7 +68,7 @@
 %
 % \DescribeMacro{\glossary} Make a glossary entry for |#1|.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \changes{v1.0a}{1994/03/31}{Initial version of ltidxbib.dtx,

Added: trunk/Master/texmf-dist/source/latex/base/ltkeys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltkeys.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/base/ltkeys.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -0,0 +1,518 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2021-2022
+% The LaTeX Project and any individual authors listed elsewhere
+% in this file.
+%
+% This file is part of the LaTeX base system.
+% -------------------------------------------
+%
+% It 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
+%    https://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008 or later.
+%
+% This file has the LPPL maintenance status "maintained".
+%
+% The list of all files belonging to the LaTeX base distribution is
+% given in the file `manifest.txt'. See also `legal.txt' for additional
+% information.
+%
+% The list of derived (unpacked) files belonging to the distribution
+% and covered by LPPL is defined by the unpacking scripts (with
+% extension .ins) which are part of the distribution.
+%
+% \fi
+%
+% \iffalse
+%%% From File: ltkeys.dtx
+%
+%<*driver>
+% \fi
+\ProvidesFile{ltkeys.dtx}
+             [2022/02/21 v1.0f LaTeX Kernel (Kevyal options)]
+% \iffalse
+\documentclass{l3doc}
+\GetFileInfo{ltkeys.dtx}
+\title{\filename}
+\date{\filedate}
+\author{%
+  \LaTeX{} Team}
+
+\begin{document}
+ \maketitle
+ \DocInput{ltkeys.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \section{Creating and using keyval options}
+%
+% As with any key--value input, using key--value pairs as package or
+% class options has two parts: creating the key options and setting (using)
+% them. Options created in this way \emph{may} be used after package loading
+% as general key--value settings: this will depend on the nature of the
+% underlying code.
+%
+% \begin{function}{\DeclareKeys}
+%   \begin{syntax}
+%     \cs{DeclareKeys} \oarg{family} \marg{declarations}
+%   \end{syntax}
+%   Creates a series of options from a comma-separated \meta{declarations} list.
+%   Each entry in this list is a key--value pair, with the \meta{key} having one
+%   or more \meta{properties}. A small number of \enquote{basic}
+%   \meta{properties} are described below. The full range of properties,
+%   provided by \pkg{l3keys}, can also be used for more powerful processing.
+%   See \texttt{interface3} for the full details.
+%   
+%   The basic properties provided here are
+%   \begin{itemize}
+%    \item \texttt{.code} --- execute arbitrary code
+%     \item \texttt{.if} --- sets a \TeX{} \cs{if...} switch
+%     \item \texttt{.store} --- stores a value in a macro
+%     \item \texttt{.usage} -- defines whether the option can be given only
+%       when loading (\texttt{load}), in the preamble (\texttt{preamble}) or
+%       has no limitation on scope (\texttt{general})
+%   \end{itemize}
+%   The part of the \meta{key} before the \meta{property} is the \meta{name},
+%   with the \meta{value} working with the \meta{property} to define the
+%   behaviour of the option.
+%
+%   For example, with
+%   \begin{verbatim}
+%     \DeclareKeys[mypkg]
+%       {
+%         draft.if          = @mypkg at draft      ,
+%         draft.usage       = preamble          ,
+%         name.store        = \@mypkg at name      ,
+%         name.usage        = load              ,
+%         second-name.store = \@mypkg at other@name
+%       }
+%   \end{verbatim}
+%   three options would be create. The option \texttt{draft} can be given
+%   anywhere in the preamble, and will set a switch called \cs{if at mypkg@draft}.
+%   The option \texttt{name} can only be given during package loading, and will
+%   save whatever value it is given in \cs{@mypkg at name}. Finally, the option
+%   \texttt{second-name} can be given anywhere, and will save its value in
+%   \cs{@mypkg at other@name}.
+%
+%   Keys created \emph{before} the use of \cs{ProcessKeyOptions}act as
+%   package options.
+% \end{function}
+%
+% \begin{function}{\DeclareUnknownKeyHandler}
+%   \begin{syntax}
+%     \cs{DeclareUnknownKeyHandler} \oarg{family} \marg{code}
+%   \end{syntax}
+%   The function \cs{DeclareUnknownKeyHandler} may be used to define
+%   the behavior when an undefined key is encountered. The \meta{code}
+%   will receive the unknown key name as |#1| and the value as |#2|.
+%   These can then be processed as appropriate, e.g.~by forwarding
+%   to another package.
+% \end{function}
+%
+% \begin{function}{\ProcessKeyOptions}
+%   \begin{syntax}
+%     \cs{ProcessKeyOptions} \oarg{family}
+%   \end{syntax}
+%   The \cs{ProcessKeyOptions} function is used to check the current
+%   option list against the keys defined for \meta{family}. Global (class)
+%   options and local (package) options are checked when this function
+%   is called in a package.
+% \end{function}
+%
+% \begin{function}{\SetKeys}
+%   \begin{syntax}
+%     \cs{SetKeys} \oarg{family} \Arg{keyvals}
+%   \end{syntax}
+%   Sets (applies) the explicit list of \meta{keyvals}  for the \meta{family}:
+%   it the latter is not given, the value of \cs{@currname} used. This command
+%   may be used within a package to set options before or after using
+%   \cs{ProcessKeyOptions}.
+% \end{function}
+%
+% \StopEventually{}
+%
+% \subsection{Implementation of \pkg{ltkeys}}
+%
+%    \begin{macrocode}
+%<@@=keys>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<*2ekernel>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\ExplSyntaxOn
+%    \end{macrocode}
+%
+% \subsection{Key properties}
+%
+% \begin{macro}{.code, .if, .store, .usage}
+% \changes{v1.0b}{2022/02/05}
+%         {Create properties in \texttt{ltlkeys}}
+% \changes{v1.0c}{2022/02/07}
+%         {Correct \texttt.{.code} property}
+%    \begin{macrocode}
+\group_begin:
+  \cs_set_protected:Npn \@@_tmp:nn #1#2
+    {
+      \quark_if_recursion_tail_stop:n {#1}
+      \cs_new_eq:cc
+        { \c_@@_props_root_str . #2 }
+        { \c_@@_props_root_str . #1 }
+      \@@_tmp:nn
+    }
+  \@@_tmp:nn
+    { code:n }          { code }
+    { legacy_if_set:n } { if }
+    { tl_set:N }        { store }
+    { usage:n }         { usage }
+    { \q_recursion_tail } { }
+    \q_recursion_stop
+\group_end:
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Main mechanism}
+% 
+%    \begin{macrocode}
+\cs_generate_variant:Nn \clist_put_right:Nn { Nv }
+%    \end{macrocode}
+%
+% \begin{macro}{\l_@@_options_clist}
+%   A single list is used for all options, into which they are collected
+%   before processing.
+%    \begin{macrocode}
+\clist_new:N \l_@@_options_clist
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{variable}{\l_@@_options_loading_bool}
+%   Used to indicate we are in the loading phase: controls the outcome
+%   of warnings.
+%    \begin{macrocode}
+\bool_new:N \l_@@_options_loading_bool
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\@@_options:n}
+% \changes{v1.0f}{2022/03/18}{Simplify to always cover global options}
+% \begin{macro}{\@@_options_aux:n}
+% \changes{v1.0b}{2022/01/15}
+%         {Clear option list in end-of-package hook}
+% \begin{macro}{\@@_options_end:}
+%   The main function calls functions to collect up the global and local
+%   options into \cs{l_@@_options_clist} before calling the
+%   underlying functions to actually do the processing. So that a suitable
+%   message is produced if the option is unknown, the special
+%   \texttt{unknown} key is set if it does not already exist for the
+%   current family, and is cleaned up afterwards if required. To allow
+%   the \LaTeXe{} layer to know this mechanism is active, and to deal
+%   with the key family not matching the file name, we store the family
+%   in all cases.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_options:n #1
+  { \@@_options_expand_module:Nn \@@_options_aux:n {#1} }
+\cs_new_protected:Npn \@@_options_aux:n #1
+  {
+    \cs_gset_nopar:cpn { opt at fam@\@currname.\@currext } {#1}
+    \cs_set_protected:Npn \@@_option_end: { }
+    \clist_clear:N \l_@@_options_clist
+    \@@_options_global:n {#1}
+    \@@_options_local:
+    \keys_if_exist:nnF {#1} { unknown }
+      {
+        \keys_define:nn {#1}
+          {
+            unknown .code:n =
+              {
+                \msg_error:nnxx { keys } { option-unknown }
+                  { \l_keys_key_str } { \@currname }
+              }
+          }
+        \cs_set_protected:Npn \@@_option_end:
+          { \keys_define:nn {#1} { unknown .undefine: } }
+      }
+    \bool_set_true:N \l_@@_options_loading_bool
+    \keys_set:nV {#1} \l_@@_options_clist
+    \bool_set_false:N \l_@@_options_loading_bool
+    \AtEndOfPackage { \cs_set_eq:NN \@unprocessedoptions \scan_stop: }
+    \@@_option_end:
+    \@@_options_loaded:n {#1}
+  }
+\msg_new:nnnn { keys } { option-unknown }
+  { Unknown~option~'#1'~for~package~#2. }
+  {
+    LaTeX~has~been~asked~to~set~an~option~called~'#1'~
+    but~the~#2~package~has~not~created~an~option~with~this~name.
+  }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_options_global:n}
+% \changes{v1.0f}{2022/03/18}{Simplify to always cover global options}
+%   Global (class) options are handled differently for \LaTeXe{} packages
+%   and classes. Hence this function is essentially a check on the current
+%  file type. The initial test is needed as \LaTeXe{} allows variables to
+%   be equal to \cs{scan_stop:}, which is usually forbidden in \pkg{expl3}
+%   code.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_options_global:n #1
+  {
+    \cs_if_eq:NNF \@classoptionslist \scan_stop:
+      {
+        \cs_if_eq:NNTF \@currext \@clsextension
+          { \@@_options_class:n {#1} }
+          { \@@_options_package:n {#1} }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_options_class:n}
+%   For classes, each option (stripped of any content after |=|)
+%   is checked for existence as a key. If found, the option is added to
+%   the combined list for processing. On the other hand, unused options
+%   are stored up in \cs{@unusedoptionlist}. Before any of that, though,
+%   there is a simple check to see if there is an |unknown| key. If there
+%   is, then \emph{everything} will match and the mapping can be skipped.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_options_class:n #1
+  {
+    \cs_if_free:cF { opt@ \@currname . \@currext }
+      {
+        \keys_if_exist:nnTF {#1} { unknown }
+          {
+            \clist_put_right:Nv \l_@@_options_clist
+              { opt@ \@currname . \@currext }
+          }
+          {
+            \clist_map_inline:cn { opt@ \@currname . \@currext }
+              {
+                \keys_if_exist:neTF
+                  {#1} { \@@_remove_equals:n {##1} }
+                  { \clist_put_right:Nn \l_@@_options_clist {##1} }
+                  { \clist_put_right:Nn \@unusedoptionlist {##1} }
+              }
+          }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_options_package:n}
+%   For global options when processing a package, the tasks are slightly
+%   different from those for a class. The check is the same, but here
+%   there is nothing to do if the option is not applicable. Each valid
+%   option also needs to be removed from \cs{@unusedoptionlist}.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_options_package:n #1
+  {
+    \clist_map_inline:Nn \@classoptionslist
+      {
+        \keys_if_exist:neT {#1} { \@@_remove_equals:n {##1} }
+          {
+            \clist_put_right:Nn \l_@@_options_clist {##1}
+            \clist_remove_all:Nn \@unusedoptionlist {##1}
+          }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_options_local:}
+%   If local options are found, the are added to the processing list.
+%   \LaTeXe{} stores options for each file in a macro which may or may not
+%   exist, hence the need to use \cs{cs_if_exist:c}.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_options_local:
+  {
+    \cs_if_eq:NNF \@currext \@clsextension
+      {
+        \cs_if_exist:cT { opt@ \@currname . \@currext }
+          {
+            \clist_put_right:Nv \l_@@_options_clist
+              { opt@ \@currname . \@currext }
+          }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_remove_equals:n}
+% \begin{macro}[EXP]{\@@_remove_equals:w}
+%   As the name suggests, this is a simple function to remove an equals
+%   sign from the input. This is all wrapped up in an \texttt{n} function
+%   so that there will always be a sign available.
+%    \begin{macrocode}
+\cs_new:Npn \@@_remove_equals:n #1
+  { \@@_remove_equals:w #1 = \s_@@_stop }
+\cs_new:Npn \@@_remove_equals:w #1 = #2 \s_@@_stop { \exp_not:n {#1} }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{The document interfaces}
+%
+%    \begin{macrocode}
+\cs_generate_variant:Nn \keys_define:nn { nx }
+%    \end{macrocode}
+%
+% \begin{macro}{\@@_options_expand_module:Nn}
+% \changes{v1.0e}{2022/02/21}
+%         {Faster approach to module expansion}
+% \begin{macro}{\@@_options_expand_module:nN}
+%   To deal with active characters inside the module argument whilst also
+%   expanding that argument, we use a combination of \texttt{c}- and
+%   \texttt{f}-type expansion. This works as the definitions for active
+%   UTF-8 bytes contain an \cs{ifincsname} test.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_options_expand_module:Nn #1#2
+  {
+    \cs:w @@_options_expand_module:nN \use:e { \cs_end: {#2} } #1
+  }
+\cs_new_protected:Npn \@@_options_expand_module:nN #1#2
+  { #2 {#1} }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\DeclareKeys}
+% \changes{v1.0c}{2022/02/15}{Expand module argument}
+% \changes{v1.0d}{2022/02/16}{Allow for active characters in module argument}
+%   Defining key options is quite straight-forward: we have an intermediate
+%   function to allow for potential set-up steps.
+%    \begin{macrocode}
+\NewDocumentCommand \DeclareKeys { O { \@currname } +m }
+  { \@@_options_expand_module:Nn \keys_define:nn {#1} {#2} }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DeclareUnknownKeyHandler}
+% \changes{v1.0c}{2022/02/15}{Added \cs{DeclareUnknownKeysHandler}}
+% \changes{v1.0d}{2022/02/16}{Allow for active characters in module argument}
+% \changes{v1.0d}{2022/02/16}
+%   {Rename \cs{DeclareUnknownKeysHandler} to \cs{DeclareUnknownKeyHandler}}
+%    \begin{macrocode}
+\NewDocumentCommand \DeclareUnknownKeyHandler { O { \@currname } +m }
+  {
+    \cs_set_protected:cpn { @@_unknown_handler_ #1 :nn } ##1##2 {#2}
+    \@@_options_expand_module:Nn \keys_define:nx {#1}
+      {
+        unknown .code:n = 
+          \exp_not:N \exp_args:NV
+            \exp_not:c { @@_unknown_handler_ #1 :nn }
+            \exp_not:N \l_keys_key_str {####1}
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ProcessKeyOptions}
+% \changes{v1.0c}{2022/02/15}{Expand module argument}
+% \changes{v1.0d}{2022/02/16}{Allow for active characters in module argument}
+% \changes{v1.0f}{2022/03/18}{Remove \cs{ProcessKeyPackageOptions}}
+%   We need to deal with the older interface from \pkg{l3keys2e} here: it had
+%   a mandatory argument. We can mop that up using a look-ahead, and then
+%   exploit that information to determine whether the package option handling
+%   is set up for the new approach for clash handling.
+%    \begin{macrocode}
+\NewDocumentCommand \ProcessKeyOptions { O { \@currname } }
+  { \@@_options:n {#1} }
+\@onlypreamble \ProcessKeyOptions
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Option usage scope}
+%
+% \begin{macro}{\@@_options_loaded:n}
+% \begin{macro}{\@@_options_loaded:nn}
+%   Indicates that the load-time options for a package have been processed:
+%   once this has happened, make them unavailable either with a warning or
+%   an error.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_options_loaded:n #1
+  {
+    \prop_get:NnNT \l_keys_usage_load_prop {#1} \l_@@_tmpa_tl
+      {
+        \clist_map_inline:Nn \l_@@_tmpa_tl
+          {
+            \keys_define:nn {#1}
+              {
+                ##1 .code:n =
+                  \@@_options_loaded:nn {#1} {##1}
+              }
+          }
+      }
+  }
+\cs_new_protected:Npn \@@_options_loaded:nn #1#2
+  {
+    \bool_if:NTF \l_@@_options_loading_bool
+      {
+        \msg_warning:nnxx { keys } { load-option-ignored }
+          { \use:c { opt at fam@\@currname.\@currext } } {#2}
+      }
+      { \msg_error:nnnn { keys } { load-only } {#1} {#2} }
+  }
+\msg_new:nnn { keys } { load-option-ignored }
+  { Package~"#1"~has~already~been~loaded:~ignoring~load-time~option~"#2". }
+\msg_new:nnnn { keys } { load-only }
+  { Key~"#2"~may~only~be~used~in~the~during~loading~of~package~"#1". }
+  {
+    LaTeX~was~asked~to~set~a~key~called~"#2",~but~this~is~only~allowed~
+    in~the~optional~argument~when~loading~package~"#1".
+  }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%  Disable all preamble options in one shot.
+%    \begin{macrocode}
+\tl_gput_left:Nn \@kernel at after@begindocument
+  {
+    \prop_map_inline:Nn \l_keys_usage_preamble_prop
+      {
+        \clist_map_inline:nn {#2}
+          {
+            \keys_define:nn {#1}
+              {
+                ##1 .code:n =
+                  \msg_error:nnn { keys } { preamble-only } {##1}
+              }
+          }
+      }
+  }
+\msg_new:nnnn { keys } { preamble-only }
+  { Key~"#1"~may~only~be~used~in~the~preamble. }
+  {
+    LaTeX~was~asked~to~set~a~key~called~"#1",~but~this~is~only~allowed~
+    before~\begin{document}.~You~will~need~to~set~the~key~earlier.
+  }
+%    \end{macrocode}
+%
+% \subsection{General key setting}
+%
+% \begin{macro}{\SetKeys}
+% \changes{v1.0c}{2022/02/15}{Expand module argument}
+% \changes{v1.0d}{2022/02/16}{Allow for active characters in module argument}
+%   A simple wrapper.
+%    \begin{macrocode}
+\NewDocumentCommand \SetKeys { O { \@currname } +m }
+  { \@@_options_expand_module:Nn \keys_set:nn {#1} {#2} }
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+\ExplSyntaxOff
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%</2ekernel>
+%    \end{macrocode}


Property changes on: trunk/Master/texmf-dist/source/latex/base/ltkeys.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/source/latex/base/ltlength.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltlength.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltlength.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -83,7 +83,7 @@
 % \DescribeMacro{\settodepth}
 % Set the length, |#1| to the depth of a box containing |#2|.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %    \begin{macrocode}
 %<*2ekernel>

Modified: trunk/Master/texmf-dist/source/latex/base/ltlists.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltlists.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltlists.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -135,7 +135,7 @@
 % when it occurs immediately after an |\item| command in an enclosing
 % list.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \changes{v1.0a}{1994/03/07}{Initial version, split from latex.dtx}

Modified: trunk/Master/texmf-dist/source/latex/base/ltlogos.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltlogos.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltlogos.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -65,7 +65,7 @@
 %
 % Various logos are defined here.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \begin{macro}{\TeX}
 %    The \TeX{} logo, adjusted so that a full stop after the logo

Modified: trunk/Master/texmf-dist/source/latex/base/ltluatex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltluatex.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltluatex.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2015-2021
+% Copyright (C) 2015-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -28,7 +28,7 @@
 \ProvidesFile{ltluatex.dtx}
 %</driver>
 %<*tex>
-[2021/10/15 v1.1v
+[2021/12/27 v1.1x
 %</tex>
 %<plain>  LuaTeX support for plain TeX (core)
 %<*tex>
@@ -120,6 +120,17 @@
 % tables from $1$ so |\luafunction0| is not available).
 %
 % \noindent
+% \DescribeMacro{\newluacmd}
+% |\newluadef{|\meta{function}|}|\\
+% Like \cs{newluafunction}, but defines the command using \cs{luadef}
+% instead of just assigning an integer.
+%
+% \noindent
+% \DescribeMacro{\newprotectedluacmd}
+% |\newluadef{|\meta{function}|}|\\
+% Like \cs{newluacmd}, but the defined command is not expandable.
+%
+% \noindent
 % \DescribeMacro{\newwhatsit}
 % |\newwhatsit{|\meta{whatsit}|}|\\
 % Defines a custom \cs{whatsit}, indexed from~$1$.
@@ -380,7 +391,7 @@
 %
 % \endgroup
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{Implementation}
 %
@@ -722,6 +733,22 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\newluacmd, \newprotectedluacmd}
+% \changes{v1.1x}{2021/12/27}{Macros added}
+%   Additionally two variants are provided to make the passed control
+%   sequence call the function directly.
+%    \begin{macrocode}
+\def\newluacmd{%
+  \e at alloc\luafunction\luadef
+    \e at alloc@luafunction at count\m at ne\e at alloc@top
+}
+\def\newprotectedluacmd{%
+  \e at alloc\luafunction{\protected\luadef}
+    \e at alloc@luafunction at count\m at ne\e at alloc@top
+}
+%    \end{macrocode}
+% \end{macro}
+%
 % \subsection{Custom whatsits}
 %
 % \begin{macro}{\newwhatsit}
@@ -1351,6 +1378,8 @@
 % \changes{v1.1k}{2019/10/02}{mlist\_to\_hlist is \texttt{exclusive}}
 % \changes{v1.1l}{2020/02/02}{post\_linebreak\_filter is \texttt{reverselist}}
 % \changes{v1.1p}{2020/08/01}{new\_graf is \texttt{exclusive}}
+% \changes{v1.1w}{2021/11/17}{hpack\_quality is \texttt{exclusive}}
+% \changes{v1.1w}{2021/11/17}{vpack\_quality is \texttt{exclusive}}
 %    \begin{macrocode}
   contribute_filter      = simple,
   buildpage_filter       = simple,
@@ -1361,8 +1390,8 @@
   post_linebreak_filter  = reverselist,
   hpack_filter           = list,
   vpack_filter           = list,
-  hpack_quality          = list,
-  vpack_quality          = list,
+  hpack_quality          = exclusive,
+  vpack_quality          = exclusive,
   pre_output_filter      = list,
   process_rule           = exclusive,
   hyphenate              = simple,
@@ -1516,11 +1545,11 @@
 % Handler for |list| callbacks.
 % \changes{v1.0k}{2015/12/02}{resolve name and i.description (PHG)}
 % \changes{v1.1s}{2020/12/02}{Fix return value of list callbacks}
+% \changes{v1.1w}{2021/11/17}{Never pass on \texttt{true} return values for list callbacks}
 %    \begin{macrocode}
 local function list_handler(name)
   return function(head, ...)
     local ret
-    local alltrue = true
     for _,i in ipairs(callbacklist[name]) do
       ret = i.func(head, ...)
       if ret == false then
@@ -1531,18 +1560,17 @@
         return false
       end
       if ret ~= true then
-        alltrue = false
         head = ret
       end
     end
-    return alltrue and true or head
+    return head
   end
 end
 %    \end{macrocode}
 % Default for user-defined |list| and |reverselist| callbacks without explicit default.
 %    \begin{macrocode}
-local function list_handler_default()
-  return true
+local function list_handler_default(head)
+return head
 end
 %    \end{macrocode}
 % Handler for |reverselist| callbacks.
@@ -1551,7 +1579,6 @@
 local function reverselist_handler(name)
   return function(head, ...)
     local ret
-    local alltrue = true
     local callbacks = callbacklist[name]
     for i = #callbacks, 1, -1 do
       local cb = callbacks[i]
@@ -1564,11 +1591,10 @@
         return false
       end
       if ret ~= true then
-        alltrue = false
         head = ret
       end
     end
-    return alltrue and true or head
+    return head
   end
 end
 %    \end{macrocode}
@@ -1899,14 +1925,10 @@
   if current == false then
     flush_list(head)
     return nil
-  elseif current == true then
-    current = head
   end
   current = call_callback("mlist_to_hlist", current, display_type, need_penalties)
   local post = call_callback("post_mlist_to_hlist_filter", current, display_type, need_penalties)
-  if post == true then
-    return current
-  elseif post == false then
+  if post == false then
     flush_list(current)
     return nil
   end

Added: trunk/Master/texmf-dist/source/latex/base/ltmarks.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltmarks.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/base/ltmarks.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -0,0 +1,1649 @@
+% \iffalse meta-comment
+%
+%% File: ltmarks.dtx (C) Copyright 2022
+%       Frank Mittelbach, LaTeX Team
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version.  The latest version
+% of this license is in the file
+%
+%    https://www.latex-project.org/lppl.txt
+%
+%
+%%% From File: ltmarks.dtx
+%
+%    \begin{macrocode}
+\def\ltmarksversion{v1.0d}
+\def\ltmarksdate{2022/06/01}
+%    \end{macrocode}
+%<*driver>
+\documentclass{l3doc}
+
+%\usepackage{ltmarks}
+
+% Fixing footnotes in  functions and variables: this should be in l3doc!
+
+\newcommand\fixfootnote[2]{\footnotemark
+  \AddToHookNext{env/#1/after}{\footnotetext{#2}}}
+\AddToHook{env/function/begin}{\def\footnote{\fixfootnote{function}}}
+\AddToHook{env/variable/begin}{\def\footnote{\fixfootnote{variable}}}
+
+\EnableCrossrefs
+\CodelineIndex
+\begin{document}
+  \DocInput{ltmarks.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+% \providecommand\hook[1]{\texttt{#1}}
+% \providecommand\env[1]{\texttt{#1}}
+%
+%
+%
+% \title{The \texttt{ltmarks.dtx} code\thanks{This file has version
+%    \ltmarksversion\ dated \ltmarksdate, \copyright\ \LaTeX\
+%    Project.}}
+% \author{^^A
+%  Frank Mittelbach, \LaTeX{} Project\thanks
+%    {^^A
+%      E-mail:
+%        \href{mailto:latex-team at latex-project.org}
+%          {latex-team at latex-project.org}^^A
+%    }^^A
+% }
+%
+% \maketitle
+%
+%
+% \begin{abstract}
+%    Marks are used to communicate information about the content of a
+%    page to the output routine. For example, in order to construct
+%    running headers, the output routine needs information about which
+%    section names are present on a page, and this information is
+%    passed to it through the mark system. However, marks may also be
+%    used for other purposes. This module provides a generalized
+%    mechanism for marks of independent classes.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% ^^A \begin{documentation}
+%
+% \section{Introduction}
+%
+%    The \TeX{} engines offer a low-level mark mechanism to
+%    communicate information about the content of the current page to
+%    the asynchronous operating output routine. It works by placing
+%    \cs{mark} commands into the source document. When the material
+%    for the current page is assembled in box 255, \TeX{} scans for
+%    such marks and sets the commands \cs{topmark}, \cs{firstmark} and
+%    \cs{botmark}.  The \cs{firstmark} receives the content of the
+%    first \cs{mark} seen in box 255 and \cs{botmark} the content of
+%    the last mark seen.  The \cs{topmark} holds the content of the
+%    last mark seen on the previous page or more exactly the value of
+%    \cs{botmark} from the previous page.  If there are no marks on
+%    the current page then all three are made equal to the
+%    \cs{botmark} from the previous page.
+%
+%    This mechanism works well for simple formats (such as plain \TeX)
+%    whose output routines are only called to generate pages. It
+%    fails, however, in \LaTeX{} (and other more complex formats),
+%    because here the output routine is sometimes called without
+%    producing a page, e.g., when encountering a float and placing it
+%    into one of the float regions. In that case the output routine is
+%    called, determines where to place the float, alters the goal for
+%    assembling text material (if the float was added to the top or
+%    bottom region) and then it resumes collecting textual material.
+%
+%    As a result the \cs{botmark} gets updated and so \cs{topmark} no
+%    longer reflects the situation at the top of the next page when that
+%    page is finally boxed.
+%
+%    Another problem for \LaTeX{} was that it wanted to use several
+%    \enquote{independent} marks and in the early implementations of
+%    \TeX{} there was only a single \cs{mark} command available.
+%    For that reason \LaTeX{} implemented its own mark
+%    mechanism where the marks always contained two parts with their
+%    own interfaces: \cs{markboth} and \cs{markright} to set marks and
+%    \cs{leftmark} and \cs{rightmark} to retrieve them.
+%
+%    However, this extended mechanism (while supporting scenarios such
+%    as chapter/section marks) was far from general. The mark
+%    situation at the top of a page (i.e., \cs{topmark}) remained
+%    unusable and the two marks offered were not really independent of
+%    each other because \cs{markboth} (as the name indicates) was
+%    always setting both.
+%
+%    The new mechanism overcomes both
+%    issues:
+%    \begin{itemize}
+%    \item
+%      It provides arbitrarily many, fully independent named marks, that
+%      can be allocated and, from that point onwards, used.
+%    \item
+%      It offers access for each such marks to retrieve its top,
+%      first, and bottom values separately.
+%    \item
+%      Furthermore, the mechanism is augmented to give access to marks
+%      in different \enquote{regions} which may not be just full pages.
+%    \end{itemize}
+%
+%
+% \section{Design-level and code-level interfaces}
+%
+%    The interfaces are mainly meant for package developers, but they
+%    are usable (with appropriate care) also in the document
+%    preamble, for example, when setting up special running headers
+%    with \pkg{fancyhdr}, etc. They are therefore available both as
+%    CamelCase commands as well as commands for use in the L3
+%    programming layer. Both are described together below.
+%
+% \begin{function}{\NewMarkClass,\mark_new_class:n}
+%   \begin{syntax}
+%     \cs{NewMarkClass} \Arg{class}
+%     \cs{mark_new_class:n} \Arg{class}
+%   \end{syntax}
+%   Declares a new \meta{class} of marks to be tracked by \LaTeX{}. Each \meta{class}
+%   must be declared before it is used.
+%
+%   Mark classes can only be declared before \verb=\begin{document}=.
+% \end{function}
+%
+% \begin{function}{\InsertMark,\mark_insert:nn}
+%   \begin{syntax}
+%     \cs{InsertMark} \Arg{class} \Arg{text}
+%     \cs{mark_insert:nn}  \Arg{class} \Arg{text}
+%   \end{syntax}
+%   Adds a mark to the current galley for the \meta{class}, containing the
+%   \meta{text}.
+%
+%   It has no effect in places in which you can't place floats, e.g.,
+%   a mark inside a box or inside a footnote never shows up anywhere.
+%
+%   If used in vertical mode it obeys \LaTeX's internal
+%   \cs{@nobreak} switch, i.e., it does not introduce a
+%   breakpoint if used after a heading. If used in horizontal mode it
+%   doesn't handle spacing (like, for example, \cs{index} or
+%   \cs{label} does, so it should be attached to material that is
+%   typeset.
+% \end{function}
+%
+% \begin{variable}{insertmark}
+%   \begin{syntax}
+%     \cs{AddToHook} \texttt{\{insertmark\}} \Arg{code}
+%   \end{syntax}
+%  When marks are inserted, the mark content may need some special
+%  treatment, e.g., by default \cs{label}, \cs{index}, and
+%  \cs{glossary} do not expand at this time (but only later if and when the
+%  mark content is actually used.
+%  In order to allow packages to augment or alter this setup there is
+%  a public hook \hook{insertmark} that is executed at this point.  It
+%  runs in a group so local modification to commands are only applied
+%  to the \meta{text} argument of \cs{InsertMark} or \cs{mark_insert:nn}.
+% \end{variable}
+%
+% \begin{function}[EXP]{\TopMark, \FirstMark, \LastMark,
+%      \mark_use_top:nn,\mark_use_first:nn,\mark_use_last:nn,}
+%   \begin{syntax}
+%     \cs{TopMark}   \oarg{region} \Arg{class}
+%     \cs{FirstMark} \oarg{region} \Arg{class}
+%     \cs{LastMark}  \oarg{region} \Arg{class}
+%     \cs{mark_use_top:nn}   \Arg{region} \Arg{class}
+%     \cs{mark_use_first:nn} \Arg{region} \Arg{class}
+%     \cs{mark_use_last:nn}  \Arg{region} \Arg{class}
+%   \end{syntax}
+%   These functions expand to the appropriate mark \meta{text} for
+%   the given \meta{class} in the specified \meta{region}.
+%   The default \meta{region} in the design-level commands is \texttt{page}.
+%   Note that with the L3 layer commands there are no
+%   optional arguments, i.e., both arguments have to be provided.
+%   \begin{texnote}
+%     The result is returned within the \tn{unexpanded}
+%     primitive (\cs{exp_not:n}), which means that the \meta{text}
+%     does not expand further when appearing in an \texttt{x}-type
+%     or \texttt{e}-type argument expansion.
+%   \end{texnote}
+%
+%   The \enquote{first} and \enquote{last} marks are
+%   those seen first and last in the current region/page, respectively. The
+%   \enquote{top} mark is the last mark of the \meta{class} seen
+%   in an earlier region, i.e., the \meta{text} what would be \enquote{current} at the
+%   very top of the region.
+%
+%   \noindent\llap{\bfseries Important!\qquad}\indent
+%   The commands are only meaningful inside the output routine, in
+%   other places their result is (while not random) unpredictable due
+%   to the way \LaTeX{} cuts text material into pages.
+%% \end{function}
+%
+%
+%
+%   Currently, \meta{region} is one of
+%   \texttt{page},
+%   \texttt{previous-page},
+%   \texttt{column}, and
+%   \texttt{previous-column}.
+%   If a page has just been finished then the region \texttt{page}
+%   refers to the current page and \texttt{previous-page}, as the name
+%   indicates, to the page that has been finished previously. This
+%   means you are able to access mark information for the current page
+%   as well as for the page before if you are inside the output
+%   routine, without the need to explicitly save that information
+%   beforehand.
+%
+%   In single column documents the \texttt{column} is the same as the
+%   \texttt{page} region, but in two-column documents, \texttt{column}
+%   refers to the current column that just got finished and
+%   \text{previous-column} to the one previously finished.  Code for
+%   running headers are (in standard \LaTeX{}) only evaluated when
+%   both columns are assembled, which is another way of saying that in
+%   that case \texttt{previous-column} refers to the left column and
+%   \texttt{column} to the right column.
+%   However, to make this a bit nicer to access, there are also alias
+%   regions named \texttt{first-column} and
+%   \texttt{last-column}\footnote{This is called \enquote{last} not \enquote{second}
+%   in anticipation of extending the mechanism to multiple columns,
+%   where first and last would still make sense.} to
+%   access these regions.\footnote{At the moment there aren't any
+%   \texttt{previous-...-column} regions to access the columns from
+%   the previous page. If necessary, the mechanism could be
+%   easily augmented to cover them too, though.}
+%
+%   Note that you can only look backwards at already processed regions,
+%   e.g., in a \texttt{twoside} document finishing a recto (odd,
+%   right-hand) page  you can access the data from the facing verso
+%   (left-hand) page, but if you are finishing a left-hand page you
+%   can't integrate data from the upcoming right-hand page. If such a
+%   scenario needs to be realized then it is necessary to save the
+%   left-hand page temporarily instead of finalizing it, process
+%   material for the right-hand page and once both are ready, attach
+%   running headers and footers and shipout out both in one
+%   go.\footnote{As of now that scenario is not yet officially supported.}
+%
+% \begin{function}[EXP]{\IfMarksEqualTF,\mark_if_eq:nnnnTF,\mark_if_eq:nnnnnnTF}
+%   \begin{syntax}
+%     \cs{IfMarksEqualTF}    \oarg{region} \Arg{class} \Arg{pos_1} \Arg{pos_2} \Arg{true} \Arg{false}
+%     \cs{mark_if_eq:nnnnTF} \Arg{region} \Arg{class} \Arg{pos_1} \Arg{pos_2} \Arg{true} \Arg{false}
+%     \cs{mark_if_eq:nnnnnnTF} \Arg{region_1} \Arg{class_1} \Arg{pos_1}
+%  \verb=                    = \Arg{region_2} \Arg{class_2} \Arg{pos_2} \Arg{true} \Arg{false}
+%   \end{syntax}
+%   These conditionals allow you to compare the content of two marks
+%   and act based on the result. The commands work in an expansion
+%   context, if necessary.
+% \end{function}
+%
+%    It is quite common when programming with marks to need to
+%    interrogate conditions such as whether marks have appeared on a
+%    previous page, or if there are multiple marks present on the
+%    current page, and so on.
+%    The tests above allow for the construction of a variety of
+%    typical test scenarios, with three examples presented below.
+%
+%    The first two conditionals cover only the common scenarios.  Both
+%    marks are picked up from the same \meta{region} (by default
+%    \texttt{page}) and they have to be of the same
+%    \meta{class}.\footnote{If an undeclared mark class is used the
+%    tests return \emph{true} (not an error).}
+%    The \meta{pos\textsubscript{\itshape i}} argument can be either
+%    \texttt{top}, \texttt{first}, or \texttt{last}.
+%
+%    If you wish to compare marks across different regions or across
+%    different classes, you have to do it using the generic test only
+%    available in the L3 programming layer or do it manually, i.e.,
+%    get the marks and then compare the values yourself.\footnote{If
+%    two undeclared mark classes are compared the result is always
+%    \emph{true}; if a declared and an undeclared mark class is used
+%    it is always \emph{false}.}
+%
+%   However, the basic version is enough for the following typical use cases:
+%   \begin{description}
+%   \item[Test for at most one mark of class \texttt{myclass} on current
+%      page:]
+%
+%      If the first and last mark in a region are the same then
+%      either there was no mark at all, or there was at most one. To test
+%      this on the current page:
+%\begin{verbatim}
+%  \NewMarkClass{myclass}
+%  \IfMarksEqualTF{myclass}{first}{last}
+%                 { <zero or one mark> }{ <two or more marks> }
+%\end{verbatim}
+%
+%   \item[Test for no mark of class \texttt{myclass} in the previous
+%      page:]
+%
+%      If the top mark is the same as the first mark, there is no mark
+%      in the region at all. If we wanted to do this test for the
+%      previous page:
+%\begin{verbatim}
+%  \IfMarksEqualTF[previous-page]{myclass}{top}{first}
+%                 { <no marks> }{ <at least one mark> }
+%\end{verbatim}
+%      Comparing \texttt{top} and \texttt{last} would give you the
+%      same result.
+%
+%   \item[Test for zero, one, or more than one:]
+%
+%      Combining the two tests from above you can test for zero, one
+%      or more than one mark.
+%\begin{verbatim}
+%  \IfMarksEqualTF{myclass}{top}{first}
+%                 { <no marks> }
+%                 {\IfMarksEqualTF{myclass}{first}{last}
+%                   { <exactly one mark> }{ <more than one mark> }}
+%\end{verbatim}
+%
+% \end{description}
+%
+% If  you need one of such tests more often (or if you want a separate
+% command for it for readability), then consider defining:
+%\begin{verbatim}
+%  \providecommand\IfNoMarkTF[2][page]{\IfMarksEqualTF[#1]{#2}{first}{last}}
+%\end{verbatim}
+%
+%
+%
+% \subsection{Debugging mark code}
+%
+%
+% \begin{function}{\DebugMarksOn,\DebugMarksOff,
+%                  \mark_debug_on:,\mark_debug_off:}
+%   \begin{syntax}
+%     \cs{DebugMarksOn} ...  \cs{DebugMarksOff}
+%   \end{syntax}
+%
+%    Commands to turn the debugging of mark code on or off. The
+%    debugging output is rather coarse and not really intended for
+%    normal use at this point in time.
+%
+% \end{function}
+%
+%
+%
+% \section{Application examples}
+%
+% If you want to figure out if a break was taken at a specific point,
+% e.g., whether a heading appears at the top of the page,
+% you can do something like this:
+%\begin{verbatim}
+% \newcounter{breakcounter}
+% \NewMarkClass{break}
+% \newcommand\markedbreak[1]{\stepcounter{breakcounter}%
+%                            \InsertMark{break}{\arabic{breakcounter}%
+%                            \penalty #1\relax
+%                            \InsertMark{break}{-\arabic{breakcounter}}
+%\end{verbatim}
+% To test if the break was taken you can test if
+% \verb=\TopMark{break}= is positive (taken) or negative (not taken)
+% or zero (there was never any marked break so far).
+%  The absolute value can be used to keep track of which break it
+% was (with some further coding).
+%
+%
+% \emph{to be extended with additional application examples}
+%
+%
+%
+% \section{Legacy \LaTeXe{} interface}
+%
+%  Here we describe the interfaces that \LaTeXe{} offered since the
+%  early nineties and some minor extensions.
+%
+% \subsection{Legacy design-level and document-level interfaces}
+%
+% \begin{function}{\markboth, \markright}
+%   \begin{syntax}
+%     \cs{markboth}   \Arg{left} \Arg{right}
+%     \cs{markright}  \Arg{right}
+%   \end{syntax}
+% \LaTeXe{} uses two marks which aren't fully independent. A
+%   \enquote{left} mark generated by the first argument of \cs{markboth}
+%   and a \enquote{right} mark generated by the second argument of
+%   \cs{markboth} or by the only argument of \cs{markright}. The
+%   command \cs{markboth} and \cs{markright} are in turn called from
+%   heading commands such as \cs{chaptermark} or \cs{sectionmark} and
+%   their behavior is controlled by the document class.
+%
+% For example, in the \cls{article} class with \texttt{twoside} in
+%   force the \cs{sectionmark} will issue \cs{markboth} with an empty
+%   second argument and \cs{subsectionmark} will issue
+%   \cs{markright}. As a result the left mark will contain chapter
+%   titles and the right mark subsection titles.
+%
+% Note, however, that in one-sided documents the standard behavior is
+%   that only \cs{markright} is used, i.e., there will only be
+%   right-marks but no left marks!
+% \end{function}
+%
+% \begin{function}[EXP]{\leftmark, \rightmark}
+%   \begin{syntax}
+%     \cs{leftmark}
+%     \cs{rightmark}
+%   \end{syntax}
+%   These functions return the appropriate mark value from the current page
+%   and work as before, that is \cs{leftmark} will get the last (!)
+%   left mark from the page and \cs{rightmark} the first (!) right
+%   mark.
+%
+%   In other words they work reasonably well if you want to show the
+%   section title that is current when you are about to turn the page and
+%   also show the first subsection title on the current page (or the last
+%   from the previous page if there wasn't one). Other combinations
+%   can't be shown using this interface.
+%
+%   The commands are fully expandable, because this is how they have
+%   been always defined in \LaTeX{}. However, this is of course
+%   only true if the content of the mark they return is itself
+%   expandable and does not contain any fragile material. Given that
+%   this can't be guaranteed for arbitrary content, a programmer using
+%   them in this way should use \cs{protected at edef} and \emph{not}
+%   \cs{edef} to avoid bad surprises as far as this is possible, or use
+%   the new interfaces (\cs{TopMark}, \cs{FirstMark}, and \cs{LastMark})
+%   which return the \meta{text} in \cs{exp_not:n} to prevent
+%   uncontrolled expansion.
+% \end{function}
+%
+%
+% \subsection{Legacy interface extensions}
+%
+%   The new implementation adds three mark classes: \texttt{2e-left},
+%   \texttt{2e-right} and \texttt{2e-right-nonempty} and patches
+%   \cs{markboth} and \cs{markright} slightly so that they also update
+%   these new mark classes, so that the new classes work with existing
+%   document classes.
+%
+%   As a result you can use \verb=\LastMark{2e-left}= and
+%   \verb=\FirstMark{2e-right}= instead of \cs{leftmark} and
+%   \cs{rightmark}. But more importantly, you can use any of the other
+%   retrieval commands to get a different status value from those
+%   marks, e.g., \verb=\LastMark{2e-right}= would return the last
+%   subsection on the page (instead of the first as
+%   returned by \cs{rightmark}).
+%
+%   The difference between \texttt{2e-right} and
+%   \texttt{2e-right-nonempty}  is that the latter will only be updated
+%   if the material for the mark is not empty. Thus
+%   \verb=\markboth{title}{}= as issued by, say, \cs{sectionmark},
+%   sets a \texttt{2e-left} mark with \texttt{title} and a
+%   \texttt{2e-right} mark with the empty string but does not add a
+%   \texttt{2e-right-nonempty} mark.
+%
+%   Thus, if you have a section at the start of a page and you would
+%   ask for \verb=\FirstMark{2e-right}= you would get an empty string
+%   even if there are subsections on that page. But
+%   \texttt{2e-right-nonempty} would then give you the first or last subsection
+%   on that page. Of course, nothing is simple. If there are no
+%   subsections it would tell you the last subsection from an earlier
+%   page. We therefore need comparison tools, e.g., if top and
+%   first are identical you know that the value is
+%   bogus, i.e., a suitable implementation would be
+%\begin{verbatim}
+% \IfMarksEqualTF{2e-right-nonempty}{top}{first}
+%                { <appropriate action if there was no real mark> }
+%                {\FirstMark{2e-right-nonempty}}
+%\end{verbatim}
+%
+%
+%
+% \section{Notes on the mechanism}
+%
+% In contrast to vanilla \TeX, \eTeX{} extends the mark system to
+% allow multiple independent marks. However, it does not solve the
+% \cs{topmark} problem which means that \LaTeX{} still needs to manage
+% marks almost independently of \TeX{}. The reason for this is that
+% the more complex output routine used by \LaTeX{} to handle floats
+% (and related structures) means that \tn{topmark(s)} remain
+% unreliable. Each time the output routine is fired up, \TeX{} moves
+% \tn{botmark} to \tn{topmark}, and while \eTeX{} extends this to
+% multiple registers the fundamental concept remains the same. That
+% means that the state of marks needs to be tracked by \LaTeX{}
+% itself. An early implementation of this package used \TeX{}'s
+% \tn{botmark} only to ensure the correct interaction with the output
+% routine (this was before the \eTeX{} mechanism was even
+% available). However, other than in a prototype implementation for
+% \LaTeX3, this package was never made public.
+%
+% The new implementation now uses \eTeX{}'s marks as they have some
+% advantages, because with them we can leave the mark text within the
+% galley and only extract the marks during the output routine when we
+% are finally shipping out a page or storing away a column for use in
+% the next page. That means we do not have to maintain a global data
+% structure that we have to keep in sync with informational marks in
+% the galley but can rely on everything being in one place and thus
+% manipulations (e.g.~reordering of material) will take the marks with
+% them without a need for updating a fragile linkage.
+
+% To allow for completely independent marks we use the following
+% procedure:
+% \begin{itemize}
+%   \item
+%
+%     For every type of marks we allocate a mark class so
+%     that in the output routine \TeX{} can calculate for each class
+%     the current
+%     top, first, and bottom mark independently. For this we use
+%     \cs{newmarks}, i.e., one marks register per class.
+%
+%   \item
+%
+%     As already mentioned firing up an output routine without
+%     shipping out a page means that \TeX's top marks get wrong so it
+%     is impossible to rely on \TeX's approach directly. What we do
+%     instead is to keep track of the real marks (for the last page or
+%     more generally last region) in some global variables.
+%
+%   \item
+%
+%     These variables are updated in the output routine at defined
+%     places, i.e., when we do real output processing but not if we
+%     use special output routines to do internal housekeeping.
+%
+%   \item
+%
+%     The trick we use to get correctly updated variables is the
+%     following: the material that contains new marks (for example the
+%     page to be shipped out) is stored in a box. We then use \TeX{}
+%     primitive box splitting functions by splitting off the largest
+%     amount possible (which should be the whole box if nothing goes
+%     really wrong). While that seems a rather pointless thing to do, it
+%     has one important side effect: \TeX{} sets up first and bottom
+%     marks for each mark class from the material it has split off. This
+%     way we get the first and last marks (if there have been any) from
+%     the material in the box.
+%
+%   \item
+%
+%     The top marks are simply the last marks from the previous
+%     page or region. And if there hasn't been a first or bottom mark in
+%     the box then the new top mark also becomes new first and last mark
+%     for that class.
+%
+%   \item
+%
+%     That mark data is then stored in global token lists for use
+%     during the output routine and legacy commands such as
+%     \cs{leftmark} or new commands such as \cs{TopMark} simply access
+%     the data stored in these token lists.
+%  \end{itemize}
+%  That's about it in a nutshell. Of course, there are some details to
+%  be taken care of---those are discussed in the implementation sections.
+%
+%
+% \section{Internal output routine functions}
+%
+% The functions in this section are tied to the output routine and used in the
+% interface to \LaTeXe{} and perhaps at some later time within a new
+% output routine
+% for \LaTeX. They are not meant for general use and are therefore made internal.
+% Internal means that \verb|@@| automatically gets
+% replaced in the code (and in the documentation) so we have to give
+% it a suitable value.
+%    \begin{macrocode}
+%<@@=mark>
+%    \end{macrocode}
+%
+% \begin{function}{\@@_update_singlecol_structures:}
+%   \begin{syntax}
+%     \cs{@@_update_singlecol_structures:}
+%   \end{syntax}
+%   \LaTeXe{} integration function in case we are doing single column
+%   layouts.  It assumes that the page content is already stored in
+%   \cs{@outputbox} and processes the marks inside that box. It is
+%   called as part of \cs{@opcol}.
+% \end{function}
+%
+%
+% \begin{function}{\@@_update_dblcol_structures:}
+%   \begin{syntax}
+%     \cs{@@_update_singlecol_structures:}
+%   \end{syntax}
+%   \LaTeXe{} integration function mark used when we are doing double
+%   column documents. It assumes that the page content is already
+%   stored in \cs{@outputbox} and processes the marks inside that
+%   box. It then does different post-processing depending on the start
+%   of the switch \cs{if at firstcolumn}. If we are in the second column
+%   it also has to update page marks, otherwise it only updates column
+%   marks. It too is called as part of \cs{@opcol}.
+% \end{function}
+%
+% \begin{function}{\@@_update_structure:nn}
+%   \begin{syntax}
+%     \cs{@@_update_structure:nn}  \Arg{region} \Arg{material with marks}
+%   \end{syntax}
+%   Helper function that inspects the marks
+%   inside the second argument and assigns new mark values based on
+%   that to the \meta{region} given in the first argument.
+%   For this it first copies the mark structure from \meta{region} to
+%   \texttt{previous-}\meta{region} and then takes all last mark
+%   values currently in the region and makes them the new top mark
+%   values. Finally it assigns new first and last values for all mark
+%   classes based on what was found in the second argument.
+%
+%   As a consequence, the allowed values for \meta{region} are
+%   \texttt{page} and \texttt{column} because only they have
+%   \texttt{previous-...} counterparts.
+%
+%   Another important part to keep in mind is that marks are only
+%   recognized if they appear on top-level, e.g., if we want to
+%   process material stored in boxes we need to put it unboxed (using
+%   \cs{unvcopy} etc.)\ into the second argument.
+% \end{function}
+%
+%
+%
+% \begin{function}{\@@_update_structure_alias:nn}
+%   \begin{syntax}
+%     \cs{@@_update_structure_alias:nn} \Arg{alias} \Arg{source}
+%   \end{syntax}
+%   Helper function that copies all mark values in the \meta{source}
+%   region to \meta{alias}, i.e., make the structures identical. Used
+%   to update the \texttt{previous-...} structures inside
+%   \cs{@@_update_structure:nn} and \texttt{first-column} and
+%   \texttt{last-column} structures inside
+%   \cs{@@_update_singlecol_structures:} or
+%   \cs{@@_update_dblcol_structures:}.
+% \end{function}
+%
+%
+%
+%
+% \begin{function}{\@@_update_structure_to_err:n}
+%   \begin{syntax}
+%     \cs{@@_update_structure_to_err:n} \Arg{region}
+%   \end{syntax}
+%   Helper function that sets all mark values in the \meta{region} to
+%   an error message. This is currently used for \texttt{last-column}
+%   at times where using marks from it would be questionable/wrong, i.e.,
+%   when we have just processed the first column in a two-column document.
+% \end{function}
+%
+%
+%
+% ^^A \end{documentation}
+%
+%
+%
+%
+%
+% \StopEventually{\setlength\IndexMin{200pt}  \PrintIndex  }
+%
+%
+% \section{The Implementation}
+%
+%
+%
+%    \begin{macrocode}
+%<*2ekernel|latexrelease>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\ExplSyntaxOn
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<latexrelease>\NewModuleRelease{2022/06/01}{ltmarks}
+%<latexrelease>                 {Marks~handling}
+%    \end{macrocode}
+%
+% \subsection{Allocating new mark classes}
+%
+%
+% \begin{variable}{\g_@@_classes_seq}
+%    A list holding all the mark classes that have been declared.
+%    \begin{macrocode}
+\seq_new:N \g_@@_classes_seq
+%    \end{macrocode}
+% \end{variable}
+%
+%
+%
+%
+% \begin{macro}{\mark_new_class:n,\@@_new_class:nn}
+%    A mark class is created by initializing a number of data
+%    structures.  First, we get a register number to refer to the mark class.
+%    The new mark class is then added to the \cs{g_@@_classes_seq}
+%    sequence to be able to easily loop over all classes.  Finally a
+%    number of top-level global token lists are declared that hold
+%    various versions of the mark for access.
+%    \begin{macrocode}
+\cs_new_protected:Npn \mark_new_class:n #1
+{
+  \seq_if_in:NnTF \g_@@_classes_seq {#1}
+      {
+        \msg_error:nnn { mark } { class-already-defined }
+          {#1}
+      }
+      { \@@_new_class:nn {#1} }
+}
+%    \end{macrocode}
+%    This is only available in the preamble.
+% \changes{v1.0c}{2022/05/06}{Wrong command made \cs{@onlypreamble}}
+%    \begin{macrocode}
+\@onlypreamble \mark_new_class:n
+%    \end{macrocode}
+%    The internal command carries out the necessary allocations.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_new_class:nn #1
+{
+%<*trace>
+  \@@_debug:n { \iow_term:x { Marks:~new~mark:~#1~\msg_line_context: } }
+%</trace>
+%    \end{macrocode}
+%    Use the \LaTeXe{} interface for now as the L3 programming layer
+%    doesn't have one for marks yet.
+%    \begin{macrocode}
+  \exp_args:Nc \newmarks {c_@@_class_ #1 _mark}
+%    \end{macrocode}
+%    Remember the new class in the sequence.
+%    \begin{macrocode}
+  \seq_gput_right:Nn \g_@@_classes_seq {#1}
+%    \end{macrocode}
+%    We need three token lists for each region, one for top, first,
+%    and last.
+%    \begin{macrocode}
+  \tl_new:c   { g_@@_page_top_   #1 _tl }
+  \tl_new:c   { g_@@_page_first_ #1 _tl }
+  \tl_new:c   { g_@@_page_last_  #1 _tl }
+%    \end{macrocode}
+%    For the \texttt{page} region we also keep track of the
+%    \texttt{previous-page}.
+%    \begin{macrocode}
+  \tl_new:c   { g_@@_previous-page_top_   #1 _tl }
+  \tl_new:c   { g_@@_previous-page_first_ #1 _tl }
+  \tl_new:c   { g_@@_previous-page_last_  #1 _tl }
+%    \end{macrocode}
+%    Same game for \texttt{column} and \texttt{previous-column}
+%    \begin{macrocode}
+  \tl_new:c   { g_@@_column_top_   #1 _tl }
+  \tl_new:c   { g_@@_column_first_ #1 _tl }
+  \tl_new:c   { g_@@_column_last_  #1 _tl }
+  \tl_new:c   { g_@@_previous-column_top_   #1 _tl }
+  \tl_new:c   { g_@@_previous-column_first_ #1 _tl }
+  \tl_new:c   { g_@@_previous-column_last_  #1 _tl }
+%    \end{macrocode}
+%    But for columns we also allocate token lists for the alias
+%    regions \texttt{first-column} and \texttt{last-column}.
+%    \begin{macrocode}
+  \tl_new:c   { g_@@_first-column_top_   #1 _tl }
+  \tl_new:c   { g_@@_first-column_first_ #1 _tl }
+  \tl_new:c   { g_@@_first-column_last_  #1 _tl }
+  \tl_new:c   { g_@@_last-column_top_    #1 _tl }
+  \tl_new:c   { g_@@_last-column_first_  #1 _tl }
+  \tl_new:c   { g_@@_last-column_last_   #1 _tl }
+}
+%    \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \subsection{Updating mark structures}
+%
+%
+%  \begin{macro}{\l_@@_box,\g_@@_tmp_tl,\g_@@_new_top_tl}
+%    For some operations we need a temporary private box and two
+%    private global token lists.
+%    \begin{macrocode}
+\box_new:N \l_@@_box
+\tl_new:N  \g_@@_tmp_tl
+\tl_new:N  \g_@@_new_top_tl
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%  \begin{macro}{\@@_update_structure:nn}
+%
+%    This function updates the mark structures. The first argument is
+%    the region to update and second argument receives the material
+%    that holds the marks. Out of this material we extract the first
+%    and last marks for all classes (if there are any) to do the
+%    assignments.
+%
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_update_structure:nn #1#2
+  {
+%    \end{macrocode}
+%    First thing we do is copying the current structure to
+%    \texttt{previous-...}; this leaves the current structure
+%    untouched so we can update it class by class (which is necessary).
+%    \begin{macrocode}
+    \@@_update_structure_alias:nn { previous-#1 } {#1}
+%    \end{macrocode}
+%    Getting the first and last marks out of the material in \verb=#2=
+%    is done by putting the material in a box and then doing a
+%    split operation to the maximum size possible (which hopefully
+%    means all of the content).\footnote{We could verify this, maybe we
+%    should.} Because this is an action only for the sake of getting
+%    at the mark values we don't want any underfull
+%    box warnings so we turn those (locally) off.
+%    \begin{macrocode}
+    \group_begin:
+      \dim_set_eq:NN \tex_splitmaxdepth:D \c_max_dim
+      \int_set_eq:NN \tex_vbadness:D      \c_max_int
+      \dim_set_eq:NN \tex_vfuzz:D         \c_max_dim
+%    \end{macrocode}
+%    There is a further complication: if the region contains infinite
+%    shrinking glue then a \tn{vsplit} operation will balk with a
+%    low-level error. Now pages or columns, which are our main concern here, can't
+%    have such infinite shrinkage if they are cut straight from the
+%    galley, however the use of \tn{enlargethispage} actually does add
+%    some at the very bottom (and also wraps the whole page into a box
+%    by itself, so if we leave it this way then a) we get this error
+%    and b) we don't see any marks because they are hidden one level
+%    down).
+%      
+%    Another possible issue are packages or user code that place stray
+%    \tn{vbox}es directly into the main galley (an example is
+%    \pkg{marginnote} that attaches its marginals in this way). If such
+%    boxes end up as the last item on the page we should not unpack
+%    them.
+%
+%    We therefore do an \tn{unskip} to get rid of that glue if present and
+%    also check if we have then a \tn{vbox} as the last item and if so
+%    unpack that too, but only under certain conditions, see
+%    below. All this is temporary, just for getting the
+%    marks out, so it doesn't affect the final page production.
+%
+%    In fact, we go one step further and set the box to a large
+%    negative height possible and afterwards take a look at the
+%    reported badness: if it is zero we know that there has still been
+%    infinite shrinkage in the box so that we can't do a
+%    \tn{vsplit}. If that is the case we generate an error message and
+%    bypass extracting the marks. We use only half of \cs{c_max_dim}
+%    because otherwise \TeX{} will report an overfull vbox despite our
+%    setting of \cs{tex_vfuzz:D}. This test will not find existing
+%    infinite shrinkage in all cases, e.g., if there are several glues
+%    that cancel each other, but it is the best we can do.
+%    \begin{macrocode}
+      \vbox_set_to_ht:Nnn \l_@@_box { -.5\c_max_dim }
+        {
+          #2
+          \tex_unskip:D
+          \box_set_to_last:N \l_@@_box
+%    \end{macrocode}
+%    After having removed the last box from the current list (if there
+%    was one)
+%    we check if the list is now empty. If not, the the last box is
+%    definitely not the one from \tn{enlargethispage} and so we can
+%    and should leave it alone. Otherwise we check if this last box is
+%    a \tn{vbox}.
+% \changes{v1.0d}{2022/06/01}{Extend the logic for detecting the marks
+%    in the box (gh/836)}
+%    \begin{macrocode}
+          \int_compare:nNnT \tex_lastnodetype:D < 0
+            {
+              \box_if_vertical:NT \l_@@_box
+                {
+%    \end{macrocode}
+%    If it is we do a further test and reset the \cs{l_@@_box}
+%    to check if it contains infinitely shrinkable glue.
+%    \begin{macrocode}
+                  \vbox_set_to_ht:Nnn \l_@@_box { -.5\c_max_dim }
+                    {
+                      \vbox_unpack:N \l_@@_box
+                      \tex_kern:D \c_zero_dim % ensure that box
+                                              % is not empty
+                    }
+%    \end{macrocode}
+%    If not, then we unpack it, if yes we still ignore it for the process of
+%    mark extraction. We do not generate an error though, because in all
+%    likelihood this is an ordinary box like a marginal that does
+%    contain something like \tn{vss}.
+%    \begin{macrocode}
+                    \int_compare:nNnT \tex_badness:D > 0
+                      { \vbox_unpack:N \l_@@_box }
+                  }
+            }
+%    \end{macrocode}
+%    If it wasn't a vbox, it was either an hbox or there was no box.
+%    Given that we are only interested in the marks we don't need put
+%    it back in that case. However, we have to make sure that the
+%    outer box under construction
+%    is not totally empty (which it might have been from the start, or
+%    now), because \TeX{} does not report a badness for empty boxes
+%    and that means our test would incorrectly conclude that we have
+%    infinite shrinking glue. A simple \tn{kern} is enough to avoid
+%    this (the same was already done above).
+%    \begin{macrocode}
+          \tex_kern:D \c_zero_dim
+        }
+      \int_compare:nNnTF \tex_badness:D > 0
+%    \end{macrocode}
+%    If the box had no infinite shrinkage (or rather if our test
+%    didn't show any) we vsplit it. Note that it
+%    doesn't matter that we set it to this strange size first. If there
+%    was infinite shrinkage after all, we end up with a low-level
+%    \TeX{} error, but if there is, it is a coding error and needs
+%    correcting.
+%    \begin{macrocode}
+        {
+          \vbox_set_split_to_ht:NNn \l_@@_box \l_@@_box \c_max_dim
+%    \end{macrocode}
+%    After this action we can get first and last marks of the various
+%    classes through \cs{tex_splitfirstmarks:D} and
+%    \cs{tex_splitbotmarks:D}. So now we loop over all classes stored in
+%    \cs{g_@@_classes_seq}.
+%    \begin{macrocode}
+          \seq_map_inline:Nn \g_@@_classes_seq
+            {
+%    \end{macrocode}
+%    First action: get the last mark from the previous region, i.e.,
+%    \verb=previous-#1=.  But because it is also still inside \verb=#1=,
+%    at the moment we use that to construct the name because this is a
+%    tiny bit faster. Given that we
+%    need this value in various assignments we store it away which
+%    avoids unnecessary further csname generations.
+%    \begin{macrocode}
+              \tl_gset_eq:Nc \g_@@_new_top_tl { g_@@_#1_last_##1_tl }
+%    \end{macrocode}
+%    This will first of all become the new top mark for the current class.
+%    \begin{macrocode}
+              \tl_gset_eq:cN { g_@@_#1_top_##1_tl } \g_@@_new_top_tl
+%    \end{macrocode}
+%    Next action is to get ourselves the new last mark from the
+%    material supplied.
+%    \begin{macrocode}
+              \tl_gset:No \g_@@_tmp_tl
+                { \tex_splitbotmarks:D \use:c { c_@@_class_##1_mark } }
+%    \end{macrocode}
+%    If this mark doesn't exist then obviously first mark does
+%    neither, so both become the last mark from the previous region. We
+%    have to be a little careful here: something like
+%    \verb=\mark_insert:nn{foo}{}= adds an \enquote{empty} mark that should
+%    not be confused with no mark at all. But no mark in our material
+%    will result in \cs{g_@@_tmp_tl} being fully empty. This is why we
+%    have to make sure that \enquote{empty} from \cs{mark_insert:nn} only
+%    appears to be empty but fails the next test (see below how this
+%    is done).
+%    \begin{macrocode}
+              \tl_if_empty:NTF \g_@@_tmp_tl
+                {
+                  \tl_gset_eq:cN { g_@@_#1_last_ ##1_tl }
+                    \g_@@_new_top_tl
+                  \tl_gset_eq:cN { g_@@_#1_first_##1_tl }
+                    \g_@@_new_top_tl
+                }
+%    \end{macrocode}
+%    If it wasn't empty, i.e., if it had a real value then we use this
+%    value for our new last mark instead.
+%    \begin{macrocode}
+                {
+                  \tl_gset_eq:cN { g_@@_#1_last_##1_tl } \g_@@_tmp_tl
+%    \end{macrocode}
+%    Because we had a last mark we also have a first mark (which
+%    might be the same, but might be not), so we pick that up and
+%    assign it to the appropriate token list. This explains why we first
+%    checked for the last mark because that makes the processing
+%    faster in case there is none.
+%    \begin{macrocode}
+                  \tl_gset:co { g_@@_#1_first_##1_tl }
+                    {
+                      \tex_splitfirstmarks:D
+                        \use:c { c_@@_class_##1_mark }
+                    }
+                }
+            }
+        }
+%    \end{macrocode}
+%    If the badness was zero (we actually tested for${}>0$ but it
+%    can't get negative) then we had infinite shrinkage, so we report
+%    that and set all marks to the value the last mark had before.
+%    \begin{macrocode}
+        {
+          \msg_error:nnn { mark } { infinite-shrinkage } {#1}
+          \seq_map_inline:Nn \g_@@_classes_seq
+            {
+              \tl_gset_eq:cc { g_@@_#1_top_  ##1_tl }
+                             { g_@@_#1_last_ ##1_tl }
+              \tl_gset_eq:cc { g_@@_#1_first_##1_tl }
+                             { g_@@_#1_last_ ##1_tl }
+            }
+        }
+%    \end{macrocode}
+%    Once all mark classes have been processed the data structures are
+%    updated and we can close the group which undoes our local
+%    changes and retains only the global ones.
+%    \begin{macrocode}
+    \group_end:
+  }
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%  \begin{macro}{\@@_update_structure_alias:nn}
+%    This function copies the structure for one region to  another
+%    (name), e.g., from \texttt{page} to \texttt{previous-page} above,
+%    or later from \texttt{column} to \texttt{first-column}, etc.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_update_structure_alias:nn #1#2 {
+%    \end{macrocode}
+%    This requires a simple loop through all mark classes copying the
+%    token list from one name to the next.
+%    \begin{macrocode}
+  \seq_map_inline:Nn \g_@@_classes_seq
+    {
+      \tl_gset_eq:cc { g_@@_ #1 _top_   ##1 _tl }
+                     { g_@@_ #2 _top_   ##1 _tl }
+      \tl_gset_eq:cc { g_@@_ #1 _first_ ##1 _tl }
+                     { g_@@_ #2 _first_ ##1 _tl }
+      \tl_gset_eq:cc { g_@@_ #1 _last_  ##1 _tl }
+                     { g_@@_ #2 _last_  ##1 _tl }
+    }
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+%  \begin{macro}{\@@_update_structure_to_err:n,\@@_error:n}
+%    A slight variation is to install a fixed error message as the value.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_update_structure_to_err:n #1 {
+  \seq_map_inline:Nn \g_@@_classes_seq
+      {
+        \tl_gset:cn { g_@@_ #1 _top_   ##1 _tl } { \@@_error:n {#1} }
+        \tl_gset:cn { g_@@_ #1 _first_ ##1 _tl } { \@@_error:n {#1} }
+        \tl_gset:cn { g_@@_ #1 _last_  ##1 _tl } { \@@_error:n {#1} }
+      }
+}
+%    \end{macrocode}
+%    Given that this is used in only one place, we could hardwire the
+%    argument which would be a bit more compact, but who knows,
+%    perhaps we end up with another reason to use this error command
+%    elsewhere, so for now we keep the argument.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_error:n #1 {
+  \msg_error:nnn { mark } { invalid-use } {#1}
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+%
+% \subsection{Placing and retrieving marks}
+%
+%
+%
+%  \begin{macro}{\mark_insert:nn}
+%    This function puts a mark for some \meta{class} at the current point.
+%    \begin{macrocode}
+\cs_new_protected:Npn \mark_insert:nn #1#2
+{
+  \seq_if_in:NnTF \g_@@_classes_seq {#1}
+      {
+%    \end{macrocode}
+%    We need to pass the evaluated argument into the mark but protected
+%    commands should not expand including those protected using the \cs{protect} approach of
+%    \LaTeXe{}. We also  disable \cs{label} and the
+%    like.\footnote{Straight copy from \texttt{latex.ltx} but is this
+%    even correct? At least a label in a running header makes little
+%    sense if it get set several times! Maybe that needs looking at in
+%    the 2e kernel.}
+%
+%    At this point the code eventually should get a public
+%    (and a kernel) hook instead of a set of hardwired settings.
+%    \begin{macrocode}
+        \group_begin:
+%    \end{macrocode}
+%    Within the group we alter some comments, e.g, \cs{label} or
+%    \cs{index}, to do the right at this point. This is done in the
+%    kernel hook \cs{@kernel at before@insertmark} which is followed by
+%    the public hook \hook{insertmark} that can be used by packages to
+%    augment or alter that setup as necessary.
+%    \begin{macrocode}
+          \@kernel at before@insertmark
+          \hook_use:n { insertmark }
+          \unrestored at protected@xdef \g_@@_tmp_tl {#2}
+%<*trace>
+          \@@_debug:n{ \iow_term:x { Marks:~ set~#1~<-~
+              '\tl_to_str:V \g_@@_tmp_tl' ~ \msg_line_context: } }
+%</trace>
+          \tex_marks:D \use:c { c_@@_class_ #1 _mark }
+            {
+%    \end{macrocode}
+%    Here is the trick to avoid truly empty marks: if the result from
+%    the above processing is empty we add something which eventually
+%    becomes empty, but not immediately; otherwise we just put
+%    \cs{g_@@_tmp_tl} in.
+%    \begin{macrocode}
+              \tl_if_empty:NTF \g_@@_tmp_tl
+                { \exp_not:n { \prg_do_nothing: } }
+                { \exp_not:o { \g_@@_tmp_tl } }
+            }
+        \group_end:
+%    \end{macrocode}
+%    A mark introduces a possible break point and in certain
+%    situations that should not happen in vertical mode in \LaTeX{}.
+%    This needs some cleanup \ldots.
+%    \begin{macrocode}
+        \if at nobreak\ifvmode\nobreak\fi\fi
+      }
+%    \end{macrocode}
+%    If the mark class was not known, raise an error.
+%    \begin{macrocode}
+      {
+        \msg_error:nnx { mark } { unknown-class }
+          { \tl_to_str:n {#1} }
+      }
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+% \begin{macro}[int]{\@kernel at before@insertmark}
+% \begin{macro}{insertmark}
+%    By default \cs{label}, \cs{index}, and \cs{glossary} do nothing
+%    when the mark is inserted.
+%    \begin{macrocode}
+\cs_new:Npn \@kernel at before@insertmark {
+          \cs_set_eq:NN \label    \scan_stop:
+          \cs_set_eq:NN \index    \scan_stop:
+          \cs_set_eq:NN \glossary \scan_stop:
+}
+%    \end{macrocode}
+%    The public hook to augment the setup.
+%    \begin{macrocode}
+\hook_new:n {insertmark}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\mark_use_top:nn, \mark_use_first:nn, \mark_use_last:nn}
+%
+%    To retrieve the first, last or top region mark, we grab the
+%    appropriate value stored in the corresponding token list variable
+%    and pass its contents back. These functions should be used only
+%    in output routines after \cs{@@_update_structure:nn} has acted,
+%    otherwise their value will be wrong.
+%
+%    If used with an unknown class or region they generate an error
+%    (fairly low-level because we are in an expandable context).
+%    \begin{macrocode}
+\cs_new:Npn \mark_use_first:nn #1#2 { \exp_not:v { g_@@_#1_first_#2_tl } }
+\cs_new:Npn \mark_use_last:nn #1#2  { \exp_not:v { g_@@_#1_last_#2_tl }  }
+\cs_new:Npn \mark_use_top:nn #1#2   { \exp_not:v { g_@@_#1_top_#2_tl }   }
+%    \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \subsection{Comparing mark values}
+%
+%
+%
+%  \begin{macro}[TF,EXP]{\mark_if_eq:nnnn,\mark_if_eq:nnnnnn}
+%    Test if in a given region (\verb=#1=) for a given class
+%   (\verb=#2=) the marks in position \verb=#3= and \verb=#4= (top,
+%   first, or last) are identical
+%    \begin{macrocode}
+\prg_new_conditional:Npnn \mark_if_eq:nnnn #1#2#3#4 { T , F , TF }
+{
+  \tl_if_eq:ccTF { g_@@_ #1 _#3_ #2 _tl }
+                 { g_@@_ #1 _#4_ #2 _tl }
+                 \prg_return_true:
+                 \prg_return_false:
+}
+%    \end{macrocode}
+%    The fully general test (with two triplets of the form
+%    \meta{region}, \meta{class}, and \meta{position}) is this:
+%    \begin{macrocode}
+\prg_new_conditional:Npnn \mark_if_eq:nnnnnn #1#2#3#4#5#6 { T , F , TF }
+{
+  \tl_if_eq:ccTF { g_@@_ #1 _#3_ #2 _tl }
+                 { g_@@_ #4 _#6_ #5 _tl }
+                 \prg_return_true:
+                 \prg_return_false:
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+% \subsection{Messages}
+%
+%    Mark errors are LaTeX kernel errors:
+% \changes{v1.0d}{2022/06/01}{Marks are kernel errors}
+%    \begin{macrocode}
+\prop_gput:Nnn \g_msg_module_type_prop { mark } { LaTeX }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\msg_new:nnnn { mark } { class-already-defined }
+  { Mark~class~'#1'~already~defined }
+  {
+    \c__msg_coding_error_text_tl
+    LaTeX~was~asked~to~define~a~new~mark~class~called~'#1':~
+    this~mark~class~already~exists.
+    \c__msg_return_text_tl
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\msg_new:nnnn { mark } { unknown-class }
+  { Unknown~mark~class~'#1'. }
+  {
+    \c__msg_coding_error_text_tl
+    LaTeX~was~asked~to~manipulate~a~mark~of~class~'#1',~
+    but~this~class~of~marks~does~not~exist.
+  }
+%    \end{macrocode}
+%
+%
+%    \begin{macrocode}
+
+\msg_new:nnnn { mark } { invalid-use }
+  { Mark~region~'#1'~not ~usable }
+  {
+    \c__msg_coding_error_text_tl
+    The~region~'#1'~can~only~be~used~after~
+    all~columns~have~been~assembled.
+    \c__msg_return_text_tl
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\msg_new:nnnn { mark } { infinite-shrinkage }
+  { Infinite~shrinkage~found~in~'#1'. }
+  {
+    \c__msg_coding_error_text_tl
+    The~mark~region~'#1'~contains~some~infinite~negative~glue~
+    allowing~it~to~shrink~to~an~arbitrary~size.~
+    This~makes~it~impossible~to~split~the~region~apart~to~
+    get~at~its~marks.~They~are~lost.
+  }
+%    \end{macrocode}
+%
+%
+%
+% \subsection{Debugging the mark structures}
+%
+%  Code and commands in this section are not final, it needs more
+%  experimentation to see what kind of tracing information is going to
+%  be useful in practice. For now the tracing is mainly meant to be used
+%  for code testing and not so much for application testing.
+%
+% It is quite likely that the
+% commands and the behavior of the tracing might change in the
+% future once we gained some experience with it.
+%
+%  \begin{macro}{\g_@@_debug_bool}
+%    Holds the current debugging state.
+%    \begin{macrocode}
+\bool_new:N \g_@@_debug_bool
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \begin{macro}{\mark_debug_on:,\mark_debug_off:}
+%  \begin{macro}{\@@_debug:n}
+%  \begin{macro}{\@@_debug_gset:}
+%    Turns debugging on and off by redefining \cs{@@_debug:n}.
+%    \begin{macrocode}
+\cs_new_eq:NN \@@_debug:n \use_none:n
+\cs_new_protected:Npn \mark_debug_on:
+  {
+    \bool_gset_true:N \g_@@_debug_bool
+    \@@_debug_gset:
+  }
+\cs_new_protected:Npn \mark_debug_off:
+  {
+    \bool_gset_false:N \g_@@_debug_bool
+    \@@_debug_gset:
+  }
+\cs_new_protected:Npn \@@_debug_gset:
+  {
+    \cs_gset_protected:Npx \@@_debug:n ##1
+      { \bool_if:NT \g_@@_debug_bool {##1} }
+  }
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%  \end{macro}
+%
+%
+%
+%  \begin{macro}{\DebugMarksOn,\DebugMarksOff}
+%    CamelCase commands for debugging.
+%    \begin{macrocode}
+\cs_new_eq:NN \DebugMarksOn   \mark_debug_on:
+\cs_new_eq:NN \DebugMarksOff  \mark_debug_off:
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+%  \begin{macro}{\@@_class_status:nn}
+%    Shows the mark values across all regions for one mark class
+%    (\verb=#2=). The first argument gives some \meta{info} to help
+%    identifying where the command was called.
+%    \begin{macrocode}
+%<*trace>
+\cs_new_protected:Npn \@@_class_status:nn #1#2
+   {
+           \typeout{ Marks:~#2~ #1:}
+           \typeout{\@spaces page~ (current):
+             | \exp_not:v { g_@@_page_top_ #2 _tl }
+             | \exp_not:v { g_@@_page_first_ #2 _tl }
+             | \exp_not:v { g_@@_page_last_ #2 _tl }     |}
+           \typeout{\@spaces page~ (previous):
+             | \exp_not:v { g_@@_previous-page_top_ #2 _tl }
+             | \exp_not:v { g_@@_previous-page_first_ #2 _tl }
+             | \exp_not:v { g_@@_previous-page_last_ #2 _tl }     |}
+           \typeout{\@spaces column~ (previous):
+             | \exp_not:v { g_@@_previous-column_top_ #2 _tl }
+             | \exp_not:v { g_@@_previous-column_first_ #2 _tl }
+             | \exp_not:v { g_@@_previous-column_last_ #2 _tl }     |}
+           \typeout{\@spaces column~ (current):
+             | \exp_not:v { g_@@_column_top_ #2 _tl }
+             | \exp_not:v { g_@@_column_first_ #2 _tl }
+             | \exp_not:v { g_@@_column_last_ #2 _tl }     |}
+           \typeout{\@spaces column~ (first):
+             | \exp_not:v { g_@@_first-column_top_ #2 _tl }
+             | \exp_not:v { g_@@_first-column_first_ #2 _tl }
+             | \exp_not:v { g_@@_first-column_last_ #2 _tl }     |}
+           \typeout{\@spaces column~ (second):
+             | \exp_not:v { g_@@_last-column_top_ #2 _tl }
+             | \exp_not:v { g_@@_last-column_first_ #2 _tl }
+             | \exp_not:v { g_@@_last-column_last_ #2 _tl }     |}
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+%
+%  \begin{macro}{\@@_status:n}
+%    Show all mark class values across all regions.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_status:n #1
+  {
+    \seq_map_inline:Nn \g_@@_classes_seq
+      { \@@_class_status:nn {#1} {##1} }
+  }
+%</trace>
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+%
+% \subsection{Designer-level interfaces}
+%
+%
+% \begin{macro}{\NewMarkClass,\InsertMark}
+%    These two are identical to the L3 programming layer commands.
+%    \begin{macrocode}
+\cs_new_eq:NN  \NewMarkClass \mark_new_class:n
+\@onlypreamble \NewMarkClass
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\cs_new_eq:NN \InsertMark  \mark_insert:nn
+%    \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}[EXP]{\TopMark, \FirstMark, \LastMark}
+%    The following commands take an optional argument that defaults to
+%    page. There is no checking that the region is actually valid. If
+%    not there is simply an empty return.
+%    \begin{macrocode}
+\NewExpandableDocumentCommand \FirstMark { O{page} m }
+                    { \mark_use_first:nn {#1}{#2} }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\NewExpandableDocumentCommand \LastMark { O{page} m }
+                    { \mark_use_last:nn {#1}{#2} }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\NewExpandableDocumentCommand \TopMark { O{page} m }
+                    { \mark_use_top:nn {#1}{#2} }
+%    \end{macrocode}
+% \end{macro}
+%
+%
+%
+%  \begin{macro}[EXP]{\IfMarksEqualTF}
+%    We only provide a CamelCase command for the case with one region
+%    (optional) and one class. One could think of also providing a
+%    version for the general case with several optional arguments, but
+%    use cases for this are most likely rare, so not done yet.
+%    \begin{macrocode}
+\NewExpandableDocumentCommand \IfMarksEqualTF {O{page}mmm} {
+  \mark_if_eq:nnnnTF {#1}{#2}{#3}{#4}
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+%
+%  \section{\LaTeXe{} integration}
+%
+%  \subsection{Core \LaTeXe{} integration}
+%
+%  \begin{macro}{\@@_update_singlecol_structures:}
+%    This command updates the mark structures if we are producing a
+%    single column document.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_update_singlecol_structures: {
+%    \end{macrocode}
+%    First we update the \texttt{page} region (which also updates the
+%    \texttt{previous-page}.
+%
+%    The \cs{@outputbox} is normally in \cs{vbox} in \LaTeX{} but we
+%    can't take that for granted (an \pkg{amsmath} test document
+%    changed it to an \cs{hbox} just to trip me up) so we are a little
+%    careful with unpack now.
+%    \begin{macrocode}
+  \box_if_vertical:NTF \@outputbox
+      {
+        \@@_update_structure:nn {page}
+           { \vbox_unpack:N  \@outputbox }
+      }
+      {
+        \@@_update_structure:nn {page}
+           { \hbox_unpack:N  \@outputbox }
+      }
+%    \end{macrocode}
+%    The we provide the necessary updates for the aliases.
+%    \begin{macrocode}
+  \@@_update_structure_alias:nn {previous-column}{previous-page}
+  \@@_update_structure_alias:nn {column}{page}
+  \@@_update_structure_alias:nn {first-column}{page}
+  \@@_update_structure_alias:nn {last-column}{page}
+%<*trace>
+% move this into status itself?
+     \@@_debug:n
+         {
+           \@@_status:n
+                { in~ OR~ (
+                  \legacy_if:nTF {@twoside}
+                         { twoside-
+                           \int_if_odd:nTF \c at page
+                               { odd }{ even }
+                         }
+                         { oneside }
+                         )
+                }
+         }
+%</trace>
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \begin{macro}{\@@_update_dblcol_structures:}
+%    This commands handles the updates if we are doing two-column pages.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_update_dblcol_structures: {
+%    \end{macrocode}
+%    First we update the \texttt{column} and \texttt{previous-column}
+%    regions using the material assembled in \cs{@outputbox}.
+%    \begin{macrocode}
+  \box_if_vertical:NTF \@outputbox
+      {
+        \@@_update_structure:nn {column}
+           { \vbox_unpack:N  \@outputbox }
+      }
+      {
+        \@@_update_structure:nn {column}
+           { \hbox_unpack:N  \@outputbox }
+      }
+%    \end{macrocode}
+%    How we have to update the alias regions depends on whether or not
+%    \cs{@opcol} was called to process the first column or to produce
+%    the completed page
+%    \begin{macrocode}
+  \legacy_if:nTF {@firstcolumn}
+    {
+%    \end{macrocode}
+%    If we are processing the first column then \texttt{column} is our
+%    \texttt{first-column} and there is no \texttt{last-column} yet,
+%    so we make those an error.
+%    \begin{macrocode}
+      \@@_update_structure_alias:nn {first-column}{column}
+      \@@_update_structure_to_err:n {last-column}
+    }
+    {
+%    \end{macrocode}
+%    If we produce the completed page then the \texttt{first-column}
+%    is the same as the new \texttt{previous-column}. However, the
+%    structure should already be correct if you think about it
+%    (because is was set to \texttt{column} last time which is now the
+%    \texttt{previous-column}), thus there is no need to make an update.
+%    \begin{macrocode}
+%     \@@_update_structure_alias:nn {first-column}{previous-column}
+%    \end{macrocode}
+%    However, we now have a proper \texttt{last-column} so we assign that.
+%    \begin{macrocode}
+      \@@_update_structure_alias:nn {last-column}{column}
+%    \end{macrocode}
+%    What now remains doing is to update the \texttt{page} and
+%    \texttt{previous-page} regions. For this we have to copy the
+%    settings in \texttt{page} into \texttt{previous-page} and then
+%    update \texttt{page} such that the top and first marks are taken
+%    from the \texttt{first-column} region and the last marks are
+%    taken from the \texttt{last-column} region. All this has to be
+%    done for all mark classes so we loop over our sequence.
+%
+%    Note that one loop is needed if we arrange the copy statements in
+%    a suitable way.
+%    \begin{macrocode}
+      \seq_map_inline:Nn \g_@@_classes_seq
+        {
+          \tl_gset_eq:cc { g_@@_previous-page_top_   ##1 _tl }
+                         { g_@@_page_top_            ##1 _tl }
+          \tl_gset_eq:cc { g_@@_previous-page_first_ ##1 _tl }
+                         { g_@@_page_first_          ##1 _tl }
+          \tl_gset_eq:cc { g_@@_previous-page_last_  ##1 _tl }
+                         { g_@@_page_last_           ##1 _tl }
+%    \end{macrocode}
+%    The \texttt{page} updates need to come after the corresponding
+%    updates for \texttt{previous-page} otherwise we loose the
+%    necessary value.
+%    \begin{macrocode}
+          \tl_gset_eq:cc { g_@@_page_top_           ##1 _tl }
+                         { g_@@_first-column_top_   ##1 _tl }
+          \tl_gset_eq:cc { g_@@_ page_first_        ##1 _tl }
+                         { g_@@_first-column_first_ ##1 _tl }
+          \tl_gset_eq:cc { g_@@_page_last_          ##1 _tl }
+                         { g_@@_last-column_last_   ##1 _tl }
+        }
+    }
+%<*trace>
+     \@@_debug:n
+         {
+           \@@_status:n
+              { in~ OR~ (
+                \legacy_if:nTF {@twoside}
+                       { twoside-
+                         \int_if_odd:nTF \c at page
+                             { odd }{ even }
+                       }
+                       { oneside }
+                       \space
+                       \legacy_if:nTF {@firstcolumn}
+                              { first~ }{ second~ }
+                              column )
+              }
+         }
+%</trace>
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%    \begin{macrocode}
+%<@@=>
+%    \end{macrocode}
+%
+%  \begin{macro}[int]{\@expl@@@mark at update@singlecol at structures@@,
+%                \@expl@@@mark at update@dblcol at structures@@}
+%    \begin{macrocode}
+\cs_new_eq:NN  \@expl@@@mark at update@singlecol at structures@@
+               \__mark_update_singlecol_structures:
+\cs_new_eq:NN  \@expl@@@mark at update@dblcol at structures@@
+               \__mark_update_dblcol_structures:
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \subsection{Other \LaTeXe{} output routines}
+%
+%  This section will cover \pkg{multicol} and other packages altering
+%  or providing their own output routine. Not done yet.
+%
+%
+%
+%
+%    \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}{ltmarks}%
+%<latexrelease>                 {Undo~Marks~handling}
+%<latexrelease>
+%    \end{macrocode}
+%    We keep the interface commands around even if we roll back in
+%    case they are used in packages that don't roll back. Not likely
+%    to do a lot of good, but then there is not much we can do, but
+%    this at least then doesn't give errors.
+%    \begin{macrocode}
+%<latexrelease>\DeclareRobustCommand \NewMarkClass[1]{}
+%<latexrelease>\DeclareRobustCommand \InsertMark[2]{}
+%<latexrelease>\RenewExpandableDocumentCommand \FirstMark { O{} m } { }
+%<latexrelease>\RenewExpandableDocumentCommand \LastMark { O{} m } { }
+%<latexrelease>\RenewExpandableDocumentCommand \TopMark { O{} m } { }
+%<latexrelease>\RenewExpandableDocumentCommand \IfMarksEqualTF { O{} mmm }{ }
+%<latexrelease>
+%    \end{macrocode}
+%    Same here, this avoided extra roll back code in the OR.
+%    \begin{macrocode}
+%<latexrelease>\let \@expl@@@mark at update@singlecol at structures@@ \relax
+%<latexrelease>\let \@expl@@@mark at update@dblcol at structures@@ \relax
+%<latexrelease>
+%<latexrelease>
+%<latexrelease>\EndModuleRelease
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\ExplSyntaxOff
+%    \end{macrocode}
+%    \begin{macrocode}
+%</2ekernel|latexrelease>
+%    \end{macrocode}
+%
+%    Reset module prefix:
+%    \begin{macrocode}
+%<@@=>
+%    \end{macrocode}
+%
+%
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%


Property changes on: trunk/Master/texmf-dist/source/latex/base/ltmarks.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/source/latex/base/ltmath.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltmath.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltmath.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -38,7 +38,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltmath.dtx}
-              [2021/10/14 v1.2j LaTeX Kernel (Math Setup)]
+              [2022/05/08 v1.2l LaTeX Kernel (Math Setup)]
 % \iffalse
 %</driver>
 %
@@ -74,7 +74,7 @@
 % This file contains a lot of the original plain \TeX{} code, as well
 % as the \LaTeX{} environments for math. It still needs sorting out.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %    \begin{macrocode}
 %<*2ekernel>
@@ -467,8 +467,9 @@
 % \end{macro}
 %
 % \begin{macro}{\openup}
+% \changes{v1.2k}{2022/04/08}{Make \cs{protected} (gh/123)}
 %    \begin{macrocode}
-\def\openup{\afterassignment\@penup\dimen@}
+\protected\def\openup{\afterassignment\@penup\dimen@}
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -1089,7 +1090,19 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \changes{v1.2l}{2022/05/08}{Use consistent math styles under \LuaTeX}
+% \LuaTeX\ contains new math primitives to place expression over or under
+% horizontally extensible glyphs. Before \LuaTeX\ 1.14 these did not work
+% correctly with the |\mathstyle| primitive and sometimes did not use
+% cramped style in consistent ways. For newer version, we opt into the
+% corrected behavior.
 %    \begin{macrocode}
+\ifx\mathdefaultsmode\@undefined\else
+  \mathdefaultsmode=1
+\fi
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 %</2ekernel>
 %    \end{macrocode}
 %

Added: trunk/Master/texmf-dist/source/latex/base/ltmeta.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltmeta.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/base/ltmeta.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -0,0 +1,216 @@
+% \iffalse meta-comment
+%
+%% File: ltmeta.dtx (C) Copyright 2021, 2022
+%       Frank Mittelbach, LaTeX Team
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version.  The latest version
+% of this license is in the file
+%
+%    https://www.latex-project.org/lppl.txt
+%
+%
+%%% From File: ltmeta.dtx
+%
+%    \begin{macrocode}
+\def\ltmetaversion{v1.0b}
+\def\ltmetadate{2022/05/18}
+%    \end{macrocode}
+%<*driver>
+\documentclass{l3doc}
+
+% Fixing footnotes in  functions and variables: this should be in l3doc!
+
+\newcommand\fixfootnote[2]{\footnotemark
+  \AddToHookNext{env/#1/after}{\footnotetext{#2}}}
+\AddToHook{env/function/begin}{\def\footnote{\fixfootnote{function}}}
+\AddToHook{env/variable/begin}{\def\footnote{\fixfootnote{variable}}}
+
+\EnableCrossrefs
+\CodelineIndex
+\begin{document}
+  \DocInput{ltmeta.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+% \providecommand\hook[1]{\texttt{#1}}
+% \providecommand\env[1]{\texttt{#1}}
+%
+%
+%
+% \title{The \texttt{ltmeta.dtx} code\thanks{This file has version
+%    \ltmetaversion\ dated \ltmetadate, \copyright\ \LaTeX\
+%    Project.}}
+% \author{Frank Mittelbach}
+%
+% \maketitle
+%
+%
+% \begin{abstract}
+%    This code defines the \cs{DocumentMetadata} interface.
+% \end{abstract}
+%
+% \tableofcontents
+%
+%
+% \section{Introduction}
+%
+%
+%    In the past there was no dedicated location to declare settings
+%    concerning a document as a whole. Settings are placed somewhere
+%    in the preamble or with the class options or even with some
+%    package options.  For some settings this can be too late, for
+%    example the pdf version can no longer be changed if a package has
+%    used code which already opened the PDF.
+%
+%    \cs{DocumentMetadata} as a new command unifies such settings in
+%    one place.  It must be used before \cs{documentclass} but can be
+%    issued more than once there.
+%
+%    At the moment most of the code run by \cs{DocumentMetadata} is
+%    external to the format and subject to change. This includes the
+%    supported key/values.
+%
+%    For that reason all that happens right now in the format is to
+%    look for suitable support files and if found, to redirect the
+%    processing to them.
+%
+% \subsection{\cs{DocumentMetadata}}
+%
+% \begin{function}{\DocumentMetadata}
+% \begin{syntax}
+%  \cs{DocumentMetadata}\Arg{key-value list}
+% \end{syntax}
+% \end{function}
+%
+%
+%
+%    The keys defined for \cs{DocumentMetadata}
+%    currently allow to set the PDF version, to set the PDF \texttt{/Lang},
+%    to uncompress a PDF, to set the language and to declare a few PDF standards
+%    and some color profiles.
+%
+%    \cs{DocumentMetadata} is also used to
+%    activate the new PDF management code and it loads
+%    a number of required files for the PDF management code.
+%    As this forces the loading of the backend files, a backend
+%    which can't be detected automatically like |dvipdfmx|,
+%    must be set in the first \cs{DocumentMetadata} call (if there is more than one).
+%
+%    The full set of keys currently supported is documented in \texttt{documentmetadata-support.pdf}
+%    for now.
+%
+%
+% \StopEventually{\setlength\IndexMin{200pt}  \PrintIndex  }
+%
+%
+% \section{The Implementation}
+%
+%
+%
+%    \begin{macrocode}
+%<*2ekernel|latexrelease>
+%    \end{macrocode}
+%    Not needed yet but \ldots
+%    \begin{macrocode}
+%\ExplSyntaxOn
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<latexrelease>\NewModuleRelease{2022/06/01}{ltmeta}
+%<latexrelease>                 {Document Metadata handling}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\let \IfDocumentMetadataTF \@secondoftwo
+\protected\def\DocumentMetadata{%
+  \InputIfFileExists{documentmetadata-support.ltx}%
+     {}%
+%    \end{macrocode}
+%    The above file is changing \cs{DocumentMetadata} to a suitable
+%    definition (or so we hope), so that we can try again --- if not
+%    tough.
+%
+%    If the file can't be found we say so and carry on without it.
+%    \begin{macrocode}
+     {%
+       \@latex at error{No support files for
+                    \noexpand\DocumentMetadata found}
+         {Is the 'LaTeX-lab' bundle installed?%
+         \MessageBreak
+         Without it, the declaration is ignored.}%
+%    \end{macrocode}
+%    No point in trying this more than once if there are several calls
+%    in the document.
+%    \begin{macrocode}
+      \let\DocumentMetadata\@gobble
+     }%
+  \let \IfDocumentMetadataTF \@firstoftwo
+  \DocumentMetadata
+}
+%    \end{macrocode}
+%
+%   To allow package and class author to support for document links
+%   we provide also the new interface commands of the hyperref package
+%   for the creation of targets.
+% \changes{v1.0b}{2022/05/17}{Default definition for targets added}
+%  \begin{macro}{\MakeLinkTarget}
+%  \begin{macro}{\LinkTargetOn}
+%  \begin{macro}{\LinkTargetOff}
+%  \begin{macro}{\NextLinkTarget}
+%    \begin{macrocode}
+\NewDocumentCommand\MakeLinkTarget{sO{}m}{%
+  \ifvmode
+    \special{}%
+  \else
+    \@savsf\spacefactor
+    \smash{}%
+    \spacefactor\@savsf
+  \fi}
+\NewDocumentCommand\LinkTargetOn{}{}
+\NewDocumentCommand\LinkTargetOff{}{}
+\NewDocumentCommand\NextLinkTarget{m}{}
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%  \end{macro}
+%  \end{macro}
+%
+%
+%    We do not undo \cs{MakeLinkTarget} and friends if we roll back, in
+%    case they are used in packages that themselves do not offer
+%    rollback. This way a roll forward adds them, but the dummies remain
+%    if you roll back and you don't get missing csname errors if they
+%    are used.
+%    \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}{ltmeta}%
+%<latexrelease>                 {Undo Document Metadata handling}
+%<latexrelease>
+%<latexrelease>\let\DocumentMetadata\@undefined
+%<latexrelease>
+%<latexrelease>\EndModuleRelease
+%    \end{macrocode}
+%    Again for the future \ldots
+%    \begin{macrocode}
+%\ExplSyntaxOff
+%    \end{macrocode}
+%    \begin{macrocode}
+%</2ekernel|latexrelease>
+%    \end{macrocode}
+%
+%    Restore module prefix (if any):
+%    \begin{macrocode}
+%<@@=>
+%    \end{macrocode}
+%
+%
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%


Property changes on: trunk/Master/texmf-dist/source/latex/base/ltmeta.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/source/latex/base/ltmiscen.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltmiscen.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltmiscen.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -81,7 +81,7 @@
 % environments and related commands, the `flushing' environments,
 % (|center|, |flushleft|, |flushright|), and |verbatim|.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %    \begin{macrocode}
 %<*2ekernel>

Modified: trunk/Master/texmf-dist/source/latex/base/ltoutenc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltoutenc.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltoutenc.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -44,7 +44,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltoutenc.dtx}
-             [2021/10/16 v2.0x LaTeX Kernel (font encodings)]
+             [2022/05/27 v2.0z LaTeX Kernel (font encodings)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltoutenc.dtx}
@@ -477,7 +477,7 @@
 % \texttt{TS1} encoding.
 %
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \subsection{Docstrip modules}
 %
@@ -2949,7 +2949,7 @@
         \endgroup
       }
     \else
-      \newluafunction\@remove at tlig@@@@
+      \newprotectedluacmd\@remove at tlig@@@
 %    \end{macrocode}
 % Now we can define the function. Mostly we just have to insert a protected glyph
 % node, which is a glyph node with subtype 256. But we have to keep track of the
@@ -2956,7 +2956,7 @@
 % current mode to avoid inserting the glyph into a vlist.
 %    \begin{macrocode}
       \now at and@everyjob{\directlua{
-        local rawchar_func = token.create'@remove at tlig@@@@'.index
+        local rawchar_func = token.create'@remove at tlig@@@'.index
         local forcehmode = tex.forcehmode
         local put_next = token.put_next
         local glyph_id = node.id'glyph'
@@ -2972,7 +2972,6 @@
           n.char = token.scan_int()
           return node.write(n)
         end
-        token.set_lua('@remove at tlig@@@', rawchar_func, 'global', 'protected')
       }}
 %    \end{macrocode}
 % Now \verb+\remove at tlig+ can be implemented almost as in XeTeX.
@@ -3017,8 +3016,33 @@
   \char#1\relax}
 %    \end{macrocode}
 %
+%    In its original implementation \cs{DeclareUnicodeAccent} was
+%    given 3 arguments (with second the ``Unicode encoding'' a.k.a.,
+%    \cs{UnicodeEncodingName}) while in other places, e.g.,
+%    \cs{DeclareUnicodeComposite}, we always made encoding implicit. So
+%    we now change it here to implicit too so that the interfaces
+%    become a bit more consistent. To avoid making that a
+%    breaking change (even though it only affects two packages on
+%    CTAN) we test for \verb=#2= being \cs{UnicodeEncodingName}. This
+%    would not catch if somebody used
+%    \verb|\DeclareUnicodeAccent{\=}{TU-sub}{"0304}|
+%    but that fortunately hasn't happened. With the implicit argument
+%    you would need to change \cs{UnicodeEncodingName} instead, as you
+%    have to do anyway for the other interface commands.
+% \changes{v2.0y}{2021/12/12}{\cs{DeclareUnicodeAccent} now makes the
+%                             encoding argument implicit (gh/253)}
 %    \begin{macrocode}
-\def\DeclareUnicodeAccent#1#2#3{%
+\def\DeclareUnicodeAccent#1#2{%
+  \edef\reserved at a{#2}%
+  \edef\reserved at b{\UnicodeEncodingName}%
+  \ifx\reserved at a\reserved at b
+    \def\reserved at a{\DeclareUnicodeAccent@{#1}}%
+  \else
+    \def\reserved at a{\DeclareUnicodeAccent@{#1}\UnicodeEncodingName}%
+  \fi
+  \reserved at a{#2}%
+}  
+\def\DeclareUnicodeAccent@#1#2#3{%
   \DeclareTextCommand{#1}{#2}{\add at unicode@accent{#3}}%
 }
 %    \end{macrocode}
@@ -3059,113 +3083,119 @@
   \def\reserved at b{#1#2}}
 %    \end{macrocode}
 %
+%    Next two commands are simply syntactic sugar to go with the other
+%    \cs{DeclareUnicode...} declarations.
+% \changes{v2.0y}{2021/12/12}{Added \cs{DeclareUnicodeCommand} and
+%    \cs{DeclareUnicodeSymbol} (gh/253)}
 %    \begin{macrocode}
-\DeclareTextCommand\textquotesingle \UnicodeEncodingName{%
-                                                \remove at tlig{"0027}}
-\DeclareTextCommand\textasciigrave  \UnicodeEncodingName{%
-                                                \remove at tlig{"0060}}
-\DeclareTextCommand\textquotedbl    \UnicodeEncodingName{%
-                                                \remove at tlig{"0022}}
+\def\DeclareUnicodeSymbol#1{\DeclareTextSymbol{#1}{\UnicodeEncodingName}}
+\def\DeclareUnicodeCommand#1{\DeclareTextCommand{#1}{\UnicodeEncodingName}}
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\DeclareTextSymbol{\textdollar}          \UnicodeEncodingName{"0024}
-\DeclareTextSymbol{\textless}            \UnicodeEncodingName{"003C}
-\DeclareTextSymbol{\textgreater}         \UnicodeEncodingName{"003E}
-\DeclareTextSymbol{\textbackslash}       \UnicodeEncodingName{"005C}
-\DeclareTextSymbol{\textasciicircum}     \UnicodeEncodingName{"005E}
-\DeclareTextSymbol{\textunderscore}      \UnicodeEncodingName{"005F}
-\DeclareTextSymbol{\textbraceleft}       \UnicodeEncodingName{"007B}
-\DeclareTextSymbol{\textbar}             \UnicodeEncodingName{"007C}
-\DeclareTextSymbol{\textbraceright}      \UnicodeEncodingName{"007D}
-\DeclareTextSymbol{\textasciitilde}      \UnicodeEncodingName{"007E}
-\DeclareTextSymbol{\textexclamdown}      \UnicodeEncodingName{"00A1}
-\DeclareTextSymbol{\textcent}            \UnicodeEncodingName{"00A2}
-\DeclareTextSymbol{\textsterling}        \UnicodeEncodingName{"00A3}
-\DeclareTextSymbol{\textcurrency}        \UnicodeEncodingName{"00A4}
-\DeclareTextSymbol{\textyen}             \UnicodeEncodingName{"00A5}
-\DeclareTextSymbol{\textbrokenbar}       \UnicodeEncodingName{"00A6}
-\DeclareTextSymbol{\textsection}         \UnicodeEncodingName{"00A7}
-\DeclareTextSymbol{\textasciidieresis}   \UnicodeEncodingName{"00A8}
-\DeclareTextSymbol{\textcopyright}       \UnicodeEncodingName{"00A9}
-\DeclareTextSymbol{\textordfeminine}     \UnicodeEncodingName{"00AA}
+\DeclareUnicodeCommand\textquotesingle {\remove at tlig{"0027}}
+\DeclareUnicodeCommand\textasciigrave  {\remove at tlig{"0060}}
+\DeclareUnicodeCommand\textquotedbl    {\remove at tlig{"0022}}
 %    \end{macrocode}
+%
+%    \begin{macrocode}
+\DeclareUnicodeSymbol{\textdollar}          {"0024}
+\DeclareUnicodeSymbol{\textless}            {"003C}
+\DeclareUnicodeSymbol{\textgreater}         {"003E}
+\DeclareUnicodeSymbol{\textbackslash}       {"005C}
+\DeclareUnicodeSymbol{\textasciicircum}     {"005E}
+\DeclareUnicodeSymbol{\textunderscore}      {"005F}
+\DeclareUnicodeSymbol{\textbraceleft}       {"007B}
+\DeclareUnicodeSymbol{\textbar}             {"007C}
+\DeclareUnicodeSymbol{\textbraceright}      {"007D}
+\DeclareUnicodeSymbol{\textasciitilde}      {"007E}
+\DeclareUnicodeSymbol{\textexclamdown}      {"00A1}
+\DeclareUnicodeSymbol{\textcent}            {"00A2}
+\DeclareUnicodeSymbol{\textsterling}        {"00A3}
+\DeclareUnicodeSymbol{\textcurrency}        {"00A4}
+\DeclareUnicodeSymbol{\textyen}             {"00A5}
+\DeclareUnicodeSymbol{\textbrokenbar}       {"00A6}
+\DeclareUnicodeSymbol{\textsection}         {"00A7}
+\DeclareUnicodeSymbol{\textasciidieresis}   {"00A8}
+\DeclareUnicodeSymbol{\textcopyright}       {"00A9}
+\DeclareUnicodeSymbol{\textordfeminine}     {"00AA}
+%    \end{macrocode}
 %  \changes{v2.0j}{2018/08/11}{Provide \cs{guillemetleft} and \cs{guillemetright}}
 %    \begin{macrocode}
-\DeclareTextSymbol{\guillemetleft}       \UnicodeEncodingName{"00AB}
+\DeclareUnicodeSymbol{\guillemetleft}       {"00AB}
 % old Adobe name
-\DeclareTextSymbol{\guillemotleft}       \UnicodeEncodingName{"00AB}
+\DeclareUnicodeSymbol{\guillemotleft}       {"00AB}
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\DeclareTextSymbol{\textlnot}            \UnicodeEncodingName{"00AC}
-\DeclareTextSymbol{\textregistered}      \UnicodeEncodingName{"00AE}
-\DeclareTextSymbol{\textasciimacron}     \UnicodeEncodingName{"00AF}
-\DeclareTextSymbol{\textdegree}          \UnicodeEncodingName{"00B0}
-\DeclareTextSymbol{\textpm}              \UnicodeEncodingName{"00B1}
-\DeclareTextSymbol{\texttwosuperior}     \UnicodeEncodingName{"00B2}
-\DeclareTextSymbol{\textthreesuperior}   \UnicodeEncodingName{"00B3}
-\DeclareTextSymbol{\textasciiacute}      \UnicodeEncodingName{"00B4}
-\DeclareTextSymbol{\textmu}              \UnicodeEncodingName{"00B5}
-\DeclareTextSymbol{\textparagraph}       \UnicodeEncodingName{"00B6}
-\DeclareTextSymbol{\textperiodcentered}  \UnicodeEncodingName{"00B7}
-\DeclareTextSymbol{\textonesuperior}     \UnicodeEncodingName{"00B9}
-\DeclareTextSymbol{\textordmasculine}    \UnicodeEncodingName{"00BA}
+\DeclareUnicodeSymbol{\textlnot}            {"00AC}
+\DeclareUnicodeSymbol{\textregistered}      {"00AE}
+\DeclareUnicodeSymbol{\textasciimacron}     {"00AF}
+\DeclareUnicodeSymbol{\textdegree}          {"00B0}
+\DeclareUnicodeSymbol{\textpm}              {"00B1}
+\DeclareUnicodeSymbol{\texttwosuperior}     {"00B2}
+\DeclareUnicodeSymbol{\textthreesuperior}   {"00B3}
+\DeclareUnicodeSymbol{\textasciiacute}      {"00B4}
+\DeclareUnicodeSymbol{\textmu}              {"00B5}
+\DeclareUnicodeSymbol{\textparagraph}       {"00B6}
+\DeclareUnicodeSymbol{\textperiodcentered}  {"00B7}
+\DeclareUnicodeSymbol{\textonesuperior}     {"00B9}
+\DeclareUnicodeSymbol{\textordmasculine}    {"00BA}
 %    \end{macrocode}
 %  \changes{v2.0j}{2018/08/11}{Provide \cs{guillemetleft} and \cs{guillemetright}}
 %    \begin{macrocode}
-\DeclareTextSymbol{\guillemetright}      \UnicodeEncodingName{"00BB}
+\DeclareUnicodeSymbol{\guillemetright}      {"00BB}
 % old Adobe name
-\DeclareTextSymbol{\guillemotright}      \UnicodeEncodingName{"00BB}
+\DeclareUnicodeSymbol{\guillemotright}      {"00BB}
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\DeclareTextSymbol{\textonequarter}      \UnicodeEncodingName{"00BC}
-\DeclareTextSymbol{\textonehalf}         \UnicodeEncodingName{"00BD}
-\DeclareTextSymbol{\textthreequarters}   \UnicodeEncodingName{"00BE}
-\DeclareTextSymbol{\textquestiondown}    \UnicodeEncodingName{"00BF}
-\DeclareTextSymbol{\AE}                  \UnicodeEncodingName{"00C6}
-\DeclareTextSymbol{\DH}                  \UnicodeEncodingName{"00D0}
-\DeclareTextSymbol{\texttimes}           \UnicodeEncodingName{"00D7}
-\DeclareTextSymbol{\O}                   \UnicodeEncodingName{"00D8}
-\DeclareTextSymbol{\TH}                  \UnicodeEncodingName{"00DE}
-\DeclareTextSymbol{\ss}                  \UnicodeEncodingName{"00DF}
-\DeclareTextSymbol{\ae}                  \UnicodeEncodingName{"00E6}
-\DeclareTextSymbol{\dh}                  \UnicodeEncodingName{"00F0}
-\DeclareTextSymbol{\textdiv}             \UnicodeEncodingName{"00F7}
-\DeclareTextSymbol{\o}                   \UnicodeEncodingName{"00F8}
-\DeclareTextSymbol{\th}                  \UnicodeEncodingName{"00FE}
-\DeclareTextSymbol{\DJ}                  \UnicodeEncodingName{"0110}
-\DeclareTextSymbol{\dj}                  \UnicodeEncodingName{"0111}
-\DeclareTextSymbol{\i}                   \UnicodeEncodingName{"0131}
-\DeclareTextSymbol{\IJ}                  \UnicodeEncodingName{"0132}
-\DeclareTextSymbol{\ij}                  \UnicodeEncodingName{"0133}
-\DeclareTextSymbol{\L}                   \UnicodeEncodingName{"0141}
-\DeclareTextSymbol{\l}                   \UnicodeEncodingName{"0142}
-\DeclareTextSymbol{\NG}                  \UnicodeEncodingName{"014A}
-\DeclareTextSymbol{\ng}                  \UnicodeEncodingName{"014B}
-\DeclareTextSymbol{\OE}                  \UnicodeEncodingName{"0152}
-\DeclareTextSymbol{\oe}                  \UnicodeEncodingName{"0153}
-\DeclareTextSymbol{\textflorin}          \UnicodeEncodingName{"0192}
-\DeclareTextSymbol{\j}                   \UnicodeEncodingName{"0237}
-\DeclareTextSymbol{\textasciicaron}      \UnicodeEncodingName{"02C7}
-\DeclareTextSymbol{\textasciibreve}      \UnicodeEncodingName{"02D8}
-\DeclareTextSymbol{\textacutedbl}        \UnicodeEncodingName{"02DD}
-\DeclareTextSymbol{\textgravedbl}        \UnicodeEncodingName{"02F5}
-\DeclareTextSymbol{\texttildelow}        \UnicodeEncodingName{"02F7}
-\DeclareTextSymbol{\textbaht}            \UnicodeEncodingName{"0E3F}
-\DeclareTextSymbol{\SS}                  \UnicodeEncodingName{"1E9E}
-\DeclareTextSymbol{\textcompwordmark}    \UnicodeEncodingName{"200C}
+\DeclareUnicodeSymbol{\textonequarter}      {"00BC}
+\DeclareUnicodeSymbol{\textonehalf}         {"00BD}
+\DeclareUnicodeSymbol{\textthreequarters}   {"00BE}
+\DeclareUnicodeSymbol{\textquestiondown}    {"00BF}
+\DeclareUnicodeSymbol{\AE}                  {"00C6}
+\DeclareUnicodeSymbol{\DH}                  {"00D0}
+\DeclareUnicodeSymbol{\texttimes}           {"00D7}
+\DeclareUnicodeSymbol{\O}                   {"00D8}
+\DeclareUnicodeSymbol{\TH}                  {"00DE}
+\DeclareUnicodeSymbol{\ss}                  {"00DF}
+\DeclareUnicodeSymbol{\ae}                  {"00E6}
+\DeclareUnicodeSymbol{\dh}                  {"00F0}
+\DeclareUnicodeSymbol{\textdiv}             {"00F7}
+\DeclareUnicodeSymbol{\o}                   {"00F8}
+\DeclareUnicodeSymbol{\th}                  {"00FE}
+\DeclareUnicodeSymbol{\DJ}                  {"0110}
+\DeclareUnicodeSymbol{\dj}                  {"0111}
+\DeclareUnicodeSymbol{\i}                   {"0131}
+\DeclareUnicodeSymbol{\IJ}                  {"0132}
+\DeclareUnicodeSymbol{\ij}                  {"0133}
+\DeclareUnicodeSymbol{\L}                   {"0141}
+\DeclareUnicodeSymbol{\l}                   {"0142}
+\DeclareUnicodeSymbol{\NG}                  {"014A}
+\DeclareUnicodeSymbol{\ng}                  {"014B}
+\DeclareUnicodeSymbol{\OE}                  {"0152}
+\DeclareUnicodeSymbol{\oe}                  {"0153}
+\DeclareUnicodeSymbol{\textflorin}          {"0192}
+\DeclareUnicodeSymbol{\j}                   {"0237}
+\DeclareUnicodeSymbol{\textasciicaron}      {"02C7}
+\DeclareUnicodeSymbol{\textasciibreve}      {"02D8}
+\DeclareUnicodeSymbol{\textacutedbl}        {"02DD}
+\DeclareUnicodeSymbol{\textgravedbl}        {"02F5}
+\DeclareUnicodeSymbol{\texttildelow}        {"02F7}
+\DeclareUnicodeSymbol{\textbaht}            {"0E3F}
+\DeclareUnicodeSymbol{\SS}                  {"1E9E}
+\DeclareUnicodeSymbol{\textcompwordmark}    {"200C}
 %    \end{macrocode}
 %    
 % \changes{v2.0u}{2021/02/19}{Add \cs{textnonbreakinghyphen}, \cs{textfiguredash}
 %      and \cs{texthorizontalbar} (gh/404)}
 %    \begin{macrocode}
-%\DeclareTextSymbol{\textnonbreakinghyphen} \UnicodeEncodingName{"2011}
-%\DeclareTextSymbol{\textfiguredash}        \UnicodeEncodingName{"2012}
-\DeclareTextSymbol{\textendash}          \UnicodeEncodingName{"2013}
-\DeclareTextSymbol{\textemdash}          \UnicodeEncodingName{"2014}
-%\DeclareTextSymbol{\texthorizontalbar}   \UnicodeEncodingName{"2015}
+%\DeclareUnicodeSymbol{\textnonbreakinghyphen} {"2011}
+%\DeclareUnicodeSymbol{\textfiguredash}        {"2012}
+\DeclareUnicodeSymbol{\textendash}          {"2013}
+\DeclareUnicodeSymbol{\textemdash}          {"2014}
+%\DeclareUnicodeSymbol{\texthorizontalbar}   {"2015}
 %    \end{macrocode}
 %    Unfortunately some fonts do not implement \texttt{"2011}, \texttt{"2012} and/or
 %    \texttt{"2015} (including the \LaTeX{} default fonts for Unicode
@@ -3175,63 +3205,63 @@
 %    The \verb=\nobreak\hskip\z@= is there to prevent a break after
 %    the hyphen but allow later breaks in the remainder of the word. 
 %    \begin{macrocode}
-\DeclareTextCommand{\textnonbreakinghyphen} \UnicodeEncodingName
+\DeclareUnicodeCommand{\textnonbreakinghyphen} 
      {\iffontchar\font "2011 \char "2011 \else \mbox{-}\nobreak\hskip\z@ \fi}
-\DeclareTextCommand{\textfiguredash}     \UnicodeEncodingName
+\DeclareUnicodeCommand{\textfiguredash}     
      {\iffontchar\font "2012 \char "2012 \else \char "2013 \fi}
-\DeclareTextCommand{\texthorizontalbar}     \UnicodeEncodingName
+\DeclareUnicodeCommand{\texthorizontalbar}     
      {\iffontchar\font "2015 \char "2015 \else \char "2014 \fi}
 %    \end{macrocode}
 %    
 %    \begin{macrocode}
-\DeclareTextSymbol{\textbardbl}          \UnicodeEncodingName{"2016}
-\DeclareTextSymbol{\textquoteleft}       \UnicodeEncodingName{"2018}
-\DeclareTextSymbol{\textquoteright}      \UnicodeEncodingName{"2019}
-\DeclareTextSymbol{\quotesinglbase}      \UnicodeEncodingName{"201A}
-\DeclareTextSymbol{\textquotedblleft}    \UnicodeEncodingName{"201C}
-\DeclareTextSymbol{\textquotedblright}   \UnicodeEncodingName{"201D}
-\DeclareTextSymbol{\quotedblbase}        \UnicodeEncodingName{"201E}
-\DeclareTextSymbol{\textdagger}          \UnicodeEncodingName{"2020}
-\DeclareTextSymbol{\textdaggerdbl}       \UnicodeEncodingName{"2021}
-\DeclareTextSymbol{\textbullet}          \UnicodeEncodingName{"2022}
-\DeclareTextSymbol{\textellipsis}        \UnicodeEncodingName{"2026}
-\DeclareTextSymbol{\textperthousand}     \UnicodeEncodingName{"2030}
-\DeclareTextSymbol{\textpertenthousand}  \UnicodeEncodingName{"2031}
-\DeclareTextSymbol{\guilsinglleft}       \UnicodeEncodingName{"2039}
-\DeclareTextSymbol{\guilsinglright}      \UnicodeEncodingName{"203A}
-\DeclareTextSymbol{\textreferencemark}   \UnicodeEncodingName{"203B}
-\DeclareTextSymbol{\textinterrobang}     \UnicodeEncodingName{"203D}
-\DeclareTextSymbol{\textfractionsolidus} \UnicodeEncodingName{"2044}
-\DeclareTextSymbol{\textlquill}          \UnicodeEncodingName{"2045}
-\DeclareTextSymbol{\textrquill}          \UnicodeEncodingName{"2046}
-\DeclareTextSymbol{\textdiscount}        \UnicodeEncodingName{"2052}
-\DeclareTextSymbol{\textcolonmonetary}   \UnicodeEncodingName{"20A1}
-\DeclareTextSymbol{\textlira}            \UnicodeEncodingName{"20A4}
-\DeclareTextSymbol{\textnaira}           \UnicodeEncodingName{"20A6}
-\DeclareTextSymbol{\textwon}             \UnicodeEncodingName{"20A9}
-\DeclareTextSymbol{\textdong}            \UnicodeEncodingName{"20AB}
-\DeclareTextSymbol{\texteuro}            \UnicodeEncodingName{"20AC}
-\DeclareTextSymbol{\textpeso}            \UnicodeEncodingName{"20B1}
-\DeclareTextSymbol{\textcelsius}         \UnicodeEncodingName{"2103}
-\DeclareTextSymbol{\textnumero}          \UnicodeEncodingName{"2116}
-\DeclareTextSymbol{\textcircledP}        \UnicodeEncodingName{"2117}
-\DeclareTextSymbol{\textrecipe}          \UnicodeEncodingName{"211E}
-\DeclareTextSymbol{\textservicemark}     \UnicodeEncodingName{"2120}
-\DeclareTextSymbol{\texttrademark}       \UnicodeEncodingName{"2122}
-\DeclareTextSymbol{\textohm}             \UnicodeEncodingName{"2126}
-\DeclareTextSymbol{\textmho}             \UnicodeEncodingName{"2127}
-\DeclareTextSymbol{\textestimated}       \UnicodeEncodingName{"212E}
-\DeclareTextSymbol{\textleftarrow}       \UnicodeEncodingName{"2190}
-\DeclareTextSymbol{\textuparrow}         \UnicodeEncodingName{"2191}
-\DeclareTextSymbol{\textrightarrow}      \UnicodeEncodingName{"2192}
-\DeclareTextSymbol{\textdownarrow}       \UnicodeEncodingName{"2193}
-\DeclareTextSymbol{\textminus}           \UnicodeEncodingName{"2212}
+\DeclareUnicodeSymbol{\textbardbl}          {"2016}
+\DeclareUnicodeSymbol{\textquoteleft}       {"2018}
+\DeclareUnicodeSymbol{\textquoteright}      {"2019}
+\DeclareUnicodeSymbol{\quotesinglbase}      {"201A}
+\DeclareUnicodeSymbol{\textquotedblleft}    {"201C}
+\DeclareUnicodeSymbol{\textquotedblright}   {"201D}
+\DeclareUnicodeSymbol{\quotedblbase}        {"201E}
+\DeclareUnicodeSymbol{\textdagger}          {"2020}
+\DeclareUnicodeSymbol{\textdaggerdbl}       {"2021}
+\DeclareUnicodeSymbol{\textbullet}          {"2022}
+\DeclareUnicodeSymbol{\textellipsis}        {"2026}
+\DeclareUnicodeSymbol{\textperthousand}     {"2030}
+\DeclareUnicodeSymbol{\textpertenthousand}  {"2031}
+\DeclareUnicodeSymbol{\guilsinglleft}       {"2039}
+\DeclareUnicodeSymbol{\guilsinglright}      {"203A}
+\DeclareUnicodeSymbol{\textreferencemark}   {"203B}
+\DeclareUnicodeSymbol{\textinterrobang}     {"203D}
+\DeclareUnicodeSymbol{\textfractionsolidus} {"2044}
+\DeclareUnicodeSymbol{\textlquill}          {"2045}
+\DeclareUnicodeSymbol{\textrquill}          {"2046}
+\DeclareUnicodeSymbol{\textdiscount}        {"2052}
+\DeclareUnicodeSymbol{\textcolonmonetary}   {"20A1}
+\DeclareUnicodeSymbol{\textlira}            {"20A4}
+\DeclareUnicodeSymbol{\textnaira}           {"20A6}
+\DeclareUnicodeSymbol{\textwon}             {"20A9}
+\DeclareUnicodeSymbol{\textdong}            {"20AB}
+\DeclareUnicodeSymbol{\texteuro}            {"20AC}
+\DeclareUnicodeSymbol{\textpeso}            {"20B1}
+\DeclareUnicodeSymbol{\textcelsius}         {"2103}
+\DeclareUnicodeSymbol{\textnumero}          {"2116}
+\DeclareUnicodeSymbol{\textcircledP}        {"2117}
+\DeclareUnicodeSymbol{\textrecipe}          {"211E}
+\DeclareUnicodeSymbol{\textservicemark}     {"2120}
+\DeclareUnicodeSymbol{\texttrademark}       {"2122}
+\DeclareUnicodeSymbol{\textohm}             {"2126}
+\DeclareUnicodeSymbol{\textmho}             {"2127}
+\DeclareUnicodeSymbol{\textestimated}       {"212E}
+\DeclareUnicodeSymbol{\textleftarrow}       {"2190}
+\DeclareUnicodeSymbol{\textuparrow}         {"2191}
+\DeclareUnicodeSymbol{\textrightarrow}      {"2192}
+\DeclareUnicodeSymbol{\textdownarrow}       {"2193}
+\DeclareUnicodeSymbol{\textminus}           {"2212}
 
 %    \end{macrocode}
 %  \changes{v2.0k}{2018/11/18}{Provide \cs{Hwithstroke} and \cs{hwithstroke}}
 %    \begin{macrocode}
-\DeclareTextSymbol{\Hwithstroke}         \UnicodeEncodingName{"0126}
-\DeclareTextSymbol{\hwithstroke}         \UnicodeEncodingName{"0127}
+\DeclareUnicodeSymbol{\Hwithstroke}         {"0126}
+\DeclareUnicodeSymbol{\hwithstroke}         {"0127}
 %    \end{macrocode}
 %
 % Not all fonts have U+2217 but using U+002A requires some adjustment.
@@ -3238,7 +3268,7 @@
 % \changes{v2.0t}{2021/02/17}{Adjust values for
 %        \cs{textasteriskcentered} To match TS1 definition (gh/502)}
 %    \begin{macrocode}
-\DeclareTextCommand{\textasteriskcentered}\UnicodeEncodingName{%
+\DeclareUnicodeCommand{\textasteriskcentered}{%
   \iffontchar\font"2217 \char"2217 \else
     \begingroup
       \fontsize
@@ -3251,36 +3281,39 @@
 }
 %    \end{macrocode}
 %    \begin{macrocode}
-\DeclareTextSymbol{\textsurd}            \UnicodeEncodingName{"221A}
-\DeclareTextSymbol{\textlangle}          \UnicodeEncodingName{"2329}
-\DeclareTextSymbol{\textrangle}          \UnicodeEncodingName{"232A}
-\DeclareTextSymbol{\textblank}           \UnicodeEncodingName{"2422}
-\DeclareTextSymbol{\textvisiblespace}    \UnicodeEncodingName{"2423}
-\DeclareTextSymbol{\textopenbullet}      \UnicodeEncodingName{"25E6}
-\DeclareTextSymbol{\textbigcircle}       \UnicodeEncodingName{"25EF}
-\DeclareTextSymbol{\textmusicalnote}     \UnicodeEncodingName{"266A}
-\DeclareTextSymbol{\textmarried}         \UnicodeEncodingName{"26AD}
-\DeclareTextSymbol{\textdivorced}        \UnicodeEncodingName{"26AE}
-\DeclareTextSymbol{\textinterrobangdown} \UnicodeEncodingName{"2E18}
+\DeclareUnicodeSymbol{\textsurd}            {"221A}
+\DeclareUnicodeSymbol{\textlangle}          {"2329}
+\DeclareUnicodeSymbol{\textrangle}          {"232A}
+\DeclareUnicodeSymbol{\textblank}           {"2422}
+\DeclareUnicodeSymbol{\textvisiblespace}    {"2423}
+\DeclareUnicodeSymbol{\textopenbullet}      {"25E6}
+\DeclareUnicodeSymbol{\textbigcircle}       {"25EF}
+\DeclareUnicodeSymbol{\textmusicalnote}     {"266A}
+\DeclareUnicodeSymbol{\textmarried}         {"26AD}
+\DeclareUnicodeSymbol{\textdivorced}        {"26AE}
+\DeclareUnicodeSymbol{\textinterrobangdown} {"2E18}
 %    \end{macrocode}
 % Accents must be declared before the composites that use them.
 %    \begin{macrocode}
-\DeclareUnicodeAccent{\`}                \UnicodeEncodingName{"0300}
-\DeclareUnicodeAccent{\'}                \UnicodeEncodingName{"0301}
-\DeclareUnicodeAccent{\^}                \UnicodeEncodingName{"0302}
-\DeclareUnicodeAccent{\~}                \UnicodeEncodingName{"0303}
-\DeclareUnicodeAccent{\=}                \UnicodeEncodingName{"0304}
-\DeclareUnicodeAccent{\u}                \UnicodeEncodingName{"0306}
-\DeclareUnicodeAccent{\.}                \UnicodeEncodingName{"0307}
-\DeclareUnicodeAccent{\"}                \UnicodeEncodingName{"0308}
-\DeclareUnicodeAccent{\r}                \UnicodeEncodingName{"030A}
-\DeclareUnicodeAccent{\H}                \UnicodeEncodingName{"030B}
-\DeclareUnicodeAccent{\v}                \UnicodeEncodingName{"030C}
-\DeclareUnicodeAccent{\b}                \UnicodeEncodingName{"0332}
-\DeclareUnicodeAccent{\d}                \UnicodeEncodingName{"0323}
-\DeclareUnicodeAccent{\c}                \UnicodeEncodingName{"0327}
-\DeclareUnicodeAccent{\k}                \UnicodeEncodingName{"0328}
-\DeclareTextCommand\textcommabelow       \UnicodeEncodingName[1]
+\DeclareUnicodeAccent{\`}{"0300}
+\DeclareUnicodeAccent{\'}{"0301}
+\DeclareUnicodeAccent{\^}{"0302}
+\DeclareUnicodeAccent{\~}{"0303}
+\DeclareUnicodeAccent{\=}{"0304}
+\DeclareUnicodeAccent{\u}{"0306}
+\DeclareUnicodeAccent{\.}{"0307}
+\DeclareUnicodeAccent{\"}{"0308}
+\DeclareUnicodeAccent{\r}{"030A}
+\DeclareUnicodeAccent{\H}{"030B}
+\DeclareUnicodeAccent{\v}{"030C}
+\DeclareUnicodeAccent{\b}{"0332}
+\DeclareUnicodeAccent{\d}{"0323}
+\DeclareUnicodeAccent{\c}{"0327}
+\DeclareUnicodeAccent{\k}{"0328}
+%    \end{macrocode}
+%    The odd one out:
+%    \begin{macrocode}
+\DeclareUnicodeCommand\textcommabelow[1]
   {\hmode at bgroup\ooalign{\null#1\crcr\hidewidth\raise-.31ex
    \hbox{\check at mathfonts\fontsize\ssf at size\z@
    \math at fontsfalse\selectfont,}\hidewidth}\egroup}
@@ -3731,7 +3764,10 @@
   \@elt{\csname opt at fontenc.sty\endcsname}}
 %    \end{macrocode}
 %
+% \changes{v2.0z}{2022/05/27}{Save the version string (gh/825)}
 %    \begin{macrocode}
+\global\expandafter\let\csname ver@@fontenc.sty\expandafter\endcsname
+                       \csname ver at fontenc.sty\endcsname
 \global\expandafter\let\csname ver at fontenc.sty\endcsname\relax
 \global\expandafter\let\csname opt at fontenc.sty\endcsname\relax
 \global\let\@ifl at ter@@\@ifl at ter
@@ -3743,4 +3779,12 @@
 %
 % \Finale
 %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \endinput
+
+^^A  Needed for emacs
+^^A
+^^A  Local Variables: 
+^^A  mode: latex
+^^A  coding: utf-8-unix
+^^A  End: 

Modified: trunk/Master/texmf-dist/source/latex/base/ltoutenc.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltoutenc.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltoutenc.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/ltoutput.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltoutput.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltoutput.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -37,7 +37,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltoutput.dtx}
-             [2021/09/03 v1.4h LaTeX Kernel (Output Routine)]
+             [2022/04/03 v1.4i LaTeX Kernel (Output Routine)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltoutput.dtx}
@@ -120,7 +120,7 @@
 % \changes{v1.2n}{2015/02/21}
 %         {Removed autoload code}
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \def \ie {i.e.~}
 % \def \eg {e.g.~}
@@ -1648,8 +1648,18 @@
 %<*2ekernel|fltrace>
 \def \@opcol {%
   \if at twocolumn
+%    \end{macrocode}
+% \changes{v1.ih}{2022/04/03}{Interface with new mark mechanism}
+%    The funny-looking internal commands are interfacing with the new
+%    marks mechanism. We make sure (elsewhere) that those are always
+%    defined, even when we roll back, so here we add them
+%    unconditionally. This still need turning into a hook or config
+%    point eventually:
+%    \begin{macrocode}
+    \@expl@@@mark at update@dblcol at structures@@
     \@outputdblcol
   \else
+    \@expl@@@mark at update@singlecol at structures@@ 
     \@outputpage
 %<*trace>
     \fl at trace{PAGE: one column (float? see above) page completed}%

Modified: trunk/Master/texmf-dist/source/latex/base/ltpage.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltpage.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltpage.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltpage.dtx}
-             [2020/12/05 v1.0m LaTeX Kernel (page style setup)]
+             [2022/04/03 v1.0n LaTeX Kernel (page style setup)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltpage.dtx}
@@ -112,7 +112,7 @@
 % command (|\ps at ...|) to |\markboth| for setting the heading or to
 % |\@gobbletwo| to do nothing.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %    \begin{macrocode}
 %<*2ekernel>
@@ -180,10 +180,11 @@
 %    \begin{macrocode}
 %</2ekernel>
 %<*2ekernel|latexrelease>
-%<latexrelease>\IncludeInRelease{2019/10/01}%
-%<latexrelease>                 {\markboth}{Make commands robust}%
+%<latexrelease>\IncludeInRelease{2022/06/01}%
+%<latexrelease>                 {\markboth}{New mark support}%
 %    \end{macrocode}
 %
+%
 % \begin{macro}{\markboth}
 % \begin{macro}{\markright}
 % \changes{v1.0d}{1994/05/20}{Changed setting for \cs{protect}.}
@@ -202,12 +203,30 @@
 % \changes{v1.0j}{2000/05/26}{Reimplementation to fix expansion
 %                             error (pr/3203).}
 % \changes{v1.0m}{2020/07/27}{Don't make the command \cs{long} (gh/354)}
+% \changes{v1.0n}{2022/04/04}{Interface with new mark mechanism}
 %    \begin{macrocode}
+\ExplSyntaxOn
 \DeclareRobustCommand*\markboth[2]{%
   \begingroup
     \let\label\relax \let\index\relax \let\glossary\relax
     \unrestored at protected@xdef\@themark {{#1}{#2}}%
     \@temptokena \expandafter{\@themark}%
+%    \end{macrocode}
+%    In addition to generating the legacy mark we output the
+%    individual ones as well at the very same point.
+%    The legacy mark is kept unchanged in order to work with packages
+%    that expect that mark in exactly the way it is right now.
+%
+%    We might want to think about how to improve this in one-side
+%    documents, see comments below.
+%
+%    We have not changed all of the code to L3 prog layer convention,
+%    in case packages attempt to do some patching and expect the 2e
+%    names being around. Eventually this should and will change.
+%    \begin{macrocode}
+    \mark_insert:nn{2e-left}{#1}
+    \mark_insert:nn{2e-right}{#2} 
+    \tl_if_empty:nF{#2}{ \mark_insert:nn{2e-right-nonempty}{#2} }
     \mark{\the\@temptokena}%
   \endgroup
   \if at nobreak\ifvmode\nobreak\fi\fi}
@@ -214,6 +233,7 @@
 %    \end{macrocode}
 %
 % \changes{v1.0m}{2020/07/27}{Don't make the command \cs{long} (gh/354)}
+% \changes{v1.0n}{2022/04/04}{Interface with new mark mechanism}
 %    \begin{macrocode}
 \DeclareRobustCommand*\markright[1]{%
   \begingroup
@@ -223,9 +243,23 @@
 %    \begin{macrocode}
     \expandafter\@markright\@themark {#1}%
     \@temptokena \expandafter{\@themark}%
+%    \end{macrocode}
+%    Same game with \cs{markright} more or less \ldots
+%    \begin{macrocode}
+    \mark_insert:nn{2e-right}{#1}
+    \tl_if_empty:nF{#1}{ \mark_insert:nn{2e-right-nonempty}{#1} }
+%    \end{macrocode}
+%    The legacy \LaTeX{} mechanism always sets left and right mark,
+%    i.e., if a sub-mark (i.e., right mark) is set the corresponding main
+%    mark also is getting a mark with the same value it had previously.
+%    However, for the individual mark classes this means we are losing
+%    information so for them that is not done.
+%    \begin{macrocode}
+%   \mark_insert:nn{2e-left}{\exp_after:wN \use_i:nn \@themark }
     \mark{\the\@temptokena}%
   \endgroup
   \if at nobreak\ifvmode\nobreak\fi\fi}
+\ExplSyntaxOff
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -233,6 +267,27 @@
 %    \begin{macrocode}
 %</2ekernel|latexrelease>
 %<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{2019/10/01}%
+%<latexrelease>                 {\markboth}{Make commands robust}%
+%<latexrelease>
+%<latexrelease>\DeclareRobustCommand*\markboth[2]{%
+%<latexrelease>  \begingroup
+%<latexrelease>    \let\label\relax \let\index\relax \let\glossary\relax
+%<latexrelease>    \unrestored at protected@xdef\@themark {{#1}{#2}}%
+%<latexrelease>    \@temptokena \expandafter{\@themark}%
+%<latexrelease>    \mark{\the\@temptokena}%
+%<latexrelease>  \endgroup
+%<latexrelease>  \if at nobreak\ifvmode\nobreak\fi\fi}
+%<latexrelease>\DeclareRobustCommand*\markright[1]{%
+%<latexrelease>  \begingroup
+%<latexrelease>    \let\label\relax \let\index\relax \let\glossary\relax
+%<latexrelease>    \expandafter\@markright\@themark {#1}%
+%<latexrelease>    \@temptokena \expandafter{\@themark}%
+%<latexrelease>    \mark{\the\@temptokena}%
+%<latexrelease>  \endgroup
+%<latexrelease>  \if at nobreak\ifvmode\nobreak\fi\fi}
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
 %<latexrelease>\IncludeInRelease{0000/00/00}%
 %<latexrelease>                 {\markboth}{Make commands robust}%
 %<latexrelease>

Modified: trunk/Master/texmf-dist/source/latex/base/ltpageno.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltpageno.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltpageno.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -77,7 +77,7 @@
 % numbered  i, ii, etc.
 %
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %    \begin{macrocode}
 %<*2ekernel>

Modified: trunk/Master/texmf-dist/source/latex/base/ltpar.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltpar.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltpar.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -96,7 +96,7 @@
 % \end{itemize}
 %
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \subsection{Implementation}
 %

Modified: trunk/Master/texmf-dist/source/latex/base/ltpara.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltpara.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltpara.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -15,7 +15,7 @@
 %
 %    \begin{macrocode}
 \def\ltparaversion{v1.0k}
-\def\ltparadate{2021/11/11}
+\def\ltparadate{2022/05/13}
 %    \end{macrocode}
 %<*driver>
 \documentclass{l3doc}
@@ -123,7 +123,7 @@
 %    \verb=\hbox{a\par b}= is ignored, but \verb=$a\par b$= would complain.
 %
 %    If this primitive ends the paragraph it does some special
-%    \enquote{end of horizontal list} processing, then calls \TeX{}’s paragraph
+%    \enquote{end of horizontal list} processing, then calls \TeX{}'s paragraph
 %    builder; this breaks the horizontal list into lines and then these
 %    lines are added as boxes to the enclosing vertical list and
 %    \TeX{} returns to vertical mode.
@@ -484,7 +484,7 @@
 %
 %    To avoid issues a paragraph started by them should always be
 %    ended by \cs{RawParEnd}\footnote{Technical note for those who
-%    know their \textit{\TeX book\/}: the \cs{RawParEnd} comand
+%    know their \textit{\TeX book\/}: the \cs{RawParEnd} command
 %    invokes the original \TeX{} engine definition of \cs{par} that
 %    (soley) triggers the paragraph builder in \TeX{} when found
 %    inside unrestricted horizontal mode and does nothing in other
@@ -665,7 +665,7 @@
 %
 %
 %
-% \StopEventually{\setlength\IndexMin{200pt}  \PrintIndex  }
+% \MaybeStop{\setlength\IndexMin{200pt}  \PrintIndex  }
 %
 %
 % \section{The Implementation}

Modified: trunk/Master/texmf-dist/source/latex/base/ltpictur.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltpictur.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltpictur.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -83,7 +83,7 @@
 % variant of this command, |\bezier|, is defined, in which the first
 % argument is not optional.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \changes{v0.1a}{1994/03/07}{Initial version, split from latex.dtx}

Modified: trunk/Master/texmf-dist/source/latex/base/ltplain.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltplain.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltplain.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -32,7 +32,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltplain.dtx}
-             [2021/07/16 v2.3g LaTeX Kernel (Plain TeX)]
+             [2022/01/25 v2.3h LaTeX Kernel (Plain TeX)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltplain.dtx}
@@ -102,7 +102,7 @@
 % \LaTeX{} uses its own output routine, so most of the plain one was
 % removed.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 %    \begin{macrocode}
@@ -1186,20 +1186,145 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}{\obeylines}
-% \begin{macro}{\obeyspaces}
-% In |\obeylines|, we say |\let^^M=\par| instead of |\def^^M{\par}|
-% since this allows, for example, |\let\par=\cr \obeylines \halign{...|
+% \begin{macro}{\obeylines,\obeyspaces}
+%    In |\obeylines|, we say |\let^^M=\obeyedline| instead of |\def^^M{\obeyedline}|
+%    since this allows, for example,
+% |\let\obeyedline=\cr \obeylines \halign{...|.
+%
+%    This is essentially a plain \TeX{} trick and in its original
+%    version where you had to use to use |\let\par=\cr| not really a
+%    safe idea in \LaTeX. If anybody used this trick
+%    this now breaks (and one needs to use \cs{obeyedline} instead).
+% \changes{v2.3h}{2022/01/25}{Provide redirection to support special
+%    use cases (gh/367)}
 %    \begin{macrocode}
-{\catcode`\^^M=\active % these lines must end with %
-  \gdef\obeylines{\catcode`\^^M\active \let^^M\par}%
-  \global\let^^M\par} % this is in case ^^M appears in a \write
-\def\obeyspaces{\catcode`\ \active}
-{\obeyspaces\global\let =\space}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2022/06/01}{\obeylines}%
+%<latexrelease>    {Add a redirection to obeylines and obeyspaces}%
 %    \end{macrocode}
+%    If the active |^^M| escapes, e.g. into a \cs{write} (which is
+%    effectively in a different context) we don't want the definition
+%    from \cs{obeylines} but rather a simple \cs{par} (in fact even
+%    the primitive one, not the \LaTeX{} version \cs{para\_end:} which
+%    is only defined later.
+%
+%    \begin{macrocode}
+\begingroup
+\catcode`\^^M=\active % these lines must end with %
+  \gdef\obeylines{\catcode`\^^M\active%
+    \let^^M\obeyedline%
+%    \end{macrocode}
+%    
+%    The next line ending the definition is rather curious and it took
+%    me awhile to understand why rollback fails. The problem is the
+%    following: if \texttt{latexrelease} is used, then blocks of
+%    \cs{IncludeInRelease} \dots\ \cs{EndIncludeInRelease} are
+%    bypassed at high speed by grabbing each as a delimited
+%    argument. However, in that case |^^M| is seen not as code but as
+%    line ending characters and in that mode \TeX{} discards
+%    everything from that point onwards to the real end of the line so
+%    it works like a comment --- pretty strange really (and I think
+%    due to the fact the the original pascal compiler could have some
+%    garbage showing up after the normal line ending character. Thus
+%    we really have to make sure that any closing braces is not one
+%    the same line as an |^^M|, because otherwise it would get dropped
+%    and we end with unbalanced braces and never see the
+%    \cs{EndIncludeInRelease} --- weird. In other places it doesn't
+%    matter because we aren't using the incomplete result.
+%    \begin{macrocode}
+  }%
+  \global\let^^M\par % this is in case ^^M appears in a \write
+\endgroup
+%    \end{macrocode}
+%
+% \begin{macro}{\obeyedline}
+%    The \cs{obeyedline} expands by default to
+%    \cs{par} with whatever definition \cs{par} has when it is
+%    executed. It can, however, be
+%    redefined (before calling \cs{obeylines}!) to achieve some
+%    special effects. If you want to alter is definition when already
+%    in the scope of \cs{obeylines}, it has no effect (because
+%    \cs{let} is used above).
+%    In that case simply make another call to \cs{obeylines}
+%    immediately. As you are in a restricted scope all that happens is
+%    that your redefinition is applied.
+%
+%    For the default definition we have to use \cs{def} not \cs{let}
+%    because the meaning of \cs{par} can change and we want to use the
+%    one that is current when \cs{obeylines} act.
+%
+%    There is a small subtlety here: in an \cs{edef} the active |^^M| stayed
+%    put (because it was equal to to the primitive \cs{par}), now
+%    \cs{obeyedline} expands and you get what it  contains, i.e., in that
+%    case \cs{par}, into the \cs{edef} or \cs{mark} unless we use
+%    \cs{protected} on it.
+%    \begin{macrocode}
+\protected\gdef\obeyedline{\par}
+%    \end{macrocode}
 % \end{macro}
+%
+% \begin{macro}{\obeyedspace}
+%    The definition of \cs{obeyspaces} is changed in the same way and
+%    now executes \cs{obeyedspace} for each active space.
+%    \begin{macrocode}
+\global\let\obeyedspace\space
+%    \end{macrocode}
 % \end{macro}
 %
+%    \begin{macrocode}
+\begingroup
+\catcode`\ =\active%
+\gdef\obeyspaces{\catcode`\ \active\let =\obeyedspace}%
+%    \end{macrocode}
+%    An active space elsewhere generates \cs{space} by default
+%    (for example in a \cs{write}).  
+%    \begin{macrocode}
+\global\let =\space%
+\endgroup
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}{\obeylines}%
+%<latexrelease>    {Add a redirection to obeylines and obeyspaces}%
+%<latexrelease>
+%    \end{macrocode}
+%    From 2019 onwards the commands are made robust (somewhat later in
+%    the kernel sources). So if we roll back they are robust, so when
+%    redefining them we have get rid of the robust payload
+%    first. Otherwise that is seen by the later rollback below, which
+%    then installs a fragile version of the new definition on top of
+%    the one we roll back to here, sigh. \cs{kernel at make@fragile} also
+%    changes its definition (later own) so this is done directly.
+%    \begin{macrocode}
+%<latexrelease>\expandafter\let\csname obeylines \endcsname\@undefined
+%<latexrelease>\expandafter\let\csname obeyspace \endcsname\@undefined
+%<latexrelease>
+%<latexrelease>\begingroup
+%<latexrelease>\catcode`\^^M=\active % these lines must end with %
+%<latexrelease>  \gdef\obeylines{\catcode`\^^M\active \let^^M\par %
+%    \end{macrocode}
+%    Closing brace on a separate line (see comment above).
+%    \begin{macrocode}
+%<latexrelease>                 }%
+%    \end{macrocode}
+%    Another pitfall: if we do a rollback \cs{par} is no longer the
+%    primitive, so the roll back definition needs \cs{let} to what is
+%    new the primitive.
+%    \begin{macrocode}
+%<latexrelease>  \global\let^^M\RawParEnd % this is in case ^^M appears in a \write
+%<latexrelease>\endgroup
+%<latexrelease>\def\obeyspaces{\catcode`\ \active}
+%<latexrelease>
+%<latexrelease>\let\obeyedline\@undefined
+%<latexrelease>\let\obeyedspace\@undefined
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+%    \end{macrocode}
+% \end{macro}
+%
 %  \begin{macro}{\loop}
 % \changes{v1.0h}{1994/05/16}{Use Kabelschacht method}
 %  \begin{macro}{\iterate}

Modified: trunk/Master/texmf-dist/source/latex/base/ltsect.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltsect.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltsect.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -73,7 +73,7 @@
 % document level commands are defined in the class files, in terms of
 % these commands.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \changes{v1.0a}{1994/03/04}{Initial version, split from latex.dtx}

Modified: trunk/Master/texmf-dist/source/latex/base/ltshipout.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltshipout.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltshipout.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %%
-%% Copyright (C) 2020-2021
+%% Copyright (C) 2020-2022
 %%               Frank Mittelbach, LaTeX Team
 %%
 %
@@ -32,8 +32,8 @@
 %%% From File: ltshipout.dtx
 %
 %    \begin{macrocode}
-\providecommand\ltshipoutversion{v1.0j}
-\providecommand\ltshipoutdate{2021/06/09}
+\providecommand\ltshipoutversion{v1.0m}
+\providecommand\ltshipoutdate{2022/05/08}
 %    \end{macrocode}
 %
 %<*driver>
@@ -327,7 +327,10 @@
 % \subsection{Legacy \LaTeX{} commands}
 %
 % \begin{function}{\AtBeginDvi,\AtEndDvi}
-%    \cs{AtBeginDvi} is the existing \LaTeXe{} interface to fill the
+%    \begin{syntax}
+%      \cs{AtBeginDvi} \Arg{code}
+%    \end{syntax}
+ %    \cs{AtBeginDvi} is the existing \LaTeXe{} interface to fill the
 %    \hook{shipout/firstpage} hook. This is not really a good name
 %    as it is not just supporting \texttt{.dvi} but also \texttt{.pdf}
 %    output or \texttt{.xdv}.
@@ -335,17 +338,26 @@
 %    \cs{AtEndDvi} is the counterpart that was not available in the
 %    kernel but only through the package \pkg{atenddvi}. It fills the
 %    \hook{shipout/lastpage} hook.
+%
+%    Neither interface can set a code label but uses the current default label.
+%
 % \end{function}
 %
 %    As these two wrappers have been available for a long time we
-%    continue offering them. However, for new code we suggest using
-%    the high-level hook management commands directly instead of
-%    ``randomly-named'' wrappers.  This will lead to code that is
-%    easier to understand and to maintain.  For this reason we do not
-%    provide any other wrapper commands for the above hooks in the
-%    kernel.
+%    continue offering them (but not enhancing them, e.g., by providing
+%    support for code labels).
 %
+%    For new code we strongly suggest using the high-level hook
+%    management commands directly instead of ``randomly-named''
+%    wrappers.  This will lead to code that is easier to understand
+%    and to maintain and it also allows you to set code labels if
+%    needed.
 %
+%    For this reason we do not provide any other ``new'' wrapper
+%    commands for the above hooks in the kernel, but only keep
+%    the existing ones for backward compatibility.
+%
+%
 % \subsection{Special commands for use inside the hooks}
 %
 % \begin{function}{\DiscardShipoutBox,\shipout_discard:}
@@ -644,7 +656,7 @@
 % \end{function}
 %
 %
-% \StopEventually{\setlength\IndexMin{200pt}  \PrintIndex  }
+% \MaybeStop{\setlength\IndexMin{200pt}  \PrintIndex  }
 %
 %
 % \section{The Implementation}
@@ -734,21 +746,21 @@
 %    \begin{macrocode}
 \sys_if_engine_luatex:TF
   {
-    \newluafunction \@@_finalize_box:
+    \newprotectedluacmd \@@_finalize_box:
     \exp_args:Nx \everyjob {
       \exp_not:V \everyjob
       \exp_not:N \lua_now:n {
         luatexbase.create_callback('pre_shipout_filter', 'list')
         local~call, getbox, setbox = luatexbase.call_callback, tex.getbox, tex.setbox~
-        lua.get_functions_table()[\the \@@_finalize_box:] = function()
-          local~result = call('pre_shipout_filter', getbox(\the \l_shipout_box))
-          if~not (result == true) then~
+        lua.get_functions_table()[\the \allocationnumber] = function()
+          local~head = getbox(\the \l_shipout_box)
+          local~result = call('pre_shipout_filter', head)
+          if~not (result == head) then~
             setbox(\the \l_shipout_box, result~or~nil)
           end~
         end
       }
     }
-    \protected \luadef \@@_finalize_box: \the \@@_finalize_box:
   } {
     \cs_set_eq:NN \@@_finalize_box: \scan_stop:
   }
@@ -1002,8 +1014,14 @@
                       \_@@_add_foreground_box:n
                           { \UseHook{shipout/lastpage}
                             \@kernel at after@shipout at lastpage }
+                      \bool_gset_true:N \g_@@_lastpage_handled_bool
+%    \end{macrocode}
+%    We record that we have handled the \hook{shipout/lastpage} hook
+%    but only if we really did.
+% \changes{v1.0m}{2022/05/08}{Handle case where shipout/lastpage is
+%    run too early (gh/813)}
+%    \begin{macrocode}
                     }
-                    \bool_gset_true:N \g_@@_lastpage_handled_bool
                 }
               \@@_finalize_box:
 %    \end{macrocode}
@@ -1711,15 +1729,35 @@
           \gdef\string\@abspage at last {\int_use:N \g_shipout_readonly_int}}
      \fi
 %    \end{macrocode}
-%    But we may have guessed wrongly earlier and we still have to run the
+%    But we may have guessed wrongly earlier and have run it too early
+%    or we still have to run the
 %    \hook{shipout/lastpage} even though there is no page to place
 %    it into. If that is the case we make a trivial extra page and put
 %    it there. This temporary page will then vanish again on the next
 %    run but helps to keep pdf viewers happy.
+%    In either case we should put out an appropriate ``rerun'' warning.
+% \changes{v1.0m}{2022/05/08}{Handle case where shipout/lastpage is
+%    run too early (gh/813)}
 %    \begin{macrocode}
-      \bool_if:NF \g_@@_lastpage_handled_bool
+      \bool_if:NTF \g_@@_lastpage_handled_bool
          {
 %    \end{macrocode}
+%    If the hook was already executed, we have to test if that total
+%    shipouts match the shipouts from last run (because that
+%    corresponds to the page it was executed). If not we output a warning.
+%    \begin{macrocode}
+           \int_compare:nNnF \@abspage at last = \g_shipout_readonly_int
+            {
+              \@latex at warning@no at line{Hook~ 'shipout/lastpage'~ executed~
+                on~ wrong~ page~ (\@abspage at last\space not~
+                \int_use:N\g_shipout_readonly_int).\MessageBreak
+                Rerun~ to~ correct~ this}%
+            } 
+         }
+         {
+%    \end{macrocode}
+%    If the hook was not run, we need to add an extra page and place
+%    it there.
 %    However, making this extra page in case the hook is actually
 %    empty would be forcing a rerun without any reason, so we check
 %    that condition and also check if
@@ -1966,8 +2004,10 @@
 %
 %
 %  \begin{macro}{\AtEndDvi}
-%    This package has only one public command to simulating it is easy
+%    This package has only one public command, so simulating it is easy
 %    and actually sensible to provide as part of the kernel.
+% \changes{v1.0l}{2022/01/06}{Correctly simulate \cs{AtEndDvi} without
+%    extending the syntax}
 %    \begin{macrocode}
 %</2ekernel>
 %<*2ekernel|latexrelease>
@@ -1974,7 +2014,7 @@
 %<latexrelease>\IncludeInRelease{2020/10/01}%
 %<latexrelease>                 {\AtEndDvi}{atenddvi emulation}%
 \ExplSyntaxOn
-\cs_new_protected:Npn \AtEndDvi {\AddToHook{shipout/lastpage}}
+\cs_new_protected:Npn \AtEndDvi #1 {\AddToHook{shipout/lastpage}{#1}}
 \ExplSyntaxOff
 %    \end{macrocode}
 %    As the package is integrate we prevent loading (no need to roll that back):
@@ -2041,9 +2081,11 @@
 %
 %  \begin{macro}{\AtBeginShipout,\AtBeginShipoutNext}
 %    Filling hooks
+% \changes{v1.0l}{2022/01/06}{Correctly simulate \cs{AtBeginShipout}
+%    and \cs{AtBeginShipoutNext} without extending the syntax}
 %    \begin{macrocode}
-\protected \def \AtBeginShipout     {\AddToHook{shipout/before}}
-\protected \def \AtBeginShipoutNext {\AddToHookNext{shipout/before}}
+\protected\long\def\AtBeginShipout     #1{\AddToHook{shipout/before}{#1}}
+\protected\long\def\AtBeginShipoutNext #1{\AddToHookNext{shipout/before}{#1}}
 %    \end{macrocode}
 %  \end{macro}
 %

Modified: trunk/Master/texmf-dist/source/latex/base/ltspace.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltspace.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltspace.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -114,7 +114,7 @@
 % |\restorecr| : restores <CR> to its usual meaning.
 %
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \subsection{Chris' comments}
 %

Modified: trunk/Master/texmf-dist/source/latex/base/lttab.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/lttab.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/lttab.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -74,7 +74,7 @@
 % \LaTeX\ Companion}. Use the |array| package to obtain the extended
 % version.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \changes{v1.0a}{1994/03/04}{Initial version, split from latex.dtx}

Modified: trunk/Master/texmf-dist/source/latex/base/lttextcomp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/lttextcomp.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/lttextcomp.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2019-2021
+% Copyright (C) 2019-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -25,9 +25,10 @@
 % and covered by LPPL is defined by the unpacking scripts (with
 % extension .ins) which are part of the distribution.
 %
+%%% From File: lttextcomp.dtx
+%
 % \fi
 %
-%%% From File: lttextcomp.dtx
 %
 % \iffalse
 %
@@ -36,7 +37,7 @@
 %
 %
 \ProvidesFile{lttextcomp.dtx}
-             [2021/04/16 v1.0f LaTeX Kernel (text companion symbols)]
+             [2021/12/09 v1.0f LaTeX Kernel (text companion symbols)]
 % \iffalse
 \documentclass{ltxdoc}
 \begin{document}
@@ -68,7 +69,7 @@
 %
 %
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \changes{v1.0e}{2021/03/19}
 %         {Use \cs{NewModuleRelease}}
@@ -470,16 +471,17 @@
 %    \end{macrocode}
 %
 %
-%    In the following sections the remaining default definitions are ordered by
-%    sub-encoding in which they are become unavailable (i.e., they are
-%    not provided in the sub-encoding with that number and all
-%    sub-encodings with higher numbers.
+%    In the following sections the remaining default definitions are
+%    ordered by sub-encoding in which they are become
+%    \textbf{unavailable}, i.e., they are not provided in the
+%    sub-encoding with that number and all sub-encodings with higher
+%    numbers.
 %
 %    Thus the symbols that are available in sub-encoding $x$ are the
-%    symbols above (always available) and the symbols list in the
-%    sections for sub-encodings $x+1$ and higher.
+%    symbols above (always available) and the symbols listed as becoming
+%    unavailable in sub-encodings $x+1$ and higher.
 %
-% \subsection{Sub-encoding \texttt{1} (drop symbols not working in
+% \subsection{Unavailable in sub-encoding \texttt{1} and higher (drop symbols not working in
 %    Latin Modern)}
 %
 %    The \cs{textcircled} is available but the glyph is simply too
@@ -493,7 +495,7 @@
 %
 %
 %
-% \subsection{Sub-encoding \texttt{2} (majority of new OTF fonts via autoinst)}
+% \subsection{Unavailable in sub-encoding \texttt{2}  (majority of new OTF fonts via autoinst) and higher}
 %
 %    \begin{macrocode}
 \DeclareTextCommandDefault{\t}
@@ -722,7 +724,7 @@
 %
 %
 %
-% \subsection{Sub-encoding \texttt{3}}
+% \subsection{Unavailable in sub-encoding \texttt{3} and higher}
 %
 %    Sub-encoding \texttt{2} is the one where we loose many
 %    symbols. In the higher-numbered sub-encodings we see only a few
@@ -738,7 +740,7 @@
 %
 %
 %
-% \subsection{Sub-encoding \texttt{4}}
+% \subsection{Unavailable in sub-encoding \texttt{4} and higher}
 %
 %    \begin{macrocode}
 \DeclareTextCommandDefault{\textcolonmonetary}
@@ -763,7 +765,7 @@
 %
 %
 %
-% \subsection{Sub-encoding \texttt{5} (most older PS fonts)}
+% \subsection{Unavailable in sub-encoding \texttt{5} (most older PS fonts) and higher}
 %
 %    Most older PS fonts (supported in \TeX{} since the early nineties
 %    when virtual fonts became available) are sorted under this
@@ -790,7 +792,7 @@
 %
 %
 %
-% \subsection{Sub-encoding \texttt{6}}
+% \subsection{Unavailable in sub-encoding \texttt{6} and higher}
 %
 %    \begin{macrocode}
 \DeclareTextCommandDefault{\textflorin}
@@ -801,7 +803,7 @@
 %
 %
 %
-% \subsection{Sub-encoding \texttt{7}}
+% \subsection{Unavailable in sub-encoding \texttt{7} and higher}
 %
 %    \begin{macrocode}
 \DeclareTextCommandDefault{\textfractionsolidus}
@@ -816,7 +818,7 @@
 %
 %
 %
-% \subsection{Sub-encoding \texttt{8}}
+% \subsection{Unavailable in sub-encoding \texttt{8} and higher}
 %
 %    \begin{macrocode}
 \DeclareTextCommandDefault{\textblank}
@@ -837,7 +839,7 @@
 %
 %
 %
-% \subsection{Sub-encoding \texttt{9} (most missing)}
+% \subsection{Unavailable in Sub-encoding \texttt{9} (most missing)}
 %
 %    \begin{macrocode}
 \DeclareTextCommandDefault{\textcelsius}

Modified: trunk/Master/texmf-dist/source/latex/base/ltthm.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltthm.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltthm.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -80,7 +80,7 @@
 %  The way \meta{name} environments are numbered can be changed by
 %  redefining |\the|\meta{name}.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \changes{v1.0a}{1994/03/28}{Initial version, split from latex.dtx}

Modified: trunk/Master/texmf-dist/source/latex/base/ltvers.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltvers.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltvers.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltvers.dtx}
-             [2021/08/10 v1.1h LaTeX Kernel (Version Info)]
+             [2022/02/28 v1.1i LaTeX Kernel (Version Info)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltvers.dtx}
@@ -61,7 +61,7 @@
 % \LaTeX, and set |\everyjob| so that it is printed at the start of
 % every \LaTeX\ run.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \changes{v1.0g}{1996/11/28}
 %     {Check for old format modified /2319}
@@ -112,10 +112,10 @@
 %</2ekernel>
 %<latexrelease>\edef\latexreleaseversion
 %<*2ekernel|latexrelease>
-   {2021-11-15}
+   {2022-06-01}
 %</2ekernel|latexrelease>
 %<*2ekernel>
-\def\patch at level{1}
+\def\patch at level{0}
 %    \end{macrocode}
 %
 % \begin{macro}{\development at branch@name}
@@ -125,7 +125,7 @@
 %    intended to help us internally when we locally install a
 %    format out of some development branch.
 %    \begin{macrocode}
-\edef\development at branch@name{}
+\edef\development at branch@name{develop \the\year-\the\month-\the\day}
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -365,6 +365,8 @@
 %   \changes{v1.1f}{2021/03/18}{Added \cs{NewModuleRelease}.}
 %   \changes{v1.1g}{2021/04/16}
 %           {\cs{NewModuleRelease} with the same arguments as \cs{IncludeInRelease}.}
+%   \changes{v1.1i}{2022/02/28}
+%           {Detect a missing \cs{IncludeInRelease}\texttt{\{0000/00/00\}}.}
 %    \begin{macrocode}
 \let\if at skipping@module\iffalse
 \def\@skipping at moduletrue{\let\if at skipping@module\iftrue}
@@ -379,7 +381,7 @@
   \GenericInfo{}{BEGIN module: \new at modulename\space (\new at moduledate)}%
   \GenericInfo{}{ \@spaces\@spaces\@spaces\space#3\@gobble}%
   \ifnum\sourceLaTeXdate<%
-      \expandafter\@parse at version\new at moduledate//00\@nil\relax
+        \expandafter\@parse at version\new at moduledate//00\@nil\relax
     \ifnum\expandafter\@parse at version\fmtversion//00\@nil<%
           \expandafter\@parse at version\new at moduledate//00\@nil\relax
       \GenericInfo{}{Skipping module \new at modulename}%
@@ -394,7 +396,19 @@
     \@skipping at moduletrue
     \expandafter\new at module@skip
   \fi}
-\long\def\new at module@skip#1\IncludeInRelease{\IncludeInRelease}
+\long\def\new at module@skip#1\IncludeInRelease{%
+  \long\def\reserved at a##1\EndModuleRelease{}%
+  \if\relax\detokenize\expandafter{\reserved at a#1{}{}\EndModuleRelease}\relax
+  \else
+    \@latex at error{Missing mandatory \string\IncludeInRelease{0000/00/00}}\@ehc
+    \expandafter\@secondoftwo
+  \fi
+  \@gobble
+    {\@expandtwoargs\IncludeInRelease
+         {0000/00/00}{\new at modulename}%
+         {ERROR! Emergency recovery}%
+     #1}%
+  \IncludeInRelease}
 \def\EndModuleRelease{%
   \ifx\new at modulename\@empty
     \@latex at error{Extra \string\EndModuleRelease.}\@eha

Modified: trunk/Master/texmf-dist/source/latex/base/ltxdoc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltxdoc.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltxdoc.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -30,7 +30,7 @@
 %
 %<class>\NeedsTeXFormat{LaTeX2e}
 %<class>\ProvidesClass{ltxdoc}
-%<class>         [2020/12/05 v2.1b Standard LaTeX documentation class]
+%<class>         [2022/06/03 v2.1f Standard LaTeX documentation class]
 %
 %<*driver>
 \documentclass{ltxdoc}
@@ -51,7 +51,9 @@
 %
 % \fi
 %
+% \providecommand\pkg[1]{\texttt{#1}}
 %
+%
 % \changes{v2.0i}{1994/04/29}{Update the documentation.}
 % \changes{v2.0s}{1998/08/17}{(RmS) Documentation fixes.}
 % \changes{v2.1a}{2020/08/21}{Integration of new hook management interface}
@@ -102,7 +104,7 @@
 % \PassOptionsToClass{a4paper}{article}
 %\end{verbatim}
 %
-% All the source files are in two parts, separated by |\StopEventually|.
+% All the source files are in two parts, separated by |\MaybeStop|.
 % The first part (should) contain `user' documentation. The second part
 % is a full documented listing of the source code. The |doc| package
 % provides the command |\OnlyDescription| which suppresses the code
@@ -115,10 +117,13 @@
 % \AtBeginDocument{\OnlyDescription}
 %\end{verbatim}
 %
+% If your document relies on using the old \pkg{doc} version, you can
+% request that the class loads \pkg{doc} version~2 by passing the
+% option \texttt{doc2}.
 %
 % If the full source listing |sources2e.tex| is processed, then an index
-% and change history are produced by default, however indices are not
-% normally produced for individual files.
+% and change history are produced by default, however indexes are normally
+% not produced for individual files.
 %
 % As an example, consider |ltclass.dtx|, which contains the sources for
 % the new class and package interface commands.  With no |cfg|
@@ -156,7 +161,7 @@
 % \includeonly{ltvers,ltboxes}
 %\end{verbatim}
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \section{Options}
@@ -163,32 +168,53 @@
 %
 %    \begin{macrocode}
 %<*class>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 \DeclareOption{a5paper}{\@latexerr{Option not supported}%
    {}}
 %    \end{macrocode}
+%    Prevent loading of a config file.
+%    \begin{macrocode}
+\newif\ifltxdoc at load@cfg@ \ltxdoc at load@cfg at true
+\DeclareOption{nocfg}{\ltxdoc at load@cfg at false}
+%    \end{macrocode}
 %
+%    Support rolling back \pkg{doc} to version 2:
+% \changes{v2.1e}{2022/05/27}{Support rolling  back doc to version 2}
 %    \begin{macrocode}
+\let\ltxdoc at doc@version\@empty  % use current version by default
+\DeclareOption{doc2}{\def\ltxdoc at doc@version{=v2}}
+%    \end{macrocode}
+% 
+%    \begin{macrocode}
 \DeclareOption*{%
     \PassOptionsToClass  {\CurrentOption}{article}}
 %    \end{macrocode}
 %
-% \section{Configuration}
+% \section{Option Processing}
+%
+%    \begin{macrocode}
+\ProcessOptions
+%    \end{macrocode}
+%
+% \section{Local configuration}
 % Input a local configuration file, if it exists.
 %    \begin{macrocode}
+\ifltxdoc at load@cfg@
 \InputIfFileExists{ltxdoc.cfg}
            {\typeout{*************************************^^J%
                      * Local config file ltxdoc.cfg used^^J%
                      *************************************}}
            {}
+\else
+   \typeout{*************************************^^J%
+            * Local config file ignored^^J%
+            *************************************}
+\fi
 %    \end{macrocode}
 %
 %
-% \section{Option Processing}
-%
-%    \begin{macrocode}
-\ProcessOptions
-%    \end{macrocode}
-%
 % \section{Loading article and doc}
 %
 %    \begin{macrocode}
@@ -195,8 +221,13 @@
 \LoadClass{article}
 %    \end{macrocode}
 %
+%     By default, loadthe current \pkg{doc} version
+%    (\cs{ltxdoc at doc@version} is empty). If option
+%    \texttt{doc2} is given version 2 is loaded
+%    (\cs{ltxdoc at doc@version} contains \texttt{=v2}).
+% \changes{v2.1e}{2022/05/27}{Support rolling  back doc to version 2}
 %    \begin{macrocode}
-\RequirePackage{doc}
+\RequirePackage{doc}[\ltxdoc at doc@version]
 %    \end{macrocode}
 %
 % Make \verb+|+ be a `short verb' character, but not in the document
@@ -256,7 +287,7 @@
 % arguments. It can \emph{not} be use to record commands that are defined as
 %    ``|\outer|'' nor is it possible to use it on conditionals such as
 %    |\iftrue| or  defined by |\newif|.
-% |\cs{foo}| also prints |\foo|, for those who prefer that
+% |\cs{foo}| already available with the \texttt{doc} package also prints |\foo|, for those who prefer that
 % syntax. (This second form can be used to record all types of command so the
 %    above restrictions do not apply.
 % \begin{macro}{\cmd}
@@ -266,7 +297,7 @@
 %    \begin{macrocode}
 \def\cmd#1{\cs{\expandafter\cmd at to@cs\string#1}}
 \def\cmd at to@cs#1#2{\char\number`#2\relax}
-\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}}
+%\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}}     % already part of doc.sty
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -600,7 +631,76 @@
 %
 %    \begin{macrocode}
 \def\task#1#2{}
+%    \end{macrocode}
+% \changes{v2.1f}{2022/06/03}{define \cs{pkg} and other commands}
+% \changes{v2.1f}{2022/06/03}{allow \_ in macro names}
+% Some feaures from l3doc.cls
+%    \begin{macrocode}
+\providecommand\LuaTeX{Lua\TeX}
+\providecommand\cls{\textsf}
+\providecommand\pkg{\textsf}
+\providecommand\enquote[1]{``#1''}
+\DeclareRobustCommand\cs[1]{\texttt{\bslash\detokenize{#1}}}%
+\AtBeginDocument{%
+  \renewcommand\PrintMacroName[1]{\MacroFont\detokenize{#1}}%
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 %</class>
 %    \end{macrocode}
+%
+%
+%
+% \section{Configuration file}
+%
+%
+%    \begin{macrocode}
+%<*cfg>
+%
+% This is the ltxdoc configuration file we use to format the LaTeX
+% kernel sources.
+%
+%
+% Copyright 2006, 2007, 2011 Heiko Oberdiek
+% Copyright 2014-2021 The LaTeX Project
+% 
+
+\ProvidesFile{ltxdoc.cfg}%
+  [2021/12/07 v2.0c ltxdoc.cls configuration (LaTeX Project)]
+\PassOptionsToClass{a4paper}{article}
+
+% hyperref and hypdoc are now loaded late (or by the user) so we have to wait
+% with any adjustments until that has happened
+
+\AddToHook{package/hyperref/after}{%
+%%  \RequirePackage{hypdoc}%       % this is now triggered by doc
+  \RequirePackage{pdftexcmds}\relax
+  \ifnum\pdf at strcmp{\jobname}{inputenc}=0 %
+    \hypersetup{pdfencoding=auto}%
+    \pdfstringdefDisableCommands{%
+      \def\meta#1{% inputenc.dtx
+        \9060\010#1\9060\011%
+      }%
+    }%
+  \else
+  \fi
+  \pdfstringdefDisableCommands{%
+    \let\env\relax % longtable.dtx
+    \let\mytt\relax % tabularx.dtx
+  }%
+}
+
+% This should work well for documentation of packages outside the
+% LaTeX kernel, but if not, you can prevent the loading with the
+% option "nocfg", i.e.,
+%
+%   \documentclass[nocfg]{ltxdoc]
+%
+% or by providing your own config file
+
+\endinput
+%</cfg>
+%    \end{macrocode}
 % \Finale
 %

Modified: trunk/Master/texmf-dist/source/latex/base/ltxref.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltxref.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/ltxref.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltxref.dtx}
-             [2020/12/05 v1.1o LaTeX Kernel (Cross Referencing)]
+             [2022/04/12 v1.1p LaTeX Kernel (Cross Referencing)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltxref.dtx}
@@ -63,17 +63,19 @@
 %     {Extract file ltxref from ltcntlen.}
 % \changes{v1.1b}{1994/05/21}{Use new warning commands}
 % \changes{v1.1c}{1994/05/25}{Modify documentation}
+% \changes{v1.1p}{2022/04/12}{Add starred variants for the ref commands}
 %
 % \section{Cross Referencing}
 %  The user writes  |\label|\marg{foo}  to define the following
 %  cross-references:
 %
-%   |\ref|\marg{foo}: value of most recently incremented referenceable
+%   |\ref|*\marg{foo}: value of most recently incremented referenceable
 %             counter. in the current environment. (Chapter, section,
-%             theorem and enumeration counters are
-%             referenceable, footnote counters are not.)
+%             theorem, footnote and enumeration counters and other counters
+%             stepped with \cs{refstepcounter} are
+%             referenceable.)
 %
-%   |\pageref|\marg{foo}: page number at which |\label{foo}|  command
+%   |\pageref|*\marg{foo}: page number at which |\label{foo}|  command
 %             appeared.  where  foo  can be any string of characters not
 %             containing  `|\|', `|{|' or `|}|'.
 %
@@ -87,9 +89,13 @@
 %  leaving a space on both sides of it is equivalent to leaving
 %  a space on either side.
 %
+%  Note: the starred versions |\ref*| and |\pageref*| are provided
+%  to align with the use of \pkg{hyperref}. Without \pkg{hyperref} (or some
+%  other package using the starred form) the star is simply ignored.
 %
-% \StopEventually{}
 %
+% \MaybeStop{}
+%
 % \subsection{Cross Referencing}
 %
 % \begin{oldcomments}
@@ -206,8 +212,10 @@
 %    \end{macrocode}
 %  \begin{macro}{\ref}
 % \changes{LaTeX2e}{1993/12/11}{Macro reimplemented}
+% \changes{LaTeX2e}{2022/04/12}{Macro reimplemented with a starred version}
 %  \begin{macro}{\pageref}
 % \changes{LaTeX2e}{1993/12/11}{Macro reimplemented}
+% \changes{LaTeX2e}{2022/04/12}{Macro reimplemented with a starred version}
 %  \begin{macro}{\@setref}
 % \changes{LaTeX2e}{1993/12/11}{Macro added}
 % \changes{v1.1h}{1995/10/24}{Switch for refundefined renamed}
@@ -229,10 +237,44 @@
   \else
    \expandafter#2#1\null
   \fi}
-\def\ref#1{\expandafter\@setref\csname r@#1\endcsname\@firstoftwo{#1}}
-\def\pageref#1{\expandafter\@setref\csname r@#1\endcsname
-                                   \@secondoftwo{#1}}
 %    \end{macrocode}
+%    \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2022/06/01}%
+%<latexrelease>                 {\ref}{Add starred reference commands}%
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\@kernel at sref#1{\expandafter\@setref\csname r@#1\endcsname\@firstoftwo{#1}}
+\def\@kernel at spageref#1{\expandafter\@setref\csname r@#1\endcsname
+                 \@secondoftwo{#1}}
+\let\@kernel at ref\@kernel at sref
+\let\@kernel at pageref\@kernel at spageref
+\NewDocumentCommand\ref{s}
+   {\IfBooleanTF{#1}{\@kernel at sref}{\@kernel at ref}}
+\NewDocumentCommand\pageref{s}
+   {\IfBooleanTF{#1}{\@kernel at spageref}{\@kernel at pageref}}
+%    \end{macrocode}
+% As the commands are now protected we also need expandable versions for use
+% in \cs{ifthenelse}:
+%    \begin{macrocode}
+\def\@kernel at pageref@exp#1{\csname cs_if_exist:cTF\endcsname
+   {r@#1}{\csname tl_item:cn\endcsname{r@#1}{2}}{0}}
+\def\@kernel at ref@exp#1{\csname cs_if_exist:cTF\endcsname
+   {r@#1}{\csname tl_item:cn\endcsname{r@#1}{1}}{0}}
+%    \end{macrocode}
+%    \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>                 {\ref}{Add starred reference commands}%
+%<latexrelease>\def\ref#1{\expandafter\@setref\csname r@#1\endcsname\@firstoftwo{#1}}
+%<latexrelease>\def\pageref#1{\expandafter\@setref\csname r@#1\endcsname
+%<latexrelease>                                   \@secondoftwo{#1}}
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+%    \end{macrocode}
 %  \end{macro}
 %  \end{macro}
 %  \end{macro}
@@ -311,8 +353,8 @@
 %    \begin{macrocode}
 %</2ekernel>
 %<*2ekernel|latexrelease>
-%<latexrelease>\IncludeInRelease{2020/10/01}%
-%<latexrelease>                 {\refstepcounter}{Add \@currentcounter}%
+%<latexrelease>\IncludeInRelease{2022/06/01}%
+%<latexrelease>                 {\Ref}{Add starred version}%
 %    \end{macrocode}
 %
 %  \begin{macro}{\refstepcounter}
@@ -373,9 +415,14 @@
 %    normal \texttt{\textbackslash ref} which might spoil kerning.
 %    Perhaps one day this needs redoing.}
 %  \changes{v1.1l}{2019/08/22}{Commanded moved from \texttt{varioref.sty}}
+%  \changes{v1.1p}{2022/04/12}{Macro reimplemented with a starred version}%
 %    \begin{macrocode}
-\DeclareRobustCommand\Ref[1]{\protected at edef\@tempa{\ref{#1}}%
-   \expandafter\MakeUppercase\@tempa}
+\def\@kernel at Ref#1{\protected at edef\@tempa{\@kernel at ref{#1}}%
+       \expandafter\MakeUppercase\@tempa}
+\def\@kernel at sRef#1{\protected at edef\@tempa{\@kernel at sref{#1}}%
+       \expandafter\MakeUppercase\@tempa}
+\NewDocumentCommand\Ref{s}
+   {\IfBooleanTF{#1}{\@kernel at sRef}{\@kernel at Ref}}
 %    \end{macrocode}
 %  \end{macro}
 %
@@ -385,6 +432,18 @@
 %    \begin{macrocode}
 %</2ekernel|latexrelease>
 %<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease>                 {\Ref}{Add starred version}%
+%<latexrelease>\def\@currentcounter{}
+%<latexrelease>\def\refstepcounter#1{\stepcounter{#1}%
+%<latexrelease>    \edef\@currentcounter{#1}%
+%<latexrelease>    \protected at edef\@currentlabel
+%<latexrelease>       {\csname p@#1\expandafter\endcsname\csname the#1\endcsname}%
+%<latexrelease>}
+%<latexrelease>\def\labelformat#1{\expandafter\def\csname p@#1\endcsname##1}
+%<latexrelease>\DeclareRobustCommand\Ref[1]{\protected at edef\@tempa{\ref{#1}}%
+%<latexrelease>   \expandafter\MakeUppercase\@tempa}
+%<latexrelease>\EndIncludeInRelease
 %<latexrelease>\IncludeInRelease{2019/10/01}%
 %<latexrelease>                 {\refstepcounter}{Add \labelformat and \Ref}%
 %<latexrelease>\let\@currentcounter\@undefined

Modified: trunk/Master/texmf-dist/source/latex/base/makeindx.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/makeindx.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/makeindx.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -83,7 +83,7 @@
 %    \texttt{book} document classes, but works with other classes as
 %    well. It makes |\flushbottom| the default.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{The {\sc docstrip} modules}
 %

Modified: trunk/Master/texmf-dist/source/latex/base/makeindx.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/makeindx.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/makeindx.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/newdc.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/newdc.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/newdc.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/newlfont.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/newlfont.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/newlfont.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -84,7 +84,7 @@
 %    NFSS1, i.e., to change one font attribute without resetting the
 %    other attributes.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \section{The Code}

Modified: trunk/Master/texmf-dist/source/latex/base/nfssfont.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/nfssfont.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/nfssfont.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -82,7 +82,7 @@
 % the moment only a crude adaption of the test program for the
 % Computer Modern fonts by Donald Knuth.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{A driver for this document}
 %

Modified: trunk/Master/texmf-dist/source/latex/base/nfssfont.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/nfssfont.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/nfssfont.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/olddc.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/olddc.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/olddc.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/oldlfont.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/oldlfont.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/oldlfont.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -95,7 +95,7 @@
 % \end{tabular}
 % \end{center}
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \changes{v2.2k}{1995/11/29}{Remove duplicate driver code.}
 %

Modified: trunk/Master/texmf-dist/source/latex/base/preload.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/preload.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/preload.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -131,7 +131,7 @@
 %    \end{quote}
 %
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{Module switches for the \dst{} program}
 %

Modified: trunk/Master/texmf-dist/source/latex/base/proc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/proc.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/proc.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -73,7 +73,7 @@
 %</driver>
 %<+class>\ProvidesClass{proc}
 %<+style>\ProvidesFile{proc.sty}
-              [2020/11/23 v1.3l
+              [2021/12/09 v1.3m
 %<+class>               Standard LaTeX document class]
 %<+style>               LaTeX 2.09 compatibility style option `proc']
 %    \end{macrocode}
@@ -131,7 +131,7 @@
 %    should appear after any |\footnote| commands that produce
 %    footnotes for the first column.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{The {\sc docstrip} modules}
 %
@@ -338,10 +338,18 @@
 %    \begin{macrocode}
 \let\@oddhead\@empty
 \let\@evenhead\@empty
-\def\@oddfoot{\normalfont\rightmark \hfil
-              \pagename{} \thepage}
-\def\@evenfoot{\@oddfoot}
+\def\@oddfoot{\rightmark \hfil \pagename{} \thepage}
 %    \end{macrocode}
+%    If the \texttt{twoside} option is passed to the class we provide
+%    a different footer that shows the \cs{leftmark} if that is set.
+% \changes{v1.3m}{2021/12/09}{Support twoside (gh/704)}
+%    \begin{macrocode}
+\if at twoside
+  \def\@evenfoot{\pagename{} \thepage \hfil \leftmark}
+\else
+  \def\@evenfoot{\@oddfoot}
+\fi
+%    \end{macrocode}
 %
 %
 % \section{Document Markup}

Modified: trunk/Master/texmf-dist/source/latex/base/proc.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/proc.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/proc.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/slides.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/slides.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/slides.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -53,7 +53,7 @@
 %<*driver>
        \ProvidesFile{slides.drv}
 %</driver>
-              [2021/10/04 v2.4b
+              [2022/05/18 v2.4b
 %<+class>               Standard LaTeX document class]
 %<+cmd>               SLiTeX definitions]
 %    \end{macrocode}
@@ -205,7 +205,7 @@
 % features without adding additional |\DeclareFontShape| commands to
 % your |.fd| files or the preamble of your document.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \section{The Implementation}
@@ -2348,8 +2348,9 @@
 %  any output when the |@visible| switch is false.
 %
 % \changes{v2.2j}{1994/03/11}{Corrected \cs{@oval}, like previous
+%    change to the \LaTeX{} format.}
 % \changes{v2.4a}{2016/03/29}{Initialize in \cs{@oval}tests added for
-%    latex/4452} change to the \LaTeX{} format.}
+%    latex/4452}
 %    \begin{macrocode}
 \def\line(#1,#2)#3{\if at visible\@xarg #1\relax \@yarg #2\relax
 \@linelen #3\unitlength

Modified: trunk/Master/texmf-dist/source/latex/base/slides.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/slides.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/slides.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 
@@ -96,7 +96,7 @@
 
 This is a generated file.
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 
@@ -138,7 +138,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/syntonly.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/syntonly.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/syntonly.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -55,7 +55,7 @@
 % This command can be used in the preamble for running a document
 % through \LaTeX{} without actually getting any output.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \section{Identification}

Modified: trunk/Master/texmf-dist/source/latex/base/syntonly.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/syntonly.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/syntonly.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/tulm.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/tulm.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/tulm.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 2016-2021
+%% Copyright (C) 2016-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 2016-2021
+Copyright (C) 2016-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/base/unpack.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/unpack.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/unpack.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%

Modified: trunk/Master/texmf-dist/source/latex/base/utf8ienc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/utf8ienc.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/base/utf8ienc.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -190,7 +190,7 @@
 %    information.
 %
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 %
@@ -216,7 +216,7 @@
 %<+ts1> \ProvidesFile{ts1enc.dfu}
 %<+x2>  \ProvidesFile{x2enc.dfu}
 %<+all> \ProvidesFile{utf8enc.dfu}
-%<-utf8-2018>   [2021/06/21 v1.2n UTF-8 support]
+%<-utf8-2018>   [2022/06/07 v1.3c UTF-8 support]
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -363,11 +363,12 @@
 % \begin{macro}{\UTFviii at two@octets at noexpand}
 % \begin{macro}{\UTFviii at three@octets at noexpand}
 % \begin{macro}{\UTFviii at four@octets at noexpand}
+% \changes{v1.3a}{2022/02/19}{Use \cs{unexpanded} rather than \cs{noexpand} so only takes one expansion step}%
 %    These temporarily prevent the active chars from expanding.
 %    \begin{macrocode}
-\long\def\UTF at two@octets at noexpand#1#2{\noexpand#2\noexpand}
-\long\def\UTF at three@octets at noexpand#1#2#3{\noexpand#2\noexpand#3\noexpand}
-\long\def\UTF at four@octets at noexpand#1#2#3#4{\noexpand#2\noexpand#3\noexpand#4\noexpand}
+\long\def\UTF at two@octets at noexpand#1#2#3{\unexpanded{#2#3}}
+\long\def\UTF at three@octets at noexpand#1#2#3#4{\unexpanded{#2#3#4}}
+\long\def\UTF at four@octets at noexpand#1#2#3#4#5{\unexpanded{#2#3#4#5}}
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -376,11 +377,12 @@
 % \begin{macro}{\UTFviii at two@octets at string}
 % \begin{macro}{\UTFviii at three@octets at string}
 % \begin{macro}{\UTFviii at four@octets at string}
+% \changes{v1.3a}{2022/02/19}{Use \cs{detokenize} rather than \cs{string} so only takes one expansion step}%
 %    And the same with \cs{string} for use in \cs{csname} constructions.
 %    \begin{macrocode}
-\long\def\UTF at two@octets at string#1#2{\string#2\string}
-\long\def\UTF at three@octets at string#1#2#3{\string#2\string#3\string}
-\long\def\UTF at four@octets at string#1#2#3#4{\string#2\string#3\string#4\string}
+\long\def\UTF at two@octets at string#1#2#3{\detokenize{#2#3}}
+\long\def\UTF at three@octets at string#1#2#3#4{\detokenize{#2#3#4}}
+\long\def\UTF at four@octets at string#1#2#3#4#5{\detokenize{#2#3#4#5}}
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -542,15 +544,24 @@
 %    |\count@| and ending at |\@tempcnta|${} - 1$, each time executing
 %    the code in |\UTFviii at tmp|.
 %
-%    All this is done in a group so that temporary catcode changes
-%    etc.~vanish after everything is set up.
+%    Store current settings so can restore after the loops without using a group (gh/762).
 %
 %    \begin{macrocode}
-\begingroup
+\edef\reserved at a{%
+\catcode`\noexpand\~=\the\catcode`\~\relax
+\catcode`\noexpand\"=\the\catcode`\"\relax
+\uccode`\noexpand\~=\the\uccode`\~\relax
+\count@=\the\count@\relax
+\@tempcnta=\the\@tempcnta\relax
+\let\noexpand\reserved at a\relax}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 \catcode`\~13
 \catcode`\"12
 %    \end{macrocode}
 %
+% \changes{v1.3a}{2022/02/19}{Use local protected definitions in the character definitions}%
 %    \begin{macrocode}
 \def\UTFviii at loop{%
   \uccode`\~\count@
@@ -566,7 +577,7 @@
 % C0 controls are valid UTF-8 but defined to give the ``Character not defined error''
 % They may be defined with |\DeclareUnicodeCharacter|.
 %    \begin{macrocode}
-    \def\UTFviii at tmp{\xdef~{\noexpand\UTFviii at undefined@err{:\string~}}}
+    \def\UTFviii at tmp{\protected\edef~{\noexpand\UTFviii at undefined@err{:\string~}}}
 % 0 ^^@ null
     \count@"1
     \@tempcnta9
@@ -588,7 +599,7 @@
 %    \begin{macrocode}
     \count@"80
     \@tempcnta"C2
-    \def\UTFviii at tmp{\xdef~{\noexpand\UTFviii at invalid@err\string~}}
+    \def\UTFviii at tmp{\protected\edef~{\noexpand\UTFviii at invalid@err\string~}}
 \UTFviii at loop
 %    \end{macrocode}
 %
@@ -597,7 +608,7 @@
 %    \begin{macrocode}
     \count@"C2
     \@tempcnta"E0
-    \def\UTFviii at tmp{\xdef~{\noexpand\UTFviii at two@octets\noexpand~}}
+    \def\UTFviii at tmp{\protected\edef~{\noexpand\UTFviii at two@octets\noexpand~}}
 \UTFviii at loop
 %    \end{macrocode}
 %
@@ -605,7 +616,7 @@
 %    \begin{macrocode}
     \count@"E0
     \@tempcnta"F0
-    \def\UTFviii at tmp{\xdef~{\noexpand\UTFviii at three@octets\noexpand~}}
+    \def\UTFviii at tmp{\protected\edef~{\noexpand\UTFviii at three@octets\noexpand~}}
 \UTFviii at loop
 %    \end{macrocode}
 %
@@ -614,7 +625,7 @@
 %    \begin{macrocode}
     \count@"F0
     \@tempcnta"F5
-    \def\UTFviii at tmp{\xdef~{\noexpand\UTFviii at four@octets\noexpand~}}
+    \def\UTFviii at tmp{\protected\edef~{\noexpand\UTFviii at four@octets\noexpand~}}
 \UTFviii at loop
 %    \end{macrocode}
 %
@@ -623,12 +634,13 @@
 %    \begin{macrocode}
     \count@"F5
     \@tempcnta"100
-    \def\UTFviii at tmp{\xdef~{\noexpand\UTFviii at invalid@err\string~}}
+    \def\UTFviii at tmp{\protected\edef~{\noexpand\UTFviii at invalid@err\string~}}
 \UTFviii at loop
 %    \end{macrocode}
 %
+% Restore values after the loops.
 %    \begin{macrocode}
-\endgroup
+\reserved at a
 %    \end{macrocode}
 %
 % \end{macro}
@@ -773,12 +785,13 @@
 % looks slightly strange but is designed for the sequence of |\expandafter|
 % in |\DeclareUnicodeCharacter|.
 %
+% \changes{v1.2o}{2021/12/13}{Use 80 not A0 to test for single byte UTF-8}
 %    \begin{macrocode}
-  \ifnum\count@<"A0\relax
+  \ifnum\count@<"80\relax
     \ifnum\catcode\count@=13
       \uccode`\~=\count@\uppercase{\def\UTFviii at tmp{\@empty\@empty~}}%
     \else
-      \@latex at error{Cannot define non-active Unicode char value < 00A0}%
+      \@latex at error{Cannot define non-active Unicode char value < 0080}%
                    \@eha
       \def\UTFviii at tmp{\UTFviii at tmp}%
     \fi
@@ -1139,6 +1152,7 @@
 % \changes{v1.1r}{2015/12/03}{Add some more ogonek cases}
 % \changes{v1.1s}{2016/01/11}{Add some more caron and acute}
 % \changes{v1.1t}{2017/01/28}{Add caron combinations for GgYy}
+% \changes{v1.3c}{2022/06/07}{Fix \cs{guillemetleft} and \cs{guillemetright} also in dfu files (gh/65)}%
 %    \begin{macrocode}
 %<all,t1,ot1,ly1>\DeclareUnicodeCharacter{00A0}{\nobreakspace}
 %<all,t1,ot1,ly1>\DeclareUnicodeCharacter{00A1}{\textexclamdown}
@@ -1152,7 +1166,8 @@
 %<all,ts1,utf8>\DeclareUnicodeCharacter{00A9}{\textcopyright}
 %<all,ts1,ly1,utf8>\DeclareUnicodeCharacter{00AA}{\textordfeminine}
 %<*all,x2,t2c,t2b,t2a,t1,ot2,ly1,lcy>
-\DeclareUnicodeCharacter{00AB}{\guillemotleft}
+%\DeclareUnicodeCharacter{00AB}{\guillemotleft}  % wrong Adobe name
+\DeclareUnicodeCharacter{00AB}{\guillemetleft}
 %</all,x2,t2c,t2b,t2a,t1,ot2,ly1,lcy>
 %<all,ts1>\DeclareUnicodeCharacter{00AC}{\textlnot}
 %<all,t1,ot1,ly1>\DeclareUnicodeCharacter{00AD}{\-}
@@ -1170,7 +1185,8 @@
 %<all,ts1>\DeclareUnicodeCharacter{00B9}{\textonesuperior}
 %<all,ts1,ly1,utf8>\DeclareUnicodeCharacter{00BA}{\textordmasculine}
 %<*all,x2,t2c,t2b,t2a,t1,ot2,ly1,lcy>
-\DeclareUnicodeCharacter{00BB}{\guillemotright}
+%\DeclareUnicodeCharacter{00BB}{\guillemotright} % wrong Adobe name
+\DeclareUnicodeCharacter{00BB}{\guillemetright}
 %</all,x2,t2c,t2b,t2a,t1,ot2,ly1,lcy>
 %<all,ts1,ly1>\DeclareUnicodeCharacter{00BC}{\textonequarter}
 %<all,ts1,ly1>\DeclareUnicodeCharacter{00BD}{\textonehalf}
@@ -1368,6 +1384,18 @@
 %<all,t1,ly1>\DeclareUnicodeCharacter{017E}{\v z}
 %<all,ts1,ly1>\DeclareUnicodeCharacter{0192}{\textflorin}
 %    \end{macrocode}
+% \changes{v1.2n}{2021/12/10}{add 01C4-01CC}
+%    \begin{macrocode}
+%<all,t1>\DeclareUnicodeCharacter{01C4}{D\v Z}
+%<all,t1>\DeclareUnicodeCharacter{01C5}{D\v z}
+%<all,t1>\DeclareUnicodeCharacter{01C6}{d\v z}
+%<all,t1>\DeclareUnicodeCharacter{01C7}{LJ}
+%<all,t1>\DeclareUnicodeCharacter{01C8}{Lj}
+%<all,t1>\DeclareUnicodeCharacter{01C9}{lj}
+%<all,t1>\DeclareUnicodeCharacter{01CA}{NJ}
+%<all,t1>\DeclareUnicodeCharacter{01CB}{Nj}
+%<all,t1>\DeclareUnicodeCharacter{01CC}{nj}
+%    \end{macrocode}
 % \changes{v1.1s}{2016/01/11}{add 01CD-01F4}
 %    \begin{macrocode}
 %<all,t1>\DeclareUnicodeCharacter{01CD}{\v A}
@@ -1795,8 +1823,14 @@
 %<all,ts1>\DeclareUnicodeCharacter{2191}{\textuparrow}
 %<all,ts1>\DeclareUnicodeCharacter{2192}{\textrightarrow}
 %<all,ts1>\DeclareUnicodeCharacter{2193}{\textdownarrow}
+%    \end{macrocode}
+% \changes{v1.3b}{2022/05/08}{Declare Unicode codepoints U+3008/U+3009 to
+%     better support normalized documents}
+%    \begin{macrocode}
 %<all,x2,ts1,t2c,t2b,t2a>\DeclareUnicodeCharacter{2329}{\textlangle}
+%<all,x2,ts1,t2c,t2b,t2a>\DeclareUnicodeCharacter{3008}{\textlangle}
 %<all,x2,ts1,t2c,t2b,t2a>\DeclareUnicodeCharacter{232A}{\textrangle}
+%<all,x2,ts1,t2c,t2b,t2a>\DeclareUnicodeCharacter{3009}{\textrangle}
 %<all,ts1>\DeclareUnicodeCharacter{2422}{\textblank}
 %<all,x2,t2c,t2b,t2a,t1,utf8>\DeclareUnicodeCharacter{2423}{\textvisiblespace}
 %<all,ts1>\DeclareUnicodeCharacter{25E6}{\textopenbullet}

Modified: trunk/Master/texmf-dist/source/latex/firstaid/latex2e-first-aid-for-external-files.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/firstaid/latex2e-first-aid-for-external-files.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/firstaid/latex2e-first-aid-for-external-files.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-%% File: latex2e-first-aid-for-external-files.dtx (C) Copyright 2020-2021
+%% File: latex2e-first-aid-for-external-files.dtx (C) Copyright 2020-2022
 %%
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
@@ -99,7 +99,7 @@
 %    release we have to make and distribute also a matching
 %    development release.
 %
-% \StopEventually{\setlength\IndexMin{200pt}  \PrintIndex  }
+% \MaybeStop{\setlength\IndexMin{200pt}  \PrintIndex  }
 %
 %
 % \section{The Implementation}
@@ -111,8 +111,8 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\def\LaTeXFirstAidDate{2021/11/11}
-\def\LaTeXFirstAidVersion{v1.0q}
+\def\LaTeXFirstAidDate{2022/02/20}
+\def\LaTeXFirstAidVersion{v1.0r}
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -311,11 +311,12 @@
 %<*kernel>
 %    \end{macrocode}
 %
+%    Bidi is now ar a new version: patches are no longer needed.  
 %    \begin{macrocode}
-\AddToHook{file/biditools.sty/after}[firstaid]{%
-  \FirstAidNeededT{biditools}{sty}%
-                  {2020/05/13 v2 Programming tools for bidi package}%
-  {%
+%\AddToHook{file/biditools.sty/after}[firstaid]{%
+%  \FirstAidNeededT{biditools}{sty}%
+%                  {2020/05/13 v2 Programming tools for bidi package}%
+%  {%
 %    \end{macrocode}
 %    \pkg{bidi} adds some code to the beginning of \cs{document} which
 %    contains \cs{endgroup} and \cs{begingroup} which is no longer
@@ -324,20 +325,20 @@
 %    Patching \cs{document} using \cs{bidi at patchcmd} doesn't work so
 %    we take the extra groups out by hand:
 %    \begin{macrocode}
-  \def\firstaid at bidi@document at patch
-          \endgroup#1\begingroup#2\firstaid at bidi@document at patch
-          {\unexpanded{#1#2}}%
-  \edef\document{\expandafter\firstaid at bidi@document at patch\document
-            \firstaid at bidi@document at patch}%
+%  \def\firstaid at bidi@document at patch
+%          \endgroup#1\begingroup#2\firstaid at bidi@document at patch
+%          {\unexpanded{#1#2}}%
+%  \edef\document{\expandafter\firstaid at bidi@document at patch\document
+%            \firstaid at bidi@document at patch}%
 %    \end{macrocode}
 %    There are also some patches into \cs{enddocument}, some continue
 %    to go in but one fails, so we add that now into the right place.
 %    \begin{macrocode}
-  \AddToHook{enddocument/info}%
-            {\let\bidi at AfterEndDocumentCheckLabelsRerun\@firstofone
-              \bidi at afterenddocumentchecklabelsrerunhook}%
-  }%
-}
+%  \AddToHook{enddocument/info}%
+%            {\let\bidi at AfterEndDocumentCheckLabelsRerun\@firstofone
+%              \bidi at afterenddocumentchecklabelsrerunhook}%
+%  }%
+%}
 %    \end{macrocode}
 %    
 %
@@ -559,9 +560,33 @@
    }
 %    \end{macrocode}
 %
+% \subsection{The \pkg{german} class first aid}
 %
+%    Handling of \cs{protected} UTF-8
+%    \begin{macrocode}
+\AddToHook{file/german.sty/after}[firstaid]{%
+  \FirstAidNeededT{german}{sty}{1998/07/08 v2.5e Support for writing german texts (br)}
+                  {%
+\let\grmn at active@dq@\@active at dq
+\def\@active at dq{\protect\grmn at active@dq@}%
+\germanTeX
+}%
+}
+%    \end{macrocode}
 %
+%    \begin{macrocode}
+\AddToHook{file/ngerman.sty/after}[firstaid]{%
+  \FirstAidNeededT{ngerman}{sty}{1998/07/08 v2.5e Support for writing german texts (br)}
+                  {%
+\let\grmn at active@dq@\@active at dq
+\def\@active at dq{\protect\grmn at active@dq@}%
+\ngermanTeX
+}%
+}
+%    \end{macrocode}
 %
+%
+%
 % \subsection[Temporary fixes for the kernel (until the next
 %             patch-level release)]
 %    {Temporary fixes for the kernel \\

Modified: trunk/Master/texmf-dist/source/latex/graphics/color.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/graphics/color.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/graphics/color.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -2,7 +2,7 @@
 % \iffalse
 %
 %% color.dtx Copyright (C) 1994--1999 David Carlisle
-%%           Copyright (C) 2005-2021
+%%           Copyright (C) 2005-2022 LaTeX Project
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -21,7 +21,7 @@
 %<driver> \ProvidesFile{color.drv}
 % \fi
 %         \ProvidesFile{color.dtx}
-          [2021/12/07 v1.3c Standard LaTeX Color (DPC)]
+          [2022/01/06 v1.3d Standard LaTeX Color (DPC)]
 %
 % \iffalse
 %<*driver>
@@ -56,7 +56,7 @@
 % document \emph{Packages in the `graphics' bundle} in the file
 % \texttt{grfguide.tex}.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \section{Options}
@@ -826,7 +826,14 @@
 %    \end{macrocode}
 %  \end{macro}
 %
+% \subsection{Providing \cs{mathcolor}}
 %
+% This is shared coded between different packages, so external.
+%
+%    \begin{macrocode}
+\input{mathcolor.ltx}
+%    \end{macrocode}
+%
 % \section{Extra Groups}
 % Turning on extra groups in the standard \LaTeX\ commands, so that
 % colour commands are scoped correctly.

Modified: trunk/Master/texmf-dist/source/latex/graphics/drivers.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/graphics/drivers.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/graphics/drivers.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %
 %% drivers.dtx Copyright (C) 1994      David Carlisle Sebastian Rahtz
 %%             Copyright (C) 1995 1996 1997 1998 1999 David Carlisle
-%%             Copyright (C) 2000-2021
+%%             Copyright (C) 2000-2022 LaTeX Project
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -77,7 +77,7 @@
 %
 %
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \section{Colour}

Modified: trunk/Master/texmf-dist/source/latex/graphics/epsfig.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/graphics/epsfig.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/graphics/epsfig.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -2,7 +2,7 @@
 % \iffalse
 %
 %% epsfig.dtx Copyright (C) 1994-1996 1999 Sebastian Rahtz
-%%            Copyright (C) 2000-2021
+%%            Copyright (C) 2000-2022 LaTeX Project
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -41,7 +41,7 @@
 % \maketitle
 %
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{Preface}
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/graphics/graphics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/graphics/graphics.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/graphics/graphics.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -2,7 +2,7 @@
 % \iffalse
 %
 %% graphics.dtx Copyright (C) 1994      David Carlisle Sebastian Rahtz
-%%              Copyright (C) 1995-2021
+%%              Copyright (C) 1995-2022 LaTeX Project
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -27,7 +27,7 @@
 %<driver> \ProvidesFile{graphics.drv}
 % \fi
 %         \ProvidesFile{graphics.dtx}
-          [2021/03/04 v1.4d  Standard LaTeX Graphics (DPC,SPQR)]
+          [2022/03/10 v1.4e  Standard LaTeX Graphics (DPC,SPQR)]
 %
 % \iffalse
 %<*driver>
@@ -276,7 +276,7 @@
 % and |\rotatebox| commands that some people may prefer. It is provided
 % by the accompanying |graphicx| package.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{The Graphics Kernel Functions}
 %
@@ -1053,33 +1053,39 @@
 %    \edef{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\set at curr@file}
+% \begin{macro}{\Gin at set@curr at file}
 % \begin{macro}{\quote at name}
 % \changes{v1.3c}{2019/10/08}
 %     {Definitions added for old formats}
+% \changes{v1.4e}{2022/03/10}
+%     {Use \cs{Gin at set@curr at file}, and define it appropriately}
+%   We have to cope with older formats (rollback as far as 2019-10-01)
+%   and Plain.  Define a minimal \cs{Gin at set@curr at file} first:
 %    \begin{macrocode}
-\def\Gin at temp#1{%
+\def\Gin at set@curr at file#1{%
   \begingroup
     \escapechar\m at ne
-    \xdef\@curr at file{\expandafter\string\csname #1\endcsname}%
-  \endgroup
-}
-\ifx\set at curr@file\@Gin at temp
-  \let\set at curr@file\@undefined
-\fi
+    \xdef\@curr at file{\expandafter\string\csname\@firstofone#1\@empty\endcsname}%
+  \endgroup}
 %    \end{macrocode}
-%
+%   Then, if \cs{set at curr@file at nosearch} is undefined, we're before
+%   2022-06-01, and if \cs{set at curr@file} is undefined, we're before
+%   2019-10-01 (aka Plain, as far as these tests are concerned).  Make
+%   \cs{Gin at set@curr at file} be a copy of the most recent macro:
+%   \cs{set at curr@file at nosearch} if it exists, and \cs{set at curr@file}
+%   otherwise.  If neither exist, we also need to define
+%   \cs{quote at name} et~al.
 %    \begin{macrocode}
-\ifx\set at curr@file\@undefined
-\def\set at curr@file#1{%
-  \begingroup
-    \escapechar\m at ne
-    \xdef\@curr at file{\expandafter\string\csname\@firstofone#1\@empty\endcsname}%
-  \endgroup
-}
-\def\quote at name#1{"\quote@@name#1\@gobble""}
-\def\quote@@name#1"{#1\quote@@name}
-\def\unquote at name#1{\quote@@name#1\@gobble"}
+\ifx\set at curr@file at nosearch\@undefined
+  \ifx\set at curr@file\@undefined
+    \def\quote at name#1{"\quote@@name#1\@gobble""}
+    \def\quote@@name#1"{#1\quote@@name}
+    \def\unquote at name#1{\quote@@name#1\@gobble"}
+  \else
+    \let\Gin at set@curr at file\set at curr@file
+  \fi
+\else
+  \let\Gin at set@curr at file\set at curr@file at nosearch
 \fi
 %    \end{macrocode}
 % \end{macro}
@@ -1114,8 +1120,11 @@
 %
 % \changes{v1.3d}{2019/11/01}
 %     {\cs{curr at name} now unquoted}
+% \changes{v1.4e}{2022/03/10}
+%     {Use \cs{set at curr@file at nosearch} to avoid premature inclusion of
+%      path from \cs{graphicspath}}
 %    \begin{macrocode}
-  \set at curr@file{#1}%
+  \Gin at set@curr at file{#1}%
   \expandafter\filename at parse\expandafter{\@curr at file}%
 %    \end{macrocode}
 % If extension is |.gz| tack on to previous extension, eg |.eps.gz| if available.

Modified: trunk/Master/texmf-dist/source/latex/graphics/graphics.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/graphics/graphics.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/graphics/graphics.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -40,4 +40,6 @@
 
 \generate{\file{rotating.sty}{\from{rotating.dtx}{package}}}
 
+\generate{\file{mathcolor.ltx}{\from{mathcolor.dtx}{code}}}
+
 \endbatchfile

Modified: trunk/Master/texmf-dist/source/latex/graphics/graphicx.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/graphics/graphicx.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/graphics/graphicx.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -2,7 +2,7 @@
 % \iffalse
 %
 %% graphicx.dtx Copyright (C) 1994      David Carlisle Sebastian Rahtz
-%%              Copyright (C) 1995-2021
+%%              Copyright (C) 1995-2022 LaTeX Project
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -211,7 +211,7 @@
 % which rotates around the reference point on the baseline, thus
 % producing a box that is mainly \emph{below} the baseline.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \section{Implementation}

Modified: trunk/Master/texmf-dist/source/latex/graphics/keyval.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/graphics/keyval.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/graphics/keyval.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,7 +1,7 @@
 %
 % \iffalse
 %% keyval.dtx Copyright (C) 1993 1994 1995 1997 1998 1999 David Carlisle
-%%            Copyright (C) 2000-2021 David Carlisle, LaTeX Project
+%%            Copyright (C) 2000-2022 David Carlisle, LaTeX Project
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -20,7 +20,7 @@
 %<driver>        \ProvidesFile{keyval.drv}
 % \fi
 %                \ProvidesFile{keyval.dtx}
-                 [2014/10/28 v1.15 key=value parser (DPC)]
+                 [2022/05/29 v1.15 key=value parser (DPC)]
 %
 % \iffalse
 %</!plain>
@@ -177,7 +177,7 @@
 % \section{The Internal Interface}
 % A declaration of the form:\\
 % |\define at key{family}{key}{...}|\\
-% Defines a macro |\KV at prefix@key| with one argument. When used in a
+% Defines a macro |\KV at family@key| with one argument. When used in a
 % keyval list, the macro receives the value as its argument.
 %
 % A declaration of the form:\\
@@ -202,7 +202,7 @@
 % package do not break styles making use of these `low level'
 % definitions.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{The Macros}
 %

Modified: trunk/Master/texmf-dist/source/latex/graphics/lscape.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/graphics/lscape.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/graphics/lscape.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -2,7 +2,7 @@
 % \iffalse
 %
 %% lscape.dtx Copyright (C) 1994 1999-2000 David Carlisle
-%%            Copyright (C) 2000-2021
+%%            Copyright (C) 2000-2022 LaTeX Project
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -54,7 +54,7 @@
 % page before the page head and foot are added.
 %
 %
-% \StopEventually{\end{landscape}}
+% \MaybeStop{\end{landscape}}
 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
 % \changes{v1.00}{1992/04/28}{Initial release}

Added: trunk/Master/texmf-dist/source/latex/graphics/mathcolor.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/graphics/mathcolor.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/graphics/mathcolor.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -0,0 +1,431 @@
+% \iffalse meta-comment
+%
+%% File: mathcolor.dtx (C) Copyright 2021-2022
+%       Frank Mittelbach, LaTeX Team
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version.  The latest version
+% of this license is in the file
+%
+%    https://www.latex-project.org/lppl.txt
+%
+%
+%%% From File: mathcolor.dtx
+%
+%    \begin{macrocode}
+\def\mathcolorversion{v1.0b}
+\def\mathcolordate{2022/01/28}
+%    \end{macrocode}
+%<*driver>
+\documentclass{l3doc}
+
+%\makeatletter \input{mathcolor.ltx} \makeatother
+
+\usepackage{color}
+
+% Fixing footnotes in  functions and variables: this should be in l3doc!
+
+\newcommand\fixfootnote[2]{\footnotemark
+  \AddToHookNext{env/#1/after}{\footnotetext{#2}}}
+\AddToHook{env/function/begin}{\def\footnote{\fixfootnote{function}}}
+\AddToHook{env/variable/begin}{\def\footnote{\fixfootnote{variable}}}
+
+\EnableCrossrefs
+\CodelineIndex
+\begin{document}
+  \DocInput{mathcolor.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+
+
+
+%
+% \title{Providing color in math\thanks{This file has version
+%    \mathcolorversion\ dated \mathcolordate, \copyright\ \LaTeX\
+%    Project.}}
+% \author{Frank Mittelbach}
+%
+% \maketitle
+%
+%
+% \section{Introduction}
+%
+%    It is possible to use the \cs{color} command in math formulas but
+%    doing that has a number of restrictions and often leads to rather
+%    unreadable input. For example, to color the summation sign in red
+%    in the following formula
+% \[
+%     X = \color{red} \sum_{{\color{black} i=1}}^{{\color{black} n}} \color{black} x_i
+% \]
+%    A total of four color commands and a number of seemingly
+%    unnecessary extra braces in the sub and superscript are needed:
+%\begin{verbatim}
+%  \[ X = \color{red} \sum
+%         _{{\color{black} i=1}}  % without {{ the superscript is misplaced
+%         ^{{\color{black} n}}    % without {{ the \sum is black
+%        \color{black}            % without the x_i is red
+%        x_i                  \]
+%\end{verbatim}
+%    While this is ugly but at least works, other things are simply
+%    impossible, e.g.,
+% \[  \left\{ \frac{1}{2} \mathcolor{red}{\right\}} \]
+%    are not achievable at all because of the fact that \cs{left} and
+%    \cs{right} form a group. Thus, a \cs{color} command immediately
+%    before the \cs{right} has no effect and \verb=\}= remains black.
+%    Putting the color change before the \cs{left} and then resetting
+%    the color inside would work if you want to color both braces, but
+%    the above combination or the attempt to color only the left brace
+%    fails always.
+%
+%    Using \cs{textcolor} in formulas appears to work on first glance,
+%    but it produces spacing problems that are not easy to overcome
+%    either, because it generates a single \cs{mathord} and no
+%    longer reflects its input, thus
+%    \verb/\[ a = b \textcolor{red}{\neq} c \]/
+%    produces
+%  \[ a = b \textcolor{red}{\neq} c \]
+%    This is a case one could mend by wrapping the
+%    \cs{textcolor} and its arguments in a \cs{mathrel}, but even when
+%    that is possible, the resulting formula source is difficult to
+%    maintain and in other situations the solutions are even more
+%    complicated or there is no solution at all.
+%
+%    We therefore offer now a dedicated math coloring command named
+%    \cs{mathcolor}.
+%
+% \begin{function}{\mathcolor}
+% \begin{syntax}
+%   \cs{mathcolor} \oarg{model} \Arg{color-spec} \Arg{math material}
+% \end{syntax}
+%    It has the same arguments as \cs{textcolor} but is intended for
+%    use in formulas. The command does not generate a group and the
+%    \meta{math material} retains its math atom states and it correctly
+%    handles sub and superscripts that follow.
+% \end{function}
+%
+%    The command can also be used to color a single opening or closing
+%    symbol, e.g., the correct input to our earlier example is
+%\begin{verbatim}
+%    \[  \left\{ \frac{1}{2} \mathcolor{red}{\right\}} \]
+%\end{verbatim}
+%    which is how it was produced.
+%
+%    If you attempt to color large operators that use explicit
+%    \cs{limits}, \cs{nolimits}, or \cs{displaylimits}, then these
+%    limit controls need to immediately follow the operator. However,
+%    \cs{mathcolor} is written in a way that it is possible write
+%\begin{verbatim}
+%     \[  \mathcolor{red}{\int}\limits_0^1 \textrm{ or }
+%         \mathcolor{red}{\int\limits}_0^1                \]
+%\end{verbatim}
+%    and achieve the same effect:
+%     \[  \mathcolor{red}{\int}\limits_0^1 \textrm{ or }
+%         \mathcolor{red}{\int\limits}_0^1                \]
+
+%
+%
+% \MaybeStop{\setlength\IndexMin{200pt}  \PrintIndex  }
+%
+%
+% \section{The Implementation}
+%
+%    The code is called inside of the \pkg{color} or \pkg{xcolor}
+%    packages, so \texttt{@} is already a letter, but the
+%    coding here is done in the L3 programming layer, so we need to
+%    activate that. But first we check if this file was loaded before,
+%    e.g., when both \pkg{color} and \pkg{xcolor} are in the preamble
+%    and in that case we stop immediately.
+%    \begin{macrocode}
+%<*code>
+\ifcsname mathcolor\endcsname \endinput \fi
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\ExplSyntaxOn
+%<@@=mathcolor>
+%    \end{macrocode}
+%
+%  \begin{macro}{\g_@@_seq}
+%    We need to keep our own stack of color commands, so we allocate a
+%    sequence for that.
+%    \begin{macrocode}
+\seq_new:N \g_@@_seq
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%  \begin{macro}{\mathcolor}
+%    The document-level command which expects a color (if unnamed then
+%    the optional argument is the model) and colors the content of the
+%    second argument (like \cs{textcolor}, but without spacing
+%    problems in math).
+%    \begin{macrocode}
+\DeclareDocumentCommand \mathcolor { o m m } {
+%    \end{macrocode}
+%    The \cs{mathcolor} is only supported in math mode because in text
+%    mode it has problems scanning away a space after it, for example.
+%    We therefore raise an error if it executes
+%    anywhere else. The \LaTeXe{} error command is a
+%    bit strangely named, because in the kernel it is only used for
+%    math alphabets, but the message it gives is fine.
+% \changes{v1.0b}{2022/01/28}{Restrict command to math mode}
+%    \begin{macrocode}
+  \mode_if_math:F { \non at alpherr {\mathcolor\space} }
+%    \end{macrocode}
+%    First real action is to save the current color value on a stack
+%    (needed if the command is nested or contains some further color
+%    changes with \cs{color} inside).
+%    \begin{macrocode}
+  \seq_gpush:No \g_@@_seq \current at color
+%    \end{macrocode}
+%    Then we switch to the new color, but we do not want to reset the
+%    color after the group (which is done by \cs{color} using
+%    \cs{aftergroup}\cs{reset at color}). The best solution here would be
+%    if the color packages  would provide a command doing just the
+%    color switching, but for now we simply undo that part by pushing
+%    \cs{use_none:n} which gobbles the \cs{reset at color} added by
+%    \cs{color} with \cs{aftergroup}.
+%    \begin{macrocode}
+  \group_insert_after:N \use_none:n
+%    \end{macrocode}
+%    Switching the color is also slightly suboptimal, because
+%    depending on whether or not we have a \meta{model} argument, we
+%    have to call \cs{color} with or without the optional argument. But
+%    going low-level here is not an option as we need to support
+%    different color packages and their internals are not identical.
+%    \begin{macrocode}
+  \IfValueTF{#1} { \color[#1]{#2} }{ \color{#2} }
+%    \end{macrocode}
+%    Then comes the math material we want to see colored:
+%    \begin{macrocode}
+  #3
+%    \end{macrocode}
+%    After that we need to reset the color ourselves (without a group
+%    that does it for us), i.e., popping the saved  color from our
+%    stack, but there are some twists to that so we do this in a
+%    separate command (which in fact needs to be called several times,
+%    so inlining the code wouldn't be possible.
+%    \begin{macrocode}
+  \@@_scan_for_scripts:w
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+%  \begin{macro}{\@@_scan_for_scripts:w}
+%    The complication when changing the color back is due to the fact
+%    that the \cs{mathcolor} may be followed by \verb=^= or \verb=_=
+%    or the hidden superscript \texttt{'} and its argument may end in a
+%    \cs{mathop} in which case the sub and superscripts may be
+%    attached as \cs{limits} instead of after the material. All cases
+%    need separate treatment.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_scan_for_scripts:w {
+%    \end{macrocode}
+%    We therefore first parse for a \cs{c_math_subscript_token}
+%    ignoring (dropping) any spaces and \cs{relax} as \TeX{} would
+%    do. We do this with expansion so that hidden sub or superscripts
+%    in macros are still found as long as the macros are expandable.
+%    \begin{macrocode}
+  \@@_peek_catcode_ignore_filler_expand:NTF \c_math_subscript_token
+%    \end{macrocode}
+%    If we found that character we call a function that handles sub or
+%    superscripts.
+%    \begin{macrocode}
+    { \@@_handle_scripts:Nw }
+%    \end{macrocode}
+%    Otherwise check if this token we peeked at (which is now stored
+%    in \cs{l_peek_token} is a superscript token.
+%    \begin{macrocode}
+    { \token_if_math_superscript:NTF \l_peek_token
+%    \end{macrocode}
+%    If found we call the sub/superscript handler.
+%    \begin{macrocode}
+      { \@@_handle_scripts:Nw }
+%    \end{macrocode}
+%    Otherwise we check if it was any of the limit operation
+%    primitives. If that is the case, e.g., if we have a situation
+%    such as
+%\begin{verbatim}
+%    \mathcolor{red}{\int}\limits_1
+%\end{verbatim}
+%    we have to move it directly after the \cs{int} to ensure there
+%    is no color reset between the operator and the \cs{limits} command.
+%    \begin{macrocode}
+      { \token_case_meaning:NnTF \l_peek_token
+          {
+            \limits   { \limits }
+            \nolimits { \nolimits }
+            \displaylimits { \displaylimits }
+          }
+%    \end{macrocode}
+%    Once that is done, we have to get rid of the token we peeked at
+%    and then restart scanning for sub or superscripts. Given that
+%    \cs{@@_scan_for_scripts:w} expands while scanning the simplest
+%    solution is to add \cs{use_none:n} in front of the peeked at token.
+%    \begin{macrocode}
+          { \@@_scan_for_scripts:w \use_none:n }
+%    \end{macrocode}
+%    If it was one of these we look for a \texttt{'} and if found remove it and
+%    replace it by its expansion. The reason we have to do this (and
+%    not rely on the earlier peeking to expand for us is the fact
+%    that \texttt{'} is only ``math active'' and that doesn't expand
+%    under \cs{expanded} or \cs{expandafter}.
+%    \begin{macrocode}
+          { \peek_meaning_remove:NTF '
+            { \@@_handle_scripts:Nw ^\c_group_begin_token \prim at s }
+%    \end{macrocode}
+%    If it is anything else we finish off which means we reset the
+%    color (because we prevented that before to happen automatically
+%    after the next group) and pop the color stack setting \cs{current at color}.
+%    \begin{macrocode}
+            { \reset at color
+              \seq_gpop:NN \g_@@_seq \current at color
+            }
+          }
+      }
+    }
+}
+%    \end{macrocode}
+%  \end{macro}
+
+
+
+%  \begin{macro}{\@@_handle_scripts:Nw}
+%    The tricky part of handling sub and superscripts is that we have
+%    to reset color to the one that is on the stack but reset it back
+%    to what it was before to allow for cases like
+%\begin{verbatim}
+%    \[  \mathcolor{red}{a+\sum}_{i=1}^n  \]
+%\end{verbatim}
+%    Here, \TeX{} constructs a \cs{vbox} stacking subscript, summation
+%    sign, and superscript. So technically the superscript comes first
+%    and the \cs{sum} that should get colored red is the middle.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_handle_scripts:Nw #1 {
+%    \end{macrocode}
+%    The argument is either \verb=^= or \verb=_=, so we execute it and
+%    explicitly open two \verb={= groups. We need two because color
+%    resets are always done after a group, so the first group is for
+%    script material (in case it was just something like \verb=_i=)
+%    and the second is needed for the color reset to keep it within
+%    the super or subscript. If that reset would happen after it then
+%    the color \cs{special} would interfere with \TeX{} math spacing.
+%    \begin{macrocode}
+    #1 \c_group_begin_token \c_group_begin_token
+%    \end{macrocode}
+%    Now it is time to change the color back to the one on the stack.
+%    \begin{macrocode}
+    \seq_get:NN \g_@@_seq \current at color
+    \set at color
+%    \end{macrocode}
+%    \cs{set at color} adds \cs{aftergroup}\cs{reset at color}. We now a add
+%    bit more so that the code executed after the current (inner) group
+%    looks like this:
+%\begin{verbatim}
+%      \reset at color } \@@_scan_for_scripts:w
+%\end{verbatim}
+%    The \cs{_@@_scan_for_scripts:w} then retakes control and initiates
+%    parsing for another sub or superscript.
+%    \begin{macrocode}
+    \group_insert_after:N \c_group_end_token
+    \group_insert_after:N \@@_scan_for_scripts:w
+%    \end{macrocode}
+%    Before we give control to \TeX{} to process the sub or
+%    superscript some final adjustment is necessary: if the input was
+%    \verb=^{...}= then we have one \verb={= too many, because we
+%    already supplied the outer one already. In that case we drop
+%    it. Otherwise we have an unbraced single token sub or superscript
+%    which means we are missing a closing \verb=}= at the end and need
+%    to account for that: this is done in \cs{_@@_handle_unbraced_script:N}.
+%    \begin{macrocode}
+    \@@_peek_catcode_ignore_filler_expand:NTF \c_group_begin_token
+      { \peek_catcode_remove:NT \c_group_begin_token { } }
+      { \@@_handle_unbraced_script:N }
+  }%    \end{macrocode}
+%  \end{macro}
+
+
+%  \begin{macro}{\@@_handle_unbraced_script:N}
+%    All we have to do here is to add the final closing brace.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_handle_unbraced_script:N #1 {
+  #1 \c_group_end_token }
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+% \subsection{Utility function for the peek module}
+%
+%    This peek is expanding and ignores spaces and \cs{relax} (even
+%    though the name doesn't say so)
+%    but \cs{relax} is usually allowed in such places where we so it
+%    may not be bad to have it in this way in general --- maybe this
+%    should move to expl3 peek functions (or otherwise the naming
+%    should perhaps be adjusted).
+%
+%
+%    \begin{macrocode}
+\tl_new:N \l_@@_peek_tmp_tl
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_peek_catcode_ignore_filler_expand:NTF #1#2#3
+  {
+    \tl_set:Nn \l_@@_peek_tmp_tl
+      { \token_if_eq_catcode:NNTF \l_peek_token #1 {#2} {#3} }
+    \@@_peek_expand:w
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_peek_expand:w
+  {
+    \exp_after:wN \peek_catcode_remove:NTF
+    \exp_after:wN \c_space_token
+    \exp_after:wN \@@_peek_test_expand:w
+    \exp_after:wN \@@_peek_test_relax:w
+    \exp:w \exp_end_continue_f:w
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_peek_test_expand:w
+  {
+    \token_if_expandable:NTF \l_peek_token
+      { \@@_peek_expand:w }
+      { \l_@@_peek_tmp_tl      }
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_peek_test_relax:w
+   {
+    \peek_meaning_remove:NTF \scan_stop:
+      { \@@_peek_expand:w }
+      { \@@_peek_test_expand:w   }
+   }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<@@=>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\ExplSyntaxOff
+%</code>
+%    \end{macrocode}
+%
+% \Finale
+%
+%
+
+%%%%%%%%%%%%%%%%
+\endinput
+%%%%%%%%%%%%%%%%
+


Property changes on: trunk/Master/texmf-dist/source/latex/graphics/mathcolor.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/source/latex/graphics/rotating.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/graphics/rotating.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/graphics/rotating.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -5,7 +5,7 @@
 % File: rotating.dtx
 %% Copyright (C) 1995-1999 Sebastian Rahtz and Leonor Barroca
 %% Copyright (C) 2001-2003,2007-2009 Robin Fairbairns
-%% Copyright (C) 2016-2021 LaTeX Project
+%% Copyright (C) 2016-2022 LaTeX Project
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %
@@ -157,7 +157,7 @@
 %                                   top does
 % \end{tabular}
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{Setup}
 % Now we present the documented code.  First, package options.

Modified: trunk/Master/texmf-dist/source/latex/graphics/trig.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/graphics/trig.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/graphics/trig.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse
 %% File: trig.dtx Copyright (C) 1993-1999 David Carlisle
-%%                Copyright (C) 2000-2021
+%%                Copyright (C) 2000-2022 LaTeX Project
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -78,7 +78,7 @@
 % |\dimen2=\UseSin{30}\dimen0|. Which means that |\UseSin| must
 % \emph{expand} to a \meta{factor}.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{The Macros}
 %

Modified: trunk/Master/texmf-dist/source/latex/tools/afterpage.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/afterpage.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/afterpage.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -101,7 +101,7 @@
 % on a new page.
 % \end{enumerate}
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %    \begin{macrocode}
 %<*package>

Modified: trunk/Master/texmf-dist/source/latex/tools/afterpage.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/afterpage.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/afterpage.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -45,7 +45,7 @@
 reports for it can be opened at https://latex-project.org/bugs/
 (but please observe conditions on bug reports sent to that address!)
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/tools/array.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/array.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/array.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -33,7 +33,7 @@
 %<+package>\DeclareCurrentRelease{}{2020-10-01}
 %<+package>
 %<+package>\ProvidesPackage{array}
-%<+package>         [2021/10/04 v2.5f Tabular extension package (FMi)]
+%<+package>         [2022/03/10 v2.5f Tabular extension package (FMi)]
 %
 % \fi
 %
@@ -753,7 +753,7 @@
 %
 % \changes{v2.2b}{1994/02/04}{Removed interactive prompt}
 %
-% \StopEventually{
+% \MaybeStop{
 %
 %
 % \begin{thebibliography}{1}
@@ -773,7 +773,7 @@
 %       Addison-Wesley, Reading, Massachusetts, 1986.
 % \end{thebibliography}
 %
-% }   ^^A  end of \StopEventually
+% }   ^^A  end of \MaybeStop
 %
 %
 %
@@ -890,8 +890,8 @@
 %       c   & 0  & 0 \\
 %       l   & 0  & 1 \\
 %       r   & 0  & 2 \\
-%       p-arg    & 0  & 3 \\
-%       t-arg    & 0  & 4 \\
+%       m-arg    & 0  & 3 \\
+%       p-arg    & 0  & 4 \\
 %       b-arg    & 0  & 5 \\
 %       |   & 1  & 0 \\
 %       !-arg    & 1  & 1 \\
@@ -907,8 +907,8 @@
 %       @   & 7  & --- \\
 %       <   & 8  & --- \\
 %       >   & 9  & --- \\
-%       p   & 10 & 3 \\
-%       t   & 10 & 4 \\
+%       m   & 10 & 3 \\
+%       p   & 10 & 4 \\
 %       b   & 10 & 5
 %    \end{tabular}
 % \end{center}

Modified: trunk/Master/texmf-dist/source/latex/tools/bm.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/bm.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/bm.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -22,7 +22,7 @@
 % \fi
 %
 % \iffalse
-%% Copyright 1996 1997 1998 1999 2002 2003 2004 2016 2017 2019
+%% Copyright 1996 1997 1998 1999 2002 2003 2004 2016 2017 2019 2021 2022
 %% David Carlisle Frank Mittelbach
 %%
 %% Development of this package was commissioned by Y&Y Inc.
@@ -36,7 +36,7 @@
 %<driver>\ProvidesFile{bm.drv}
 % \fi
 %         \ProvidesFile{bm.dtx}
-          [2021/04/25 v1.2e Bold Symbol Support (DPC/FMi)]
+          [2022/01/05 v1.2f Bold Symbol Support (DPC/FMi)]
 %
 % \iffalse
 %<*driver>
@@ -312,7 +312,7 @@
 % the package option |nopbm|  is available which prevents its use in which case |\bm| will
 % use the non-bold for characters from the affected font,
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{Implementation}
 %
@@ -839,9 +839,12 @@
       \unvcopy{\GenericError{##1}{##2}{##3}{##4}}}%
 %    \end{macrocode}
 % For AMS definitions.
+% \changes{v1.2f}{2022/01/05}
+%      {Guard \cs{nolimits@},  gh/744}
 %    \begin{macrocode}
     \let\DN@\copy
     \let\FN@\copy
+    \let\nolimits@\copy
     \let\next@\copy
     \global\let\bm at first\@empty
 %    \end{macrocode}
@@ -1016,7 +1019,7 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}{\bm at end}
+% \begin{macro}[outer]{\bm at end}
 % \changes{v0.10}{1997/01/04}
 %      {Macro added}
 % Normally speaking |\outer| declarations should be avoided at all

Modified: trunk/Master/texmf-dist/source/latex/tools/bm.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/bm.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/bm.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -45,7 +45,7 @@
 reports for it can be opened at https://latex-project.org/bugs/
 (but please observe conditions on bug reports sent to that address!)
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/tools/calc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/calc.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/calc.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -425,7 +425,7 @@
 % syntax characters.
 %
 %
-% \StopEventually{
+% \MaybeStop{
 % \begin{thebibliography}{1}
 %    \bibitem{texbook}
 %       \textsc{D. E. Knuth}.

Modified: trunk/Master/texmf-dist/source/latex/tools/dcolumn.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/dcolumn.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/dcolumn.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -191,7 +191,7 @@
 % "D{+}{\,\pm\,}{3,3}" will give nice, symmetric layout of up to three
 % digits on either side of a $\pm$ sign.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \section{The Macros}

Modified: trunk/Master/texmf-dist/source/latex/tools/delarray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/delarray.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/delarray.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -100,7 +100,7 @@
 % \end{verbatim}
 %
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{The Macros}
 %

Modified: trunk/Master/texmf-dist/source/latex/tools/enumerate.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/enumerate.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/enumerate.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -122,7 +122,7 @@
 % |\ref{LA}|, |\ref{LB}| and |\ref{LC}| produce
 % `\ref{LA}',  `\ref{LB}' and `\ref{LC}' respectively.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %\section{Macros}
 %

Modified: trunk/Master/texmf-dist/source/latex/tools/fileerr.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/fileerr.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/fileerr.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -51,7 +51,7 @@
 %    \par After installing these files the user can respond with
 %    |h|,  |q|, |r|, |s|, |e|, |x|, and on some systems also with
 %    \meta{return} to \TeX's missing file name question.
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{The documentation driver}
 %    This code will generate the documentation. Since it is the

Modified: trunk/Master/texmf-dist/source/latex/tools/fontsmpl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/fontsmpl.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/fontsmpl.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -70,7 +70,7 @@
 % The |fontsmpl| document prompts interactively for a font family (for
 % example `|cmr|') and produces a sample of that family.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{Documentation}
 %

Modified: trunk/Master/texmf-dist/source/latex/tools/ftnright.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/ftnright.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/ftnright.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -292,7 +292,7 @@
 % worth of footnote material and that means that some of your footnotes are
 % likely to be detached from their reference and show up on a later page!
 %
-% \StopEventually{
+% \MaybeStop{
 %
 % \begin{small}
 % \begin{thebibliography}{1}

Modified: trunk/Master/texmf-dist/source/latex/tools/hhline.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/hhline.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/hhline.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -148,7 +148,7 @@
 % program, or if this is not possible, increasing "\arrayrulewidth"
 % may help to reduce the effect.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{The Macros}
 %

Modified: trunk/Master/texmf-dist/source/latex/tools/indentfirst.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/indentfirst.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/indentfirst.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -59,7 +59,7 @@
 %
 % \CheckSum{4}^^A  Still I think a record:-)
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \begin{macro}{\if at afterindent}
 % \LaTeX\ uses the switch |\if at afterindent| to decide whether to indent

Modified: trunk/Master/texmf-dist/source/latex/tools/layout.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/layout.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/layout.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -92,7 +92,7 @@
 % \layout
 % \end{figure}
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{The implementation}
 %

Modified: trunk/Master/texmf-dist/source/latex/tools/longtable.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/longtable.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/longtable.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -770,7 +770,7 @@
 % \end{verbatim}
 % \endgroup
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \finalclearpage
 % \section{The Macros}

Modified: trunk/Master/texmf-dist/source/latex/tools/longtable.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/longtable.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/longtable.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -45,7 +45,7 @@
 reports for it can be opened at https://latex-project.org/bugs/
 (but please observe conditions on bug reports sent to that address!)
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/tools/multicol.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/multicol.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/multicol.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -92,17 +92,19 @@
 %<package>\providecommand\DeclareCurrentRelease[2]{}
 %<package>
 %<package>\DeclareRelease{}{2017-04-11}{multicol-2017-04-11.sty}
-%<package>\DeclareCurrentRelease{}{2018-04-01}
+%<package>\DeclareRelease{v1.8}{2019-10-01}{multicol-2019-10-01.sty}
+%<package>\DeclareCurrentRelease{}{2021-11-15}
 %<package>
 %<package>\ProvidesPackage{multicol}
 %<driver> \ProvidesFile{multicol.drv}
 % \fi
 %         \ProvidesFile{multicol.dtx}
-          [2021/10/28 v1.9b  multicolumn formatting (FMi)]
+          [2021/11/30 v1.9d  multicolumn formatting (FMi)]
 %
 %
 %%
 %
+% \changes{v1.9c}{2021/11/30}{Added rollback to v1.8}
 % \changes{v1.5n}{1997/06/05}{Applied improvement of documentation,
 %          kindly done by Robin Fairbairns.}
 % \changes{v1.4h}{1992/06/04}{Added mark tracing with
@@ -844,7 +846,7 @@
 % \changes{v1.5l}{1996/01/13}{Try hard to explain unresolved reference
 %                that happens if \cs{OnlyDescription} is used}
 %
-% \StopEventually{\PrintIndex \PrintChanges
+% \MaybeStop{\PrintIndex \PrintChanges
 %   \ifx\Finale\relax
 %    \typeout{**********************************}
 %    \typeout{* Info: Typesetting this document with
@@ -4149,7 +4151,11 @@
      a multicols or multicols* environment.}%
   \else
     \ifvmode
-     \nobreak\vfill\penalty -\@Mv\relax
+%    \end{macrocode}
+%    We need to guard the \cs{vfill} from disappearing.
+% \changes{v1.9d}{2021/12/05}{Guard the \cs{vfill} (sx/624940)}
+%    \begin{macrocode}
+     \nobreak\vfill\kern\z@\penalty -\@Mv\relax
    \else
      \@bsphack
      \vadjust{\nobreak\vfill\kern\z@\penalty -\@Mv\relax}%

Modified: trunk/Master/texmf-dist/source/latex/tools/multicol.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/multicol.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/multicol.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -45,7 +45,7 @@
 reports for it can be opened at https://latex-project.org/bugs/
 (but please observe conditions on bug reports sent to that address!)
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/tools/rawfonts.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/rawfonts.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/rawfonts.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -63,7 +63,7 @@
 % \end{verbatim}
 % to your |latex209.cfg| \LaTeX~2.09 compatibility configuration file.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section*{Implementation}
 %

Modified: trunk/Master/texmf-dist/source/latex/tools/shellesc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/shellesc.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/shellesc.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse
 %% Source File: shellesc.dtx
-%% Copyright (C) 2015-2021
+%% Copyright (C) 2015-2022
 %%
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.

Modified: trunk/Master/texmf-dist/source/latex/tools/showkeys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/showkeys.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/showkeys.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -28,11 +28,18 @@
           \ProvidesFile{showkeys.dtx}
 %</dtx>
 %<package>\NeedsTeXFormat{LaTeX2e}
+%<package>
+%<package>\providecommand\DeclareRelease[3]{}
+%<package>\providecommand\DeclareCurrentRelease[2]{}
+%<package>
+%<package>\DeclareRelease{}{2014-10-28}{showkeys-2014-10-28.sty}
+%<package>\DeclareCurrentRelease{}{2022-06-01}
+%<package>
 %<package>\ProvidesPackage{showkeys}
 %<driver> \ProvidesFile{showkeys.drv}
 % \fi
 %         \ProvidesFile{showkeys.dtx}
-          [2014/10/28 v3.17 Show cite and label keys (DPC, MH)]
+          [2022/04/12 v3.18 Show cite and label keys (DPC, MH)]
 %
 % \iffalse
 %<*driver>
@@ -70,7 +77,8 @@
 %         {Support harvard, varioref and natbib packages,}
 % \changes{v3.02}{1995/03/17}
 %         {Support new AMS files}
-%
+% \changes{v3.18}{2022/04/12}
+%         {Support starred references}
 % \section{Introduction}\label{sec:intro}
 %
 % |showkeys.sty| modifies the |\label|, |\ref|, |\pageref|, |\cite|, and
@@ -248,7 +256,7 @@
 %
 % \end{thebibliography}
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{The Macros}
 %
@@ -749,18 +757,10 @@
 % \changes{v3.13}{2006/01/09}{Updated varioref support, for latex/3373}
 % \changes{v3.15}{2006/06/19}
 %         {Prevent loss of brackets}
+% \changes{v3.18}{2022/04/12}
+%         {update varioref support: it no longer uses label, so no patch
+%         needed if notref is used.}
 %    \begin{macrocode}
-\AtBeginDocument{%
-  \@ifpackageloaded{varioref}{%
-    \SK at def\@@vpageref#1[#2]#3{{%
-      \let\label\SK at label
-      \SK@@@vpageref{#1}[{#2}]{#3}}}%
-    \def\vr at f#1{%
-      \leavevmode\unskip\vref at space
-      \ref{#1}%
-      {\let\label\SK at label
-      \vpageref[\unskip]{#1}}}%
-  }{}}
 \else
 %    \end{macrocode}
 %
@@ -775,22 +775,26 @@
 %      {Make redefinition conditional on notref option}
 % \changes{v3.15}{2006/06/19}
 %         {Prevent loss of brackets}
+% \changes{v3.18}{2022/04/12}
+%         {support new kernel commands with starred versions}
+% \changes{v3.18}{2022/04/12}
+%         {update varioref support: it no longer uses label}
 %    \begin{macrocode}
 \AtBeginDocument{%
-  \SK at def\ref#1{\SK@\SK@@ref{#1}\SK at ref{#1}}%
-  \SK at def\pageref#1{\SK@\SK@@ref{#1}\SK at pageref{#1}}%
+  \let\@kernel at ref@\@kernel at ref
+  \let\@kernel at sref@\@kernel at sref
+  \SK at def\@kernel at ref#1{\SK@\SK@@ref{#1}\SK@@kernel at ref{#1}}%
+  \SK at def\@kernel at sref#1{\SK@\SK@@ref{#1}\SK@@kernel at sref{#1}}%
+  \SK at def\@kernel at pageref#1{\SK@\SK@@ref{#1}\SK@@kernel at pageref{#1}}%
+  \SK at def\@kernel at spageref#1{\SK@\SK@@ref{#1}\SK@@kernel at spageref{#1}}%
+  \SK at def\@kernel at Ref#1{{\let\@kernel at ref\@kernel at ref@\SK@\SK@@ref{#1}\SK@@kernel at Ref{#1}}}%
+  \SK at def\@kernel at sRef#1{\let\@kernel at sref\@kernel at sref@\SK@\SK@@ref{#1}\SK@@kernel at sRef{#1}}%
 %    \end{macrocode}
 % varioref support.
 %    \begin{macrocode}
   \@ifpackageloaded{varioref}{%
     \SK at def\@@vpageref#1[#2]#3{{%
-      \let\label\SK at label\let\ref\SK at ref\let\pageref\SK at pageref
-      \leavevmode\unskip\SK@\SK@@ref{#3}\SK@@@vpageref{#1}[{#2}]{#3}}}%
-    \def\vr at f#1{%
-      \leavevmode\unskip\vref at space
-      \ref{#1}%
-      \let\label\SK at label\let\ref\SK at ref\let\pageref\SK at pageref
-      \vpageref[\unskip]{#1}}%
+      \leavevmode\unskip\SK@\SK@@ref{#3}\SK@@@vpageref{#1}[{#2}]{#3}}}%%
   }{}}
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/tools/somedefs.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/somedefs.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/somedefs.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -87,7 +87,7 @@
 % For a longer example of the use of the |somedefs| package, look at the
 % |rawfonts| package.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section*{Implementation}
 %

Modified: trunk/Master/texmf-dist/source/latex/tools/tabularx.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/tabularx.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/tabularx.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -261,7 +261,7 @@
 % This behaviour of the package can be customised slightly
 % as noted in the documentation of the code section.
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{The Macros}
 %

Modified: trunk/Master/texmf-dist/source/latex/tools/tabularx.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/tabularx.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/tabularx.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -45,7 +45,7 @@
 reports for it can be opened at https://latex-project.org/bugs/
 (but please observe conditions on bug reports sent to that address!)
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/tools/theorem.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/theorem.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/theorem.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -332,7 +332,7 @@
 % (looking everything over) and many others providing useful
 % suggestions.
 %
-% \StopEventually{%
+% \MaybeStop{%
 %    \begin{thebibliography}{9}
 %       \bibitem{bk:GMS94} \textsc{M.~Goossens}, \textsc{F.~Mittelbach}
 %         and \textsc{A.~Samarin}.

Modified: trunk/Master/texmf-dist/source/latex/tools/tools.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/tools.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/tools.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -49,7 +49,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/tools/trace.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/trace.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/trace.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -278,7 +278,7 @@
 %  \small \texttt{\$}  \stop
 %\end{verbatim}
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{Implementation}
 %

Modified: trunk/Master/texmf-dist/source/latex/tools/varioref.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/varioref.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/varioref.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -40,7 +40,7 @@
 %<package>\DeclareCurrentRelease{}{2019-10-01}
 %<package>
 %<package>\ProvidesPackage{varioref}
-%<package>    [2021/07/07 v1.6f package for extended references (FMi)]
+%<package>    [2022/01/09 v1.6f package for extended references (FMi)]
 % \fi
 %
 %%
@@ -149,7 +149,7 @@
 % |\pageref| when the difference is larger.  The word `facing' is used
 % when label and reference both fall onto a double spread.  However,
 % if a special page numbering scheme is used instead of the usual
-% arabic numbering (e.g., |\pagenumbering{roman}|) then there will be
+% Arabic numbering (e.g., |\pagenumbering{roman}|) then there will be
 % no distinction between one or many pages off.
 %
 %\DescribeMacro\vpageref Sometimes one wants to refer only to page
@@ -172,7 +172,7 @@
 % A space in front of |\vpageref| it will be ignored if
 % the command doesn't produce any text at all.
 %
-% But in fact |\vpageref| allows even more control. If has two
+% But in fact |\vpageref| allows even more control. It has two
 % optional arguments. With the first one, one can specify the text
 % that should be used if label and reference fall on the same page.
 % This is very helpful if both are near to each other, so that they
@@ -293,7 +293,7 @@
 % Another command for conditional processing is |\vpagerefnearby|. It
 % takes three arguments: a label and a \meta{true} and \meta{false}
 % argument. It compares the page reference to the label with the
-% current page number and if both are arabic number and only differ by
+% current page number and if both are Arabic number and only differ by
 % $\pm1$ the \meta{true} argument is executed otherwise the
 % \meta{false} argument. In other words it tells you if a |\vpageref|
 % to the label would result in a textual reference to the previous,
@@ -330,12 +330,12 @@
 % space in front. Of course you are then responsible to always add it
 % when necessary, but that does make the source more readable so it is
 % a good thing. This also has the advantage that the star forms are
-% now unnecessary again and can be used in the way implemeented by
+% now unnecessary again and can be used in the way implemented by
 % \pkg{hyperref} if both packages are used together.
 %
 % In fact it would be much nicer to make that the
 % default but the package has been used by many people for so many
-% years that changing the default would break way to many older documents.
+% years that changing the default would break way too many older documents.
 %
 %
 % \DescribeMacro\labelformat
@@ -342,7 +342,7 @@
 % A reference via |\ref| produces by default the data associated with
 % the corresponding |\label| command (typically a number); any
 % additional formatting has to be provided by the user. With
-% |\labelformat| it is possible to declare scuch formatting for each
+% |\labelformat| it is possible to declare such formatting for each
 % ``reference'' counter, e.g.,
 %\begin{verbatim}
 %  \labelformat{section}{section~#1}
@@ -454,7 +454,7 @@
 %\DescribeMacro\reftextvario To allow a bit random variation in the
 % generated strings one can use the command |\reftextvario| inside the
 % string macros. It takes two arguments and selects one or the other
-% for printing depending on the number of already seens |\vref| or
+% for printing depending on the number of already seen |\vref| or
 % |\vpageref| commands.  As an example see the definitions of
 % |\reftextbefore| etc.\ \vpageref[below]{reftextbefore}.
 %
@@ -485,7 +485,7 @@
 % \DescribeMacro\fullrefformat
 % In some languages (currently only for Japanese) the generated text
 % has to typeset in different word order to most other (Western) languages.
-% To accomodate for this \cs{vrefformat}, etc.\ has been
+% To accommodate for this \cs{vrefformat}, etc.\ has been
 % added to allow to alter this on a per language basis.
 % There should be normally no need to alter the setup. For details see
 % the code section.
@@ -572,7 +572,7 @@
 % know for sure that label and reference can't fall onto nearby pages.
 %
 %
-% \StopEventually{\PrintIndex\PrintChanges}
+% \MaybeStop{\PrintIndex\PrintChanges}
 %
 %
 % \section{The documentation driver file}
@@ -701,7 +701,7 @@
 % \label{reftextbefore} The options do set the macros that
 %    generate the textual strings. Note, that they do not start with a
 %    space, the space is already added in the main macro below.
-% \changes{v1.2a}{1998/08/22}{Added american defaults for
+% \changes{v1.2a}{1998/08/22}{Added American defaults for
 %      \cs{reftextpagerange} and \cs{reftextlabelrange}}
 % \changes{v1.4d}{2002/11/11}{Changed default for \cs{reftextbefore}}
 %
@@ -1335,7 +1335,7 @@
 %    \end{macrocode}
 %    Defaults for Japanese. It needs a special \cs{vrefformat},
 %    \cs{Vrefformat}, \cs{fullrefformat} and \cs{vrefrangeformat}
-%    for gramatical reasons. As our standard documentation
+%    for grammatical reasons. As our standard documentation
 %    workflow uses pdf\TeX{} the Japanese letters can't be displayed
 %    easily, so you will see missing glyphs below. To see the real
 %    letters you have to look at the source or package file.
@@ -1354,7 +1354,7 @@
     \def\reftextpagerange#1#2{\pageref{#1}から\pageref{#2}ページ}%
     \def\reftextlabelrange#1#2{\ref{#1}から\ref{#2}}%
 %    \end{macrocode}
-%    Note that the parentheses beow are not normal ones but full width
+%    Note that the parentheses below are not normal ones but full width
 %    ones U+FF08 and U+FF09!
 %    \begin{macrocode}
     \def\vrefformat#1#2{\ref{#2}(\vpageref[#1]{#2})}%
@@ -1376,7 +1376,7 @@
 %
 %   The option assumes that there is a command |\aza| defined which
 %   helps resolving this problem.\footnote{This information is actually quite
-%   old but unfortunately never made it into varioref. In case any work
+%   old but unfortunately never made it into \pkg{varioref}. In case any work
 %   has been undertaken to resolve this please inform the author about it.}
 % \changes{v1.2a}{1998/08/22}{Added defaults for magyar}
 % \changes{v1.4j}{2005/01/22}{Defined \cs{reftextfaceafter} and
@@ -1505,7 +1505,7 @@
     \let\vrefrangeformat\vrefrangedefaultformat
   }}
 %    \end{macrocode}
-%    The portuguese default text has been provided by
+%    The Portuges default text has been provided by
 %    Jos\'e Carlos Oliveira Santos \verb=jcsantos at fc.up.pt=.
 % \changes{v1.2b}{1999/11/25}{Added portuguese defaults}
 % \changes{v1.2c}{1999/12/02}{Added more portuguese defaults}
@@ -1552,7 +1552,7 @@
     \let\vrefrangeformat\vrefrangedefaultformat
   }}
 %    \end{macrocode}
-%    The text for russian was taken from the book in Russian by
+%    The text for Russian was taken from the book in Russian by
 %    I.~A.~Kotelnikov and P.~Z.~Chebotaev, and adapted
 %    to the encoding-independent form by Vladimir Volovich
 %    (\verb=vvv at vsu.ru=).
@@ -1589,7 +1589,7 @@
     \let\vrefrangeformat\vrefrangedefaultformat
   }}
 %    \end{macrocode}
-%    The text for slovak defaults was contributed by Miroslav Sedivy\\
+%    The text for Slovak defaults was contributed by Miroslav Sedivy\\
 %    (\verb=<miro at slovensko.com>=).
 % \changes{v1.4b}{2002/03/11}{Contributed defaults added}
 %    \begin{macrocode}
@@ -1613,7 +1613,7 @@
     \let\vrefrangeformat\vrefrangedefaultformat
   }}
 %    \end{macrocode}
-%    The text for slovene defaults was contributed by Roman Maurer\\
+%    The text for Slovene defaults was contributed by Roman Maurer\\
 %    (\verb=<roman.maurer at amis.net>=).
 % \changes{v1.4a}{2002/03/05}{Contributed defaults added}
 %    \begin{macrocode}
@@ -1633,7 +1633,7 @@
     \let\vrefrangeformat\vrefrangedefaultformat
   }}
 %    \end{macrocode}
-%    Text for spanish defaults was contributed by Julio Sanchez
+%    Text for Spanish defaults was contributed by Julio Sanchez
 %    (\verb=jsanchez at gmv.es=) and Fernando Dobladez (\verb=<ferd at fuego.com>=).
 % \changes{v1.0f}{1994/03/16}{Inserted missing hash mark}
 % \changes{v1.0k}{1994/06/05}{Corrected misspelled cmd `extrasspanish}
@@ -1657,7 +1657,7 @@
     \let\vrefrangeformat\vrefrangedefaultformat
   }}
 %    \end{macrocode}
-%    The text for swedish was contributed by Mats Dahlgren
+%    The text for Swedish was contributed by Mats Dahlgren
 %    (\verb=matsd at sssk.se=).
 % \changes{v1.0p}{1995/01/10}{Added swedish strings}
 % \changes{v1.2a}{1998/08/22}{Added swedish defaults for
@@ -1729,7 +1729,7 @@
    }}
 %    \end{macrocode}
 %    We support francais as an alternative to french since people
-%    might be used to it, but we discurrage it.
+%    might be used to it, but we discourage it.
 %    \begin{macrocode}
 \DeclareOption{francais}{%
    \typeout{Please use `french' instead of `francais'}%
@@ -1757,7 +1757,7 @@
 %
 %
 %    Whether or not \pkg{varioref} uses its own white space and
-%    removes the one in the source document is handeled by the
+%    removes the one in the source document is handled by the
 %    following two options. For historical reasons the default is to
 %    handle the space, but the recommendation these days is to use
 %    \texttt{nospace}.
@@ -1814,7 +1814,7 @@
 %    space either. Thus in this case the star form doesn't
 %    have any effect and below |\vp at gerefstar| is let to
 %    |\vp at geref|. This allows a package like \pkg{hyperef} to redefine
-%    it and useit for its own tasks (like denoting that no link should
+%    it and use it for its own tasks (like denoting that no link should
 %    be produced).
 %    \begin{macrocode}
 \DeclareRobustCommand\vpageref{\@ifstar
@@ -1859,7 +1859,7 @@
 %    By default the second optional argument is empty.
 % \changes{v1.0h}{1994/06/11}{Pass first argument in both cases}
 % \changes{v1.0i}{1994/06/20}{Do it correctly}
-% \changes{v1.6a}{2019/08/25}{Default for optional argumet changed}
+% \changes{v1.6a}{2019/08/25}{Default for optional argument changed}
 %    \begin{macrocode}
   {\@@vpageref{#1}}{\@@vpageref{#1}[]}}
 %    \end{macrocode}
@@ -2169,7 +2169,7 @@
 %    \pkg{varioref} by testing
 %\begin{verbatim}
 %  \ifdefined\vp at gerefstar
-%     ... code fore noew varioref
+%     ... code for new varioref
 %  \else
 %    ... code for old varioref
 %  \fi
@@ -2638,7 +2638,7 @@
 
 %  \begin{macro}{\vpagerefcomparenearby}
 % \changes{v1.6a}{2019/08/25}{Macro added}
-%    True if the two pages have arabic page numbers are at most off by
+%    True if the two pages have Arabic page numbers are at most off by
 %    one so that |\vpageref| would produce a special string.
 %
 %    This is in some sense a general version of |\vpagerefnearby| for

Modified: trunk/Master/texmf-dist/source/latex/tools/varioref.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/varioref.ins	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/varioref.ins	2022-06-08 20:41:20 UTC (rev 63514)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -45,7 +45,7 @@
 reports for it can be opened at https://latex-project.org/bugs/
 (but please observe conditions on bug reports sent to that address!)
 
-Copyright (C) 1993-2021
+Copyright (C) 1993-2022
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex/tools/verbatim.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/verbatim.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/verbatim.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -242,7 +242,7 @@
 % This command has also a |*|-variant that prints spaces as \verb*+ +.
 %
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 %
 % \section{Interfaces for package writers}

Modified: trunk/Master/texmf-dist/source/latex/tools/xr.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/xr.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/xr.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -89,7 +89,7 @@
 % For compatibility with |xcite|, |\externalcitedocument| is made available
 % as an alias for |\externaldocument|
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{The macros}
 %

Modified: trunk/Master/texmf-dist/source/latex/tools/xspace.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/xspace.dtx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/source/latex/tools/xspace.dtx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 %
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
@@ -199,7 +199,7 @@
 % \end{verbatim}
 %
 %
-% \StopEventually{}
+% \MaybeStop{}
 %
 % \section{The Macros}
 %

Modified: trunk/Master/texmf-dist/tex/latex/amsmath/amsbsy.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/amsmath/amsbsy.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/amsmath/amsbsy.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -7,7 +7,7 @@
 %% amsbsy.dtx 
 %% 
 %% Copyright (C) 1995, 1999 American Mathematical Society.
-%% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
+%% Copyright (C) 2016-2022 LaTeX Project and American Mathematical Society.
 %% 
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License, either version 1.3c

Modified: trunk/Master/texmf-dist/tex/latex/amsmath/amscd.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/amsmath/amscd.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/amsmath/amscd.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -7,7 +7,7 @@
 %% amscd.dtx 
 %% 
 %% Copyright (C) 1995, 1999 American Mathematical Society.
-%% Copyright (C) 2016-2021  LaTeX Project and American Mathematical Society.
+%% Copyright (C) 2016-2022  LaTeX Project and American Mathematical Society.
 %% 
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License, either version 1.3c

Modified: trunk/Master/texmf-dist/tex/latex/amsmath/amsgen.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/amsmath/amsgen.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/amsmath/amsgen.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -7,7 +7,7 @@
 %% amsgen.dtx 
 %% 
 %% Copyright (C) 1995, 1999 American Mathematical Society.
-%% Copyright (C) 2016-2021  LaTeX Project and American Mathematical Society.
+%% Copyright (C) 2016-2022  LaTeX Project and American Mathematical Society.
 %% 
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License, either version 1.3c

Modified: trunk/Master/texmf-dist/tex/latex/amsmath/amsmath.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/amsmath/amsmath.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/amsmath/amsmath.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -7,7 +7,7 @@
 %% amsmath.dtx 
 %% 
 %% Copyright (C) 1995, 1999, 2000, 2013 American Mathematical Society.
-%% Copyright (C) 2016-2021  LaTeX Project and American Mathematical Society.
+%% Copyright (C) 2016-2022  LaTeX Project and American Mathematical Society.
 %% 
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License, either version 1.3c
@@ -27,7 +27,7 @@
 \providecommand\DeclareCurrentRelease[2]{}
 \DeclareRelease{}{2018-12-01}{amsmath-2018-12-01.sty}
 \DeclareCurrentRelease{}{2019-04-01}
-\ProvidesPackage{amsmath}[2021/10/15 v2.17l AMS math features]
+\ProvidesPackage{amsmath}[2022/04/08 v2.17n AMS math features]
 \edef\@temp{\catcode 96=\number\catcode 96 }
 \catcode\string `\`=12
 \def\do#1{\catcode\number`#1=\number\catcode`#1}
@@ -235,11 +235,11 @@
 \else
 \DeclareRobustCommand{\frac}[2]{{\Ustack{\begingroup#1\endgroup\@@over#2}}}
 \fi
-\newcommand{\dfrac}{\genfrac{}{}{}0}
-\newcommand{\tfrac}{\genfrac{}{}{}1}
+\DeclareRobustCommand{\dfrac}{\genfrac{}{}{}0}
+\DeclareRobustCommand{\tfrac}{\genfrac{}{}{}1}
 \DeclareRobustCommand{\binom}{\genfrac()\z@{}}
-\newcommand{\dbinom}{\genfrac(){0pt}0}
-\newcommand{\tbinom}{\genfrac(){0pt}1}
+\DeclareRobustCommand{\dbinom}{\genfrac(){0pt}0}
+\DeclareRobustCommand{\tbinom}{\genfrac(){0pt}1}
 \ifx\directlua\@undefined
 \ifx\XeTeXcharclass\@undefined
 \DeclareRobustCommand{\genfrac}[4]{%
@@ -397,7 +397,7 @@
 }{}
 \@saveprimitive\overline\@@overline
 \DeclareRobustCommand{\overline}[1]{\@@overline{#1}}
-\newcommand{\boxed}[1]{\fbox{\m at th$\displaystyle#1$}}
+\DeclareRobustCommand{\boxed}[1]{\fbox{\m at th$\displaystyle#1$}}
 \newcommand{\implies}{\DOTSB\;\Longrightarrow\;}
 \newcommand{\impliedby}{\DOTSB\;\Longleftarrow\;}
 \def\And{\DOTSB\;\mathchar"3026 \;}
@@ -407,7 +407,7 @@
        \else\setboxz at h{\the\toks@\nobreak}\unhbox\z@\fi}%
   \FN@\next@
 }
-\renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript
+\DeclareRobustCommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript
   \mkern-\thinmuskip{:}\mskip6muplus1mu\relax}
 \let\ifgtest@\iffalse                              % initial value
 \def\gtest at true{\global\let\ifgtest@\iftrue}
@@ -656,11 +656,11 @@
  {{\cdotp}\mkern1.5mu{\cdotp}\mkern1.5mu{\cdotp}}%
  {{\cdotp}\mkern1mu{\cdotp}\mkern1mu{\cdotp}}%
  {{\cdotp}\mkern1mu{\cdotp}\mkern1mu{\cdotp}}}
-\ams at newcommand{\iint}{\DOTSI\protect\MultiIntegral{2}}
-\ams at newcommand{\iiint}{\DOTSI\protect\MultiIntegral{3}}
-\ams at newcommand{\iiiint}{\DOTSI\protect\MultiIntegral{4}}
-\newcommand{\idotsint}{\DOTSI\protect\MultiIntegral{0}}
-\newcommand{\MultiIntegral}[1]{%
+\ams at newcommand{\iint}{\DOTSI\MultiIntegral{2}}
+\ams at newcommand{\iiint}{\DOTSI\MultiIntegral{3}}
+\ams at newcommand{\iiiint}{\DOTSI\MultiIntegral{4}}
+\newcommand{\idotsint}{\DOTSI\MultiIntegral{0}}
+\DeclareRobustCommand{\MultiIntegral}[1]{%
   \edef\ints at c{\noexpand\intop
     \ifnum#1=\z@\noexpand\intdots@\else\noexpand\intkern@\fi
     \ifnum#1>\tw@\noexpand\intop\noexpand\intkern@\fi
@@ -719,10 +719,10 @@
        \vbox{\kern-\normallineskiplimit\copy\strutbox}}}
 \addto at hook\every at math@size{\reset at strutbox@}
 \AtBeginDocument{\reset at strutbox@}
-\renewcommand{\big}{\bBigg@\@ne}
-\renewcommand{\Big}{\bBigg@{1.5}}
-\renewcommand{\bigg}{\bBigg@\tw@}
-\renewcommand{\Bigg}{\bBigg@{2.5}}
+\DeclareRobustCommand{\big}{\bBigg@\@ne}
+\DeclareRobustCommand{\Big}{\bBigg@{1.5}}
+\DeclareRobustCommand{\bigg}{\bBigg@\tw@}
+\DeclareRobustCommand{\Bigg}{\bBigg@{2.5}}
 \ifx\leavevmode at ifvmode\@undefined
 \def\bBigg@#1#2{%
   {\@mathmeasure\z@{\nulldelimiterspace\z@}%
@@ -748,6 +748,10 @@
 \ams at newcommand{\ddddot}[1]{%
   {\mathop{\kern\z@#1}\limits^{\vbox to-1.4\ex@{\kern-\tw@\ex@
    \hbox{\,\normalfont....}\vss}}}}
+\AtBeginDocument{%
+  \MakeRobust\dddot
+  \MakeRobust\ddddot
+  }
 \def\set at mathaccent#1#2#3#4{%
   \xdef#2{%
     \@nx\mathaccentV
@@ -898,24 +902,24 @@
 \def\Vec{\vec}
 \def\nonmatherr@#1{\@amsmath at err{\protect
   #1 allowed only in math mode}\@ehd}
-\renewcommand{\bmod}{\nonscript\mskip-\medmuskip\mkern5mu\mathbin
+\DeclareRobustCommand{\bmod}{\nonscript\mskip-\medmuskip\mkern5mu\mathbin
   {\operator at font mod}\penalty900
   \mkern5mu\nonscript\mskip-\medmuskip}
-\newcommand{\pod}[1]{\allowbreak
+\DeclareRobustCommand{\pod}[1]{\allowbreak
   \if at display\mkern18mu\else\mkern8mu\fi(#1)}
-\renewcommand{\pmod}[1]{\pod{{\operator at font mod}\mkern6mu#1}}
-\newcommand{\mod}[1]{\allowbreak\if at display\mkern18mu
+\DeclareRobustCommand{\pmod}[1]{\pod{{\operator at font mod}\mkern6mu#1}}
+\DeclareRobustCommand{\mod}[1]{\allowbreak\if at display\mkern18mu
   \else\mkern12mu\fi{\operator at font mod}\,\,#1}
-\newcommand{\cfrac}[3][c]{{\displaystyle\frac{%
+\DeclareRobustCommand{\cfrac}[3][c]{{\displaystyle\frac{%
   \strut\ifx r#1\hfill\fi#2\ifx l#1\hfill\fi}{#3}}%
   \kern-\nulldelimiterspace}
-\newcommand{\overset}[2]{\binrel@{#2}%
+\DeclareRobustCommand{\overset}[2]{\binrel@{#2}%
   \binrel@@{\mathop{\kern\z@#2}\limits^{#1}}}
-\newcommand{\underset}[2]{\binrel@{#2}%
+\DeclareRobustCommand{\underset}[2]{\binrel@{#2}%
   \binrel@@{\mathop{\kern\z@#2}\limits_{#1}}}
-\newcommand{\overunderset}[3]{\binrel@{#3}%
+\DeclareRobustCommand{\overunderset}[3]{\binrel@{#3}%
   \binrel@@{\mathop{\kern\z@#3}\limits^{#1}_{#2}}}
-\newcommand{\sideset}[3]{%
+\DeclareRobustCommand{\sideset}[3]{%
   \@mathmeasure\z@\displaystyle{#3}%
   \global\setbox\@ne\vbox to\ht\z@{}\dp\@ne\dp\z@
   \setbox\tw@\box\@ne
@@ -925,7 +929,7 @@
   \hbox to\dimen@{}\mathop{\kern-\dimen@\box4\box6}%
 }
 \ifx\leavevmode at ifvmode\@undefined
-\renewcommand{\smash}[1][tb]{%
+\DeclareRobustCommand{\smash}[1][tb]{%
   \def\mb at t{\ht}\def\mb at b{\dp}\def\mb at tb{\ht\z@\z@\dp}%
   \edef\finsm at sh{\csname mb@#1\endcsname\z@\z@\box\z@}%
   \ifmmode \@xp\mathpalette\@xp\mathsm at sh
@@ -933,7 +937,7 @@
   \fi
 }
 \else
-\renewcommand{\smash}[1][tb]{%
+\DeclareRobustCommand{\smash}[1][tb]{%
   \def\mb at t{\ht}\def\mb at b{\dp}\def\mb at tb{\ht\z@\z@\dp}%
   \edef\finsm at sh{\csname mb@#1\endcsname\z@\z@ \leavevmode at ifvmode\box\z@}%
   \ifmmode \@xp\mathpalette\@xp\mathsm at sh
@@ -963,8 +967,8 @@
       \Umathcharnumdef\std at equal\Umathcodenum`\=\relax
     }%
   }
-\ams at def\relbar{\mathrel{\mathpalette\mathsm at sh\std at minus}}
-\ams at def\Relbar{\mathrel\std at equal}
+\ams at DeclareRobustCommand\relbar{\mathrel{\mathpalette\mathsm at sh\std at minus}}
+\ams at DeclareRobustCommand\Relbar{\mathrel\std at equal}
 \def\arrowfill@#1#2#3#4{%
   $\m at th\thickmuskip0mu\medmuskip\thickmuskip\thinmuskip\thickmuskip
    \relax#4#1\mkern-7mu%
@@ -985,6 +989,13 @@
   \mathpalette{\overarrow@\leftarrowfill@}}
 \ams at newcommand{\overleftrightarrow}{%
   \mathpalette{\overarrow@\leftrightarrowfill@}}
+\AtBeginDocument{%
+  \expandafter\let\csname overleftarrow \endcsname\@undefined
+  \expandafter\let\csname overrightarrow \endcsname\@undefined
+  \MakeRobust\overrightarrow
+  \MakeRobust\overleftarrow
+  \MakeRobust\overleftrightarrow
+  }
 \def\underarrow@#1#2#3{%
  \vtop{\ialign{##\crcr$\m at th\hfil#2#3\hfil$\crcr
  \noalign{\nointerlineskip\kern1.3\ex@}#1#2\crcr}}}
@@ -994,6 +1005,11 @@
   \mathpalette{\underarrow@\leftarrowfill@}}
 \ams at newcommand{\underleftrightarrow}{%
   \mathpalette{\underarrow@\leftrightarrowfill@}}
+\AtBeginDocument{%
+  \MakeRobust\underrightarrow
+  \MakeRobust\underleftarrow
+  \MakeRobust\underleftrightarrow
+  }
 \def\ext at arrow#1#2#3#4#5#6#7{%
   \mathrel{\mathop{%
     \setbox\z@\hbox{#5\displaystyle}%
@@ -1009,8 +1025,8 @@
     \@ifnotempty{#6}{_{\if0#1\else\mkern#1mu\fi
                        #6\if0#2\else\mkern#2mu\fi}}}%
 }
-\newcommand{\xrightarrow}[2][]{\ext at arrow 0359\rightarrowfill@{#1}{#2}}
-\newcommand{\xleftarrow}[2][]{\ext at arrow 3095\leftarrowfill@{#1}{#2}}
+\DeclareRobustCommand{\xrightarrow}[2][]{\ext at arrow 0359\rightarrowfill@{#1}{#2}}
+\DeclareRobustCommand{\xleftarrow}[2][]{\ext at arrow 3095\leftarrowfill@{#1}{#2}}
 \ifx\directlua\@undefined
 \newenvironment{subarray}[1]{%
   \vcenter\bgroup
@@ -1041,7 +1057,7 @@
   \crcr\egroup\egroup
 }
 \fi
-\newcommand{\substack}[1]{\subarray{c}#1\endsubarray}
+\DeclareRobustCommand{\substack}[1]{\subarray{c}#1\endsubarray}
 \newenvironment{smallmatrix}{\null\,\vcenter\bgroup
   \Let@\restore at math@cr\default at tag
   \baselineskip6\ex@ \lineskip1.5\ex@ \lineskiplimit\lineskip
@@ -1124,7 +1140,7 @@
   \setcounter{equation}{\value{parentequation}}%
   \ignorespacesafterend
 }
-\newcommand{\numberwithin}[3][\arabic]{%
+\DeclareRobustCommand{\numberwithin}[3][\arabic]{%
   \@ifundefined{c@#2}{\@nocounterr{#2}}{%
     \@ifundefined{c@#3}{\@nocnterr{#3}}{%
       \@addtoreset{#2}{#3}%
@@ -1131,17 +1147,17 @@
       \@xp\xdef\csname the#2\endcsname{%
         \@xp\@nx\csname the#3\endcsname .\@nx#1{#2}}}}%
 }
-\newcommand{\eqref}[1]{\textup{\tagform@{\ref{#1}}}}
+\DeclareRobustCommand{\eqref}[1]{\textup{\tagform@{\ref{#1}}}}
 \newcount\dspbrk at lvl
 \dspbrk at lvl=-1
 \interdisplaylinepenalty\@M
-\newcommand{\allowdisplaybreaks}[1][4]{%
+\DeclareRobustCommand{\allowdisplaybreaks}[1][4]{%
   \interdisplaylinepenalty\getdsp at pen{#1}\relax
 }
 \def\getdsp at pen#1{%
   \ifcase #1\@M \or 9999 \or 6999 \or 2999 \or \z@\fi
 }
-\newcommand{\displaybreak}{\new at ifnextchar[\dspbrk@{\dspbrk@[4]}}
+\DeclareRobustCommand{\displaybreak}{\new at ifnextchar[\dspbrk@{\dspbrk@[4]}}
 \chardef\dspbrk at context=\sixt@@n
 \def\dspbrk@[#1]{%
   \ifmeasuring@
@@ -2695,13 +2711,13 @@
     \endgroup
 }
 \iftagsleft@
-    \def\shoveright#1{%
+    \protected\def\shoveright#1{%
         #1%
         \hfilneg
         \hskip\multlinegap
     }
 \else
-    \def\shoveright#1{%
+    \protected\def\shoveright#1{%
         #1%
         \hfilneg
         \iftag@
@@ -2716,12 +2732,11 @@
         \fi
     }
 \fi
-
 \if at fleqn
     \def\shoveleft#1{#1}%
 \else
     \iftagsleft@
-        \def\shoveleft#1{%
+        \protected\def\shoveleft#1{%
             \setboxz at h{$\m at th\displaystyle{}#1$}%
             \setbox\@ne\hbox{$\m at th\displaystyle#1$}%
             \hfilneg
@@ -2736,17 +2751,17 @@
                 \hskip\multlinegap
             \fi
             \hskip.5\wd\@ne
-            \hskip-.5\wdz@
+            \hskip-.5\wdz@ \relax
             #1%
         }
     \else
-        \def\shoveleft#1{%
+        \protected\def\shoveleft#1{%
             \setboxz at h{$\m at th\displaystyle{}#1$}%
             \setbox\@ne\hbox{$\m at th\displaystyle#1$}%
             \hfilneg
             \hskip\multlinegap
             \hskip.5\wd\@ne
-            \hskip-.5\wdz@
+            \hskip-.5\wdz@ \relax
             #1%
         }
     \fi

Modified: trunk/Master/texmf-dist/tex/latex/amsmath/amsopn.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/amsmath/amsopn.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/amsmath/amsopn.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -7,7 +7,7 @@
 %% amsopn.dtx 
 %% 
 %% Copyright (C) 1995, 1999 American Mathematical Society.
-%% Copyright (C) 2016-2021  LaTeX Project and American Mathematical Society.
+%% Copyright (C) 2016-2022  LaTeX Project and American Mathematical Society.
 %% 
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License, either version 1.3c
@@ -23,7 +23,7 @@
 %% 
 \NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX)
 [1994/12/01]% LaTeX date must December 1994 or later
-\ProvidesPackage{amsopn}[2021/08/26 v2.02 operator names]
+\ProvidesPackage{amsopn}[2022/04/08 v2.04 operator names]
 \def\nolimits@{\@ifnextchar\limits{\nolimits\@gobble}{\nolimits}}
 \begingroup \catcode`\"=12
 \ifx\Umathcode\@undefined
@@ -53,59 +53,58 @@
     \DeclareRobustCommand{#2}{\qopname\newmcodes@#1{#3}}}}
 \@onlypreamble\DeclareMathOperator
 \@onlypreamble\@declmathop
-\def\arccos{\qopname\relax o{arccos}}
-\def\arcsin{\qopname\relax o{arcsin}}
-\def\arctan{\qopname\relax o{arctan}}
-\def\arg{\qopname\relax o{arg}}
-\def\cos{\qopname\relax o{cos}}
-\def\cosh{\qopname\relax o{cosh}}
-\def\cot{\qopname\relax o{cot}}
-\def\coth{\qopname\relax o{coth}}
-\def\csc{\qopname\relax o{csc}}
-\def\deg{\qopname\relax o{deg}}
-\def\det{\qopname\relax m{det}}
-\def\dim{\qopname\relax o{dim}}
-\def\exp{\qopname\relax o{exp}}
-\def\gcd{\qopname\relax m{gcd}}
-\def\hom{\qopname\relax o{hom}}
-\def\inf{\qopname\relax m{inf}}
-\def\injlim{\qopname\relax m{inj\,lim}}
-\def\ker{\qopname\relax o{ker}}
-\def\lg{\qopname\relax o{lg}}
-\def\lim{\qopname\relax m{lim}}
-\def\liminf{\qopname\relax m{lim\,inf}}
-\def\limsup{\qopname\relax m{lim\,sup}}
-\def\ln{\qopname\relax o{ln}}
-\def\log{\qopname\relax o{log}}
-\def\max{\qopname\relax m{max}}
-\def\min{\qopname\relax m{min}}
-\def\Pr{\qopname\relax m{Pr}}
-\def\projlim{\qopname\relax m{proj\,lim}}
-\def\sec{\qopname\relax o{sec}}
-\def\sin{\qopname\relax o{sin}}
-\def\sinh{\qopname\relax o{sinh}}
-\def\sup{\qopname\relax m{sup}}
-\def\tan{\qopname\relax o{tan}}
-\def\tanh{\qopname\relax o{tanh}}
-\def\operator at font{\mathgroup\symoperators}
+\protected\def\arccos{\qopname\relax o{arccos}}
+\protected\def\arcsin{\qopname\relax o{arcsin}}
+\protected\def\arctan{\qopname\relax o{arctan}}
+\protected\def\arg{\qopname\relax o{arg}}
+\protected\def\cos{\qopname\relax o{cos}}
+\protected\def\cosh{\qopname\relax o{cosh}}
+\protected\def\cot{\qopname\relax o{cot}}
+\protected\def\coth{\qopname\relax o{coth}}
+\protected\def\csc{\qopname\relax o{csc}}
+\protected\def\deg{\qopname\relax o{deg}}
+\protected\def\det{\qopname\relax m{det}}
+\protected\def\dim{\qopname\relax o{dim}}
+\protected\def\exp{\qopname\relax o{exp}}
+\protected\def\gcd{\qopname\relax m{gcd}}
+\protected\def\hom{\qopname\relax o{hom}}
+\protected\def\inf{\qopname\relax m{inf}}
+\protected\def\injlim{\qopname\relax m{inj\,lim}}
+\protected\def\ker{\qopname\relax o{ker}}
+\protected\def\lg{\qopname\relax o{lg}}
+\protected\def\lim{\qopname\relax m{lim}}
+\protected\def\liminf{\qopname\relax m{lim\,inf}}
+\protected\def\limsup{\qopname\relax m{lim\,sup}}
+\protected\def\ln{\qopname\relax o{ln}}
+\protected\def\log{\qopname\relax o{log}}
+\protected\def\max{\qopname\relax m{max}}
+\protected\def\min{\qopname\relax m{min}}
+\protected\def\Pr{\qopname\relax m{Pr}}
+\protected\def\projlim{\qopname\relax m{proj\,lim}}
+\protected\def\sec{\qopname\relax o{sec}}
+\protected\def\sin{\qopname\relax o{sin}}
+\protected\def\sinh{\qopname\relax o{sinh}}
+\protected\def\sup{\qopname\relax m{sup}}
+\protected\def\tan{\qopname\relax o{tan}}
+\protected\def\tanh{\qopname\relax o{tanh}}
 \def\operatorfont{\operator at font}
 \def\operatornamewithlimits{\operatorname*}
-\def\varlim@#1#2{%
+\protected\def\varlim@#1#2{%
   \vtop{\m at th\ialign{##\cr
     \hfil$#1\operator at font lim$\hfil\cr
     \noalign{\nointerlineskip\kern1.5\ex@}#2\cr
     \noalign{\nointerlineskip\kern-\ex@}\cr}}%
 }
-\def\varinjlim{%
+\protected\def\varinjlim{%
   \mathop{\mathpalette\varlim@{\rightarrowfill@\textstyle}}\nmlimits@
 }
-\def\varprojlim{%
+\protected\def\varprojlim{%
   \mathop{\mathpalette\varlim@{\leftarrowfill@\textstyle}}\nmlimits@
 }
-\def\varliminf{\mathop{\mathpalette\varliminf@{}}\nmlimits@}
+\protected\def\varliminf{\mathop{\mathpalette\varliminf@{}}\nmlimits@}
 \def\varliminf@#1{\@@underline{\vrule\@depth.2\ex@\@width\z@
    \hbox{$#1\m at th\operator at font lim$}}}
-\def\varlimsup{\mathop{\mathpalette\varlimsup@{}}\nmlimits@}
+\protected\def\varlimsup{\mathop{\mathpalette\varlimsup@{}}\nmlimits@}
 \def\varlimsup@#1{\@@overline{\hbox{$#1\m at th\operator at font lim$}}}
 \let\nmlimits@\displaylimits
 \DeclareOption{namelimits}{\let\nmlimits@\displaylimits}

Modified: trunk/Master/texmf-dist/tex/latex/amsmath/amstext.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/amsmath/amstext.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/amsmath/amstext.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -7,7 +7,7 @@
 %% amstext.dtx 
 %% 
 %% Copyright (C) 1995, 1999 American Mathematical Society.
-%% Copyright (C) 2016-2021  LaTeX Project and American Mathematical Society.
+%% Copyright (C) 2016-2022  LaTeX Project and American Mathematical Society.
 %% 
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License, either version 1.3c

Modified: trunk/Master/texmf-dist/tex/latex/amsmath/amsxtra.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/amsmath/amsxtra.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/amsmath/amsxtra.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -7,7 +7,7 @@
 %% amsxtra.dtx 
 %% 
 %% Copyright (C) 1995, 1999 American Mathematical Society.
-%% Copyright (C) 2016-2021  LaTeX Project and American Mathematical Society.
+%% Copyright (C) 2016-2022  LaTeX Project and American Mathematical Society.
 %% 
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License, either version 1.3c

Modified: trunk/Master/texmf-dist/tex/latex/base/alltt.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/alltt.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/alltt.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/ansinew.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ansinew.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ansinew.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
   \ProvidesFile{ansinew.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Modified: trunk/Master/texmf-dist/tex/latex/base/applemac.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/applemac.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/applemac.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
   \ProvidesFile{applemac.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Modified: trunk/Master/texmf-dist/tex/latex/base/article.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/article.cls	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/article.cls	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/article.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/article.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/article.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/ascii.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ascii.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ascii.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
  \ProvidesFile{ascii.def}
    [2021/02/14 v1.3d Input encoding file]
 \@inpenc at test

Modified: trunk/Master/texmf-dist/tex/latex/base/atbegshi-ltx.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/atbegshi-ltx.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/atbegshi-ltx.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,19 +42,20 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 %%
-%% Copyright (C) 2020-2021
+%% Copyright (C) 2020-2022
 %%               Frank Mittelbach, LaTeX Team
 %%
 %%% From File: ltshipout.dtx
-\providecommand\ltshipoutversion{v1.0j}
-\providecommand\ltshipoutdate{2021/06/09}
+\providecommand\ltshipoutversion{v1.0m}
+\providecommand\ltshipoutdate{2022/05/08}
+ %    \cs{AtBeginDvi} is the existing \LaTeXe{} interface to fill the
 \ProvidesPackage{atbegshi-ltx}
    [2021/01/10 v1.0c
      Emulation of the original atbegshi^^Jpackage with kernel methods]
 \let \AtBeginShipoutBox \ShipoutBox
 \let \AtBeginShipoutInit \@empty
-\protected \def \AtBeginShipout     {\AddToHook{shipout/before}}
-\protected \def \AtBeginShipoutNext {\AddToHookNext{shipout/before}}
+\protected\long\def\AtBeginShipout     #1{\AddToHook{shipout/before}{#1}}
+\protected\long\def\AtBeginShipoutNext #1{\AddToHookNext{shipout/before}{#1}}
 \protected \def \AtBeginShipoutFirst
    {\@expl@@@shipout at add@firstpage at material@@Nn \AtBeginShipoutFirst}
 \let \AtBeginShipoutDiscard \DiscardShipoutBox

Modified: trunk/Master/texmf-dist/tex/latex/base/atveryend-ltx.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/atveryend-ltx.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/atveryend-ltx.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,8 +42,8 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 %%% From File: ltfilehook.dtx
-\providecommand\ltfilehookversion{v1.0l}
-\providecommand\ltfilehookdate{2021/08/27}
+\providecommand\ltfilehookversion{v1.0m}
+\providecommand\ltfilehookdate{2022/04/01}
 \ProvidesPackage{atveryend-ltx}
    [2020/08/19 v1.0a
      Emulation of the original atveryend package^^Jwith kernel methods]

Modified: trunk/Master/texmf-dist/tex/latex/base/bezier.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/bezier.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/bezier.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/bk10.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/bk10.clo	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/bk10.clo	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/bk11.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/bk11.clo	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/bk11.clo	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/bk12.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/bk12.clo	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/bk12.clo	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/book.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/book.cls	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/book.cls	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/book.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/book.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/book.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/cp1250.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/cp1250.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/cp1250.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
   \ProvidesFile{cp1250.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Modified: trunk/Master/texmf-dist/tex/latex/base/cp1252.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/cp1252.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/cp1252.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
   \ProvidesFile{cp1252.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Modified: trunk/Master/texmf-dist/tex/latex/base/cp1257.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/cp1257.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/cp1257.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
   \ProvidesFile{cp1257.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Modified: trunk/Master/texmf-dist/tex/latex/base/cp437.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/cp437.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/cp437.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
   \ProvidesFile{cp437.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Modified: trunk/Master/texmf-dist/tex/latex/base/cp437de.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/cp437de.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/cp437de.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
   \ProvidesFile{cp437de.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Modified: trunk/Master/texmf-dist/tex/latex/base/cp850.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/cp850.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/cp850.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
   \ProvidesFile{cp850.def}
    [2021/02/14 v1.3d Input encoding file]
 %%

Modified: trunk/Master/texmf-dist/tex/latex/base/cp852.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/cp852.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/cp852.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
   \ProvidesFile{cp852.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Modified: trunk/Master/texmf-dist/tex/latex/base/cp858.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/cp858.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/cp858.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
   \ProvidesFile{cp858.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Modified: trunk/Master/texmf-dist/tex/latex/base/cp865.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/cp865.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/cp865.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
   \ProvidesFile{cp865.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Modified: trunk/Master/texmf-dist/tex/latex/base/decmulti.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/decmulti.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/decmulti.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
  \ProvidesFile{decmulti.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Added: trunk/Master/texmf-dist/tex/latex/base/doc-2016-02-15.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/doc-2016-02-15.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/base/doc-2016-02-15.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -0,0 +1,826 @@
+%%
+%% This is file contains the code from 'doc.sty' from around 2017.
+%%
+%% The original source files were:
+%%
+%% doc.dtx  (with options: `package')
+%% 
+%% 
+%% Copyright 1993-2016
+%% The LaTeX3 Project and any individual authors listed elsewhere
+%% in this file.
+%% 
+%% This file was generated from file(s) of the LaTeX base system.
+%% --------------------------------------------------------------
+%% 
+%% It 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
+%%    https://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 file contains the code for an earlier release and is therefore
+%% frozen. It is used as part of the current doc.sty when the user
+%% requests a rollback.
+%% 
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+ \ProvidesPackage{doc}
+  [2016/02/15 v2.1g
+   Standard LaTeX documentation package (FMi)]
+%%
+%% Package `doc' to use with LaTeX 2e
+%% Copyright (C) 1989-1999 Frank Mittelbach, all rights reserved.
+\@ifundefined{macro at cnt}{}{\endinput}
+\catcode`\^^A=14
+\AtBeginDocument{\catcode`\^^A=14\relax}
+\def\macrocode{\macro at code
+   \frenchspacing \@vobeyspaces
+   \xmacro at code}
+\def\macro at code{%
+   \topsep \MacrocodeTopsep
+   \@beginparpenalty \predisplaypenalty
+   \if at inlabel\leavevmode\fi
+   \trivlist \parskip \z@ \item[]%
+   \macro at font
+   \leftskip\@totalleftmargin \advance\leftskip\MacroIndent
+   \rightskip\z@ \parindent\z@ \parfillskip\@flushglue
+   \blank at linefalse \def\par{\ifblank at line
+                             \leavevmode\fi
+                             \blank at linetrue\@@par
+                             \penalty\interlinepenalty}
+   \obeylines
+   \let\do\do at noligs \verbatim at nolig@list
+   \let\do\@makeother \dospecials
+   \global\@newlistfalse
+   \global\@minipagefalse
+   \ifcodeline at index
+     \everypar{\global\advance\c at CodelineNo\@ne
+               \llap{\theCodelineNo\ \hskip\@totalleftmargin}%
+               \check at module}%
+   \else \everypar{\check at module}%
+   \fi
+   \init at crossref}
+\newif\ifblank at line
+\def\endmacrocode{%
+                 \ifpm at module \endgroup \pm at modulefalse \fi
+                 \everypar{}%
+                 \global\@inlabelfalse
+                 \endtrivlist
+                 \close at crossref}
+\@ifundefined{MacroFont}{%
+  \if at compatibility
+    \def\MacroFont{\small
+                   \usefont\encodingdefault
+                           \ttdefault
+                           \mddefault
+                           \updefault
+                   }%
+  \else
+    \def\MacroFont{\fontencoding\encodingdefault
+                   \fontfamily\ttdefault
+                   \fontseries\mddefault
+                   \fontshape\updefault
+                   \small}%
+  \fi
+  }{}
+\@ifundefined{AltMacroFont}{%
+  \if at compatibility
+    \def\AltMacroFont{\small
+                      \usefont\encodingdefault
+                              \ttdefault
+                              \mddefault
+                              \sldefault
+                      }%
+  \else
+    \def\AltMacroFont{\fontencoding\encodingdefault
+                      \fontfamily\ttdefault
+                      \fontseries\mddefault
+                      \fontshape\sldefault
+                      \small
+                      }%
+ \fi
+  }{}
+\AtBeginDocument{\let\macro at font\MacroFont}
+\def\check at module{%
+  \ifcheck at modules
+    \ifpm at module \endgroup \pm at modulefalse \fi
+    \expandafter\futurelet\expandafter\next\expandafter\ch at percent
+  \fi}
+\newif\ifpm at module
+\def\DontCheckModules{\check at modulesfalse}
+\def\CheckModules{\check at modulestrue}
+\newif\ifcheck at modules  \check at modulestrue
+\def\ch at percent{%
+  \if \percentchar\next
+    \expandafter\check at angle
+  \fi}
+\def\check at angle#1{\futurelet\next\ch at angle}
+\begingroup
+\catcode`\<\active
+\gdef\ch at angle{\ifx<\next
+    \expandafter\ch at plus@etc
+  \else \percentchar \fi}
+\gdef\ch at plus@etc<{\futurelet\next\check at plus@etc}
+\gdef\check at plus@etc{%
+    \if +\next
+      \let\next\pm at module
+    \else\if -\next
+      \let\next\pm at module
+    \else\if *\next
+      \let\next\star at module
+    \else\if /\next
+      \let\next\slash at module
+    \else\ifx <\next
+      \percentchar
+    \else
+      \let\next\pm at module
+    \fi\fi\fi\fi\fi
+    \next}
+\endgroup
+\begingroup
+\catcode`\~=\active
+\lccode`\~=`\>
+\lowercase{\gdef\pm at module#1~}{\pm at moduletrue
+   \Module{#1}\begingroup
+     \advance\guard at level\@ne
+     \ifnum\guard at level>\c at StandardModuleDepth\AltMacroFont\fi
+}
+\lowercase{\gdef\star at module#1~}{%
+  \Module{#1}%
+  \global \advance \guard at level\@ne
+  \ifnum \guard at level>\c at StandardModuleDepth
+    \global\let\macro at font=\AltMacroFont \macro at font
+  \fi}
+\catcode`\>=\active
+\gdef\slash at module#1>{%
+  \Module{#1}%
+  \global \advance \guard at level\m at ne
+  \ifnum \guard at level=\c at StandardModuleDepth
+    \global\let\macro at font\MacroFont  \macro at font
+  \fi
+}
+\endgroup
+\newcounter{StandardModuleDepth}
+\newcount \guard at level
+\@ifundefined{Module}{%
+      \def\Module#1{\mod at math@codes$\langle\mathsf{#1}\rangle$}
+  }{}
+\def\mod at math@codes{\mathcode`\|="226A \mathcode`\&="2026
+                    \mathcode`\-="702D \mathcode`\+="702B
+                    \mathcode`\:="703A \mathcode`\=="703D }
+\newskip\MacrocodeTopsep \MacrocodeTopsep = 3pt plus 1.2pt minus 1pt
+\newdimen\MacroIndent
+\settowidth\MacroIndent{\rmfamily\scriptsize 00\ }
+\@namedef{macrocode*}{\macro at code\sxmacro at code}
+\expandafter\let\csname endmacrocode*\endcsname = \endmacrocode
+\catcode`\!=\catcode`\%   ^^A In this section there must not be
+                              ^^A any exclamation marks.
+                              ^^A
+\begingroup
+\catcode`\|=\z@ \catcode`\[=\@ne \catcode`\]=\tw@
+\catcode`\{=12 \catcode`\}=12
+\catcode`\%=12 \catcode`\ =\active \catcode`\\=\active
+!%    \end{macrocode*}
+!    Next follows the actual definition of  |\macro at code|;
+!    notice the
+!    use of the new escape character.  We manage to get the argument
+!    surrounded by the string |\end{macrocode}|, but at the end
+!    however, in spite of the actual characters used during the
+!    definition of
+!    this macro, |\end| with the argument |{macrocode}|
+!    will be executed, to ensure a balanced environment.
+!    \begin{macrocode*}
+|gdef|xmacro at code#1%    \end{macrocode}[#1|end[macrocode]]
+!%    \end{macrocode*}
+! \begin{macro}{\sxmacro at code}
+!    The definition of |\sxmacro at code| is completely analogous,
+!    only
+!    here a slightly different terminating string will be used.
+!    Note that the space is not active in this environment.
+!    \begin{macrocode}
+|catcode`| =12
+|gdef|sxmacro at code#1%    \end{macrocode*}[#1|end[macrocode*]]
+!%    \end{macrocode}
+!    because the |\catcode| changes have been made local by
+!    commencing a
+!    new group, there now follows the matching |\endgroup|
+!    in a rather
+!    unusual style of writing.
+!    \begin{macrocode}
+|endgroup
+!%    \end{macrocode}
+\catcode`\!=12
+\def\DescribeMacro{\leavevmode\@bsphack
+   \begingroup\MakePrivateLetters\Describe at Macro}
+\def\Describe at Macro#1{\endgroup
+              \marginpar{\raggedleft\PrintDescribeMacro{#1}}%
+              \SpecialUsageIndex{#1}\@esphack\ignorespaces}
+\def\DescribeEnv{\leavevmode\@bsphack\begingroup\MakePrivateLetters
+  \Describe at Env}
+\def\Describe at Env#1{\endgroup
+              \marginpar{\raggedleft\PrintDescribeEnv{#1}}%
+              \SpecialEnvIndex{#1}\@esphack\ignorespaces}
+\reversemarginpar
+\setlength\marginparpush{0pt}  \setlength\marginparwidth{8pc}
+{\catcode`\|=\z@ \catcode`\\=12
+|gdef|bslash{\}}
+\def\verbatim{\@beginparpenalty \predisplaypenalty \@verbatim
+              \MacroFont \frenchspacing \@vobeyspaces \@xverbatim}
+\@namedef{verbatim*}{\@beginparpenalty \predisplaypenalty \@verbatim
+              \MacroFont \@sxverbatim}
+\def\@verbatim{\trivlist \item[]\if at minipage\else\vskip\parskip\fi
+      \leftskip\@totalleftmargin\rightskip\z@
+      \parindent\z@\parfillskip\@flushglue\parskip\z@
+      \@@par
+      \@tempswafalse
+ \def\par{\if at tempswa\hbox{}\fi\@tempswatrue\@@par
+          \penalty\interlinepenalty
+   \check at percent}%
+ \obeylines
+ \let\do\do at noligs \verbatim at nolig@list
+ \let\do\@makeother \dospecials}
+{\catcode`\%=12
+ \long\gdef\check at percent#1{\ifx #1%\let\next\@empty \else
+                                    \let\next=#1\fi \next}}
+\def\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
+  \bgroup \let\do\do at noligs \verbatim at nolig@list
+    \ttfamily \verb at eol@error \let\do\@makeother \dospecials
+    \@ifstar{\@sverb}{\@vobeyspaces \frenchspacing \@sverb}}
+\let\verb at balance@group\@empty
+
+\def\verb at egroup{\global\let\verb at balance@group\@empty\egroup}
+
+\begingroup
+  \obeylines%
+  \gdef\verb at eol@error{\obeylines%
+    \def^^M{\verb at egroup\@latex at error{%
+           Text for \noexpand\verb command ended by end of line}\@ehc}}%
+\endgroup
+\def\@sverb#1{%
+  \catcode`#1\active  \lccode`\~`#1%
+  \gdef\verb at balance@group{\verb at egroup
+     \@latex at error{Illegal use of \noexpand\verb command}\@ehc}%
+  \aftergroup\verb at balance@group
+  \lowercase{\let~\verb at egroup}}
+\def\verbatim at nolig@list{\do\`\do\<\do\>\do\,\do\'\do\-}
+\def\do at noligs#1{%
+  \catcode`#1\active
+  \begingroup
+     \lccode`\~=`#1\relax
+     \lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1}}}
+\newcount\macro at cnt \macro at cnt=0
+\def\macro{\begingroup
+   \catcode`\\12
+   \MakePrivateLetters \m at cro@ \iftrue}
+\def\environment{\begingroup
+   \catcode`\\12
+   \MakePrivateLetters \m at cro@ \iffalse}
+\long\def\m at cro@#1#2{\endgroup \topsep\MacroTopsep \trivlist
+  \edef\saved at macroname{\string#2}%
+  #1
+    \let\saved at indexname\saved at macroname
+  \else
+    \edef\saved at indexname{\expandafter\@gobble\string#2}%
+  \fi
+  \def\makelabel##1{\llap{##1}}%
+  \if at inlabel
+    \let\@tempa\@empty \count@\macro at cnt
+    \loop \ifnum\count@>\z@
+      \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m at ne \repeat
+    \edef\makelabel##1{\llap{\vtop to\baselineskip
+                               {\@tempa\hbox{##1}\vss}}}%
+    \advance \macro at cnt \@ne
+  \else  \macro at cnt\@ne  \fi
+  \edef\@tempa{\noexpand\item[%
+     #1%
+       \noexpand\PrintMacroName
+     \else
+       \noexpand\PrintEnvName
+     \fi
+     {\string#2}]}%
+  \@tempa
+  \global\advance\c at CodelineNo\@ne
+   #1%
+      \SpecialMainIndex{#2}\nobreak
+      \DoNotIndex{#2}%
+   \else
+      \SpecialMainEnvIndex{#2}\nobreak
+   \fi
+  \global\advance\c at CodelineNo\m at ne
+  \ignorespaces}
+\let\endmacro \endtrivlist
+\let\endenvironment\endmacro
+\newskip\MacroTopsep     \MacroTopsep = 7pt plus 2pt minus 2pt
+\@ifundefined{PrintMacroName}
+   {\def\PrintMacroName#1{\strut \MacroFont \string #1\ }}{}
+\@ifundefined{PrintDescribeMacro}
+   {\def\PrintDescribeMacro#1{\strut \MacroFont \string #1\ }}{}
+\@ifundefined{PrintDescribeEnv}
+   {\def\PrintDescribeEnv#1{\strut \MacroFont #1\ }}{}
+\@ifundefined{PrintEnvName}
+   {\def\PrintEnvName#1{\strut \MacroFont #1\ }}{}
+\begingroup
+\catcode`\~\active
+\gdef\SpecialEscapechar#1{%
+    \begingroup
+     \uccode`\~`#1%
+     \uppercase{\gdef\active at escape@char{~}}%
+     \escapechar\m at ne  \xdef\special at escape@char{\string#1}%
+   \endgroup}
+\endgroup
+\begingroup   \catcode`\|=\z@  \catcode`\\=\active
+|gdef|init at crossref{|catcode`|\|active   |let\|bslash
+    |MakePrivateLetters
+    |catcode|expandafter`|special at escape@char|active
+    |expandafter|let|active at escape@char|scan at macro}
+|endgroup
+\SpecialEscapechar{\\}
+\@ifundefined{MakePrivateLetters}
+    {\let\MakePrivateLetters\makeatletter}{}
+\def\close at crossref{\SpecialEscapechar\\}
+\def\scan at macro{%
+   \special at escape@char
+   \step at checksum
+   \ifscan at allowed
+      \let\macro at namepart\@empty
+      \def\next{\futurelet\next\macro at switch}%
+   \else \let\next\@empty \fi
+   \next}
+\newif\ifscan at allowed    \scan at allowedtrue
+\def\DisableCrossrefs{\@bsphack\scan at allowedfalse\@esphack}
+\def\EnableCrossrefs{\@bsphack\scan at allowedtrue
+                     \def\DisableCrossrefs{\@bsphack\@esphack}\@esphack}
+\def\macro at switch{\ifcat\noexpand\next a%
+     \let\next\macro at name
+     \else \let\next\short at macro  \fi
+   \next}
+\begingroup
+\catcode`\&=12
+\gdef\short at macro#1{\begingroup
+   \uccode`\&=\expandafter`\string#1%
+   \uppercase{\def\x{\def\macro at namepart{&}}}%
+   \expandafter\endgroup\x
+   \ifnot at excluded
+     \produce at index{#1}\fi
+    \scan at allowedfalse#1%
+    \scan at allowedtrue }
+\endgroup
+\def\produce at index#1{%
+  \if\noexpand#1\special at escape@char
+     \scan at allowedfalse \it at is@a\special at escape@char \else
+     \if\noexpand#1\bslash \it at is@a\bslash \else
+       \if\noexpand#1\space \it at is@a\space \else
+         \ifx#1\par
+         \it at is@a\space \else
+         \ifx#1\relax \else
+           \if\noexpand#1\bgroup \LeftBraceIndex \else
+             \if\noexpand#1\egroup \RightBraceIndex \else
+               \if\noexpand#1\percentchar \PercentIndex \else
+                 \it at is@a{\string#1}%
+       \fi \fi \fi \fi \fi \fi \fi \fi}
+\def\macro at name#1{\edef\macro at namepart{\macro at namepart#1}%
+     \futurelet\next\more at macroname}
+\def\more at macroname{\ifcat\noexpand\next a%
+     \let\next\macro at name
+     \else \let\next\macro at finish \fi
+     \next}
+\def\macro at finish{%
+  \macro at namepart
+  \ifnot at excluded
+     \edef\@tempa{\noexpand\SpecialIndex{\bslash\macro at namepart}}%
+     \@tempa  \fi}
+\def\DoNotIndex{\begingroup \MakePrivateLetters
+    \catcode`\\12
+    \do at not@index}
+\long\def\do at not@index#1{%
+    \endgroup
+    \addto at hook\index at excludelist{#1,}}
+\long\def\addto at hook#1#2{#1\expandafter{\the#1#2}}
+\newtoks\index at excludelist
+\index at excludelist{}
+\begingroup
+\catcode`\|=0%
+\catcode`\\=12
+|gdef|ifnot at excluded{|expandafter
+     |expanded at notin|expandafter{|expandafter
+     \|macro at namepart,}{|the|index at excludelist}}
+|endgroup
+\def\expanded at notin#1#2{%
+ \def\in@@##1#1##2##3\in@@{%
+  \ifx\expanded at notin##2}%
+ \expandafter\in@@#2#1\expanded at notin\in@@}
+\@ifundefined{actualchar}{\def\actualchar{=}}{}
+\@ifundefined{quotechar}{\def\quotechar{!}}{}
+\@ifundefined{levelchar}{\def\levelchar{>}}{}
+\@ifundefined{encapchar}{\def\encapchar{|}}{}
+\@ifundefined{verbatimchar}{\def\verbatimchar{+}}{}
+\def\SpecialIndex#1{\@bsphack\special at index{\expandafter\@gobble
+                                      \string#1\actualchar
+      \string\verb\quotechar*\verbatimchar\string#1\verbatimchar}%
+    \@esphack}
+
+\def\SpecialMainIndex#1{\@bsphack\SpecialIndex@{#1}{\encapchar main}%
+                        \@esphack}
+\begingroup
+ \catcode`\|=0
+ \catcode`\\=12
+ |gdef|@SpecialIndexHelper@#1#2|@nil{%
+   |if |noexpand#1\%
+     |gdef|@gtempa{#2}%
+   |else
+     |begingroup
+       |escapechar|m at ne
+       |expandafter|gdef|expandafter|@gtempa|expandafter{|string#1#2}%
+     |endgroup
+   |fi}
+|endgroup
+\def\SpecialIndex@#1#2{%
+   \@SpecialIndexHelper@#1\@nil
+   \def\@tempb{ }%
+   \ifcat \@tempb\@gtempa
+      \special at index{\quotechar\space\actualchar
+                     \string\verb\quotechar*\verbatimchar
+                     \quotechar\bslash\quotechar\space\verbatimchar#2}%
+   \else
+     \def\@tempb##1##2\relax{\ifx\relax##2\relax
+          \def\@tempc{\special at index{\quotechar##1\actualchar
+                      \string\verb\quotechar*\verbatimchar
+                      \quotechar\bslash\quotechar##1\verbatimchar#2}}%
+        \else
+          \def\@tempc{\special at index{##1##2\actualchar
+                       \string\verb\quotechar*\verbatimchar
+                       \bslash##1##2\verbatimchar#2}}%
+        \fi}%
+     \expandafter\@tempb\@gtempa\relax
+     \@tempc
+   \fi}
+\def\SpecialMainEnvIndex#1{\@bsphack\special at index{%
+                                      #1\actualchar
+                                      {\string\ttfamily\space#1}
+                                         (environment)%
+                                      \encapchar main}%
+    \special at index{environments:\levelchar#1\actualchar{%
+                   \string\ttfamily\space#1}\encapchar
+           main}\@esphack}
+\def\SpecialUsageIndex#1{\@bsphack
+   {\let\special at index\index\SpecialIndex@{#1}{\encapchar usage}}%
+   \@esphack}
+\def\SpecialEnvIndex#1{\@bsphack
+    \index{#1\actualchar{\protect\ttfamily#1}
+           (environment)\encapchar usage}%
+    \index{environments:\levelchar#1\actualchar
+          {\protect\ttfamily#1}\encapchar usage}\@esphack}
+\def\SortIndex#1#2{\index{#1\actualchar#2}}
+\def\it at is@a#1{\special at index{\quotechar #1\actualchar
+                          \string\verb\quotechar*\verbatimchar
+                          \quotechar\bslash\quotechar#1\verbatimchar}}
+\@ifundefined{LeftBraceIndex}{\def\LeftBraceIndex{%
+   \special at index{\bgroup\actualchar\string\verb\quotechar*\verbatimchar
+          \quotechar\bslash{\verbatimchar\string\iffalse}\string\fi}}}{}
+
+\@ifundefined{RightBraceIndex}{\def\RightBraceIndex{%
+ \special at index{\egroup\actualchar\string\iffalse{\string\fi\string\verb
+           \quotechar*\verbatimchar\quotechar\bslash}\verbatimchar}}}{}
+\@ifundefined{PercentIndex}
+  {\def\PercentIndex{\it at is@a\percentchar}}{}
+\def\OldMakeindex{\def\PercentIndex{%
+    \special at index{\quotechar\percentchar\actualchar\string\verb
+           \quotechar*\verbatimchar\quotechar\bslash
+           \percentchar\percentchar\verbatimchar}}}
+{\catcode`\%=12 \gdef\percentchar{%}}
+\newif\ifhave at multicol
+\IfFileExists{multicol.sty}{\have at multicoltrue
+                            \RequirePackage{multicol}%
+                           }{}
+
+\newdimen\IndexMin         \IndexMin       = 80pt
+\newcount\c at IndexColumns   \c at IndexColumns = 3
+\ifhave at multicol
+  \renewenvironment{theindex}
+    {\begin{multicols}\c at IndexColumns[\index at prologue][\IndexMin]%
+      \IndexParms \let\item\@idxitem \ignorespaces}%
+    {\end{multicols}}
+\else
+  \typeout{Can't find multicol.sty -- will use normal index layout if
+     necessary.}
+  \def\theindex{\@restonecoltrue\if at twocolumn\@restonecolfalse\fi
+    \columnseprule \z@  \columnsep 35\p@
+    \twocolumn[\index at prologue]%
+    \IndexParms \let\item\@idxitem \ignorespaces}
+  \def\endtheindex{\if at restonecol\onecolumn\else\clearpage\fi}
+\fi
+\long\def\IndexPrologue#1{\@bsphack\def\index at prologue{#1}\@esphack}
+\@ifundefined{index at prologue}
+     {\def\index at prologue{\section*{Index}%
+                 \markboth{Index}{Index}%
+                 Numbers written in italic refer to the page
+                 where the corresponding entry is described;
+                 numbers underlined refer to the
+                 \ifcodeline at index
+                   code line of the
+                 \fi
+                 definition; numbers in roman refer to the
+                 \ifcodeline at index
+                   code lines
+                 \else
+                   pages
+                 \fi
+                 where the entry is used.
+                 }}{}
+\@ifundefined{IndexParms}
+    {\def\IndexParms{%
+       \parindent \z@
+       \columnsep 15pt
+       \parskip 0pt plus 1pt
+       \rightskip 15pt
+       \mathsurround \z@
+       \parfillskip=-15pt
+        \small
+       \def\@idxitem{\par\hangindent 30pt}%
+       \def\subitem{\@idxitem\hspace*{15pt}}%
+       \def\subsubitem{\@idxitem\hspace*{25pt}}%
+       \def\indexspace{\par\vspace{10pt plus 2pt minus 3pt}}%
+      }}{}
+\def\efill{\hfill\nopagebreak}%
+\def\dotfill{\leaders\hbox to.6em{\hss .\hss}\hskip\z@ plus  1fill}%
+\def\dotfil{\leaders\hbox to.6em{\hss .\hss}\hfil}%
+\def\pfill{\unskip~\dotfill\penalty500\strut\nobreak
+               \dotfil~\ignorespaces}%
+\def\*{\leavevmode\lower.8ex\hbox{$\,\widetilde{\ }\,$}}
+\@ifundefined{main}{\def\main#1{\underline{#1}}}{}
+\@ifundefined{usage}{\def\usage#1{\textit{#1}}}{}
+\def\PrintIndex{\@input@{\jobname.ind}%
+                \global\let\PrintIndex\@empty}
+\def\changes{\@bsphack\begingroup\@sanitize
+   \catcode`\\\z@ \catcode`\ 10 \MakePercentIgnore
+   \changes@}
+\def\changes@#1#2#3{%
+  \protected at edef\@tempa{\noexpand\glossary{#1\levelchar
+                                 \ifx\saved at macroname\@empty
+                                   \space
+                                   \actualchar
+                                   \generalname
+                                 \else
+                                   \saved at indexname
+                                   \actualchar
+                                   \string\verb\quotechar*%
+                                   \verbatimchar\saved at macroname
+                                   \verbatimchar
+                                 \fi
+                                 :\levelchar #3}}%
+  \@tempa\endgroup\@esphack}
+\def\saved at macroname{}
+\def\saved at indexname{}
+\def\generalname{General}
+\let\RecordChanges\makeglossary
+\newdimen\GlossaryMin         \GlossaryMin       = 80pt
+\newcount\c at GlossaryColumns   \c at GlossaryColumns = 2
+\ifhave at multicol
+  \newenvironment{theglossary}{%
+    \begin{multicols}\c at GlossaryColumns
+                     [\glossary at prologue][\GlossaryMin]%
+    \GlossaryParms \let\item\@idxitem \ignorespaces}%
+   {\end{multicols}}
+\else
+  \newenvironment{theglossary}{%
+      \@restonecoltrue\if at twocolumn\@restonecolfalse\fi
+      \columnseprule \z@  \columnsep 35\p@
+      \twocolumn[\glossary at prologue]%
+      \GlossaryParms \let\item\@idxitem \ignorespaces}
+    {\if at restonecol\onecolumn\else\clearpage\fi}
+\fi
+\long\def\GlossaryPrologue#1{\@bsphack
+                             \def\glossary at prologue{#1}%
+                             \@esphack}
+\@ifundefined{glossary at prologue}
+     {\def\glossary at prologue{\section*{{Change History}}%
+                 \markboth{{Change History}}{{Change History}}%
+                 }}{}
+\@ifundefined{GlossaryParms}{\let\GlossaryParms\IndexParms
+  \expandafter\def\expandafter\GlossaryParms\expandafter{\GlossaryParms
+     \rightskip 15pt plus 1fil
+     \parfillskip -15pt plus -1fil\relax}
+}{}
+\def\PrintChanges{\@input@{\jobname.gls}%
+                  \global\let\PrintChanges\@empty}
+\newcommand\AlsoImplementation{%
+   \long\def\StopEventually##1{\@bsphack\gdef\Finale{##1%
+                  \check at checksum}%
+              \init at checksum
+              \@esphack}%
+         }
+\AlsoImplementation
+\def\OnlyDescription{\@bsphack\long\def\StopEventually##1{%
+           ##1\endinput}\@esphack}
+\let\Finale\relax
+\ifx\l at nohyphenation\undefined
+  \newlanguage\l at nohyphenation
+\fi
+\DeclareRobustCommand\meta[1]{%
+     \ensuremath\langle
+     \ifmmode \expandafter \nfss at text \fi
+     {%
+      \meta at font@select
+      \edef\meta at hyphen@restore
+        {\hyphenchar\the\font\the\hyphenchar\font}%
+      \hyphenchar\font\m at ne
+      \language\l at nohyphenation
+      #1\/%
+      \meta at hyphen@restore
+     }\ensuremath\rangle
+}
+\def\meta at font@select{\itshape}
+\def\IndexInput#1{%
+     \begingroup \macro at code
+   \frenchspacing \@vobeyspaces
+     \input{#1}\endmacrocode
+     \endgroup}
+\def\maketitle{\par
+      \begingroup \def \thefootnote {\fnsymbol {footnote}}%
+      \setcounter {footnote}\z@
+      \def\@makefnmark{\hbox to\z@{$\m at th^{\@thefnmark}$\hss}}%
+      \long\def\@makefntext##1{\parindent 1em\noindent
+            \hbox to1.8em{\hss$\m at th^{\@thefnmark}$}##1}%
+      \if at twocolumn \twocolumn [\@maketitle ]%
+      \else \newpage \global \@topnum \z@ \@maketitle \fi
+       \thispagestyle{titlepage}\@thanks \endgroup
+      \setcounter {footnote}\z@
+      \gdef\@date{\today}\gdef\@thanks{}%
+      \gdef\@author{}\gdef\@title{}}
+\@ifundefined{ps at titlepage}
+    {\let\ps at titlepage=\ps at plain}{}
+\def\MakeShortVerb{%
+  \@ifstar
+    {\def\@shortvrbdef{\verb*}\@MakeShortVerb}%
+    {\def\@shortvrbdef{\verb}\@MakeShortVerb}}
+\def\@MakeShortVerb#1{%
+  \expandafter\ifx\csname cc\string#1\endcsname\relax
+    \@shortvrbinfo{Made }{#1}\@shortvrbdef
+    \add at special{#1}%
+    \expandafter
+    \xdef\csname cc\string#1\endcsname{\the\catcode`#1}%
+    \begingroup
+      \catcode`\~\active  \lccode`\~`#1%
+      \lowercase{%
+      \global\expandafter\let
+         \csname ac\string#1\endcsname~%
+      \expandafter\gdef\expandafter~\expandafter{\@shortvrbdef~}}%
+    \endgroup
+    \global\catcode`#1\active
+  \else
+    \@shortvrbinfo\@empty{#1 already}{\@empty\verb(*)}%
+  \fi}
+\def\DeleteShortVerb#1{%
+  \expandafter\ifx\csname cc\string#1\endcsname\relax
+    \@shortvrbinfo\@empty{#1 not}{\@empty\verb(*)}%
+  \else
+    \@shortvrbinfo{Deleted }{#1 as}{\@empty\verb(*)}%
+    \rem at special{#1}%
+    \global\catcode`#1\csname cc\string#1\endcsname
+    \global \expandafter\let \csname cc\string#1\endcsname \relax
+    \ifnum\catcode`#1=\active
+      \begingroup
+        \catcode`\~\active   \lccode`\~`#1%
+        \lowercase{%
+          \global\expandafter\let\expandafter~%
+          \csname ac\string#1\endcsname}%
+      \endgroup \fi \fi}
+\def\@shortvrbinfo#1#2#3{%
+  \PackageInfo{doc}{%
+     #1\expandafter\@gobble\string#2 a short reference
+                                          for \expandafter\string#3}}
+\def\add at special#1{%
+  \rem at special{#1}%
+  \expandafter\gdef\expandafter\dospecials\expandafter
+    {\dospecials \do #1}%
+  \expandafter\gdef\expandafter\@sanitize\expandafter
+    {\@sanitize \@makeother #1}}
+\def\rem at special#1{%
+  \def\do##1{%
+    \ifnum`#1=`##1 \else \noexpand\do\noexpand##1\fi}%
+  \xdef\dospecials{\dospecials}%
+  \begingroup
+    \def\@makeother##1{%
+      \ifnum`#1=`##1 \else \noexpand\@makeother\noexpand##1\fi}%
+    \xdef\@sanitize{\@sanitize}%
+  \endgroup}
+\def\MakeShortverb{\typeout{*** Switch to \noexpand\MakeShortVerb
+                         syntax, this is obsolete ***}\MakeShortVerb}
+\def\DeleteShortverb{\typeout{*** Switch to \noexpand\DeleteShortVerb
+                         syntax, this is obsolete ***}\DeleteShortVerb}
+\def\init at checksum{\relax
+    \global\bslash at cnt\z@}
+\def\check at checksum{\relax
+  \ifnum\check at sum>\m at ne
+     \ifnum\check at sum=\z@
+       \typeout{**********************************}%
+       \typeout{* This macro file has no checksum!}%
+       \typeout{* The checksum should be \the\bslash at cnt!}%
+       \typeout{**********************************}%
+     \else
+       \ifnum\check at sum=\bslash at cnt
+         \typeout{*******************}%
+         \typeout{* Checksum passed *}%
+         \typeout{*******************}%
+       \else
+         \PackageError{doc}{Checksum not passed
+                    (\the\check at sum<>\the\bslash at cnt)}%
+          {The file currently documented seems to be wrong.^^J%
+           Try to get a correct version.}%
+       \fi
+     \fi
+  \fi
+  \global\check at sum\m at ne}
+\newcount\check at sum           \check at sum  = \m at ne
+\newcount\bslash at cnt          \bslash at cnt = \z@
+\def\CheckSum#1{\@bsphack\global\check at sum#1\relax\@esphack}
+\def\step at checksum{\global\advance\bslash at cnt\@ne}
+\def\CharacterTable{\begingroup \CharTableChanges \character at table}
+\begingroup
+  \catcode`\~=11
+  \gdef\character at table#1{\def\used~table{#1}%
+      \ifx\used~table\default~table
+           \typeout{***************************}%
+           \typeout{* Character table correct *}%
+           \typeout{***************************}%
+      \else
+         \PackageError{doc}{Character table corrupted}
+                           {\the\wrong at table}
+         \show\default~table
+         \show\used~table
+      \fi
+      \endgroup}
+  \global\let\CharTableChanges\@empty
+  \makeatother
+  \gdef\default~table
+     {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         \~}
+\endgroup
+  \newhelp\wrong at table{Some of the ASCII characters are corrupted.^^J
+            I now \string\show\space you both tables for comparison.}
+\newif\ifcodeline at index \codeline at indexfalse
+\let\CodelineNumbered\codeline at indextrue
+\def\codeline at wrindex#1{\if at filesw
+        \immediate\write\@indexfile
+            {\string\indexentry{#1}%
+            {\number\c at CodelineNo}}\fi}
+\let\special at index = \@gobble
+\def\CodelineIndex{\makeindex
+                   \codeline at indextrue
+                   \let\special at index\codeline at wrindex}
+\def\PageIndex{\makeindex
+               \codeline at indexfalse
+               \let\special at index\index}
+\newcount\c at CodelineNo  \c at CodelineNo\z@
+\@ifundefined{theCodelineNo}
+  {\ifx\selectfont\undefined
+     \def\theCodelineNo{\rmfamily\scriptsize\arabic{CodelineNo}}%
+   \else
+     \def\theCodelineNo{\reset at font\scriptsize\arabic{CodelineNo}}%
+   \fi}
+  {}
+       \tolerance=1000\relax
+{ \catcode`\"=12
+  \global\mathcode`\\="705C \global\mathcode`\@="7040 }
+\@ifundefined{DocstyleParms}{}{\DocstyleParms}
+\let\DocstyleParms\relax
+\@ifundefined{AmSTeX}
+   {\def\AmSTeX{\leavevmode\hbox{$\mathcal A\kern-.2em\lower.376ex%
+        \hbox{$\mathcal M$}\kern-.2em\mathcal S$-\TeX}}}{}
+\@ifundefined{BibTeX}
+   {\def\BibTeX{{\rmfamily B\kern-.05em%
+    \textsc{i\kern-.025em b}\kern-.08em%
+    T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}}{}
+\@ifundefined{SliTeX}
+   {\def\SliTeX{{\rmfamily S\kern-.06emL\kern-.18em\raise.32ex\hbox
+                {\scshape i}\kern -.03em\TeX}}}{}
+\@ifundefined{PlainTeX}{\def\PlainTeX{\textsc{Plain}\kern2pt\TeX}}{}
+\@ifundefined{Web}{\def\Web{\textsc{Web}}}{}
+\def\MakePercentIgnore{\catcode`\%9\relax}
+\def\MakePercentComment{\catcode`\%14\relax}
+\def\DocInput#1{\MakePercentIgnore\input{#1}\MakePercentComment}
+\def\GetFileInfo#1{%
+  \def\filename{#1}%
+  \def\@tempb##1 ##2 ##3\relax##4\relax{%
+    \def\filedate{##1}%
+    \def\fileversion{##2}%
+    \def\fileinfo{##3}}%
+  \edef\@tempa{\csname ver@#1\endcsname}%
+  \expandafter\@tempb\@tempa\relax? ? \relax\relax}
+\endinput
+%%
+%% End of file `doc.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/base/doc-2016-02-15.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/base/doc-2021-06-01.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/doc-2021-06-01.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/base/doc-2021-06-01.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -0,0 +1,838 @@
+%%
+%% This is file `doc.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% doc.dtx  (with options: `package')
+%% 
+%% This is a generated file.
+%% 
+%% The source is maintained by the LaTeX Project team and bug
+%% reports for it can be opened at https://latex-project.org/bugs.html
+%% (but please observe conditions on bug reports sent to that address!)
+%% 
+%% 
+%% Copyright (C) 1993-2021
+%% The LaTeX Project and any individual authors listed elsewhere
+%% in this file.
+%% 
+%% This file was generated from file(s) of the LaTeX base system.
+%% --------------------------------------------------------------
+%% 
+%% It 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
+%%    https://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008 or later.
+%% 
+%% This file has the LPPL maintenance status "maintained".
+%% 
+%% This file may only be distributed together with a copy of the LaTeX
+%% base system. You may however distribute the LaTeX base system without
+%% such generated files.
+%% 
+%% The list of all files belonging to the LaTeX base distribution is
+%% given in the file `manifest.txt'. See also `legal.txt' for additional
+%% information.
+%% 
+%% The list of derived (unpacked) files belonging to the distribution
+%% and covered by LPPL is defined by the unpacking scripts (with
+%% extension .ins) which are part of the distribution.
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+ \ProvidesPackage{doc}
+  [2021/05/28 v2.1n
+   Standard LaTeX documentation package (FMi)]
+%%
+%% Package `doc' to use with LaTeX 2e
+%% Copyright (C) 1989-2020 Frank Mittelbach, all rights reserved.
+\@ifundefined{macro at cnt}{}{\endinput}
+\catcode`\^^A=14
+\AtBeginDocument{\catcode`\^^A=14\relax}
+\def\macrocode{\macro at code
+   \frenchspacing \@vobeyspaces
+   \xmacro at code}
+\def\macro at code{%
+   \topsep \MacrocodeTopsep
+   \@beginparpenalty \predisplaypenalty
+   \if at inlabel\leavevmode\fi
+   \trivlist \parskip \z@ \item[]%
+   \global\setbox\@labels\box\voidb at x
+   \macro at font
+   \leftskip\@totalleftmargin \advance\leftskip\MacroIndent
+   \rightskip\z@ \parindent\z@ \parfillskip\@flushglue
+   \blank at linefalse \def\par{\ifblank at line
+                             \leavevmode\fi
+                             \blank at linetrue\@@par
+                             \penalty\interlinepenalty}
+   \obeylines
+   \let\do\do at noligs \verbatim at nolig@list
+   \let\do\@makeother \dospecials
+   \global\@newlistfalse
+   \global\@minipagefalse
+   \ifcodeline at index
+     \everypar{\global\advance\c at CodelineNo\@ne
+               \llap{\theCodelineNo\ \hskip\@totalleftmargin}%
+               \check at module}%
+   \else \everypar{\check at module}%
+   \fi
+   \init at crossref}
+\newif\ifblank at line
+\def\endmacrocode{%
+                 \ifpm at module \endgroup \pm at modulefalse \fi
+                 \everypar{}%
+                 \global\@inlabelfalse
+                 \endtrivlist
+                 \close at crossref}
+\@ifundefined{MacroFont}{%
+  \if at compatibility
+    \def\MacroFont{\small
+                   \usefont\encodingdefault
+                           \ttdefault
+                           \mddefault
+                           \shapedefault
+                   }%
+  \else
+    \def\MacroFont{\fontencoding\encodingdefault
+                   \fontfamily\ttdefault
+                   \fontseries\mddefault
+                   \fontshape\shapedefault
+                   \small}%
+  \fi
+  }{}
+\@ifundefined{AltMacroFont}{%
+  \if at compatibility
+    \def\AltMacroFont{\small
+                      \usefont\encodingdefault
+                              \ttdefault
+                              \mddefault
+                              \sldefault
+                      }%
+  \else
+    \def\AltMacroFont{\fontencoding\encodingdefault
+                      \fontfamily\ttdefault
+                      \fontseries\mddefault
+                      \fontshape\sldefault
+                      \small
+                      }%
+ \fi
+  }{}
+\AtBeginDocument{\let\macro at font\MacroFont}
+\def\check at module{%
+  \ifcheck at modules
+    \ifpm at module \endgroup \pm at modulefalse \fi
+    \expandafter\futurelet\expandafter\next\expandafter\ch at percent
+  \fi}
+\newif\ifpm at module
+\def\DontCheckModules{\check at modulesfalse}
+\def\CheckModules{\check at modulestrue}
+\newif\ifcheck at modules  \check at modulestrue
+\def\ch at percent{%
+  \if \percentchar\next
+    \expandafter\check at angle
+  \fi}
+\def\check at angle#1{\futurelet\next\ch at angle}
+\begingroup
+\catcode`\<\active
+\gdef\ch at angle{\ifx<\next
+    \expandafter\ch at plus@etc
+  \else \percentchar \fi}
+\gdef\ch at plus@etc<{\futurelet\next\check at plus@etc}
+\gdef\check at plus@etc{%
+    \if +\next
+      \let\next\pm at module
+    \else\if -\next
+      \let\next\pm at module
+    \else\if *\next
+      \let\next\star at module
+    \else\if /\next
+      \let\next\slash at module
+    \else\ifx <\next
+      \percentchar
+    \else
+      \let\next\pm at module
+    \fi\fi\fi\fi\fi
+    \next}
+\endgroup
+\begingroup
+\catcode`\~=\active
+\lccode`\~=`\>
+\lowercase{\gdef\pm at module#1~}{\pm at moduletrue
+   \Module{#1}\begingroup
+     \advance\guard at level\@ne
+     \ifnum\guard at level>\c at StandardModuleDepth\AltMacroFont\fi
+}
+\lowercase{\gdef\star at module#1~}{%
+  \Module{#1}%
+  \global \advance \guard at level\@ne
+  \ifnum \guard at level>\c at StandardModuleDepth
+    \global\let\macro at font=\AltMacroFont \macro at font
+  \fi}
+\catcode`\>=\active
+\gdef\slash at module#1>{%
+  \Module{#1}%
+  \global \advance \guard at level\m at ne
+  \ifnum \guard at level=\c at StandardModuleDepth
+    \global\let\macro at font\MacroFont  \macro at font
+  \fi
+}
+\endgroup
+\newcounter{StandardModuleDepth}
+\newcount \guard at level
+\@ifundefined{Module}{%
+      \def\Module#1{\mod at math@codes$\langle\mathsf{#1}\rangle$}
+  }{}
+\def\mod at math@codes{\mathcode`\|="226A \mathcode`\&="2026
+                    \mathcode`\-="702D \mathcode`\+="702B
+                    \mathcode`\:="703A \mathcode`\=="703D }
+\newskip\MacrocodeTopsep \MacrocodeTopsep = 3pt plus 1.2pt minus 1pt
+\newdimen\MacroIndent
+\settowidth\MacroIndent{\rmfamily\scriptsize 00\ }
+\@namedef{macrocode*}{\macro at code\sxmacro at code}
+\expandafter\let\csname endmacrocode*\endcsname = \endmacrocode
+\catcode`\!=\catcode`\%   ^^A In this section there must not be
+                              ^^A any exclamation marks.
+                              ^^A
+\begingroup
+\catcode`\|=\z@ \catcode`\[=\@ne \catcode`\]=\tw@
+\catcode`\{=12 \catcode`\}=12
+\catcode`\%=12 \catcode`\ =\active \catcode`\\=\active
+!%    \end{macrocode*}
+!    Next follows the actual definition of  |\macro at code|;
+!    notice the
+!    use of the new escape character.  We manage to get the argument
+!    surrounded by the string |\end{macrocode}|, but at the end
+!    however, in spite of the actual characters used during the
+!    definition of
+!    this macro, |\end| with the argument |{macrocode}|
+!    will be executed, to ensure a balanced environment.
+!    \begin{macrocode*}
+|gdef|xmacro at code#1%    \end{macrocode}[#1|end[macrocode]]
+!%    \end{macrocode*}
+! \begin{macro}{\sxmacro at code}
+!    The definition of |\sxmacro at code| is completely analogous,
+!    only
+!    here a slightly different terminating string will be used.
+!    Note that the space is not active in this environment.
+!    \begin{macrocode}
+|catcode`| =12
+|gdef|sxmacro at code#1%    \end{macrocode*}[#1|end[macrocode*]]
+!%    \end{macrocode}
+!    because the |\catcode| changes have been made local by
+!    commencing a
+!    new group, there now follows the matching |\endgroup|
+!    in a rather
+!    unusual style of writing.
+!    \begin{macrocode}
+|endgroup
+!%    \end{macrocode}
+\catcode`\!=12
+\def\DescribeMacro{\leavevmode\@bsphack
+   \begingroup\MakePrivateLetters\Describe at Macro}
+\def\Describe at Macro#1{\endgroup
+              \marginpar{\raggedleft\PrintDescribeMacro{#1}}%
+              \SpecialUsageIndex{#1}\@esphack\ignorespaces}
+\def\DescribeEnv{\leavevmode\@bsphack\begingroup\MakePrivateLetters
+  \Describe at Env}
+\def\Describe at Env#1{\endgroup
+              \marginpar{\raggedleft\PrintDescribeEnv{#1}}%
+              \SpecialEnvIndex{#1}\@esphack\ignorespaces}
+\reversemarginpar
+\setlength\marginparpush{0pt}  \setlength\marginparwidth{8pc}
+{\catcode`\|=\z@ \catcode`\\=12
+|gdef|bslash{\}}
+\def\verbatim{\@beginparpenalty \predisplaypenalty \@verbatim
+              \MacroFont \frenchspacing \@vobeyspaces \@xverbatim}
+\@namedef{verbatim*}{\@beginparpenalty \predisplaypenalty \@verbatim
+              \@setupverbvisiblespace
+              \MacroFont \@vobeyspaces \@sxverbatim}
+\def\@verbatim{\trivlist \item[]\if at minipage\else\vskip\parskip\fi
+      \leftskip\@totalleftmargin\rightskip\z@
+      \parindent\z@\parfillskip\@flushglue\parskip\z@
+      \@@par
+      \@tempswafalse
+ \def\par{\if at tempswa\hbox{}\fi\@tempswatrue\@@par
+          \penalty\interlinepenalty
+   \check at percent}%
+ \obeylines
+ \let\do\do at noligs \verbatim at nolig@list
+ \let\do\@makeother \dospecials}
+{\catcode`\%=12
+ \long\gdef\check at percent#1{\ifx #1%\let\next\@empty \else
+                                    \let\next=#1\fi \next}}
+\def\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
+  \bgroup \let\do\do at noligs \verbatim at nolig@list
+    \ttfamily \verb at eol@error \let\do\@makeother \dospecials
+    \@ifstar{\@sverb}{\@vobeyspaces \frenchspacing \@sverb}}
+\let\verb at balance@group\@empty
+
+\def\verb at egroup{\global\let\verb at balance@group\@empty\egroup}
+
+\begingroup
+  \obeylines%
+  \gdef\verb at eol@error{\obeylines%
+    \def^^M{\verb at egroup\@latex at error{%
+            \noexpand\verb ended by end of line}\@ehc}}%
+\endgroup
+\def\verbatim at nolig@list{\do\`\do\<\do\>\do\,\do\'\do\-}
+\def\do at noligs#1{%
+  \catcode`#1\active
+  \begingroup
+     \lccode`\~=`#1\relax
+     \lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1}}}
+\newcount\macro at cnt \macro at cnt=0
+\def\macro{\begingroup
+   \catcode`\\12
+   \MakePrivateLetters \m at cro@ \iftrue}
+\def\environment{\begingroup
+   \catcode`\\12
+   \MakePrivateLetters \m at cro@ \iffalse}
+\long\def\m at cro@#1#2{\endgroup \topsep\MacroTopsep \trivlist
+  \edef\saved at macroname{\string#2}%
+  #1
+    \let\saved at indexname\saved at macroname
+  \else
+    \edef\saved at indexname{\expandafter\@gobble\string#2}%
+  \fi
+  \def\makelabel##1{\llap{##1}}%
+  \if at inlabel
+    \let\@tempa\@empty \count@\macro at cnt
+    \loop \ifnum\count@>\z@
+      \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m at ne \repeat
+    \edef\makelabel##1{\llap{\vtop to\baselineskip
+                               {\@tempa\hbox{##1}\vss}}}%
+    \advance \macro at cnt \@ne
+  \else  \macro at cnt\@ne  \fi
+  \edef\@tempa{\noexpand\item[%
+     #1%
+       \noexpand\PrintMacroName
+     \else
+       \noexpand\PrintEnvName
+     \fi
+     {\string#2}]}%
+  \@tempa
+  \global\advance\c at CodelineNo\@ne
+   #1%
+      \SpecialMainIndex{#2}\nobreak
+      \DoNotIndex{#2}%
+   \else
+      \SpecialMainEnvIndex{#2}\nobreak
+   \fi
+  \global\advance\c at CodelineNo\m at ne
+  \ignorespaces}
+\let\endmacro \endtrivlist
+\let\endenvironment\endmacro
+\newskip\MacroTopsep     \MacroTopsep = 7pt plus 2pt minus 2pt
+\@ifundefined{PrintMacroName}
+   {\def\PrintMacroName#1{\strut \MacroFont \string #1\ }}{}
+\@ifundefined{PrintDescribeMacro}
+   {\def\PrintDescribeMacro#1{\strut \MacroFont \string #1\ }}{}
+\@ifundefined{PrintDescribeEnv}
+   {\def\PrintDescribeEnv#1{\strut \MacroFont #1\ }}{}
+\@ifundefined{PrintEnvName}
+   {\def\PrintEnvName#1{\strut \MacroFont #1\ }}{}
+\begingroup
+\catcode`\~\active
+\gdef\SpecialEscapechar#1{%
+    \begingroup
+     \uccode`\~`#1%
+     \uppercase{\gdef\active at escape@char{~}}%
+     \escapechar\m at ne  \xdef\special at escape@char{\string#1}%
+   \endgroup}
+\endgroup
+\begingroup   \catcode`\|=\z@  \catcode`\\=\active
+|gdef|init at crossref{|catcode`|\|active   |let\|bslash
+    |MakePrivateLetters
+    |catcode|expandafter`|special at escape@char|active
+    |expandafter|let|active at escape@char|scan at macro}
+|endgroup
+\SpecialEscapechar{\\}
+\@ifundefined{MakePrivateLetters}
+    {\let\MakePrivateLetters\makeatletter}{}
+\def\close at crossref{\SpecialEscapechar\\}
+\def\scan at macro{%
+   \special at escape@char
+   \step at checksum
+   \ifscan at allowed
+      \let\macro at namepart\@empty
+      \def\next{\futurelet\next\macro at switch}%
+   \else \let\next\@empty \fi
+   \next}
+\newif\ifscan at allowed    \scan at allowedtrue
+\def\DisableCrossrefs{\@bsphack\scan at allowedfalse\@esphack}
+\def\EnableCrossrefs{\@bsphack\scan at allowedtrue
+                     \def\DisableCrossrefs{\@bsphack\@esphack}\@esphack}
+\def\macro at switch{\ifcat\noexpand\next a%
+     \let\next\macro at name
+     \else \let\next\short at macro  \fi
+   \next}
+\begingroup
+\catcode`\&=12
+\gdef\short at macro#1{\begingroup
+   \uccode`\&=\expandafter`\string#1%
+   \uppercase{\def\x{\def\macro at namepart{&}}}%
+   \expandafter\endgroup\x
+   \ifnot at excluded
+     \produce at index{#1}\fi
+    \scan at allowedfalse#1%
+    \scan at allowedtrue }
+\endgroup
+\def\produce at index#1{%
+  \if\noexpand#1\special at escape@char
+     \scan at allowedfalse \it at is@a\special at escape@char \else
+     \if\noexpand#1\bslash \it at is@a\bslash \else
+       \if\noexpand#1\space \it at is@a\space \else
+         \ifx#1\par
+         \it at is@a\space \else
+         \ifx#1\relax \else
+           \if\noexpand#1\bgroup \LeftBraceIndex \else
+             \if\noexpand#1\egroup \RightBraceIndex \else
+               \if\noexpand#1\percentchar \PercentIndex \else
+                 \it at is@a{\string#1}%
+       \fi \fi \fi \fi \fi \fi \fi \fi}
+\def\macro at name#1{\edef\macro at namepart{\macro at namepart#1}%
+     \futurelet\next\more at macroname}
+\def\more at macroname{\ifcat\noexpand\next a%
+     \let\next\macro at name
+     \else \let\next\macro at finish \fi
+     \next}
+\def\macro at finish{%
+  \macro at namepart
+  \ifnot at excluded
+     \edef\@tempa{\noexpand\SpecialIndex{\bslash\macro at namepart}}%
+     \@tempa  \fi}
+\def\DoNotIndex{\begingroup \MakePrivateLetters
+    \catcode`\\12
+    \do at not@index}
+\long\def\do at not@index#1{%
+    \endgroup
+    \addto at hook\index at excludelist{#1,}}
+\long\def\addto at hook#1#2{#1\expandafter{\the#1#2}}
+\newtoks\index at excludelist
+\index at excludelist{}
+\begingroup
+\catcode`\|=0%
+\catcode`\\=12
+|gdef|ifnot at excluded{|expandafter
+     |expanded at notin|expandafter{|expandafter
+     \|macro at namepart,}{|the|index at excludelist}}
+|endgroup
+\def\expanded at notin#1#2{%
+ \def\in@@##1#1##2##3\in@@{%
+  \ifx\expanded at notin##2}%
+ \expandafter\in@@#2#1\expanded at notin\in@@}
+\@ifundefined{actualchar}{\def\actualchar{=}}{}
+\@ifundefined{quotechar}{\def\quotechar{!}}{}
+\@ifundefined{levelchar}{\def\levelchar{>}}{}
+\@ifundefined{encapchar}{\def\encapchar{|}}{}
+\@ifundefined{verbatimchar}{\def\verbatimchar{+}}{}
+\def\SpecialIndex#1{\@bsphack\special at index{\expandafter\@gobble
+                                      \string#1\actualchar
+      \string\verb\quotechar*\verbatimchar\string#1\verbatimchar}%
+    \@esphack}
+
+\def\SpecialMainIndex#1{\@bsphack\SpecialIndex@{#1}{\encapchar main}%
+                        \@esphack}
+\begingroup
+ \catcode`\|=0
+ \catcode`\\=12
+ |gdef|@SpecialIndexHelper@#1#2|@nil{%
+   |if |noexpand#1\%
+     |gdef|@gtempa{#2}%
+   |else
+     |begingroup
+       |escapechar|m at ne
+       |expandafter|gdef|expandafter|@gtempa|expandafter{|string#1#2}%
+     |endgroup
+   |fi}
+|endgroup
+\def\SpecialIndex@#1#2{%
+   \@SpecialIndexHelper@#1\@nil
+   \def\@tempb{ }%
+   \ifcat \@tempb\@gtempa
+      \special at index{\quotechar\space\actualchar
+                     \string\verb\quotechar*\verbatimchar
+                     \quotechar\bslash\quotechar\space\verbatimchar#2}%
+   \else
+     \def\@tempb##1##2\relax{\ifx\relax##2\relax
+          \def\@tempc{\special at index{\quotechar##1\actualchar
+                      \string\verb\quotechar*\verbatimchar
+                      \quotechar\bslash\quotechar##1\verbatimchar#2}}%
+        \else
+          \def\@tempc{\special at index{##1##2\actualchar
+                       \string\verb\quotechar*\verbatimchar
+                       \bslash##1##2\verbatimchar#2}}%
+        \fi}%
+     \expandafter\@tempb\@gtempa\relax
+     \@tempc
+   \fi}
+\def\SpecialMainEnvIndex#1{\@bsphack\special at index{%
+                                      #1\actualchar
+                                      {\string\ttfamily\space#1}
+                                         (environment)%
+                                      \encapchar main}%
+    \special at index{environments:\levelchar#1\actualchar{%
+                   \string\ttfamily\space#1}\encapchar
+           main}\@esphack}
+\def\SpecialUsageIndex#1{\@bsphack
+   {\let\special at index\index\SpecialIndex@{#1}{\encapchar usage}}%
+   \@esphack}
+\def\SpecialEnvIndex#1{\@bsphack
+    \index{#1\actualchar{\protect\ttfamily#1}
+           (environment)\encapchar usage}%
+    \index{environments:\levelchar#1\actualchar
+          {\protect\ttfamily#1}\encapchar usage}\@esphack}
+\def\SortIndex#1#2{\index{#1\actualchar#2}}
+\def\it at is@a#1{\special at index{\quotechar #1\actualchar
+                          \string\verb\quotechar*\verbatimchar
+                          \quotechar\bslash\quotechar#1\verbatimchar}}
+\@ifundefined{LeftBraceIndex}{\def\LeftBraceIndex{%
+   \special at index{\bgroup\actualchar\string\verb\quotechar*\verbatimchar
+          \quotechar\bslash{\verbatimchar\string\iffalse}\string\fi}}}{}
+
+\@ifundefined{RightBraceIndex}{\def\RightBraceIndex{%
+ \special at index{\egroup\actualchar\string\iffalse{\string\fi\string\verb
+           \quotechar*\verbatimchar\quotechar\bslash}\verbatimchar}}}{}
+\@ifundefined{PercentIndex}
+  {\def\PercentIndex{\it at is@a\percentchar}}{}
+\def\OldMakeindex{\def\PercentIndex{%
+    \special at index{\quotechar\percentchar\actualchar\string\verb
+           \quotechar*\verbatimchar\quotechar\bslash
+           \percentchar\percentchar\verbatimchar}}}
+{\catcode`\%=12 \gdef\percentchar{%}}
+\newif\ifhave at multicol
+\IfFileExists{multicol.sty}{\have at multicoltrue
+                            \RequirePackage{multicol}%
+                           }{}
+
+\newdimen\IndexMin         \IndexMin       = 80pt
+\newcount\c at IndexColumns   \c at IndexColumns = 3
+\ifhave at multicol
+  \renewenvironment{theindex}
+    {\begin{multicols}\c at IndexColumns[\index at prologue][\IndexMin]%
+      \IndexParms \let\item\@idxitem \ignorespaces}%
+    {\end{multicols}}
+\else
+  \typeout{Can't find multicol.sty -- will use normal index layout if
+     necessary.}
+  \def\theindex{\@restonecoltrue\if at twocolumn\@restonecolfalse\fi
+    \columnseprule \z@  \columnsep 35\p@
+    \twocolumn[\index at prologue]%
+    \IndexParms \let\item\@idxitem \ignorespaces}
+  \def\endtheindex{\if at restonecol\onecolumn\else\clearpage\fi}
+\fi
+\long\def\IndexPrologue#1{\@bsphack\def\index at prologue{#1}\@esphack}
+\@ifundefined{index at prologue}
+     {\def\index at prologue{\section*{Index}%
+                 \markboth{Index}{Index}%
+                 Numbers written in italic refer to the page
+                 where the corresponding entry is described;
+                 numbers underlined refer to the
+                 \ifcodeline at index
+                   code line of the
+                 \fi
+                 definition; numbers in roman refer to the
+                 \ifcodeline at index
+                   code lines
+                 \else
+                   pages
+                 \fi
+                 where the entry is used.
+                 }}{}
+\@ifundefined{IndexParms}
+    {\def\IndexParms{%
+       \parindent \z@
+       \columnsep 15pt
+       \parskip 0pt plus 1pt
+       \rightskip 15pt
+       \mathsurround \z@
+       \parfillskip=-15pt
+        \small
+       \def\@idxitem{\par\hangindent 30pt}%
+       \def\subitem{\@idxitem\hspace*{15pt}}%
+       \def\subsubitem{\@idxitem\hspace*{25pt}}%
+       \def\indexspace{\par\vspace{10pt plus 2pt minus 3pt}}%
+      }}{}
+\def\efill{\hfill\nopagebreak}%
+\def\dotfill{\leaders\hbox to.6em{\hss .\hss}\hskip\z@ plus  1fill\kern\z@}%
+\def\dotfil{\leaders\hbox to.6em{\hss .\hss}\hfil\kern\z@}%
+\def\pfill{\unskip~\dotfill\penalty500\strut\nobreak
+               \dotfil~\ignorespaces}%
+\def\*{\leavevmode\lower.8ex\hbox{$\,\widetilde{\ }\,$}}
+\@ifundefined{main}{\def\main#1{\underline{#1}}}{}
+\@ifundefined{usage}{\def\usage#1{\textit{#1}}}{}
+\def\PrintIndex{\@input@{\jobname.ind}%
+                \global\let\PrintIndex\@empty}
+\def\changes{\@bsphack\begingroup\@sanitize
+   \catcode`\\\z@ \catcode`\ 10 \MakePercentIgnore
+   \changes@}
+\def\changes@#1#2#3{%
+  \protected at edef\@tempa{\noexpand\glossary{#1\levelchar
+                                 \ifx\saved at macroname\@empty
+                                   \space
+                                   \actualchar
+                                   \generalname
+                                 \else
+                                   \saved at indexname
+                                   \actualchar
+                                   \string\verb\quotechar*%
+                                   \verbatimchar\saved at macroname
+                                   \verbatimchar
+                                 \fi
+                                 :\levelchar #3}}%
+  \@tempa\endgroup\@esphack}
+\def\saved at macroname{}
+\def\saved at indexname{}
+\def\generalname{General}
+\let\RecordChanges\makeglossary
+\newdimen\GlossaryMin         \GlossaryMin       = 80pt
+\newcount\c at GlossaryColumns   \c at GlossaryColumns = 2
+\ifhave at multicol
+  \newenvironment{theglossary}{%
+    \begin{multicols}\c at GlossaryColumns
+                     [\glossary at prologue][\GlossaryMin]%
+    \GlossaryParms \let\item\@idxitem \ignorespaces}%
+   {\end{multicols}}
+\else
+  \newenvironment{theglossary}{%
+      \@restonecoltrue\if at twocolumn\@restonecolfalse\fi
+      \columnseprule \z@  \columnsep 35\p@
+      \twocolumn[\glossary at prologue]%
+      \GlossaryParms \let\item\@idxitem \ignorespaces}
+    {\if at restonecol\onecolumn\else\clearpage\fi}
+\fi
+\long\def\GlossaryPrologue#1{\@bsphack
+                             \def\glossary at prologue{#1}%
+                             \@esphack}
+\@ifundefined{glossary at prologue}
+     {\def\glossary at prologue{\section*{{Change History}}%
+                 \markboth{{Change History}}{{Change History}}%
+                 }}{}
+\@ifundefined{GlossaryParms}{\let\GlossaryParms\IndexParms
+  \expandafter\def\expandafter\GlossaryParms\expandafter{\GlossaryParms
+     \rightskip 15pt plus 1fil
+     \parfillskip -15pt plus -1fil\relax}
+}{}
+\def\PrintChanges{\@input@{\jobname.gls}%
+                  \global\let\PrintChanges\@empty}
+\newcommand\AlsoImplementation{%
+   \long\def\StopEventually##1{\@bsphack\gdef\Finale{##1%
+                  \check at checksum}%
+              \init at checksum
+              \@esphack}%
+         }
+\AlsoImplementation
+\def\OnlyDescription{\@bsphack\long\def\StopEventually##1{%
+           ##1\endinput}\@esphack}
+\let\Finale\relax
+\ifx\l at nohyphenation\undefined
+  \newlanguage\l at nohyphenation
+\fi
+\DeclareRobustCommand\meta[1]{%
+     \ensuremath\langle
+     \ifmmode \expandafter \nfss at text \fi
+     {%
+      \meta at font@select
+      \edef\meta at hyphen@restore
+        {\hyphenchar\the\font\the\hyphenchar\font}%
+      \hyphenchar\font\m at ne
+      \language\l at nohyphenation
+      #1\/%
+      \meta at hyphen@restore
+     }\ensuremath\rangle
+}
+\def\meta at font@select{\itshape}
+\def\IndexInput#1{%
+     \begingroup \macro at code
+   \frenchspacing \@vobeyspaces
+     \input{#1}\endmacrocode
+     \endgroup}
+\def\maketitle{\par
+      \begingroup \def \thefootnote {\fnsymbol {footnote}}%
+      \setcounter {footnote}\z@
+      \def\@makefnmark{\hbox to\z@{$\m at th^{\@thefnmark}$\hss}}%
+      \long\def\@makefntext##1{\parindent 1em\noindent
+            \hbox to1.8em{\hss$\m at th^{\@thefnmark}$}##1}%
+      \if at twocolumn \twocolumn [\@maketitle ]%
+      \else \newpage \global \@topnum \z@ \@maketitle \fi
+       \thispagestyle{titlepage}\@thanks \endgroup
+      \setcounter {footnote}\z@
+      \gdef\@date{\today}\gdef\@thanks{}%
+      \gdef\@author{}\gdef\@title{}}
+\@ifundefined{ps at titlepage}
+    {\let\ps at titlepage=\ps at plain}{}
+\def\MakeShortVerb{%
+  \@ifstar
+    {\def\@shortvrbdef{\verb*}\@MakeShortVerb}%
+    {\def\@shortvrbdef{\verb}\@MakeShortVerb}}
+\def\@MakeShortVerb#1{%
+  \expandafter\ifx\csname cc\string#1\endcsname\relax
+    \@shortvrbinfo{Made }{#1}\@shortvrbdef
+    \add at special{#1}%
+    \expandafter
+    \xdef\csname cc\string#1\endcsname{\the\catcode`#1}%
+    \begingroup
+      \catcode`\~\active  \lccode`\~`#1%
+      \lowercase{%
+      \global\expandafter\let
+         \csname ac\string#1\endcsname~%
+      \expandafter\gdef\expandafter~\expandafter{\@shortvrbdef~}}%
+    \endgroup
+    \global\catcode`#1\active
+  \else
+    \@shortvrbinfo\@empty{#1 already}{\@empty\verb(*)}%
+  \fi}
+\def\DeleteShortVerb#1{%
+  \expandafter\ifx\csname cc\string#1\endcsname\relax
+    \@shortvrbinfo\@empty{#1 not}{\@empty\verb(*)}%
+  \else
+    \@shortvrbinfo{Deleted }{#1 as}{\@empty\verb(*)}%
+    \rem at special{#1}%
+    \global\catcode`#1\csname cc\string#1\endcsname
+    \global \expandafter\let \csname cc\string#1\endcsname \relax
+    \ifnum\catcode`#1=\active
+      \begingroup
+        \catcode`\~\active   \lccode`\~`#1%
+        \lowercase{%
+          \global\expandafter\let\expandafter~%
+          \csname ac\string#1\endcsname}%
+      \endgroup \fi \fi}
+\def\@shortvrbinfo#1#2#3{%
+  \PackageInfo{doc}{%
+     #1\expandafter\@gobble\string#2 a short reference
+                                          for \expandafter\string#3}}
+\def\add at special#1{%
+  \rem at special{#1}%
+  \expandafter\gdef\expandafter\dospecials\expandafter
+    {\dospecials \do #1}%
+  \expandafter\gdef\expandafter\@sanitize\expandafter
+    {\@sanitize \@makeother #1}}
+\def\rem at special#1{%
+  \def\do##1{%
+    \ifnum`#1=`##1 \else \noexpand\do\noexpand##1\fi}%
+  \xdef\dospecials{\dospecials}%
+  \begingroup
+    \def\@makeother##1{%
+      \ifnum`#1=`##1 \else \noexpand\@makeother\noexpand##1\fi}%
+    \xdef\@sanitize{\@sanitize}%
+  \endgroup}
+\def\MakeShortverb{\typeout{*** Switch to \noexpand\MakeShortVerb
+                         syntax, this is obsolete ***}\MakeShortVerb}
+\def\DeleteShortverb{\typeout{*** Switch to \noexpand\DeleteShortVerb
+                         syntax, this is obsolete ***}\DeleteShortVerb}
+\def\init at checksum{\relax
+    \global\bslash at cnt\z@}
+\def\check at checksum{\relax
+  \ifnum\check at sum>\m at ne
+     \ifnum\check at sum=\z@
+       \typeout{**********************************}%
+       \typeout{* This macro file has no checksum!}%
+       \typeout{* The checksum should be \the\bslash at cnt!}%
+       \typeout{**********************************}%
+     \else
+       \ifnum\check at sum=\bslash at cnt
+         \typeout{*******************}%
+         \typeout{* Checksum passed *}%
+         \typeout{*******************}%
+       \else
+         \PackageError{doc}{Checksum not passed
+                    (\the\check at sum<>\the\bslash at cnt)}%
+          {The file currently documented seems to be wrong.^^J%
+           Try to get a correct version.}%
+       \fi
+     \fi
+  \fi
+  \global\check at sum\m at ne}
+\newcount\check at sum           \check at sum  = \m at ne
+\newcount\bslash at cnt          \bslash at cnt = \z@
+\def\CheckSum#1{\@bsphack\global\check at sum#1\relax\@esphack}
+\def\step at checksum{\global\advance\bslash at cnt\@ne}
+\def\CharacterTable{\begingroup \CharTableChanges \character at table}
+\begingroup
+  \catcode`\~=11
+  \gdef\character at table#1{\def\used~table{#1}%
+      \ifx\used~table\default~table
+           \typeout{***************************}%
+           \typeout{* Character table correct *}%
+           \typeout{***************************}%
+      \else
+         \PackageError{doc}{Character table corrupted}
+                           {\the\wrong at table}
+         \show\default~table
+         \show\used~table
+      \fi
+      \endgroup}
+  \global\let\CharTableChanges\@empty
+  \makeatother
+  \gdef\default~table
+     {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         \~}
+\endgroup
+  \newhelp\wrong at table{Some of the ASCII characters are corrupted.^^J
+            I now \string\show\space you both tables for comparison.}
+\newif\ifcodeline at index \codeline at indexfalse
+\let\CodelineNumbered\codeline at indextrue
+\def\codeline at wrindex#1{\if at filesw
+        \immediate\write\@indexfile
+            {\string\indexentry{#1}%
+            {\number\c at CodelineNo}}\fi}
+\let\special at index = \@gobble
+\def\CodelineIndex{\makeindex
+                   \codeline at indextrue
+                   \let\special at index\codeline at wrindex}
+\def\PageIndex{\makeindex
+               \codeline at indexfalse
+               \let\special at index\index}
+\newcount\c at CodelineNo  \c at CodelineNo\z@
+\@ifundefined{theCodelineNo}
+  {\ifx\selectfont\undefined
+     \def\theCodelineNo{\rmfamily\scriptsize\arabic{CodelineNo}}%
+   \else
+     \def\theCodelineNo{\reset at font\scriptsize\arabic{CodelineNo}}%
+   \fi}
+  {}
+       \tolerance=1000\relax
+{ \catcode`\"=12
+  \global\mathcode`\\="705C \global\mathcode`\@="7040 }
+\@ifundefined{DocstyleParms}{}{\DocstyleParms}
+ \let\DocstyleParms\relax
+\@ifundefined{AmSTeX}
+   {\def\AmSTeX{\leavevmode\hbox{$\mathcal A\kern-.2em\lower.376ex%
+        \hbox{$\mathcal M$}\kern-.2em\mathcal S$-\TeX}}}{}
+\@ifundefined{BibTeX}
+   {\def\BibTeX{{\rmfamily B\kern-.05em%
+    \textsc{i\kern-.025em b}\kern-.08em%
+    T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}}{}
+\@ifundefined{SliTeX}
+   {\def\SliTeX{{\rmfamily S\kern-.06emL\kern-.18em\raise.32ex\hbox
+                {\scshape i}\kern -.03em\TeX}}}{}
+\@ifundefined{PlainTeX}{\def\PlainTeX{\textsc{Plain}\kern2pt\TeX}}{}
+\@ifundefined{Web}{\def\Web{\textsc{Web}}}{}
+\def\MakePercentIgnore{\catcode`\%9\relax}
+\def\MakePercentComment{\catcode`\%14\relax}
+\def\DocInput#1{\MakePercentIgnore\input{#1}\MakePercentComment}
+\def\GetFileInfo#1{%
+  \def\filename{#1}%
+  \def\@tempb##1 ##2 ##3\relax##4\relax{%
+    \def\filedate{##1}%
+    \def\fileversion{##2}%
+    \def\fileinfo{##3}}%
+  \edef\@tempa{\csname ver@#1\endcsname}%
+  \expandafter\@tempb\@tempa\relax? ? \relax\relax}
+\endinput
+%%
+%% End of file `doc.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/base/doc-2021-06-01.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Deleted: trunk/Master/texmf-dist/tex/latex/base/doc-v3beta.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/doc-v3beta.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/doc-v3beta.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,1241 +0,0 @@
-%%
-%% This is file `doc-v3beta.sty',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% doc.dtx  (with options: `package,beta')
-%% 
-%% This is a generated file.
-%% 
-%% The source is maintained by the LaTeX Project team and bug
-%% reports for it can be opened at https://latex-project.org/bugs.html
-%% (but please observe conditions on bug reports sent to that address!)
-%% 
-%% 
-%% Copyright 1993-2018
-%% The LaTeX3 Project and any individual authors listed elsewhere
-%% in this file.
-%% 
-%% This file was generated from file(s) of the LaTeX base system.
-%% --------------------------------------------------------------
-%% 
-%% It 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
-%%    https://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 file has the LPPL maintenance status "maintained".
-%% 
-%% This file may only be distributed together with a copy of the LaTeX
-%% base system. You may however distribute the LaTeX base system without
-%% such generated files.
-%% 
-%% The list of all files belonging to the LaTeX base distribution is
-%% given in the file `manifest.txt'. See also `legal.txt' for additional
-%% information.
-%% 
-%% The list of derived (unpacked) files belonging to the distribution
-%% and covered by LPPL is defined by the unpacking scripts (with
-%% extension .ins) which are part of the distribution.
-\NeedsTeXFormat{LaTeX2e}[1994/12/01]
-
-\providecommand\DeclareRelease[3]{}
-\providecommand\DeclareCurrentRelease[2]{}
-
-\DeclareRelease{v2}{2016-02-15.sty}
-               {doc-2016-02-15.sty}
-\DeclareCurrentRelease{v3}{2018-04-16}
-
-\ProvidesPackage{doc-v3beta}
-  [2021/02/07 v3.0e
-   Standard LaTeX documentation package V3 (FMi)]
-%%
-%% Package `doc' to use with LaTeX 2e
-%% Copyright (C) 1989-2018 Frank Mittelbach, all rights reserved.
-
-
-
-
-
-\@ifundefined{macro at cnt}{}{\endinput}
-\catcode`\^^A=14
-\AtBeginDocument{\catcode`\^^A=14\relax}
-\RequirePackage{kvoptions}
-\SetupKeyvalOptions{family=doc,prefix=doc@}
-\DeclareBoolOption{noprint}
-\DeclareBoolOption{noindex}
-\DeclareBoolOption[true]{hyperref}
-\DeclareBoolOption[true]{multicol}
-\DeclareBoolOption[false]{debugshow}
-\DeclareBoolOption[true]{toplevel}
-\DeclareComplementaryOption{notoplevel}{toplevel}
-\DeclareBoolOption{macrolike}
-\DeclareComplementaryOption{envlike}{macrolike}
-\DeclareStringOption{idxtype}
-\DeclareStringOption{idxgroup}
-\DeclareStringOption{printtype}
-\DeclareBoolOption[false]{outer}
-\ProcessKeyvalOptions*
-\newif\ifscan at allowed    \scan at allowedtrue
-\def\SetupDoc#1{%
-  \setkeys{doc}{#1}%
-    \edef\doc at noprintdefault{\ifdoc at noprint true\else false\fi}%
-  \ifdoc at noindex
-    \def\doc at noindexdefault{true}%
-    \scan at allowedfalse
-  \else
-    \def\doc at noindexdefault{false}%
-  \fi
-}
-\SetupDoc{}              % just save the default values
-\def\macrocode{\macro at code
-   \frenchspacing \@vobeyspaces
-   \xmacro at code}
-\def\macro at code{%
-   \topsep \MacrocodeTopsep
-   \@beginparpenalty \predisplaypenalty
-   \if at inlabel\leavevmode\fi
-   \trivlist \parskip \z@ \item[]%
-   \macro at font
-   \leftskip\@totalleftmargin \advance\leftskip\MacroIndent
-   \rightskip\z@ \parindent\z@ \parfillskip\@flushglue
-   \blank at linefalse \def\par{\ifblank at line
-                             \leavevmode\fi
-                             \blank at linetrue\@@par
-                             \penalty\interlinepenalty}
-   \obeylines
-   \let\do\do at noligs \verbatim at nolig@list
-   \let\do\@makeother \dospecials
-   \global\@newlistfalse
-   \global\@minipagefalse
-   \ifcodeline at index
-     \everypar{\global\advance\c at CodelineNo\@ne
-               \llap{\theCodelineNo\ \hskip\@totalleftmargin}%
-               \check at module}%
-   \else \everypar{\check at module}%
-   \fi
-   \init at crossref}
-\newif\ifblank at line
-\def\endmacrocode{%
-                 \ifpm at module \endgroup \pm at modulefalse \fi
-                 \everypar{}%
-                 \global\@inlabelfalse
-                 \endtrivlist
-                 \close at crossref}
-\@ifundefined{MacroFont}{%
-  \if at compatibility
-    \def\MacroFont{\small
-                   \usefont\encodingdefault
-                           \ttdefault
-                           \mddefault
-                           \updefault
-                   }%
-  \else
-    \def\MacroFont{\fontencoding\encodingdefault
-                   \fontfamily\ttdefault
-                   \fontseries\mddefault
-                   \fontshape\updefault
-                   \small}%
-  \fi
-  }{}
-\@ifundefined{AltMacroFont}{%
-  \if at compatibility
-    \def\AltMacroFont{\small
-                      \usefont\encodingdefault
-                              \ttdefault
-                              \mddefault
-                              \sldefault
-                      }%
-  \else
-    \def\AltMacroFont{\fontencoding\encodingdefault
-                      \fontfamily\ttdefault
-                      \fontseries\mddefault
-                      \fontshape\sldefault
-                      \small
-                      }%
- \fi
-  }{}
-\AtBeginDocument{\let\macro at font\MacroFont}
-\def\check at module{%
-  \ifcheck at modules
-    \ifpm at module \endgroup \pm at modulefalse \fi
-    \expandafter\futurelet\expandafter\next\expandafter\ch at percent
-  \fi}
-\newif\ifpm at module
-\def\DontCheckModules{\check at modulesfalse}
-\def\CheckModules{\check at modulestrue}
-\newif\ifcheck at modules  \check at modulestrue
-\def\ch at percent{%
-  \if \percentchar\next
-    \expandafter\check at angle
-  \fi}
-\def\check at angle#1{\futurelet\next\ch at angle}
-\begingroup
-\catcode`\<\active
-\gdef\ch at angle{\ifx<\next
-    \expandafter\ch at plus@etc
-  \else \percentchar \fi}
-\gdef\ch at plus@etc<{\futurelet\next\check at plus@etc}
-\gdef\check at plus@etc{%
-    \if +\next
-      \let\next\pm at module
-    \else\if -\next
-      \let\next\pm at module
-    \else\if *\next
-      \let\next\star at module
-    \else\if /\next
-      \let\next\slash at module
-    \else\ifx <\next
-      \percentchar
-    \else
-      \let\next\pm at module
-    \fi\fi\fi\fi\fi
-    \next}
-\endgroup
-\begingroup
-\catcode`\~=\active
-\lccode`\~=`\>
-\lowercase{\gdef\pm at module#1~}{\pm at moduletrue
-   \Module{#1}\begingroup
-     \advance\guard at level\@ne
-     \ifnum\guard at level>\c at StandardModuleDepth\AltMacroFont\fi
-}
-\lowercase{\gdef\star at module#1~}{%
-  \Module{#1}%
-  \global \advance \guard at level\@ne
-  \ifnum \guard at level>\c at StandardModuleDepth
-    \global\let\macro at font=\AltMacroFont \macro at font
-  \fi}
-\catcode`\>=\active
-\gdef\slash at module#1>{%
-  \Module{#1}%
-  \global \advance \guard at level\m at ne
-  \ifnum \guard at level=\c at StandardModuleDepth
-    \global\let\macro at font\MacroFont  \macro at font
-  \fi
-}
-\endgroup
-\newcounter{StandardModuleDepth}
-\newcount \guard at level
-
-\@ifundefined{Module}{%
-      \def\Module#1{\mod at math@codes$\langle\mathsf{#1}\rangle$}
-  }{}
-\def\mod at math@codes{\mathcode`\|="226A \mathcode`\&="2026
-                    \mathcode`\-="702D \mathcode`\+="702B
-                    \mathcode`\:="703A \mathcode`\=="703D }
-\newskip\MacrocodeTopsep \MacrocodeTopsep = 3pt plus 1.2pt minus 1pt
-\newdimen\MacroIndent
-\settowidth\MacroIndent{\rmfamily\scriptsize 00\ }
-\@namedef{macrocode*}{\macro at code\sxmacro at code}
-\expandafter\let\csname endmacrocode*\endcsname = \endmacrocode
-\catcode`\!=\catcode`\%   ^^A In this section there must not be
-                              ^^A any exclamation marks.
-                              ^^A
-\begingroup
-\catcode`\|=\z@ \catcode`\[=\@ne \catcode`\]=\tw@
-\catcode`\{=12 \catcode`\}=12
-\catcode`\%=12 \catcode`\ =\active \catcode`\\=\active
-!%    \end{macrocode*}
-!    Next follows the actual definition of  |\macro at code|;
-!    notice the
-!    use of the new escape character.  We manage to get the argument
-!    surrounded by the string |\end{macrocode}|, but at the end
-!    however, in spite of the actual characters used during the
-!    definition of
-!    this macro, |\end| with the argument |{macrocode}|
-!    will be executed, to ensure a balanced environment.
-!    \begin{macrocode*}
-|gdef|xmacro at code#1%    \end{macrocode}[#1|end[macrocode]]
-!%    \end{macrocode*}
-! \begin{macro}{\sxmacro at code}
-!    The definition of |\sxmacro at code| is completely analogous,
-!    only
-!    here a slightly different terminating string will be used.
-!    Note that the space is not active in this environment.
-!    \begin{macrocode}
-|catcode`| =12
-|gdef|sxmacro at code#1%    \end{macrocode*}[#1|end[macrocode*]]
-!%    \end{macrocode}
-!    because the |\catcode| changes have been made local by
-!    commencing a
-!    new group, there now follows the matching |\endgroup|
-!    in a rather
-!    unusual style of writing.
-!    \begin{macrocode}
-|endgroup
-!%    \end{macrocode}
-\catcode`\!=12
-
-\reversemarginpar
-\setlength\marginparpush{0pt}  \setlength\marginparwidth{8pc}
-\setlength\marginparsep{\labelsep}
-{\catcode`\|=\z@ \catcode`\\=12
-|gdef|bslash{\}}
-\def\verbatim{\@beginparpenalty \predisplaypenalty \@verbatim
-              \MacroFont \frenchspacing \@vobeyspaces \@xverbatim}
-\@namedef{verbatim*}{\@beginparpenalty \predisplaypenalty \@verbatim
-              \MacroFont \@sxverbatim}
-\def\@verbatim{\trivlist \item[]\if at minipage\else\vskip\parskip\fi
-      \leftskip\@totalleftmargin\rightskip\z@
-      \parindent\z@\parfillskip\@flushglue\parskip\z@
-      \@@par
-      \@tempswafalse
- \def\par{\if at tempswa\hbox{}\fi\@tempswatrue\@@par
-          \penalty\interlinepenalty
-   \check at percent}%
- \obeylines
- \let\do\do at noligs \verbatim at nolig@list
- \let\do\@makeother \dospecials}
-{\catcode`\%=12
- \long\gdef\check at percent#1{\ifx #1%\let\next\@empty \else
-                                    \let\next=#1\fi \next}}
-\def\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
-  \bgroup \let\do\do at noligs \verbatim at nolig@list
-    \ttfamily \verb at eol@error \let\do\@makeother \dospecials
-    \@ifstar{\@sverb}{\@vobeyspaces \frenchspacing \@sverb}}
-\let\verb at balance@group\@empty
-
-\def\verb at egroup{\global\let\verb at balance@group\@empty\egroup}
-
-\begingroup
-  \obeylines%
-  \gdef\verb at eol@error{\obeylines%
-    \def^^M{\verb at egroup\@latex at error{%
-           Text for \noexpand\verb command ended by end of line}\@ehc}}%
-\endgroup
-\def\@sverb#1{%
-  \catcode`#1\active  \lccode`\~`#1%
-  \gdef\verb at balance@group{\verb at egroup
-     \@latex at error{Illegal use of \noexpand\verb command}\@ehc}%
-  \aftergroup\verb at balance@group
-  \lowercase{\let~\verb at egroup}}
-\def\verbatim at nolig@list{\do\`\do\<\do\>\do\,\do\'\do\-}
-\def\do at noligs#1{%
-  \catcode`#1\active
-  \begingroup
-     \lccode`\~=`#1\relax
-     \lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1}}}
-\newcount\macro at cnt \macro at cnt=0
-\newskip\MacroTopsep     \MacroTopsep = 7pt plus 2pt minus 2pt
-\begingroup
-\catcode`\~\active
-\gdef\SpecialEscapechar#1{%
-    \begingroup
-     \uccode`\~`#1%
-     \uppercase{\gdef\active at escape@char{~}}%
-     \escapechar\m at ne  \xdef\special at escape@char{\string#1}%
-   \endgroup}
-\endgroup
-\begingroup   \catcode`\|=\z@  \catcode`\\=\active
-|gdef|init at crossref{|catcode`|\|active   |let\|bslash
-    |MakePrivateLetters
-    |catcode|expandafter`|special at escape@char|active
-    |expandafter|let|active at escape@char|scan at macro}
-|endgroup
-\SpecialEscapechar{\\}
-\@ifundefined{MakePrivateLetters}
-    {\let\MakePrivateLetters\makeatletter}{}
-\def\close at crossref{\SpecialEscapechar\\}
-\def\scan at macro{%
-   \special at escape@char
-   \step at checksum
-   \ifscan at allowed
-      \let\macro at namepart\@empty
-      \def\next{\futurelet\next\macro at switch}%
-   \else \let\next\@empty \fi
-   \next}
-\def\DisableCrossrefs{\@bsphack\scan at allowedfalse\@esphack}
-\def\EnableCrossrefs{\@bsphack\scan at allowedtrue
-                     \def\DisableCrossrefs{\@bsphack\@esphack}\@esphack}
-\def\macro at switch{\ifcat\noexpand\next a%
-     \let\next\macro at name
-     \else \let\next\short at macro  \fi
-   \next}
-\begingroup
-\catcode`\&=12
-\gdef\short at macro#1{\begingroup
-   \uccode`\&=\expandafter`\string#1%
-   \uppercase{\def\x{\def\macro at namepart{&}}}%
-   \expandafter\endgroup\x
-     \maybe at index@short at macro\macro at namepart
-    \scan at allowedfalse#1%
-    \scan at allowedtrue }
-\endgroup
-\def\macro at name#1{\edef\macro at namepart{\macro at namepart#1}%
-     \futurelet\next\more at macroname}
-\def\more at macroname{\ifcat\noexpand\next a%
-     \let\next\macro at name
-     \else \let\next\macro at finish \fi
-     \next}
-\def\macro at finish{%
-  \macro at namepart
-  \maybe at index@macro \macro at namepart
-}
-
-\RequirePackage{expl3}
-\ExplSyntaxOn
-\seq_new:N  \l__doc_donotindex_seq
-\prop_new:N \g__doc_idxtype_prop
-\cs_new:Npn\__doc_trace:x {
-  \ifdoc at debugshow
-    \expandafter \iow_term:x
-  \else
-    \expandafter \use_none:n
-  \fi
-}
-\cs_new:Npn \doc_dont_index:n {
-  \group_begin:
-    \MakePrivateLetters
-    \__doc_dont_index:n
-}
-\cs_new:Npn \__doc_dont_index:n #1 {
-  \group_end:
-  \__doc_trace:x{Disable~ indexing~ for~ '\tl_to_str:n{#1}' }
-  \clist_map_function:nN {#1} \__doc_dont_index_aux:n
-}
-\cs_new:Npn \__doc_dont_index_aux:n #1 {
-  \seq_put_right:Nx \l__doc_donotindex_seq {\expandafter\@gobble \string#1}
-}
-\cs_set_eq:NN \DoNotIndex \doc_dont_index:n
-\def \ShowIndexingState {
-  \__doc_trace:x{Show~ doc~ indexing~ state:}
-  \seq_show:N  \l__doc_donotindex_seq
-  \prop_show:N \g__doc_idxtype_prop
-}
-
-\cs_new:Npn \__doc_idxtype_put:Nn #1#2 {
-  \exp_args:Nx \__doc_idxtype_put:nn { \cs_to_str:N #1 }{#2}
-  \protected at write\@auxout{}
-     {\string\RecordIndexTypeAux {\string#1 }{#2} }
-}
-\cs_new:Npn \RecordIndexTypeAux #1#2 {
-  \exp_args:Nx \__doc_idxtype_put:nn { \cs_to_str:N #1 }{#2}
-}
-\AtEndDocument{
-  \cs_set_eq:NN \RecordIndexTypeAux \use_none:nn
-}
-\cs_set_eq:NN \RecordIndexType \__doc_idxtype_put:Nn
-\cs_new:Npn \__doc_idxtype_put_scan:nn #1#2 {
-  \exp_args:Nf \__doc_idxtype_put:nn { \tl_to_str:n {#1} }{#2}
-  \protected at write\@auxout{}
-     {\string\RecordIndexTypeAux {\bslash #1 }{#2} }
-}
-\cs_generate_variant:Nn \__doc_idxtype_put_scan:nn {o}
-\cs_set_eq:NN \record at index@type at save \__doc_idxtype_put_scan:on
-\cs_new:Npn \__doc_idxtype_put:nn #1#2 {
-  \exp_args:NNf
-  \seq_if_in:NnTF \l__doc_donotindex_seq {\tl_to_str:n{#1}}
-     {
-       \__doc_trace:x{Not~ recording~ index~ type~ for~ '\bslash #1' }
-     }
-     {
-       \__doc_trace:x{Recording~ index~ type~ for~ '\bslash #1' ~ as~ #2 }
-       \prop_gput:Nnn \g__doc_idxtype_prop {#1}{#2}
-     }
-}
-\cs_new:Npn \exp_args:co #1#2
-   { \cs:w #1 \exp_after:wN \cs_end:\exp_after:wN {#2} }
-\cs_generate_variant:Nn \tl_to_str:n {o}
-
-\cs_new:Npn \__doc_maybe_index:o #1 {
-  \exp_args:Nf \__doc_maybe_index_aux:nN { \tl_to_str:o {#1} }
-                                         \SpecialIndex
-}
-\cs_set_eq:NN \maybe at index@macro \__doc_maybe_index:o
-\cs_new:Npn \__doc_maybe_index_short:o #1 {
-  \exp_args:Nf \__doc_maybe_index_aux:nN { \tl_to_str:o {#1} }
-                                         \SpecialShortIndex
-}
-\cs_set_eq:NN \maybe at index@short at macro \__doc_maybe_index_short:o
-\cs_new:Npn \__doc_maybe_index_aux:nN #1#2 {
-  \__doc_trace:x{Searching~ for~ '\bslash #1'}
-  \seq_if_in:NnTF \l__doc_donotindex_seq {#1}
-    {
-     \__doc_trace:x{Not~ indexing~ '\bslash #1' }
-    }
-    {
-     \prop_get:NnNTF \g__doc_idxtype_prop {#1} \l__doc_idxtype_tl
-       {
-        \exp_args:Ncno \__doc_maybe_index_aux:Nnn
-              { Code \tl_use:N \l__doc_idxtype_tl Index }
-              {code} {\bslash #1}
-        }
-        {
-          \__doc_trace:x{Indexing~ '\bslash #1'\space (\string #2)}
-          \exp_args:No #2 {\bslash #1}
-        }
-    }
-}
-\cs_new:Npn \SpecialShortIndex #1 {
-    \@SpecialIndexHelper@ #1\@nil
-  \@bsphack
-  \ifdoc at noindex \else
-    \str_case_e:nnF {\@gtempa }
-        {
-          {\cs_to_str:N \^^M } {\def\reserved at a{ \string \space \actualchar }
-                                \def\reserved at b { \space }
-                                \let\reserved at c \@empty                          }
-          { }                  {\def\reserved at a{ \string \space \actualchar }
-                                \def\reserved at b { \space }
-                                \let\reserved at c \@empty                          }
-          {\c_left_brace_str} { \def\reserved at a{ \bgroup \actualchar }
-                                \def\reserved at b { \c_left_brace_str }
-                                \def\reserved at c { \noexpand\iffalse
-                                                  \c_right_brace_str
-                                                  \noexpand\fi }                 }
-          {\c_right_brace_str} { \def\reserved at a{ \egroup \actualchar
-                                                  \noexpand\iffalse
-                                                    \c_left_brace_str
-                                                  \noexpand\fi }
-                                 \def\reserved at b { \c_right_brace_str }
-                                 \let\reserved at c \@empty                         }
-          {\verbatimchar}  { \def\reserved at a{ \quotechar\verbatimchar
-                                              \actualchar }
-                             \let\reserved at b \@empty
-                             \def\reserved at c
-                                 { \string\texttt{\string\string\verbatimchar} } }
-        }
-        { \def\reserved at a {\quotechar \@gtempa \actualchar }
-          \def\reserved at b {\quotechar \@gtempa  }
-          \let\reserved at c \@empty                             }
-    \special at index {
-    \reserved at a
-    \string\verb
-    \quotechar *\verbatimchar \quotechar \bslash
-    \reserved at b
-    \verbatimchar
-    \reserved at c
-    \encapchar code}
-  \fi
-  \@esphack
-}
-
-\cs_new:Npn \__doc_maybe_index_aux:Nnn #1#2#3 {
-    \cs_if_exist:NTF #1
-      {
-        \__doc_trace:x{Indexing~ '#3'\space as~
-                       \tl_use:N \l__doc_idxtype_tl }
-        #1{#2}{#3}
-      }
-      {
-        \PackageError{doc}{Doc~ element~
-           '\tl_use:N \l__doc_idxtype_tl'~ unknown}%
-
-          {When~ using~ '\string\RecordIndexType'~ the~ type~ must~
-           be~ known~\MessageBreak
-           to~ the~ system,~ i.e.,~ declared~ via~
-           '\string\NewDocElement'\MessageBreak
-           before~ it~ can~ be~ used~ in~ indexing.}
-     }
-}
-\ExplSyntaxOff
-\@ifundefined{actualchar}{\def\actualchar{=}}{}
-\@ifundefined{quotechar}{\def\quotechar{!}}{}
-\@ifundefined{levelchar}{\def\levelchar{>}}{}
-\@ifundefined{encapchar}{\def\encapchar{|}}{}
-\@ifundefined{verbatimchar}{\def\verbatimchar{+}}{}
-\begingroup
- \catcode`\|=0
- \catcode`\\=12
- |gdef|@SpecialIndexHelper@#1#2|@nil{%
-   |if |noexpand#1\%
-     |gdef|@gtempa{#2}%
-   |else
-     |begingroup
-       |escapechar|m at ne
-       |expandafter|gdef|expandafter|@gtempa|expandafter{|string#1#2}%
-     |endgroup
-   |fi}
-|endgroup
-\def\SortIndex#1#2{%
-  \ifdoc at noindex\else
-    \index{#1\actualchar#2}%
-  \fi
-}
-\@ifundefined{LeftBraceIndex}{\def\LeftBraceIndex{%
-   \special at index{\bgroup\actualchar
-                  \string\verb% % to fool emacs highlighting
-                  \quotechar*\verbatimchar
-                  \quotechar\bslash{\verbatimchar\string\iffalse}\string\fi}}}{}
-
-\@ifundefined{RightBraceIndex}{\def\RightBraceIndex{%
- \special at index{\egroup\actualchar\string\iffalse{\string\fi
-           \string\verb% % to fool emacs highlighting
-           \quotechar*\verbatimchar\quotechar\bslash}\verbatimchar}}}{}
-\@ifundefined{PercentIndex}
-  {\def\PercentIndex{\it at is@a\percentchar}}{}
-\def\OldMakeindex{\def\PercentIndex{%
-    \special at index{\quotechar\percentchar\actualchar
-           \string\verb% % to fool emacs highlighting
-           \quotechar*\verbatimchar\quotechar\bslash
-           \percentchar\percentchar\verbatimchar}}}
-{\catcode`\%=12 \gdef\percentchar{%}}
-\def\it at is@a#1{\special at index{\quotechar #1\actualchar
-                          \string\verb% % to fool emacs highlighting
-                          \quotechar*\verbatimchar
-                          \quotechar\bslash\quotechar#1\verbatimchar}}
-
-\newdimen\IndexMin         \IndexMin       = 80pt
-\newcount\c at IndexColumns   \c at IndexColumns = 3
-\ifdoc at multicol
-  \RequirePackage{multicol}
-  \renewenvironment{theindex}
-    {\begin{multicols}\c at IndexColumns[\index at prologue][\IndexMin]%
-      \IndexParms \let\item\@idxitem \ignorespaces}%
-    {\end{multicols}}
-\else
-  \def\theindex{\@restonecoltrue\if at twocolumn\@restonecolfalse\fi
-    \columnseprule \z@  \columnsep 35\p@
-    \twocolumn[\index at prologue]%
-    \IndexParms \let\item\@idxitem \ignorespaces}
-  \def\endtheindex{\if at restonecol\onecolumn\else\clearpage\fi}
-\fi
-\long\def\IndexPrologue#1{\@bsphack\def\index at prologue{#1}\@esphack}
-\@ifundefined{index at prologue}
-     {\def\index at prologue{\section*{Index}%
-                 \markboth{Index}{Index}%
-                 Numbers written in italic refer to the page
-                 where the corresponding entry is described;
-                 numbers underlined refer to the
-                 \ifcodeline at index
-                   code line of the
-                 \fi
-                 definition; numbers in roman refer to the
-                 \ifcodeline at index
-                   code lines
-                 \else
-                   pages
-                 \fi
-                 where the entry is used.
-                 }}{}
-\@ifundefined{IndexParms}
-    {\def\IndexParms{%
-       \parindent \z@
-       \columnsep 15pt
-       \parskip 0pt plus 1pt
-       \rightskip 15pt
-       \mathsurround \z@
-       \parfillskip=-15pt
-        \small
-       \def\@idxitem{\par\hangindent 30pt}%
-       \def\subitem{\@idxitem\hspace*{15pt}}%
-       \def\subsubitem{\@idxitem\hspace*{25pt}}%
-       \def\indexspace{\par\vspace{10pt plus 2pt minus 3pt}}%
-      }}{}
-\def\efill{\hfill\nopagebreak}%
-\def\pfill{\unskip~%
-           \leaders\hbox to.6em{\hss .\hss}\hfill
-           \penalty500\strut\nobreak
-           \leaders\hbox to.6em{\hss .\hss}\hfil
-           ~\ignorespaces}%
-\def\*{\leavevmode\lower.8ex\hbox{$\,\widetilde{\ }\,$}}
-\@ifundefined{main}{\def\main#1{\underline{#1}}}{}
-\@ifundefined{usage}{\def\usage#1{\textit{#1}}}{}
-\@ifundefined{code}{\def\code#1{#1}}{}
-\def\PrintIndex{\@input@{\jobname.ind}%
-                \global\let\PrintIndex\@empty}
-\def\changes{\@bsphack\begingroup\@sanitize
-   \catcode`\\\z@ \catcode`\ 10 \MakePercentIgnore
-   \changes@}
-\def\changes@#1#2#3{%
-  \protected at edef\@tempa{\noexpand\glossary{#1\levelchar
-                   \ifx\saved at macroname\@empty
-                      \quotechar!%
-                      \actualchar
-                      \generalname
-                   \else
-                      \saved at indexname
-                      \actualchar
-                      \string\verb% % to fool emacs highlighting
-                      \quotechar*%
-                      \verbatimchar\saved at macroname
-                      \verbatimchar
-                   \fi
-                   :\levelchar #3}}%
-  \@tempa\endgroup\@esphack}
-\def\saved at macroname{}
-\def\saved at indexname{}
-\def\generalname{General}
-\let\RecordChanges\makeglossary
-\newdimen\GlossaryMin         \GlossaryMin       = 80pt
-\newcount\c at GlossaryColumns   \c at GlossaryColumns = 2
-\ifdoc at multicol
-  \newenvironment{theglossary}{%
-    \begin{multicols}\c at GlossaryColumns
-                     [\glossary at prologue][\GlossaryMin]%
-    \GlossaryParms \let\item\@idxitem \ignorespaces}%
-   {\end{multicols}}
-\else
-  \newenvironment{theglossary}{%
-      \@restonecoltrue\if at twocolumn\@restonecolfalse\fi
-      \columnseprule \z@  \columnsep 35\p@
-      \twocolumn[\glossary at prologue]%
-      \GlossaryParms \let\item\@idxitem \ignorespaces}
-    {\if at restonecol\onecolumn\else\clearpage\fi}
-\fi
-\long\def\GlossaryPrologue#1{\@bsphack
-                             \def\glossary at prologue{#1}%
-                             \@esphack}
-\@ifundefined{glossary at prologue}
-     {\def\glossary at prologue{\section*{{Change History}}%
-                 \markboth{{Change History}}{{Change History}}%
-                 }}{}
-\@ifundefined{GlossaryParms}{\let\GlossaryParms\IndexParms
-  \expandafter\def\expandafter\GlossaryParms\expandafter{\GlossaryParms
-     \rightskip 15pt plus 1fil
-     \parfillskip -15pt plus -1fil\relax}
-}{}
-\def\PrintChanges{\@input@{\jobname.gls}%
-                  \global\let\PrintChanges\@empty}
-\newcommand\AlsoImplementation{%
-   \long\def\MaybeStopHere##1{\@bsphack\gdef\Finale{##1%
-                  \check at checksum}%
-              \init at checksum
-              \@esphack}%
-         }
-\AlsoImplementation
-\def\OnlyDescription{\@bsphack\long\def\MaybeStopHere##1{%
-           ##1\endinput}\@esphack}
-\let\Finale\relax
-\def\StopEventually{\MaybeStopHere}
-\ifx\l at nohyphenation\undefined
-  \newlanguage\l at nohyphenation
-\fi
-\DeclareRobustCommand\meta[1]{%
-     \ensuremath\langle
-     \ifmmode \expandafter \nfss at text \fi
-     {%
-      \meta at font@select
-      \edef\meta at hyphen@restore
-        {\hyphenchar\the\font\the\hyphenchar\font}%
-      \hyphenchar\font\m at ne
-      \language\l at nohyphenation
-      #1\/%
-      \meta at hyphen@restore
-     }\ensuremath\rangle
-}
-\def\meta at font@select{\itshape}
-\def\IndexInput#1{%
-     \begingroup \macro at code
-   \frenchspacing \@vobeyspaces
-     \input{#1}\endmacrocode
-     \endgroup}
-\def\maketitle{\par
-      \begingroup \def \thefootnote {\fnsymbol {footnote}}%
-      \setcounter {footnote}\z@
-      \def\@makefnmark{\hbox to\z@{$\m at th^{\@thefnmark}$\hss}}%
-      \long\def\@makefntext##1{\parindent 1em\noindent
-            \hbox to1.8em{\hss$\m at th^{\@thefnmark}$}##1}%
-      \if at twocolumn \twocolumn [\@maketitle ]%
-      \else \newpage \global \@topnum \z@ \@maketitle \fi
-       \thispagestyle{titlepage}\@thanks \endgroup
-      \setcounter {footnote}\z@
-      \gdef\@date{\today}\gdef\@thanks{}%
-      \gdef\@author{}\gdef\@title{}}
-\@ifundefined{ps at titlepage}
-    {\let\ps at titlepage=\ps at plain}{}
-\def\MakeShortVerb{%
-  \@ifstar
-    {\def\@shortvrbdef{\verb*}\@MakeShortVerb}%
-    {\def\@shortvrbdef{\verb}\@MakeShortVerb}}
-\def\@MakeShortVerb#1{%
-  \expandafter\ifx\csname cc\string#1\endcsname\relax
-    \@shortvrbinfo{Made }{#1}\@shortvrbdef
-    \add at special{#1}%
-    \expandafter
-    \xdef\csname cc\string#1\endcsname{\the\catcode`#1}%
-    \begingroup
-      \catcode`\~\active  \lccode`\~`#1%
-      \lowercase{%
-      \global\expandafter\let
-         \csname ac\string#1\endcsname~%
-      \expandafter\gdef\expandafter~\expandafter{\@shortvrbdef~}}%
-    \endgroup
-    \global\catcode`#1\active
-  \else
-    \@shortvrbinfo\@empty{#1 already}%
-                         {\@empty\verb% % to fool emacs highlighting
-                          (*)}%
-  \fi}
-\def\DeleteShortVerb#1{%
-  \expandafter\ifx\csname cc\string#1\endcsname\relax
-    \@shortvrbinfo\@empty{#1 not}%
-                         {\@empty\verb% % to fool emacs highlighting
-                          (*)}%
-  \else
-    \@shortvrbinfo{Deleted }{#1 as}%
-                            {\@empty\verb% % to fool emacs
-                                           % highlighting
-                            (*)}%
-    \rem at special{#1}%
-    \global\catcode`#1\csname cc\string#1\endcsname
-    \global \expandafter\let \csname cc\string#1\endcsname \relax
-    \ifnum\catcode`#1=\active
-      \begingroup
-        \catcode`\~\active   \lccode`\~`#1%
-        \lowercase{%
-          \global\expandafter\let\expandafter~%
-          \csname ac\string#1\endcsname}%
-      \endgroup \fi \fi}
-\def\@shortvrbinfo#1#2#3{%
-  \PackageInfo{doc}{%
-     #1\expandafter\@gobble\string#2 a short reference
-                                          for \expandafter\string#3}}
-\def\add at special#1{%
-  \rem at special{#1}%
-  \expandafter\gdef\expandafter\dospecials\expandafter
-    {\dospecials \do #1}%
-  \expandafter\gdef\expandafter\@sanitize\expandafter
-    {\@sanitize \@makeother #1}}
-\def\rem at special#1{%
-  \def\do##1{%
-    \ifnum`#1=`##1 \else \noexpand\do\noexpand##1\fi}%
-  \xdef\dospecials{\dospecials}%
-  \begingroup
-    \def\@makeother##1{%
-      \ifnum`#1=`##1 \else \noexpand\@makeother\noexpand##1\fi}%
-    \xdef\@sanitize{\@sanitize}%
-  \endgroup}
-\def\init at checksum{\relax
-    \global\bslash at cnt\z@}
-\def\check at checksum{\relax
-  \ifnum\check at sum>\m at ne
-     \ifnum\check at sum=\z@
-       \typeout{**********************************}%
-       \typeout{* This macro file has no checksum!}%
-       \typeout{* The checksum should be \the\bslash at cnt!}%
-       \typeout{**********************************}%
-     \else
-       \ifnum\check at sum=\bslash at cnt
-         \typeout{*******************}%
-         \typeout{* Checksum passed *}%
-         \typeout{*******************}%
-       \else
-         \PackageError{doc}{Checksum not passed
-                    (\the\check at sum<>\the\bslash at cnt)}%
-          {The file currently documented seems to be wrong.^^J%
-           Try to get a correct version.}%
-       \fi
-     \fi
-  \fi
-  \global\check at sum\m at ne}
-\newcount\check at sum           \check at sum  = \m at ne
-\newcount\bslash at cnt          \bslash at cnt = \z@
-\def\CheckSum#1{\@bsphack\global\check at sum#1\relax\@esphack}
-\def\step at checksum{\global\advance\bslash at cnt\@ne}
-\def\CharacterTable{\begingroup \CharTableChanges \character at table}
-\begingroup
-  \catcode`\~=11
-  \gdef\character at table#1{\def\used~table{#1}%
-      \ifx\used~table\default~table
-           \typeout{***************************}%
-           \typeout{* Character table correct *}%
-           \typeout{***************************}%
-      \else
-         \PackageError{doc}{Character table corrupted}
-                           {\the\wrong at table}
-         \show\default~table
-         \show\used~table
-      \fi
-      \endgroup}
-  \global\let\CharTableChanges\@empty
-  \makeatother
-  \gdef\default~table
-     {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         \~}
-\endgroup
-  \newhelp\wrong at table{Some of the ASCII characters are corrupted.^^J
-            I now \string\show\space you both tables for comparison.}
-\newif\ifcodeline at index \codeline at indexfalse
-\let\CodelineNumbered\codeline at indextrue
-\def\codeline at wrindex#1{\if at filesw
-     \begingroup
-        \set at display@protect
-        \immediate\write\@indexfile
-            {\string\indexentry{#1}%
-             {\number\c at CodelineNo}}%
-      \endgroup
-    \fi}
-\let\special at index = \@gobble
-\def\CodelineIndex{\makeindex
-                   \codeline at indextrue
-                   \let\special at index\codeline at wrindex}
-\def\PageIndex{\makeindex
-               \codeline at indexfalse
-               \let\special at index\index}
-\newcount\c at CodelineNo  \c at CodelineNo\z@
-\@ifundefined{theCodelineNo}
-  {\ifx\selectfont\undefined
-     \def\theCodelineNo{\rmfamily\scriptsize\arabic{CodelineNo}}%
-   \else
-     \def\theCodelineNo{\reset at font\scriptsize\arabic{CodelineNo}}%
-   \fi}
-  {}
-       \tolerance=1000\relax
-{ \catcode`\"=12
-  \global\mathcode`\\="705C \global\mathcode`\@="7040 }
-\@ifundefined{DocstyleParms}{}{\DocstyleParms}
- \let\DocstyleParms\relax
-\@ifundefined{AmSTeX}
-   {\def\AmSTeX{\leavevmode\hbox{$\mathcal A\kern-.2em\lower.376ex%
-        \hbox{$\mathcal M$}\kern-.2em\mathcal S$-\TeX}}}{}
-\@ifundefined{BibTeX}
-   {\def\BibTeX{{\rmfamily B\kern-.05em%
-    \textsc{i\kern-.025em b}\kern-.08em%
-    T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}}{}
-\@ifundefined{SliTeX}
-   {\def\SliTeX{{\rmfamily S\kern-.06emL\kern-.18em\raise.32ex\hbox
-                {\scshape i}\kern -.03em\TeX}}}{}
-\@ifundefined{PlainTeX}{\def\PlainTeX{\textsc{Plain}\kern2pt\TeX}}{}
-\@ifundefined{Web}{\def\Web{\textsc{Web}}}{}
-\def\MakePercentIgnore{\catcode`\%9\relax}
-\def\MakePercentComment{\catcode`\%14\relax}
-\def\DocInput#1{\MakePercentIgnore\input{#1}\MakePercentComment}
-\def\GetFileInfo#1{%
-  \def\filename{#1}%
-  \def\@tempb##1 ##2 ##3\relax##4\relax{%
-    \def\filedate{##1}%
-    \def\fileversion{##2}%
-    \def\fileinfo{##3}}%
-  \edef\@tempa{\csname ver@#1\endcsname}%
-  \expandafter\@tempb\@tempa\relax? ? \relax\relax}
-
-\ifdoc at hyperref
-  \let\PrintDescribeMacro \@empty
-  \let\PrintDescribeEnv   \@empty
-  \let\PrintMacroName     \@empty
-  \let\PrintEnvName       \@empty
-  \let\SpecialUsageIndex  \@empty
-  \let\SpecialEnvIndex    \@empty
-  \expandafter\let\expandafter\doc at eoph@@k\csname doc.sty-h@@k\endcsname
-  \RequirePackage{hypdoc}
-  \expandafter\let\csname doc.sty-h@@k\endcsname\doc at eoph@@k
-  \let\PrintDescribeMacro \relax
-  \let\PrintDescribeEnv   \relax
-  \let\PrintMacroName     \relax
-  \let\PrintEnvName       \relax
-  \def\doc at providetarget{\HD at target}
-  \def\doc at handleencap#1{\encapchar hdclindex{\the\c at HD@hypercount}{#1}}
-\else
-  \let\doc at providetarget\@empty
-  \def\doc at handleencap#1{\encapchar #1}
-  \def\hdclindex#1#2{\ifx\@nil#2\@nil\else\csname #2\expandafter\endcsname\fi}
-  \def\hdpindex   #1{\ifx\@nil#1\@nil\else\csname #1\expandafter\endcsname\fi}
-\fi
-
-
-\ExplSyntaxOn
-
-\long\def\@doc at env#1#2#3{
-  \endgroup
-  \clist_map_inline:nn {#3} { \@doc at env@{#1}{#2}{##1} }
-}
-
-\ExplSyntaxOff
-\long\def\@doc at env@#1#2#3{%
-  \topsep\MacroTopsep
-  \trivlist
-    \edef\saved at macroname{\string#3}%
-    \if #1%
-      \edef\saved at indexname{\expandafter\@gobble\saved at macroname}%
-      \expandafter\ifx
-                  \csname Code#2Index\endcsname
-                  \CodeMacroIndex
-      \else
-        \record at index@type at save
-          {\saved at indexname}{#2}%
-      \fi
-    \else
-      \let\saved at indexname\saved at macroname
-    \fi
-    \def\makelabel##1{\llap{##1}}%
-    \if at inlabel
-      \let\@tempa\@empty
-      \count@\macro at cnt
-      \loop\ifnum\count@>\z@
-        \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m at ne
-      \repeat
-      \edef\makelabel##1{\llap{\vtop to\baselineskip{\@tempa\hbox{##1}\vss}}}%
-      \advance\macro at cnt\@ne
-    \else
-      \macro at cnt\@ne
-    \fi
-    \ifdoc at noprint
-      \item
-    \else
-      \edef\@tempa{%
-        \noexpand\item[%
-        \noexpand\doc at providetarget
-        \noexpand\strut
-        \noexpand\@nameuse{Print#2Name}{\saved at macroname}]}%
-      \@tempa
-    \fi
-    \ifdoc at noindex\else
-      \global\advance\c at CodelineNo\@ne
-      \csname SpecialMain#2Index\expandafter\endcsname
-        \expandafter{\saved at macroname}\nobreak
-      \global\advance\c at CodelineNo\m at ne
-    \fi
-    \if#1\expandafter\DoNotIndex \expandafter {\saved at macroname}\fi
-    \ignorespaces}
-
-\def\doc at env#1#2[#3]{%
-  \@nameuse{doc at noprint\doc at noprintdefault}%
-  \@nameuse{doc at noindex\doc at noindexdefault}%
-  \setkeys{doc}{#3}%
-  \begingroup
-    \ifdoc at outer
-      \catcode`\\12
-    \fi
-    \MakePrivateLetters
-    \@doc at env{#1}{#2}%
-}
-
-\def\@doc at describe#1#2{%
-    \ifdoc at noprint\else
-      \marginpar{\raggedleft
-                 \strut
-                 \doc at providetarget
-                 \@nameuse{PrintDescribe#1}{#2}}%
-    \fi
-    \ifdoc at noindex\else
-      \@nameuse{Special#1Index}{#2}%
-    \fi
-  \@esphack
-  \endgroup
-  \ignorespaces}
-\def\doc at describe#1[#2]{%
-  \leavevmode\@bsphack
-    \setkeys{doc}{#2}%
-      \@doc at describe{#1}}
-\@ifundefined{temptokenb}{\newtoks\@temptokenb}{}
-\def\doc at createspecialindexes#1#2#3{%
-  \@temptokena{\space (#2)}%
-  \@temptokenb{#3:}%
-  \@nameedef{SpecialMain#1Index}##1{%
-    \noexpand\@bsphack
-  \ifdoc at toplevel
-    \noexpand\special at index{##1\noexpand\actualchar
-    {\string\ttfamily\space##1}%
-    \ifx\@nil#2\@nil\else \the\@temptokena \fi
-    \noexpand\encapchar main}%
-  \fi
-  \ifx\@nil#3\@nil\else
-    \noexpand\special at index{\the\@temptokenb\noexpand\levelchar
-      ##1\noexpand\actualchar{\string\ttfamily\space##1}%
-      \noexpand\encapchar main}%
-  \fi
-    \noexpand\@esphack}%
-  \@nameedef{Special#1Index}##1{%
-    \noexpand\@bsphack
-  \ifdoc at toplevel
-    \noexpand\doc at providetarget
-    \noexpand\index{##1\noexpand\actualchar{\string\ttfamily\space##1}%
-    \ifx\@nil#2\@nil\else \the\@temptokena \fi
-           \noexpand\doc at handleencap{usage}}%
-  \fi
-  \ifx\@nil#3\@nil\else
-    \noexpand\index{\the\@temptokenb\noexpand\levelchar
-       ##1\noexpand\actualchar{\string\ttfamily\space##1}%
-           \noexpand\doc at handleencap{usage}}%
-  \fi
-    \noexpand\@esphack}}
-\def\doc at createspecialmacrolikeindexes#1#2#3{%
-  \@temptokena{\space (#2)}%
-  \@temptokenb{#3:}%
-  \@nameedef{Code#1Index}##1##2{%
-    \noexpand\@SpecialIndexHelper@##2\noexpand\@nil
-    \noexpand\@bsphack
-  \noexpand\ifdoc at noindex\noexpand\else
-    \ifdoc at toplevel
-      \noexpand\special at index{\noexpand\@gtempa\noexpand\actualchar
-\string\verb% % to fool emacs highlighting
-\noexpand\quotechar*\noexpand\verbatimchar
-\noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar
-\ifx\@nil#2\@nil\else \the\@temptokena \fi
-\noexpand\encapchar ##1}%
-    \fi
-    \ifx\@nil#3\@nil\else
-      \noexpand\special at index{\the\@temptokenb\noexpand\levelchar
-\noexpand\@gtempa\noexpand\actualchar
-\string\verb% % to fool emacs highlighting
-\noexpand\quotechar*\noexpand\verbatimchar
-\noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar
-\noexpand\encapchar ##1}%
-    \fi
-  \noexpand\fi
-    \noexpand\@esphack}%
-  \@nameedef{SpecialMain#1Index}##1{%
-    \expandafter\noexpand\csname Code#1Index\endcsname
-        {main}{##1}}%
-  \@nameedef{Special#1Index}##1{%
-    \noexpand\@SpecialIndexHelper@##1\noexpand\@nil
-    \noexpand\@bsphack
-  \noexpand\ifdoc at noindex\noexpand\else
-    \ifdoc at toplevel
-      \noexpand\doc at providetarget
-      \noexpand\index{\noexpand\@gtempa\noexpand\actualchar
-\string\verb% % to fool emacs highlighting
-\noexpand\quotechar*\noexpand\verbatimchar
-\noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar
-\ifx\@nil#2\@nil\else \the\@temptokena \fi
-\noexpand\doc at handleencap{usage}}%
-    \fi
-    \ifx\@nil#3\@nil\else
-      \noexpand\index{\the\@temptokenb\noexpand\levelchar
-\noexpand\@gtempa\noexpand\actualchar
-\string\verb% % to fool emacs highlighting
-\noexpand\quotechar*\noexpand\verbatimchar
-\noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar
-\noexpand\doc at handleencap{usage}}%
-    \fi
-  \noexpand\fi
-    \noexpand\@esphack}}
-
-\def\doc at createdescribe#1{%
-  \@namedef{Describe#1}{%
-    \begingroup
-      \MakePrivateLetters
-      \@ifnextchar[%]
-      {\doc at describe{#1}}{\doc at describe{#1}[]}}}
-\def\doc at createenv#1#2#3{%
-  \@namedef{#3}{%
-    \@ifnextchar[%]
-    {\doc at env{#1}{#2}}{\doc at env{#1}{#2}[]}}%
-  \@namedef{end#3}{\endtrivlist}%
-}
-
-\def\@nameedef#1{\expandafter\edef\csname #1\endcsname}
-
-
-\def\doc at declareerror#1#2{%
-   \PackageError{doc}{Doc element '#1/#2' already defined?\@gobble}%
-      {There is already a definition for
-       '\string\Print#1Name',\MessageBreak
-       '\string\PrintDescribe#1'
-       or the environment '#2'.\MessageBreak
-       Maybe you are overwriting something by mistake!\MessageBreak
-       Otherwise use '\string\RenewDocElement' instead.}%
-}
-
-\def\doc at notdeclarederror#1#2{%
-   \PackageError{doc}{Doc element '#1/#2' unknown}%
-      {I expected an existing definition for
-       '\string\Print#1Name',\MessageBreak
-       '\string\PrintDescribe#1' and
-       the environment '#2' but\MessageBreak
-       not all of them are defined.\MessageBreak
-       Maybe you wanted to use
-       '\string\NewDocElement'?}%
-}
-\newcommand\NewDocElement[3][]{%
-  \@ifundefined{Print#2Name}%
-      {\@ifundefined{PrintDescribe#2}%
-           {\@ifundefined{#3}%
-               {\@ifundefined{end#3}%
-                    {\@NewDocElement{#1}}%
-                    \doc at declareerror
-               }\doc at declareerror
-           }\doc at declareerror
-      }\doc at declareerror
-  {#2}{#3}%
-}
-\newcommand\RenewDocElement[3][]{%
-  \@ifundefined{Print#2Name}\doc at notdeclarederror
-      {\@ifundefined{PrintDescribe#2}\doc at notdeclarederror
-           {\@ifundefined{#3}\doc at notdeclarederror
-               {\@ifundefined{end#3}\doc at notdeclarederror
-                    {\@NewDocElement{#1}}%
-               }%
-           }%
-      }%
-  {#2}{#3}%
-}
-\def\@NewDocElement#1#2#3{%
-  \doc at macrolikefalse
-  \doc at topleveltrue
-  \def\doc at idxtype{#3}%
-  \def\doc at idxgroup{#3s}%
-  \let\doc at printtype\@empty
-  \setkeys{doc}{#1}%
-  \ifx\doc at printtype\@empty
-    \@temptokena{}%
-  \else
-    \@temptokena\expandafter{\expandafter
-         \textnormal\expandafter{\expandafter
-         \space\expandafter
-         (\doc at printtype)}}%
-  \fi
-  \@nameedef{Print#2Name}##1{%
-     {\noexpand\MacroFont
-      \ifdoc at macrolike
-         \noexpand\string
-      \fi
-      ##1%
-      \the\@temptokena
-     }}%
-  \expandafter\let\csname PrintDescribe#2\expandafter\endcsname
-                  \csname Print#2Name\endcsname
-  \edef\doc at expr{%
-     \ifdoc at macrolike
-       \noexpand\doc at createspecialmacrolikeindexes
-     \else
-       \noexpand\doc at createspecialindexes
-     \fi
-     {#2}%
-    }%
-   \expandafter\expandafter\expandafter
-   \doc at expr
-   \expandafter\expandafter\expandafter
-     {\expandafter\doc at idxtype\expandafter}\expandafter
-     {\doc at idxgroup}%
-  \doc at createdescribe{#2}%
-    \ifdoc at macrolike
-      \doc at createenv{TT}{#2}{#3}%
-    \else
-      \doc at createenv{TF}{#2}{#3}%
-    \fi
-}
-
-
-\NewDocElement[macrolike = true ,
-                idxtype   = ,
-                idxgroup  = ,
-                printtype =
-               ]{Macro}{macro}
-
-\def\SpecialMainIndex{\SpecialMainMacroIndex}
-
-\def\SpecialUsageIndex{\SpecialMacroIndex}
-
-\def\SpecialIndex     {\CodeMacroIndex{code}}
-
-\NewDocElement[macrolike = false ,
-                idxtype   = env.  ,
-                idxgroup  = environments ,
-                printtype = \textit{env.}
-               ]{Env}{environment}
-
-
-\DeclareRobustCommand\cs[1]{\texttt{\bslash #1}}
-
-\endinput
-%%
-%% End of file `doc-v3beta.sty'.

Modified: trunk/Master/texmf-dist/tex/latex/base/doc.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/doc.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/doc.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,15 +42,126 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}[1994/12/01]
- \ProvidesPackage{doc}
-  [2021/10/04 v2.1n
-   Standard LaTeX documentation package (FMi)]
+
+\providecommand\DeclareRelease[3]{}
+\providecommand\DeclareCurrentRelease[2]{}
+
+\DeclareRelease{v2.1g}{2016-02-15}
+                      {doc-2016-02-15.sty}
+\DeclareRelease{v2}{2021-06-01}
+                   {doc-2021-06-01.sty}
+\DeclareCurrentRelease{v3}{2022-06-01}
+
+\ProvidesPackage{doc}
+  [2022/06/08 v3.0j
+   Standard LaTeX documentation package V3 (FMi)]
 %%
 %% Package `doc' to use with LaTeX 2e
-%% Copyright (C) 1989-2020 Frank Mittelbach, all rights reserved.
+%% Copyright (C) 1989-2022 Frank Mittelbach, all rights reserved.
+
+
+
+
+
 \@ifundefined{macro at cnt}{}{\endinput}
 \catcode`\^^A=14
-\AtBeginDocument{\catcode`\^^A=14\relax}
+\catcode`\^^X=14
+\AtBeginDocument{\catcode`\^^A=14\relax\catcode`\^^X=14\relax}
+\ExplSyntaxOn
+\newif \ifdoc at noprint
+\newif \ifdoc at noindex
+\newif \ifdoc at hyperref \doc at hyperreftrue
+\newif \ifdoc at multicol \doc at multicoltrue
+\newif \ifdoc at debugshow
+\newif \ifdoc at reportchangedates
+\keys_define:nn {doc}
+  {
+    noprint  .choice:,
+    noprint / true  .code:n = { \legacy_if_set_true:n  { doc at noprint } },
+    noprint / false .code:n = { \legacy_if_set_false:n { doc at noprint } },
+    noprint  .default:n = { true },
+    noindex  .choice:,
+    noindex / true  .code:n = { \legacy_if_set_true:n  { doc at noindex } },
+    noindex / false .code:n = { \legacy_if_set_false:n { doc at noindex } },
+    noindex  .default:n = { true },
+    hyperref  .choice:,
+    hyperref / true  .code:n = { \legacy_if_set_true:n  { doc at hyperref } },
+    hyperref / false .code:n = { \legacy_if_set_false:n { doc at hyperref } },
+    hyperref  .default:n = { true },
+    nohyperref  .choice:,
+    nohyperref / true  .code:n = { \legacy_if_set_false:n  { doc at hyperref } },
+    nohyperref / false .code:n = { \legacy_if_set_true:n { doc at hyperref } },
+    nohyperref  .default:n = { true },
+    multicol  .choice:,
+    multicol / true  .code:n = { \legacy_if_set_true:n  { doc at multicol } },
+    multicol / false .code:n = { \legacy_if_set_false:n { doc at multicol } },
+    multicol  .default:n = { true },
+    nomulticol  .choice:,
+    nomulticol / true  .code:n = { \legacy_if_set_false:n  { doc at multicol } },
+    nomulticol / false .code:n = { \legacy_if_set_true:n { doc at multicol } },
+    nomulticol  .default:n = { true },
+    debugshow  .choice:,
+    debugshow / true  .code:n = { \legacy_if_set_true:n  { doc at debugshow } },
+    debugshow / false .code:n = { \legacy_if_set_false:n { doc at debugshow } },
+    debugshow  .default:n = { true },
+    reportchangedates  .choice:,
+    reportchangedates / true  .code:n = { \legacy_if_set_true:n  { doc at reportchangedates } },
+    reportchangedates / false .code:n = { \legacy_if_set_false:n { doc at reportchangedates } },
+    reportchangedates  .default:n = { true },
+  }
+\newif \ifdoc at toplevel \doc at topleveltrue
+\keys_define:nn {doc}
+  {
+    toplevel  .choice:,
+    toplevel / true  .code:n = { \legacy_if_set_true:n  { doc at toplevel } },
+    toplevel / false .code:n = { \legacy_if_set_false:n { doc at toplevel } },
+    toplevel  .default:n = { true },
+    notoplevel  .choice:,
+    notoplevel / true  .code:n = { \legacy_if_set_false:n  { doc at toplevel } },
+    notoplevel / false .code:n = { \legacy_if_set_true:n { doc at toplevel } },
+    notoplevel  .default:n = { true }
+  }
+\newif \ifdoc at macrolike
+\keys_define:nn {doc}
+  {
+    macrolike  .choice:,
+    macrolike / true  .code:n = { \legacy_if_set_true:n  { doc at macrolike } },
+    macrolike / false .code:n = { \legacy_if_set_false:n { doc at macrolike } },
+    macrolike  .default:n = { true },
+    envlike  .choice:,
+    envlike / true  .code:n = { \legacy_if_set_false:n  { doc at macrolike } },
+    envlike / false .code:n = { \legacy_if_set_true:n { doc at macrolike } },
+    envlike  .default:n = { true }
+  }
+
+\keys_define:nn { doc }
+  {
+    idxtype  .tl_set:N = \doc at idxtype,
+    idxgroup .tl_set:N = \doc at idxgroup,
+    printtype .tl_set:N = \doc at printtype
+  }
+\newif\ifdoc at outer
+\keys_define:nn {doc}
+  {
+    outer  .choice:,
+    outer / true  .code:n = { \legacy_if_set_true:n  { doc at outer } },
+    outer / false .code:n = { \legacy_if_set_false:n { doc at outer } },
+    outer  .default:n = { true },
+  }
+\ExplSyntaxOff
+\ProcessKeyOptions
+\newif\ifscan at allowed    \scan at allowedtrue
+\def\SetupDoc#1{%
+  \csname keys_set:nn\endcsname{doc}{#1}%
+    \edef\doc at noprintdefault{\ifdoc at noprint true\else false\fi}%
+  \ifdoc at noindex
+    \def\doc at noindexdefault{true}%
+    \scan at allowedfalse
+  \else
+    \def\doc at noindexdefault{false}%
+  \fi
+}
+\SetupDoc{}              % just save the default values
 \def\macrocode{\macro at code
    \frenchspacing \@vobeyspaces
    \xmacro at code}
@@ -181,6 +292,7 @@
 \endgroup
 \newcounter{StandardModuleDepth}
 \newcount \guard at level
+
 \@ifundefined{Module}{%
       \def\Module#1{\mod at math@codes$\langle\mathsf{#1}\rangle$}
   }{}
@@ -229,18 +341,10 @@
 |endgroup
 !%    \end{macrocode}
 \catcode`\!=12
-\def\DescribeMacro{\leavevmode\@bsphack
-   \begingroup\MakePrivateLetters\Describe at Macro}
-\def\Describe at Macro#1{\endgroup
-              \marginpar{\raggedleft\PrintDescribeMacro{#1}}%
-              \SpecialUsageIndex{#1}\@esphack\ignorespaces}
-\def\DescribeEnv{\leavevmode\@bsphack\begingroup\MakePrivateLetters
-  \Describe at Env}
-\def\Describe at Env#1{\endgroup
-              \marginpar{\raggedleft\PrintDescribeEnv{#1}}%
-              \SpecialEnvIndex{#1}\@esphack\ignorespaces}
+
 \reversemarginpar
 \setlength\marginparpush{0pt}  \setlength\marginparwidth{8pc}
+\setlength\marginparsep{\labelsep}
 {\catcode`\|=\z@ \catcode`\\=12
 |gdef|bslash{\}}
 \def\verbatim{\@beginparpenalty \predisplaypenalty \@verbatim
@@ -267,14 +371,12 @@
     \ttfamily \verb at eol@error \let\do\@makeother \dospecials
     \@ifstar{\@sverb}{\@vobeyspaces \frenchspacing \@sverb}}
 \let\verb at balance@group\@empty
-
 \def\verb at egroup{\global\let\verb at balance@group\@empty\egroup}
-
 \begingroup
   \obeylines%
   \gdef\verb at eol@error{\obeylines%
     \def^^M{\verb at egroup\@latex at error{%
-            \noexpand\verb ended by end of line}\@ehc}}%
+            \noexpand\verb command ended by end of line}\@ehc}}%
 \endgroup
 \def\verbatim at nolig@list{\do\`\do\<\do\>\do\,\do\'\do\-}
 \def\do at noligs#1{%
@@ -283,56 +385,7 @@
      \lccode`\~=`#1\relax
      \lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1}}}
 \newcount\macro at cnt \macro at cnt=0
-\def\macro{\begingroup
-   \catcode`\\12
-   \MakePrivateLetters \m at cro@ \iftrue}
-\def\environment{\begingroup
-   \catcode`\\12
-   \MakePrivateLetters \m at cro@ \iffalse}
-\long\def\m at cro@#1#2{\endgroup \topsep\MacroTopsep \trivlist
-  \edef\saved at macroname{\string#2}%
-  #1
-    \let\saved at indexname\saved at macroname
-  \else
-    \edef\saved at indexname{\expandafter\@gobble\string#2}%
-  \fi
-  \def\makelabel##1{\llap{##1}}%
-  \if at inlabel
-    \let\@tempa\@empty \count@\macro at cnt
-    \loop \ifnum\count@>\z@
-      \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m at ne \repeat
-    \edef\makelabel##1{\llap{\vtop to\baselineskip
-                               {\@tempa\hbox{##1}\vss}}}%
-    \advance \macro at cnt \@ne
-  \else  \macro at cnt\@ne  \fi
-  \edef\@tempa{\noexpand\item[%
-     #1%
-       \noexpand\PrintMacroName
-     \else
-       \noexpand\PrintEnvName
-     \fi
-     {\string#2}]}%
-  \@tempa
-  \global\advance\c at CodelineNo\@ne
-   #1%
-      \SpecialMainIndex{#2}\nobreak
-      \DoNotIndex{#2}%
-   \else
-      \SpecialMainEnvIndex{#2}\nobreak
-   \fi
-  \global\advance\c at CodelineNo\m at ne
-  \ignorespaces}
-\let\endmacro \endtrivlist
-\let\endenvironment\endmacro
 \newskip\MacroTopsep     \MacroTopsep = 7pt plus 2pt minus 2pt
-\@ifundefined{PrintMacroName}
-   {\def\PrintMacroName#1{\strut \MacroFont \string #1\ }}{}
-\@ifundefined{PrintDescribeMacro}
-   {\def\PrintDescribeMacro#1{\strut \MacroFont \string #1\ }}{}
-\@ifundefined{PrintDescribeEnv}
-   {\def\PrintDescribeEnv#1{\strut \MacroFont #1\ }}{}
-\@ifundefined{PrintEnvName}
-   {\def\PrintEnvName#1{\strut \MacroFont #1\ }}{}
 \begingroup
 \catcode`\~\active
 \gdef\SpecialEscapechar#1{%
@@ -360,7 +413,6 @@
       \def\next{\futurelet\next\macro at switch}%
    \else \let\next\@empty \fi
    \next}
-\newif\ifscan at allowed    \scan at allowedtrue
 \def\DisableCrossrefs{\@bsphack\scan at allowedfalse\@esphack}
 \def\EnableCrossrefs{\@bsphack\scan at allowedtrue
                      \def\DisableCrossrefs{\@bsphack\@esphack}\@esphack}
@@ -374,24 +426,10 @@
    \uccode`\&=\expandafter`\string#1%
    \uppercase{\def\x{\def\macro at namepart{&}}}%
    \expandafter\endgroup\x
-   \ifnot at excluded
-     \produce at index{#1}\fi
+     \maybe at index@short at macro\macro at namepart
     \scan at allowedfalse#1%
     \scan at allowedtrue }
 \endgroup
-\def\produce at index#1{%
-  \if\noexpand#1\special at escape@char
-     \scan at allowedfalse \it at is@a\special at escape@char \else
-     \if\noexpand#1\bslash \it at is@a\bslash \else
-       \if\noexpand#1\space \it at is@a\space \else
-         \ifx#1\par
-         \it at is@a\space \else
-         \ifx#1\relax \else
-           \if\noexpand#1\bgroup \LeftBraceIndex \else
-             \if\noexpand#1\egroup \RightBraceIndex \else
-               \if\noexpand#1\percentchar \PercentIndex \else
-                 \it at is@a{\string#1}%
-       \fi \fi \fi \fi \fi \fi \fi \fi}
 \def\macro at name#1{\edef\macro at namepart{\macro at namepart#1}%
      \futurelet\next\more at macroname}
 \def\more at macroname{\ifcat\noexpand\next a%
@@ -400,41 +438,166 @@
      \next}
 \def\macro at finish{%
   \macro at namepart
-  \ifnot at excluded
-     \edef\@tempa{\noexpand\SpecialIndex{\bslash\macro at namepart}}%
-     \@tempa  \fi}
-\def\DoNotIndex{\begingroup \MakePrivateLetters
-    \catcode`\\12
-    \do at not@index}
-\long\def\do at not@index#1{%
-    \endgroup
-    \addto at hook\index at excludelist{#1,}}
-\long\def\addto at hook#1#2{#1\expandafter{\the#1#2}}
-\newtoks\index at excludelist
-\index at excludelist{}
-\begingroup
-\catcode`\|=0%
-\catcode`\\=12
-|gdef|ifnot at excluded{|expandafter
-     |expanded at notin|expandafter{|expandafter
-     \|macro at namepart,}{|the|index at excludelist}}
-|endgroup
-\def\expanded at notin#1#2{%
- \def\in@@##1#1##2##3\in@@{%
-  \ifx\expanded at notin##2}%
- \expandafter\in@@#2#1\expanded at notin\in@@}
+  \maybe at index@macro \macro at namepart
+}
+
+\ExplSyntaxOn
+\seq_new:N  \l__doc_donotindex_seq
+\prop_new:N \g__doc_idxtype_prop
+\cs_new:Npn\__doc_trace:x {
+  \legacy_if:nTF{ doc at debugshow }{ \iow_term:x } { \use_none:n }
+}
+\cs_new:Npn \doc_dont_index:n {
+  \group_begin:
+    \MakePrivateLetters
+    \__doc_dont_index:n
+}
+\cs_new:Npn \__doc_dont_index:n #1 {
+  \group_end:
+  \__doc_trace:x{Disable~ indexing~ for~ '\tl_to_str:n{#1}' }
+  \clist_map_function:nN {#1} \__doc_dont_index_aux:n
+}
+\cs_new:Npn \__doc_dont_index_aux:n #1 {
+  \seq_put_right:Nx \l__doc_donotindex_seq {\expandafter\@gobble \string#1}
+}
+\cs_set_eq:NN \DoNotIndex \doc_dont_index:n
+\def \ShowIndexingState {
+  \__doc_trace:x{Show~ doc~ indexing~ state:}
+  \seq_show:N  \l__doc_donotindex_seq
+  \prop_show:N \g__doc_idxtype_prop
+}
+
+\cs_new:Npn \__doc_idxtype_put:Nn #1#2 {
+  \exp_args:Nx \__doc_idxtype_put:nn { \cs_to_str:N #1 }{#2}
+  \protected at write\@auxout{}
+     {\string\RecordIndexTypeAux {\string#1 }{#2} }
+}
+\cs_new:Npn \RecordIndexTypeAux #1#2 {
+  \exp_args:Nx \__doc_idxtype_put:nn { \cs_to_str:N #1 }{#2}
+}
+\AtEndDocument{
+  \cs_set_eq:NN \RecordIndexTypeAux \use_none:nn
+}
+\cs_set_eq:NN \RecordIndexType \__doc_idxtype_put:Nn
+\cs_new:Npn \__doc_idxtype_put_scan:nn #1#2 {
+  \exp_args:Nf \__doc_idxtype_put:nn { \tl_to_str:n {#1} }{#2}
+  \protected at write\@auxout{}
+     {\string\RecordIndexTypeAux {\bslash #1 }{#2} }
+}
+\cs_generate_variant:Nn \__doc_idxtype_put_scan:nn {o}
+\cs_set_eq:NN \record at index@type at save \__doc_idxtype_put_scan:on
+\cs_new:Npn \__doc_idxtype_put:nn #1#2 {
+  \exp_args:NNf
+  \seq_if_in:NnTF \l__doc_donotindex_seq {\tl_to_str:n{#1}}
+     {
+       \__doc_trace:x{Not~ recording~ index~ type~ for~ '\bslash #1' }
+     }
+     {
+       \__doc_trace:x{Recording~ index~ type~ for~ '\bslash #1' ~ as~ #2 }
+       \prop_gput:Nnn \g__doc_idxtype_prop {#1}{#2}
+     }
+}
+\cs_new:Npn \exp_args:co #1#2
+   { \cs:w #1 \exp_after:wN \cs_end:\exp_after:wN {#2} }
+\cs_generate_variant:Nn \tl_to_str:n {o}
+
+\cs_new:Npn \__doc_maybe_index:o #1 {
+  \exp_args:Nf \__doc_maybe_index_aux:nN { \tl_to_str:o {#1} }
+                                         \SpecialIndex
+}
+\cs_set_eq:NN \maybe at index@macro \__doc_maybe_index:o
+\cs_new:Npn \__doc_maybe_index_short:o #1 {
+  \exp_args:Nf \__doc_maybe_index_aux:nN { \tl_to_str:o {#1} }
+                                         \SpecialShortIndex
+}
+\cs_set_eq:NN \maybe at index@short at macro \__doc_maybe_index_short:o
+\cs_new:Npn \__doc_maybe_index_aux:nN #1#2 {
+  \__doc_trace:x{Searching~ for~ '\bslash #1'}
+  \seq_if_in:NnTF \l__doc_donotindex_seq {#1}
+    {
+     \__doc_trace:x{Not~ indexing~ '\bslash #1' }
+    }
+    {
+     \prop_get:NnNTF \g__doc_idxtype_prop {#1} \l__doc_idxtype_tl
+       {
+        \exp_args:Ncno \__doc_maybe_index_aux:Nnn
+              { Code \tl_use:N \l__doc_idxtype_tl Index }
+              {code} {\bslash #1}
+        }
+        {
+          \__doc_trace:x{Indexing~ '\bslash #1'\space (\string #2)}
+          \exp_args:No #2 {\bslash #1}
+        }
+    }
+}
+\cs_new:Npn \SpecialShortIndex #1 {
+    \@SpecialIndexHelper@ #1\@nil
+  \@bsphack
+  \ifdoc at noindex \else
+    \str_case_e:nnF {\@gtempa }
+        {
+          {\cs_to_str:N \^^M } {\def\reserved at a{ \string \space \actualchar }
+                                \def\reserved at b { \space }
+                                \let\reserved at c \@empty                          }
+          { }                  {\def\reserved at a{ \string \space \actualchar }
+                                \def\reserved at b { \space }
+                                \let\reserved at c \@empty                          }
+          {\c_left_brace_str} { \def\reserved at a{ \bgroup \actualchar }
+                                \def\reserved at b { \c_left_brace_str }
+                                \def\reserved at c { \noexpand\iffalse
+                                                  \c_right_brace_str
+                                                  \noexpand\fi }                 }
+          {\c_right_brace_str} { \def\reserved at a{ \egroup \actualchar
+                                                  \noexpand\iffalse
+                                                    \c_left_brace_str
+                                                  \noexpand\fi }
+                                 \def\reserved at b { \c_right_brace_str }
+                                 \let\reserved at c \@empty                         }
+          {\verbatimchar}  { \def\reserved at a{ \quotechar\verbatimchar
+                                              \actualchar }
+                             \let\reserved at b \@empty
+                             \def\reserved at c
+                                 { \string\texttt{\string\string\verbatimchar} } }
+        }
+        { \def\reserved at a {\quotechar \@gtempa \actualchar }
+          \def\reserved at b {\quotechar \@gtempa  }
+          \let\reserved at c \@empty                             }
+    \special at index {
+    \reserved at a
+    \string\verb
+    \quotechar *\verbatimchar \quotechar \bslash
+    \reserved at b
+    \verbatimchar
+    \reserved at c
+    \encapchar code}
+  \fi
+  \@esphack
+}
+
+\cs_new:Npn \__doc_maybe_index_aux:Nnn #1#2#3 {
+    \cs_if_exist:NTF #1
+      {
+        \__doc_trace:x{Indexing~ '#3'\space as~
+                       \tl_use:N \l__doc_idxtype_tl }
+        #1{#2}{#3}
+      }
+      {
+        \PackageError{doc}{Doc~ element~
+           '\tl_use:N \l__doc_idxtype_tl'~ unknown}%
+
+          {When~ using~ '\string\RecordIndexType'~ the~ type~ must~
+           be~ known~\MessageBreak
+           to~ the~ system,~ i.e.,~ declared~ via~
+           '\string\NewDocElement'\MessageBreak
+           before~ it~ can~ be~ used~ in~ indexing.}
+     }
+}
+\ExplSyntaxOff
 \@ifundefined{actualchar}{\def\actualchar{=}}{}
 \@ifundefined{quotechar}{\def\quotechar{!}}{}
 \@ifundefined{levelchar}{\def\levelchar{>}}{}
 \@ifundefined{encapchar}{\def\encapchar{|}}{}
 \@ifundefined{verbatimchar}{\def\verbatimchar{+}}{}
-\def\SpecialIndex#1{\@bsphack\special at index{\expandafter\@gobble
-                                      \string#1\actualchar
-      \string\verb\quotechar*\verbatimchar\string#1\verbatimchar}%
-    \@esphack}
-
-\def\SpecialMainIndex#1{\@bsphack\SpecialIndex@{#1}{\encapchar main}%
-                        \@esphack}
 \begingroup
  \catcode`\|=0
  \catcode`\\=12
@@ -448,75 +611,43 @@
      |endgroup
    |fi}
 |endgroup
-\def\SpecialIndex@#1#2{%
-   \@SpecialIndexHelper@#1\@nil
-   \def\@tempb{ }%
-   \ifcat \@tempb\@gtempa
-      \special at index{\quotechar\space\actualchar
-                     \string\verb\quotechar*\verbatimchar
-                     \quotechar\bslash\quotechar\space\verbatimchar#2}%
-   \else
-     \def\@tempb##1##2\relax{\ifx\relax##2\relax
-          \def\@tempc{\special at index{\quotechar##1\actualchar
-                      \string\verb\quotechar*\verbatimchar
-                      \quotechar\bslash\quotechar##1\verbatimchar#2}}%
-        \else
-          \def\@tempc{\special at index{##1##2\actualchar
-                       \string\verb\quotechar*\verbatimchar
-                       \bslash##1##2\verbatimchar#2}}%
-        \fi}%
-     \expandafter\@tempb\@gtempa\relax
-     \@tempc
-   \fi}
-\def\SpecialMainEnvIndex#1{\@bsphack\special at index{%
-                                      #1\actualchar
-                                      {\string\ttfamily\space#1}
-                                         (environment)%
-                                      \encapchar main}%
-    \special at index{environments:\levelchar#1\actualchar{%
-                   \string\ttfamily\space#1}\encapchar
-           main}\@esphack}
-\def\SpecialUsageIndex#1{\@bsphack
-   {\let\special at index\index\SpecialIndex@{#1}{\encapchar usage}}%
-   \@esphack}
-\def\SpecialEnvIndex#1{\@bsphack
-    \index{#1\actualchar{\protect\ttfamily#1}
-           (environment)\encapchar usage}%
-    \index{environments:\levelchar#1\actualchar
-          {\protect\ttfamily#1}\encapchar usage}\@esphack}
-\def\SortIndex#1#2{\index{#1\actualchar#2}}
-\def\it at is@a#1{\special at index{\quotechar #1\actualchar
-                          \string\verb\quotechar*\verbatimchar
-                          \quotechar\bslash\quotechar#1\verbatimchar}}
+\def\SortIndex#1#2{%
+  \ifdoc at noindex\else
+    \index{#1\actualchar#2}%
+  \fi
+}
 \@ifundefined{LeftBraceIndex}{\def\LeftBraceIndex{%
-   \special at index{\bgroup\actualchar\string\verb\quotechar*\verbatimchar
-          \quotechar\bslash{\verbatimchar\string\iffalse}\string\fi}}}{}
+   \special at index{\bgroup\actualchar
+                  \string\verb% % to fool emacs highlighting
+                  \quotechar*\verbatimchar
+                  \quotechar\bslash{\verbatimchar\string\iffalse}\string\fi}}}{}
 
 \@ifundefined{RightBraceIndex}{\def\RightBraceIndex{%
- \special at index{\egroup\actualchar\string\iffalse{\string\fi\string\verb
+ \special at index{\egroup\actualchar\string\iffalse{\string\fi
+           \string\verb% % to fool emacs highlighting
            \quotechar*\verbatimchar\quotechar\bslash}\verbatimchar}}}{}
 \@ifundefined{PercentIndex}
   {\def\PercentIndex{\it at is@a\percentchar}}{}
 \def\OldMakeindex{\def\PercentIndex{%
-    \special at index{\quotechar\percentchar\actualchar\string\verb
+    \special at index{\quotechar\percentchar\actualchar
+           \string\verb% % to fool emacs highlighting
            \quotechar*\verbatimchar\quotechar\bslash
            \percentchar\percentchar\verbatimchar}}}
 {\catcode`\%=12 \gdef\percentchar{%}}
-\newif\ifhave at multicol
-\IfFileExists{multicol.sty}{\have at multicoltrue
-                            \RequirePackage{multicol}%
-                           }{}
+\def\it at is@a#1{\special at index{\quotechar #1\actualchar
+                          \string\verb% % to fool emacs highlighting
+                          \quotechar*\verbatimchar
+                          \quotechar\bslash\quotechar#1\verbatimchar}}
 
 \newdimen\IndexMin         \IndexMin       = 80pt
 \newcount\c at IndexColumns   \c at IndexColumns = 3
-\ifhave at multicol
+\ifdoc at multicol
+  \RequirePackage{multicol}
   \renewenvironment{theindex}
     {\begin{multicols}\c at IndexColumns[\index at prologue][\IndexMin]%
       \IndexParms \let\item\@idxitem \ignorespaces}%
     {\end{multicols}}
 \else
-  \typeout{Can't find multicol.sty -- will use normal index layout if
-     necessary.}
   \def\theindex{\@restonecoltrue\if at twocolumn\@restonecolfalse\fi
     \columnseprule \z@  \columnsep 35\p@
     \twocolumn[\index at prologue]%
@@ -556,13 +687,15 @@
        \def\indexspace{\par\vspace{10pt plus 2pt minus 3pt}}%
       }}{}
 \def\efill{\hfill\nopagebreak}%
-\def\dotfill{\leaders\hbox to.6em{\hss .\hss}\hskip\z@ plus  1fill\kern\z@}%
-\def\dotfil{\leaders\hbox to.6em{\hss .\hss}\hfil\kern\z@}%
-\def\pfill{\unskip~\dotfill\penalty500\strut\nobreak
-               \dotfil~\ignorespaces}%
+\def\pfill{\unskip~%
+           \leaders\hbox to.6em{\hss .\hss}\hfill
+           \penalty500\strut\nobreak
+           \leaders\hbox to.6em{\hss .\hss}\hfil
+           ~\ignorespaces}%
 \def\*{\leavevmode\lower.8ex\hbox{$\,\widetilde{\ }\,$}}
 \@ifundefined{main}{\def\main#1{\underline{#1}}}{}
 \@ifundefined{usage}{\def\usage#1{\textit{#1}}}{}
+\@ifundefined{code}{\def\code#1{#1}}{}
 \def\PrintIndex{\@input@{\jobname.ind}%
                 \global\let\PrintIndex\@empty}
 \def\changes{\@bsphack\begingroup\@sanitize
@@ -569,19 +702,23 @@
    \catcode`\\\z@ \catcode`\ 10 \MakePercentIgnore
    \changes@}
 \def\changes@#1#2#3{%
-  \protected at edef\@tempa{\noexpand\glossary{#1\levelchar
-                                 \ifx\saved at macroname\@empty
-                                   \space
-                                   \actualchar
-                                   \generalname
-                                 \else
-                                   \saved at indexname
-                                   \actualchar
-                                   \string\verb\quotechar*%
-                                   \verbatimchar\saved at macroname
-                                   \verbatimchar
-                                 \fi
-                                 :\levelchar #3}}%
+  \protected at edef\@tempa{\noexpand\glossary{#1%
+                   \ifdoc at reportchangedates
+                     \space -- #2\fi
+                   \levelchar
+                   \ifx\saved at macroname\@empty
+                      \quotechar!%
+                      \actualchar
+                      \generalname
+                   \else
+                      \saved at indexname
+                      \actualchar
+                      \string\verb% % to fool emacs highlighting
+                      \quotechar*%
+                      \verbatimchar\saved at macroname
+                      \verbatimchar
+                   \fi
+                   :\levelchar #3}}%
   \@tempa\endgroup\@esphack}
 \def\saved at macroname{}
 \def\saved at indexname{}
@@ -589,7 +726,7 @@
 \let\RecordChanges\makeglossary
 \newdimen\GlossaryMin         \GlossaryMin       = 80pt
 \newcount\c at GlossaryColumns   \c at GlossaryColumns = 2
-\ifhave at multicol
+\ifdoc at multicol
   \newenvironment{theglossary}{%
     \begin{multicols}\c at GlossaryColumns
                      [\glossary at prologue][\GlossaryMin]%
@@ -618,15 +755,16 @@
 \def\PrintChanges{\@input@{\jobname.gls}%
                   \global\let\PrintChanges\@empty}
 \newcommand\AlsoImplementation{%
-   \long\def\StopEventually##1{\@bsphack\gdef\Finale{##1%
+   \long\def\MaybeStop##1{\@bsphack\gdef\Finale{##1%
                   \check at checksum}%
               \init at checksum
               \@esphack}%
          }
 \AlsoImplementation
-\def\OnlyDescription{\@bsphack\long\def\StopEventually##1{%
+\def\OnlyDescription{\@bsphack\long\def\MaybeStop##1{%
            ##1\endinput}\@esphack}
 \let\Finale\relax
+\def\StopEventually{\MaybeStop}
 \ifx\l at nohyphenation\undefined
   \newlanguage\l at nohyphenation
 \fi
@@ -682,13 +820,20 @@
     \endgroup
     \global\catcode`#1\active
   \else
-    \@shortvrbinfo\@empty{#1 already}{\@empty\verb(*)}%
+    \@shortvrbinfo\@empty{#1 already}%
+                         {\@empty\verb% % to fool emacs highlighting
+                          (*)}%
   \fi}
 \def\DeleteShortVerb#1{%
   \expandafter\ifx\csname cc\string#1\endcsname\relax
-    \@shortvrbinfo\@empty{#1 not}{\@empty\verb(*)}%
+    \@shortvrbinfo\@empty{#1 not}%
+                         {\@empty\verb% % to fool emacs highlighting
+                          (*)}%
   \else
-    \@shortvrbinfo{Deleted }{#1 as}{\@empty\verb(*)}%
+    \@shortvrbinfo{Deleted }{#1 as}%
+                            {\@empty\verb% % to fool emacs
+                                           % highlighting
+                            (*)}%
     \rem at special{#1}%
     \global\catcode`#1\csname cc\string#1\endcsname
     \global \expandafter\let \csname cc\string#1\endcsname \relax
@@ -718,10 +863,6 @@
       \ifnum`#1=`##1 \else \noexpand\@makeother\noexpand##1\fi}%
     \xdef\@sanitize{\@sanitize}%
   \endgroup}
-\def\MakeShortverb{\typeout{*** Switch to \noexpand\MakeShortVerb
-                         syntax, this is obsolete ***}\MakeShortVerb}
-\def\DeleteShortverb{\typeout{*** Switch to \noexpand\DeleteShortVerb
-                         syntax, this is obsolete ***}\DeleteShortVerb}
 \def\init at checksum{\relax
     \global\bslash at cnt\z@}
 \def\check at checksum{\relax
@@ -787,9 +928,13 @@
 \newif\ifcodeline at index \codeline at indexfalse
 \let\CodelineNumbered\codeline at indextrue
 \def\codeline at wrindex#1{\if at filesw
+     \begingroup
+        \set at display@protect
         \immediate\write\@indexfile
             {\string\indexentry{#1}%
-            {\number\c at CodelineNo}}\fi}
+             {\number\c at CodelineNo}}%
+      \endgroup
+    \fi}
 \let\special at index = \@gobble
 \def\CodelineIndex{\makeindex
                    \codeline at indextrue
@@ -833,6 +978,353 @@
     \def\fileinfo{##3}}%
   \edef\@tempa{\csname ver@#1\endcsname}%
   \expandafter\@tempb\@tempa\relax? ? \relax\relax}
+
+\AddToHook{begindocument/before}[doc/hyperref]{%
+ \ifdoc at hyperref
+  \expandafter\let\expandafter\doc at eoph@@k\csname doc.sty-h@@k\endcsname
+  \RequirePackage{hypdoc}
+  \expandafter\let\csname doc.sty-h@@k\endcsname\doc at eoph@@k
+  \let\PrintDescribeMacro \@@PrintDescribeMacro
+  \let\PrintDescribeEnv \@@PrintDescribeEnv
+  \let\PrintMacroName \@@PrintMacroName
+  \let\PrintEnvName \@@PrintEnvName
+  \let\SpecialUsageIndex \@@SpecialUsageIndex
+  \let\SpecialEnvIndex \@@SpecialEnvIndex
+  \let\SortIndex \@@SortIndex
+  \let\DescribeMacro \@@DescribeMacro
+  \let\DescribeEnv \@@DescribeEnv
+  \ifx\special at index\@gobble  % do we write index entries at all?
+  \else
+    \ifcodeline at index
+      \let\special at index\HD at codeline@wrindex
+    \else
+      \let\special at index\HD at page@wrindex
+    \fi
+  \fi
+  \AddToHook{class/amsdtx/after}{%
+     \pdfstringdefDisableCommands{\let\env\@empty }}%
+  \def\doc at providetarget{\HD at target}%
+  \def\doc at handleencap#1{\encapchar hdclindex{\the\c at HD@hypercount}{#1}}%
+ \else
+  \let\doc at providetarget\@empty
+  \def\doc at handleencap#1{\encapchar #1}%
+  \def\hdclindex#1#2{\ifx\@nil#2\@nil\else\csname #2\expandafter\endcsname\fi}%
+  \def\hdpindex   #1{\ifx\@nil#1\@nil\else\csname #1\expandafter\endcsname\fi}%
+\fi
+}
+
+\ExplSyntaxOn
+\long\def\@doc at env#1#2#3{
+  \endgroup
+  \clist_map_inline:nn {#3} { \@doc at env@{#1}{#2}{##1} }
+}
+
+\ExplSyntaxOff
+\long\def\@doc at env@#1#2#3{%
+  \topsep\MacroTopsep
+  \trivlist
+    \edef\saved at macroname{\string#3}%
+    \if #1%
+      \edef\saved at indexname{\expandafter\@gobble\saved at macroname}%
+      \expandafter\ifx
+                  \csname Code#2Index\endcsname
+                  \CodeMacroIndex
+      \else
+        \record at index@type at save
+          {\saved at indexname}{#2}%
+      \fi
+    \else
+      \let\saved at indexname\saved at macroname
+    \fi
+    \def\makelabel##1{\llap{##1}}%
+    \if at inlabel
+      \let\@tempa\@empty
+      \count@\macro at cnt
+      \loop\ifnum\count@>\z@
+        \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m at ne
+      \repeat
+      \edef\makelabel##1{\llap{\vtop to\baselineskip{\@tempa\hbox{##1}\vss}}}%
+      \advance\macro at cnt\@ne
+    \else
+      \macro at cnt\@ne
+    \fi
+    \ifdoc at noprint
+      \item
+    \else
+      \edef\@tempa{%
+        \noexpand\item[%
+        \noexpand\doc at providetarget
+        \noexpand\strut
+        \noexpand\@nameuse{Print#2Name}{\saved at macroname}]}%
+      \@tempa
+    \fi
+    \ifdoc at noindex\else
+      \global\advance\c at CodelineNo\@ne
+      \csname SpecialMain#2Index\expandafter\endcsname
+        \expandafter{\saved at macroname}\nobreak
+      \global\advance\c at CodelineNo\m at ne
+    \fi
+    \if#1\expandafter\DoNotIndex \expandafter {\saved at macroname}\fi
+    \ignorespaces}
+\def\doc at env#1#2[#3]{%
+  \@nameuse{doc at noprint\doc at noprintdefault}%
+  \@nameuse{doc at noindex\doc at noindexdefault}%
+  \csname keys_set:nn\endcsname{doc}{#3}%
+  \begingroup
+    \ifdoc at outer
+      \catcode`\\12
+    \fi
+    \MakePrivateLetters
+    \@doc at env{#1}{#2}%
+}
+
+\def\@doc at describe#1#2{%
+    \ifdoc at noprint\else
+      \marginpar{\raggedleft
+                 \strut
+                 \doc at providetarget
+                 \@nameuse{PrintDescribe#1}{#2}}%
+    \fi
+    \ifdoc at noindex\else
+      \@nameuse{Special#1Index}{#2}%
+    \fi
+  \@esphack
+  \endgroup
+  \ignorespaces}
+\def\doc at describe#1[#2]{%
+  \leavevmode\@bsphack
+  \csname keys_set:nn\endcsname{doc}{#2}%
+  \@doc at describe{#1}}
+\@ifundefined{temptokenb}{\newtoks\@temptokenb}{}
+\def\doc at createspecialindexes#1#2#3{%
+  \@temptokena{\space (#2)}%
+  \@temptokenb{#3:}%
+  \@nameedef{SpecialMain#1Index}##1{%
+    \noexpand\@bsphack
+  \ifdoc at toplevel
+    \noexpand\special at index{##1\noexpand\actualchar
+    {\string\ttfamily\space##1}%
+    \ifx\@nil#2\@nil\else \the\@temptokena \fi
+    \noexpand\encapchar main}%
+  \fi
+  \ifx\@nil#3\@nil\else
+    \noexpand\special at index{\the\@temptokenb\noexpand\levelchar
+      ##1\noexpand\actualchar{\string\ttfamily\space##1}%
+      \noexpand\encapchar main}%
+  \fi
+    \noexpand\@esphack}%
+  \@nameedef{Special#1Index}##1{%
+    \noexpand\@bsphack
+  \ifdoc at toplevel
+    \noexpand\doc at providetarget
+    \noexpand\index{##1\noexpand\actualchar{\string\ttfamily\space##1}%
+    \ifx\@nil#2\@nil\else \the\@temptokena \fi
+           \noexpand\doc at handleencap{usage}}%
+  \fi
+  \ifx\@nil#3\@nil\else
+    \noexpand\index{\the\@temptokenb\noexpand\levelchar
+       ##1\noexpand\actualchar{\string\ttfamily\space##1}%
+           \noexpand\doc at handleencap{usage}}%
+  \fi
+    \noexpand\@esphack}}
+\def\doc at createspecialmacrolikeindexes#1#2#3{%
+  \@temptokena{\space (#2)}%
+  \@temptokenb{#3:}%
+  \@nameedef{Code#1Index}##1##2{%
+    \noexpand\@SpecialIndexHelper@##2\noexpand\@nil
+    \noexpand\@bsphack
+  \noexpand\ifdoc at noindex\noexpand\else
+    \ifdoc at toplevel
+      \noexpand\special at index{\noexpand\@gtempa\noexpand\actualchar
+\string\verb% % to fool emacs highlighting
+\noexpand\quotechar*\noexpand\verbatimchar
+\noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar
+\ifx\@nil#2\@nil\else \the\@temptokena \fi
+\noexpand\encapchar ##1}%
+    \fi
+    \ifx\@nil#3\@nil\else
+      \noexpand\special at index{\the\@temptokenb\noexpand\levelchar
+\noexpand\@gtempa\noexpand\actualchar
+\string\verb% % to fool emacs highlighting
+\noexpand\quotechar*\noexpand\verbatimchar
+\noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar
+\noexpand\encapchar ##1}%
+    \fi
+  \noexpand\fi
+    \noexpand\@esphack}%
+  \@nameedef{SpecialMain#1Index}##1{%
+    \expandafter\noexpand\csname Code#1Index\endcsname
+        {main}{##1}}%
+  \@nameedef{Special#1Index}##1{%
+    \noexpand\@SpecialIndexHelper@##1\noexpand\@nil
+    \noexpand\@bsphack
+  \noexpand\ifdoc at noindex\noexpand\else
+    \ifdoc at toplevel
+      \noexpand\doc at providetarget
+      \noexpand\index{\noexpand\@gtempa\noexpand\actualchar
+\string\verb% % to fool emacs highlighting
+\noexpand\quotechar*\noexpand\verbatimchar
+\noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar
+\ifx\@nil#2\@nil\else \the\@temptokena \fi
+\noexpand\doc at handleencap{usage}}%
+    \fi
+    \ifx\@nil#3\@nil\else
+      \noexpand\index{\the\@temptokenb\noexpand\levelchar
+\noexpand\@gtempa\noexpand\actualchar
+\string\verb% % to fool emacs highlighting
+\noexpand\quotechar*\noexpand\verbatimchar
+\noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar
+\noexpand\doc at handleencap{usage}}%
+    \fi
+  \noexpand\fi
+    \noexpand\@esphack}}
+
+\def\doc at createdescribe#1{%
+  \@namedef{Describe#1}{%
+    \begingroup
+      \MakePrivateLetters
+      \@ifnextchar[%]
+      {\doc at describe{#1}}{\doc at describe{#1}[]}}}
+\def\doc at createenv#1#2#3{%
+  \@namedef{#3}{%
+    \@ifnextchar[%]
+    {\doc at env{#1}{#2}}{\doc at env{#1}{#2}[]}}%
+  \@namedef{end#3}{\endtrivlist}%
+}
+
+\def\@nameedef#1{\expandafter\edef\csname #1\endcsname}
+
+
+\def\doc at declareerror#1#2{%
+   \PackageError{doc}{Doc element '#1/#2' already defined?\@gobble}%
+      {There is already a definition for
+       '\string\Print#1Name',\MessageBreak
+       '\string\PrintDescribe#1'
+       or the environment '#2'.\MessageBreak
+       Maybe you are overwriting something by mistake!\MessageBreak
+       Otherwise use '\string\RenewDocElement' instead.}%
+}
+
+\def\doc at notdeclarederror#1#2{%
+   \PackageError{doc}{Doc element '#1/#2' unknown}%
+      {I expected an existing definition for
+       '\string\Print#1Name',\MessageBreak
+       '\string\PrintDescribe#1' and
+       the environment '#2' but\MessageBreak
+       not all of them are defined.\MessageBreak
+       Maybe you wanted to use
+       '\string\NewDocElement'?}%
+}
+\newcommand\NewDocElement[3][]{%
+  \@ifundefined{Print#2Name}%
+      {\@ifundefined{PrintDescribe#2}%
+           {\@ifundefined{#3}%
+               {\@ifundefined{end#3}%
+                    {\@NewDocElement{#1}}%
+                    \doc at declareerror
+               }\doc at declareerror
+           }\doc at declareerror
+      }\doc at declareerror
+  {#2}{#3}%
+}
+\newcommand\RenewDocElement[3][]{%
+  \@ifundefined{Print#2Name}\doc at notdeclarederror
+      {\@ifundefined{PrintDescribe#2}\doc at notdeclarederror
+           {\@ifundefined{#3}\doc at notdeclarederror
+               {\@ifundefined{end#3}\doc at notdeclarederror
+                    {\@NewDocElement{#1}}%
+               }%
+           }%
+      }%
+  {#2}{#3}%
+}
+\def\@NewDocElement#1#2#3{%
+  \doc at macrolikefalse
+  \doc at topleveltrue
+  \def\doc at idxtype{#3}%
+  \def\doc at idxgroup{#3s}%
+  \let\doc at printtype\@empty
+  \csname keys_set:nn\endcsname{doc}{#1}%
+  \ifx\doc at printtype\@empty
+    \@temptokena{}%
+  \else
+    \@temptokena\expandafter{\expandafter
+         \textnormal\expandafter{\expandafter
+         \space\expandafter
+         (\doc at printtype)}}%
+  \fi
+  \@nameedef{Print#2Name}##1{%
+     {\noexpand\MacroFont
+      \ifdoc at macrolike
+         \noexpand\string
+      \fi
+      ##1%
+      \the\@temptokena
+     }}%
+  \expandafter\let\csname PrintDescribe#2\expandafter\endcsname
+                  \csname Print#2Name\endcsname
+  \edef\doc at expr{%
+     \ifdoc at macrolike
+       \noexpand\doc at createspecialmacrolikeindexes
+     \else
+       \noexpand\doc at createspecialindexes
+     \fi
+     {#2}%
+    }%
+   \expandafter\expandafter\expandafter
+   \doc at expr
+   \expandafter\expandafter\expandafter
+     {\expandafter\doc at idxtype\expandafter}\expandafter
+     {\doc at idxgroup}%
+  \doc at createdescribe{#2}%
+    \ifdoc at macrolike
+      \doc at createenv{TT}{#2}{#3}%
+    \else
+      \doc at createenv{TF}{#2}{#3}%
+    \fi
+}
+
+
+\NewDocElement[macrolike = true ,
+                idxtype   = ,
+                idxgroup  = ,
+                printtype =
+               ]{Macro}{macro}
+
+\def\SpecialMainIndex{\SpecialMainMacroIndex}
+
+\def\SpecialUsageIndex{\SpecialMacroIndex}
+
+\def\SpecialIndex     {\CodeMacroIndex{code}}
+
+\NewDocElement[macrolike = false ,
+                idxtype   = env.  ,
+                idxgroup  = environments ,
+                printtype = \textit{env.}
+               ]{Env}{environment}
+  \let\@@PrintDescribeMacro \PrintDescribeMacro
+  \let\@@PrintDescribeEnv \PrintDescribeEnv
+  \let\@@PrintMacroName \PrintMacroName
+  \let\@@PrintEnvName \PrintEnvName
+  \let\@@SpecialUsageIndex \SpecialUsageIndex
+  \let\@@SpecialEnvIndex \SpecialEnvIndex
+  \let\@@SortIndex \SortIndex
+  \let\@@DescribeMacro \DescribeMacro
+  \let\@@DescribeEnv \DescribeEnv
+
+\DeclareRobustCommand\cs[1]{\texttt{\bslash #1}}
+\AddToHook{class/amsdtx/after}{%
+  \DeclareRobustCommand\cs[1]{%
+    \@boxorbreak{%
+        \ntt
+        \addbslash#1\@empty
+        \@xp\@xp\@xp\@indexcs\@xp\@nobslash\string#1\@nil
+    }%
+  }%
+  \def\cn{\cs}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \endinput
 %%
 %% End of file `doc.sty'.

Modified: trunk/Master/texmf-dist/tex/latex/base/docstrip.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/docstrip.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/docstrip.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/exscale.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/exscale.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/exscale.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/fix-cm.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/fix-cm.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/fix-cm.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/fixltx2e.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/fixltx2e.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/fixltx2e.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/flafter.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/flafter.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/flafter.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/fleqn.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/fleqn.clo	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/fleqn.clo	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/fleqn.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/fleqn.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/fleqn.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/fltrace.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/fltrace.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/fltrace.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -224,8 +224,10 @@
 \let\f at depth\z@
 \def \@opcol {%
   \if at twocolumn
+    \@expl@@@mark at update@dblcol at structures@@
     \@outputdblcol
   \else
+    \@expl@@@mark at update@singlecol at structures@@
     \@outputpage
     \fl at trace{PAGE: one column (float? see above) page completed}%
   \fi

Modified: trunk/Master/texmf-dist/tex/latex/base/fontenc.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/fontenc.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/fontenc.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -114,10 +114,13 @@
 \let\@elt\relax
 \xdef\@fontenc at load@list{\@fontenc at load@list
   \@elt{\csname opt at fontenc.sty\endcsname}}
+\global\expandafter\let\csname ver@@fontenc.sty\expandafter\endcsname
+                       \csname ver at fontenc.sty\endcsname
 \global\expandafter\let\csname ver at fontenc.sty\endcsname\relax
 \global\expandafter\let\csname opt at fontenc.sty\endcsname\relax
 \global\let\@ifl at ter@@\@ifl at ter
 \def\@ifl at ter#1#2#3#4#5{\global\let\@ifl at ter\@ifl at ter@@}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \endinput
 %%
 %% End of file `fontenc.sty'.

Modified: trunk/Master/texmf-dist/tex/latex/base/fontmath.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/fontmath.cfg	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/fontmath.cfg	2022-06-08 20:41:20 UTC (rev 63514)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/fontmath.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/fontmath.ltx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/fontmath.ltx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/fonttext.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/fonttext.cfg	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/fonttext.cfg	2022-06-08 20:41:20 UTC (rev 63514)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/fonttext.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/fonttext.ltx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/fonttext.ltx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/graphpap.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/graphpap.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/graphpap.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/hyphen.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/hyphen.ltx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/hyphen.ltx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/idx.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/idx.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/idx.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/tex/latex/base/ifthen.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ifthen.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ifthen.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -49,7 +49,7 @@
 %%
 \NeedsTeXFormat{LaTeX2e}[1994/12/01]
 \ProvidesPackage{ifthen}
-          [2020/11/24 v1.1c Standard LaTeX ifthen package (DPC)]
+          [2022/04/13 v1.1d Standard LaTeX ifthen package (DPC)]
 \def\TE at throw{\@ne=\@ne\noexpand\fi}
 \def\boolean#1#2{%
   \TE at throw\expandafter\noexpand\csname if#1\endcsname#2}
@@ -72,6 +72,11 @@
     ##2}%
   \expandafter\toks@\expandafter{\expandafter}%
   \expandafter\@tempc\the\toks@#1\@tempc}
+\@ifl at t@r\fmtversion{2022/06/01}
+  {\def\TE at ref@exp{\let\pageref\@kernel at pageref@exp
+                  \let\ref\@kernel at ref@exp}}
+  {\def\TE at ref@exp{\def\@setref##1##2##3{%
+         \ifx##1\relax\z@\else\expandafter##2##1\fi}}}
 \long\def\ifthenelse#1{%
   \toks@{#1}%
   \TE at repl\or\TE at or
@@ -82,8 +87,7 @@
   \TE at repl\NOT\TE at neg
     \begingroup
         \let\protect\@unexpandable at protect
-        \def\@setref##1##2##3{%
-         \ifx##1\relax\z@\else\expandafter##2##1\fi}%
+        \TE at ref@exp
         \def\value##1{\the\csname c@##1\endcsname}%
         \let\equal\TE at equal \let\(\TE at lparen \let\)\TE at rparen
         \let\isodd\TE at odd \let\lengthtest\TE at length

Modified: trunk/Master/texmf-dist/tex/latex/base/inputenc.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/inputenc.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/inputenc.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
 \ProvidesPackage{inputenc}
    [2021/02/14 v1.3d Input encoding file]

Modified: trunk/Master/texmf-dist/tex/latex/base/lablst.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/lablst.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/lablst.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/tex/latex/base/latex.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/latex.ltx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/latex.ltx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -18,6 +18,7 @@
 %% lterror.dtx  (with options: `2ekernel')
 %% ltpar.dtx  (with options: `2ekernel')
 %% ltpara.dtx  (with options: `2ekernel')
+%% ltmeta.dtx  (with options: `2ekernel')
 %% ltspace.dtx  (with options: `2ekernel')
 %% ltlogos.dtx  (with options: `2ekernel')
 %% ltfiles.dtx  (with options: `2ekernel')
@@ -44,8 +45,10 @@
 %% ltfloat.dtx  (with options: `2ekernel')
 %% ltidxglo.dtx  (with options: `2ekernel')
 %% ltbibl.dtx  (with options: `2ekernel')
+%% ltmarks.dtx  (with options: `trace,2ekernel')
 %% ltpage.dtx  (with options: `2ekernel')
 %% ltclass.dtx  (with options: `2ekernel,tracerollback')
+%% ltkeys.dtx  (with options: `2ekernel')
 %% ltfilehook.dtx  (with options: `2ekernel')
 %% ltshipout.dtx  (with options: `2ekernel')
 %% ltoutput.dtx  (with options: `2ekernel')
@@ -58,7 +61,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -87,6 +90,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 %%% From File: ltdirchk.dtx
+%% ---- START temporary definitions for bootstrapping; later overwritten ----
 \ifnum\catcode`\{=1
   \errmessage
   {LaTeX must be made using an initex with no format preloaded}
@@ -294,6 +298,7 @@
      \ifx\reserved at a\@empty\else\gdef\@TeXversion{3}\fi}
   \fi
 \fi
+%% ---- END temporary definitions for bootstrapping ----
 %%% From File: ltplain.dtx
 \catcode`\{=1 % left brace is begin-group character
 \catcode`\}=2 % right brace is end-group character
@@ -572,11 +577,20 @@
 \def\null{\hbox{}}
 \let\bgroup={
 \let\egroup=}
-{\catcode`\^^M=\active % these lines must end with %
-  \gdef\obeylines{\catcode`\^^M\active \let^^M\par}%
-  \global\let^^M\par} % this is in case ^^M appears in a \write
-\def\obeyspaces{\catcode`\ \active}
-{\obeyspaces\global\let =\space}
+\begingroup
+\catcode`\^^M=\active % these lines must end with %
+  \gdef\obeylines{\catcode`\^^M\active%
+    \let^^M\obeyedline%
+  }%
+  \global\let^^M\par % this is in case ^^M appears in a \write
+\endgroup
+\protected\gdef\obeyedline{\par}
+\global\let\obeyedspace\space
+\begingroup
+\catcode`\ =\active%
+\gdef\obeyspaces{\catcode`\ \active\let =\obeyedspace}%
+\global\let =\space%
+\endgroup
 \long\def \loop #1\repeat{%
   \def\iterate{#1\relax  % Extra \relax
                \expandafter\iterate\fi
@@ -691,9 +705,9 @@
 %%% From File: ltvers.dtx
 \def\fmtname{LaTeX2e}
 \edef\fmtversion
-   {2021-11-15}
-\def\patch at level{1}
-\edef\development at branch@name{}
+   {2022-06-01}
+\def\patch at level{0}
+\edef\development at branch@name{develop \the\year-\the\month-\the\day}
 \iffalse
 \def\reserved at a#1/#2/#3\@nil{%
   \count@\year
@@ -840,7 +854,7 @@
   \GenericInfo{}{BEGIN module: \new at modulename\space (\new at moduledate)}%
   \GenericInfo{}{ \@spaces\@spaces\@spaces\space#3\@gobble}%
   \ifnum\sourceLaTeXdate<%
-      \expandafter\@parse at version\new at moduledate//00\@nil\relax
+        \expandafter\@parse at version\new at moduledate//00\@nil\relax
     \ifnum\expandafter\@parse at version\fmtversion//00\@nil<%
           \expandafter\@parse at version\new at moduledate//00\@nil\relax
       \GenericInfo{}{Skipping module \new at modulename}%
@@ -855,7 +869,19 @@
     \@skipping at moduletrue
     \expandafter\new at module@skip
   \fi}
-\long\def\new at module@skip#1\IncludeInRelease{\IncludeInRelease}
+\long\def\new at module@skip#1\IncludeInRelease{%
+  \long\def\reserved at a##1\EndModuleRelease{}%
+  \if\relax\detokenize\expandafter{\reserved at a#1{}{}\EndModuleRelease}\relax
+  \else
+    \@latex at error{Missing mandatory \string\IncludeInRelease{0000/00/00}}\@ehc
+    \expandafter\@secondoftwo
+  \fi
+  \@gobble
+    {\@expandtwoargs\IncludeInRelease
+         {0000/00/00}{\new at modulename}%
+         {ERROR! Emergency recovery}%
+     #1}%
+  \IncludeInRelease}
 \def\EndModuleRelease{%
   \ifx\new at modulename\@empty
     \@latex at error{Extra \string\EndModuleRelease.}\@eha
@@ -982,6 +1008,14 @@
   \e at alloc\luafunction\e at alloc@chardef
     \e at alloc@luafunction at count\m at ne\e at alloc@top
 }
+\def\newluacmd{%
+  \e at alloc\luafunction\luadef
+    \e at alloc@luafunction at count\m at ne\e at alloc@top
+}
+\def\newprotectedluacmd{%
+  \e at alloc\luafunction{\protected\luadef}
+    \e at alloc@luafunction at count\m at ne\e at alloc@top
+}
 \ifx\e at alloc@whatsit at count\@undefined
   \countdef\e at alloc@whatsit at count=261
   \e at alloc@whatsit at count=\z@
@@ -1124,6 +1158,22 @@
 \cs_gset_eq:NN \@expl at str@map at function@@NN \str_map_function:NN
 \cs_gset_eq:NN \@expl at char@generate@@nn \char_generate:nn
 \ExplSyntaxOff
+\ExplSyntaxOn
+\cs_new_eq:NN \fpeval \fp_eval:n
+\cs_new_eq:NN \inteval \int_eval:n
+\cs_new_eq:NN \dimeval  \dim_eval:n
+\cs_new_eq:NN \skipeval \skip_eval:n
+\ExplSyntaxOff
+\ExplSyntaxOn
+\cs_new_eq:NN \UseName \use:c
+\cs_new:Npn \ExpandArgs #1
+  {
+    \cs_if_exist_use:cF { exp_args:N #1 }
+      { \msg_expandable_error:nnn { kernel } { unknown-arg-expansion } {#1} }
+  }
+\msg_new:nnn { kernel } { unknown-arg-expansion }
+  { Unknown~arg~expansion~"#1" }
+\ExplSyntaxOff
 %%% From File: ltdefns.dtx
 \def\two at digits#1{\ifnum#1<10 0\fi\number#1}
 \protected\long\def\typeout#1{\begingroup
@@ -1681,8 +1731,8 @@
     \xdef#1{\the\toks@}%
   \endgroup}
 %%% From File: ltcmd.dtx
-\def\ltcmdversion{v1.0i}
-\def\ltcmddate{2021-12-02}
+\def\ltcmdversion{v1.0l}
+\def\ltcmddate{2022-03-18}
 \message{document commands,}
 \ExplSyntaxOn
 \tl_new:N \l__cmd_arg_spec_tl
@@ -2857,21 +2907,21 @@
 \cs_new_protected:Npn \__cmd_show_command_aux:nNNn #1 #2 #3 #4
   {
     \__cmd_split_signature:n {#4}
-    \iow_term:x
+    \tl_show:x
       {
-        > ~ \token_to_str:N #2 = #1: \iow_newline:
+        \token_to_str:N #2 = #1: \iow_newline:
         \tl_use:N \l__cmd_tmpa_tl
-        -> \cs_replacement_spec:N #3 .
+        -> \cs_replacement_spec:N #3
       }
   }
 \cs_new_protected:Npn \__cmd_show_environment:N #1
   {
     \exp_after:wN \__cmd_show_environment:Nnnw #1 \q__cmd
-    \iow_term:x
+    \tl_show:x
       {
-        > ~ \token_to_str:N \end { \cs_to_str:N #1 } : \iow_newline:
+        \token_to_str:N \end { \cs_to_str:N #1 } : \iow_newline:
         -> \exp_args:Nc \cs_replacement_spec:N
-          { environment~ \cs_to_str:N #1 ~end~aux~ } .
+          { environment~ \cs_to_str:N #1 ~end~aux~ }
       }
   }
 \cs_new_protected:Npn \__cmd_show_environment:Nnnw #1 #2 #3 #4 \q__cmd
@@ -3824,22 +3874,14 @@
     \exp_args:Ne \str_case_e:nnF
       {
         \exp_args:Nf \tl_if_empty:nT { \cs_argument_spec:N #1 }
-          {
-            \token_if_macro:NT #1
-              {
-                \exp_after:wN \exp_after:wN
-                \exp_after:wN \token_to_str:N
-                \exp_after:wN \use_i_delimit_by_q_stop:nw
-                  #1 \scan_stop: \q_stop
-              }
-          }
+          { \exp_not:N \exp_not:n { \exp_not:e { \tl_head:N #1 } } }
       }
       {
-        { \token_to_str:N \__cmd_start:nNNnnn } {#2}
-        { \token_to_str:N \__cmd_start_expandable:nNNNNn } {#3}
-        { \token_to_str:N \__cmd_start_env:nnnnn } {#4}
+        { \exp_not:N \__cmd_start:nNNnnn } {#2}
+        { \exp_not:N \__cmd_start_expandable:nNNNNn } {#3}
+        { \exp_not:N \__cmd_start_env:nnnnn } {#4}
         {
-          \exp_after:wN \token_to_str:N
+          \exp_after:wN \exp_not:N
             \cs:w environment~
               \exp_last_unbraced:Ne \use_none:nnn
                 { \cs_to_str:N #1 } ~end~aux \cs_end:
@@ -4284,6 +4326,9 @@
 \cs_new:Npn \IfValueF { \tl_if_novalue:nT }
 \cs_new:Npn \IfValueT { \tl_if_novalue:nF }
 \cs_new:Npn \IfValueTF #1#2#3 { \tl_if_novalue:nTF {#1} {#3} {#2} }
+\cs_new_eq:NN \IfBlankF  \tl_if_blank:nF
+\cs_new_eq:NN \IfBlankT  \tl_if_blank:nT
+\cs_new_eq:NN \IfBlankTF \tl_if_blank:nTF
 \tl_new:N \ProcessedArgument
 \cs_new_eq:NN \ReverseBoolean \__cmd_bool_reverse:N
 \cs_new_eq:NN \SplitArgument  \__cmd_split_argument:nnn
@@ -4305,8 +4350,8 @@
 \ExplSyntaxOff
 
 %%% From File: lthooks.dtx
-\def\lthooksversion{v1.0s}
-\def\lthooksdate{2021/09/28}
+\def\lthooksversion{v1.0u}
+\def\lthooksdate{2022/05/19}
 \ExplSyntaxOn
 \bool_new:N \g__hook_debug_bool
 \cs_new_eq:NN \__hook_debug:n \use_none:n
@@ -4726,6 +4771,7 @@
 \tl_const:cn { c__hook_generic_env/./begin_tl } { + }
 \tl_const:cn { c__hook_generic_env/./end_tl   } { + }
 \tl_const:cn { c__hook_generic_include/./end_tl } { - }
+\tl_const:cn { c__hook_generic_include/./excluded_tl } { + }
 \clist_map_inline:nn { file , package , class , include }
   {
     \tl_const:cn { c__hook_deprecated_#1/./before_tl } { }
@@ -4779,8 +4825,14 @@
         \__hook_deprecated_generic_warn:n {#1}
         \__hook_do_deprecated_generic:Nn \__hook_gset_rule:nnnn {#1}
           {#2} {#3} {#4}
-        \exp_after:wN \use_none:nnnnnnnnn \use_none:n
+        \__hook_clean_to_scan:w
       }
+    \__hook_if_execute_immediately:nT {#1}
+      {
+        \msg_error:nnnnnn { hooks } { rule-too-late }
+          {#1} {#2} {#3} {#4}
+        \__hook_clean_to_scan:w
+      }
     \__hook_init_structure:n {#1}
     \__hook_rule_gclear:nnn {#1} {#2} {#4}
     \cs_if_exist_use:cTF { __hook_rule_#3_gset:nnn }
@@ -4788,8 +4840,11 @@
           {#1} {#2} {#4}
         \__hook_update_hook_code:n {#1}
       }
-      { \msg_error:nnnnnn { hooks } { unknown-rule }
-                          {#1} {#2} {#3} {#4}        }
+      {
+        \msg_error:nnnnnn { hooks } { unknown-rule }
+          {#1} {#2} {#3} {#4}
+      }
+    \s__hook_mark
   }
 \cs_new_protected:Npn \__hook_rule_before_gset:nnn #1#2#3
   {
@@ -4860,8 +4915,8 @@
 }
 \cs_new_protected:Npn \__hook_initialize_hook_code:n #1
   {
-    \__hook_debug:n{ \iow_term:x{^^JUpdate~ code~ for~ hook~
-                                    '#1' \on at line :^^J} }
+    \__hook_debug:n
+      { \iow_term:x { ^^J Update~code~for~hook~'#1' \on at line :^^J } }
     \__hook_include_legacy_code_chunk:n {#1}
     \__hook_if_usable:nT {#1}
       {
@@ -4882,8 +4937,8 @@
             \prop_set_eq:Nc \l__hook_work_prop { g__hook_#1_code_prop }
             \__hook_initialize_single:ccn
               { __hook~#1 } { g__hook_#1_labels_clist } {#1}
-            \__hook_debug:n{ \exp_args:NNx \prop_gput:Nnn
-                                       \g__hook_used_prop {#1}{} }
+            \__hook_debug:n
+              { \exp_args:NNx \prop_gput:Nnn \g__hook_used_prop {#1} { } }
           }
       }
   }
@@ -5040,12 +5095,12 @@
        }
     \prop_put:Nnn \l__hook_work_prop {#1} { }
   }
-\cs_new_eq:cc { __hook_apply_-rule_<:nnn  } { __hook_apply_rule_>:nnn }
-\cs_new_eq:cc { __hook_apply_-rule_>:nnn  } { __hook_apply_rule_<:nnn }
+\cs_new_eq:cc { __hook_apply_-rule_<:nnn } { __hook_apply_rule_>:nnn }
+\cs_new_eq:cc { __hook_apply_-rule_>:nnn } { __hook_apply_rule_<:nnn }
 \cs_new_eq:cc { __hook_apply_-rule_<-:nnn } { __hook_apply_rule_<-:nnn }
 \cs_new_eq:cc { __hook_apply_-rule_->:nnn } { __hook_apply_rule_->:nnn }
-\cs_new_eq:cc { __hook_apply_-rule_xE:nnn  } { __hook_apply_rule_xE:nnn }
-\cs_new_eq:cc { __hook_apply_-rule_xW:nnn  } { __hook_apply_rule_xW:nnn }
+\cs_new_eq:cc { __hook_apply_-rule_xE:nnn } { __hook_apply_rule_xE:nnn }
+\cs_new_eq:cc { __hook_apply_-rule_xW:nnn } { __hook_apply_rule_xW:nnn }
 \cs_new_protected:Npn \__hook_msg_pair_found:nnn #1#2#3
   {
     \iow_term:x{~ \str_if_eq:nnTF {#3} {??} {default} {~normal} ~
@@ -5281,9 +5336,9 @@
     \__hook_tl_gclear:c { __hook~#1 }
     \__hook_tl_gclear:c { __hook_next~#1 }
     \__hook_tl_gclear:c { __hook_toplevel~#1 }
-    \prop_gclear:c { g__hook_#1_code_prop }
+    \prop_gclear_new:c { g__hook_#1_code_prop }
   }
-\prg_new_conditional:Npnn \__hook_if_execute_immediately:n #1 { F, TF }
+\prg_new_conditional:Npnn \__hook_if_execute_immediately:n #1 { T, F, TF }
   {
     \__hook_if_usable:nTF {#1}
       {
@@ -5406,7 +5461,8 @@
     This~command~was~ignored.
   }
 \msg_new:nnnn { hooks } { unknown-rule }
-  { Unknown~ relationship~ '#3'~
+  {
+    Unknown~ relationship~ '#3'~
     between~ labels~ '#2'~ and~ '#4'~
     \str_if_eq:nnF {#1} {??} { ~in~hook~'#1' }. ~
     Perhaps~ a~ misspelling?
@@ -5420,6 +5476,19 @@
     'voids'~ or~
     'unrelated'.
   }
+\msg_new:nnnn { hooks } { rule-too-late }
+  {
+    Sorting~rule~for~'#1'~hook~applied~too~late.\\
+    Try~setting~this~rule~earlier.
+  }
+  {
+    You~tried~to~set~the~ordering~of~hook~'#1'~using\\
+    \ \ \iow_char:N\\DeclareHookRule{#1}{#2}{#3}{#4}\\
+    but~hook~'#1'~was~already~used~as~a~one-time~hook,~
+    thus~sorting~is\\
+    no~longer~possible.~Declare~the~rule~
+    before~the~hook~is~used.
+  }
 \msg_new:nnnn { hooks } { misused-top-level }
   {
     Illegal~use~of~\iow_char:N \\AddToHook{#1}[top-level]{...}.\\
@@ -5972,6 +6041,7 @@
       }
   }
 \ExplSyntaxOff
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%% From File: ltalloc.dtx
 \chardef\@xxxii=32
 \mathchardef\@Mi=10001
@@ -6291,7 +6361,7 @@
 %% File: ltpara.dtx (C) Copyright 2020-2021
 %%% From File: ltpara.dtx
 \def\ltparaversion{v1.0k}
-\def\ltparadate{2021/11/11}
+\def\ltparadate{2022/05/13}
 
 
 \ExplSyntaxOn
@@ -6416,6 +6486,37 @@
 
 \ExplSyntaxOff
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% File: ltmeta.dtx (C) Copyright 2021, 2022
+%%% From File: ltmeta.dtx
+\def\ltmetaversion{v1.0b}
+\def\ltmetadate{2022/05/18}
+\let \IfDocumentMetadataTF \@secondoftwo
+\protected\def\DocumentMetadata{%
+  \InputIfFileExists{documentmetadata-support.ltx}%
+     {}%
+     {%
+       \@latex at error{No support files for
+                    \noexpand\DocumentMetadata found}
+         {Is the 'LaTeX-lab' bundle installed?%
+         \MessageBreak
+         Without it, the declaration is ignored.}%
+      \let\DocumentMetadata\@gobble
+     }%
+  \let \IfDocumentMetadataTF \@firstoftwo
+  \DocumentMetadata
+}
+\NewDocumentCommand\MakeLinkTarget{sO{}m}{%
+  \ifvmode
+    \special{}%
+  \else
+    \@savsf\spacefactor
+    \smash{}%
+    \spacefactor\@savsf
+  \fi}
+\NewDocumentCommand\LinkTargetOn{}{}
+\NewDocumentCommand\LinkTargetOff{}{}
+\NewDocumentCommand\NextLinkTarget{m}{}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%% From File: ltspace.dtx
 \message{spacing,}
 \DeclareRobustCommand\pagebreak{\@testopt{\@no at pgbk-}4}
@@ -6826,6 +6927,8 @@
   \else
     \deadcycles\z@
     \@nameuse{cp@#1}%
+    \UseHook{include/excluded}%
+    \UseOneTimeHook{include/#1/excluded}%
   \fi
   \let\@auxout\@mainaux
 \else
@@ -6836,6 +6939,7 @@
 \NewHook{include/before}
 \NewReversedHook{include/end}
 \NewReversedHook{include/after}
+\NewHook{include/excluded}
 \def\@writeckpt#1{%
   \if at filesw
     \immediate\write\@partaux{\string\@setckpt{#1}\@charlb}%
@@ -6966,6 +7070,10 @@
           \ifx\filename at ext\relax tex\else\filename at ext\fi}%
        \expandafter\let\expandafter\reserved at b
                               \csname ver@\reserved at a\endcsname
+       \ifx\reserved at b\relax
+         \expandafter\let\expandafter\reserved at b
+                         \csname ver@@\reserved at a\endcsname
+       \fi
        \expandafter\expandafter\expandafter\@listfiles\expandafter
              \filename at area\filename at base\\\\\\\\\\\\\\\\\\\@@
        \typeout{%
@@ -7244,6 +7352,7 @@
   }%
   \egroup
 }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%% From File: ltcounts.dtx
 
 \def\setcounter#1#2{%
@@ -7886,6 +7995,7 @@
  \def\@xviipt{17.28}
  \def\@xxpt{20.74}
  \def\@xxvpt{24.88}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%% From File: ltfssaxes.dtx
 %% Copyright (C) 1999-2020 Frank Mittelbach
 \def\DeclareFontSeriesChangeRule#1#2#3#4{%
@@ -10859,9 +10969,19 @@
   \else
    \expandafter#2#1\null
   \fi}
-\def\ref#1{\expandafter\@setref\csname r@#1\endcsname\@firstoftwo{#1}}
-\def\pageref#1{\expandafter\@setref\csname r@#1\endcsname
-                                   \@secondoftwo{#1}}
+\def\@kernel at sref#1{\expandafter\@setref\csname r@#1\endcsname\@firstoftwo{#1}}
+\def\@kernel at spageref#1{\expandafter\@setref\csname r@#1\endcsname
+                 \@secondoftwo{#1}}
+\let\@kernel at ref\@kernel at sref
+\let\@kernel at pageref\@kernel at spageref
+\NewDocumentCommand\ref{s}
+   {\IfBooleanTF{#1}{\@kernel at sref}{\@kernel at ref}}
+\NewDocumentCommand\pageref{s}
+   {\IfBooleanTF{#1}{\@kernel at spageref}{\@kernel at pageref}}
+\def\@kernel at pageref@exp#1{\csname cs_if_exist:cTF\endcsname
+   {r@#1}{\csname tl_item:cn\endcsname{r@#1}{2}}{0}}
+\def\@kernel at ref@exp#1{\csname cs_if_exist:cTF\endcsname
+   {r@#1}{\csname tl_item:cn\endcsname{r@#1}{1}}{0}}
 \def\@newl at bel#1#2#3{{%
   \@ifundefined{#1@#2}%
     \relax
@@ -10883,8 +11003,12 @@
        {\csname p@#1\expandafter\endcsname\csname the#1\endcsname}%
 }
 \def\labelformat#1{\expandafter\def\csname p@#1\endcsname##1}
-\DeclareRobustCommand\Ref[1]{\protected at edef\@tempa{\ref{#1}}%
-   \expandafter\MakeUppercase\@tempa}
+\def\@kernel at Ref#1{\protected at edef\@tempa{\@kernel at ref{#1}}%
+       \expandafter\MakeUppercase\@tempa}
+\def\@kernel at sRef#1{\protected at edef\@tempa{\@kernel at sref{#1}}%
+       \expandafter\MakeUppercase\@tempa}
+\NewDocumentCommand\Ref{s}
+   {\IfBooleanTF{#1}{\@kernel at sRef}{\@kernel at Ref}}
 \def\@currentlabel{}
 %%% From File: ltmiscen.dtx
 \message{environments,}
@@ -11272,7 +11396,7 @@
     \global\setbox\@ne\vbox{\box\@ne\kern2\p@}%
     \vcenter{\kern-\ht\@ne\unvbox\z@\kern-\baselineskip}\,\right)$}%
   \null\;\vbox{\kern\ht\@ne\box\tw@}\endgroup}
-\def\openup{\afterassignment\@penup\dimen@}
+\protected\def\openup{\afterassignment\@penup\dimen@}
 \def\@penup{\advance\lineskip\dimen@
   \advance\baselineskip\dimen@
   \advance\lineskiplimit\dimen@}
@@ -11422,6 +11546,9 @@
     \expandafter\@ensuredmath
   \fi}
 \long\def\@ensuredmath#1{$\relax#1$}
+\ifx\mathdefaultsmode\@undefined\else
+  \mathdefaultsmode=1
+\fi
 %%% From File: ltlists.dtx
 \newskip\topsep
 \newskip\partopsep
@@ -13306,7 +13433,12 @@
 \def\bibcite{\@newl at bel b}
 \let\citation\@gobble
 \DeclareRobustCommand\cite{%
-  \@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}
+  \@ifnextchar [{\@tempswatrue\@citex at checkblank}{\@tempswafalse\@citex at checkblank[]}}
+\def\@citex at checkblank[#1]#2{%
+   \IfBlankTF {#2}%
+     {\@citex[#1]{\space}}%
+     {\@citex[#1]{#2}}%
+}
 \def\@citex[#1]#2{\leavevmode
   \let\@citea\@empty
   \@cite{\@for\@citeb:=#2\do
@@ -13347,6 +13479,368 @@
 \def\@cite#1#2{[{#1\if at tempswa , #2\fi}]}
 \let\@cite at ofmt\hbox
 \def\@biblabel#1{[#1]}
+%% File: ltmarks.dtx (C) Copyright 2022
+%%% From File: ltmarks.dtx
+\def\ltmarksversion{v1.0d}
+\def\ltmarksdate{2022/06/01}
+%% \end{function}
+
+\ExplSyntaxOn
+\seq_new:N \g__mark_classes_seq
+\cs_new_protected:Npn \mark_new_class:n #1
+{
+  \seq_if_in:NnTF \g__mark_classes_seq {#1}
+      {
+        \msg_error:nnn { mark } { class-already-defined }
+          {#1}
+      }
+      { \__mark_new_class:nn {#1} }
+}
+\@onlypreamble \mark_new_class:n
+\cs_new_protected:Npn \__mark_new_class:nn #1
+{
+  \__mark_debug:n { \iow_term:x { Marks:~new~mark:~#1~\msg_line_context: } }
+  \exp_args:Nc \newmarks {c__mark_class_ #1 _mark}
+  \seq_gput_right:Nn \g__mark_classes_seq {#1}
+  \tl_new:c   { g__mark_page_top_   #1 _tl }
+  \tl_new:c   { g__mark_page_first_ #1 _tl }
+  \tl_new:c   { g__mark_page_last_  #1 _tl }
+  \tl_new:c   { g__mark_previous-page_top_   #1 _tl }
+  \tl_new:c   { g__mark_previous-page_first_ #1 _tl }
+  \tl_new:c   { g__mark_previous-page_last_  #1 _tl }
+  \tl_new:c   { g__mark_column_top_   #1 _tl }
+  \tl_new:c   { g__mark_column_first_ #1 _tl }
+  \tl_new:c   { g__mark_column_last_  #1 _tl }
+  \tl_new:c   { g__mark_previous-column_top_   #1 _tl }
+  \tl_new:c   { g__mark_previous-column_first_ #1 _tl }
+  \tl_new:c   { g__mark_previous-column_last_  #1 _tl }
+  \tl_new:c   { g__mark_first-column_top_   #1 _tl }
+  \tl_new:c   { g__mark_first-column_first_ #1 _tl }
+  \tl_new:c   { g__mark_first-column_last_  #1 _tl }
+  \tl_new:c   { g__mark_last-column_top_    #1 _tl }
+  \tl_new:c   { g__mark_last-column_first_  #1 _tl }
+  \tl_new:c   { g__mark_last-column_last_   #1 _tl }
+}
+\box_new:N \l__mark_box
+\tl_new:N  \g__mark_tmp_tl
+\tl_new:N  \g__mark_new_top_tl
+\cs_new_protected:Npn \__mark_update_structure:nn #1#2
+  {
+    \__mark_update_structure_alias:nn { previous-#1 } {#1}
+    \group_begin:
+      \dim_set_eq:NN \tex_splitmaxdepth:D \c_max_dim
+      \int_set_eq:NN \tex_vbadness:D      \c_max_int
+      \dim_set_eq:NN \tex_vfuzz:D         \c_max_dim
+      \vbox_set_to_ht:Nnn \l__mark_box { -.5\c_max_dim }
+        {
+          #2
+          \tex_unskip:D
+          \box_set_to_last:N \l__mark_box
+          \int_compare:nNnT \tex_lastnodetype:D < 0
+            {
+              \box_if_vertical:NT \l__mark_box
+                {
+                  \vbox_set_to_ht:Nnn \l__mark_box { -.5\c_max_dim }
+                    {
+                      \vbox_unpack:N \l__mark_box
+                      \tex_kern:D \c_zero_dim % ensure that box
+                                              % is not empty
+                    }
+                    \int_compare:nNnT \tex_badness:D > 0
+                      { \vbox_unpack:N \l__mark_box }
+                  }
+            }
+          \tex_kern:D \c_zero_dim
+        }
+      \int_compare:nNnTF \tex_badness:D > 0
+        {
+          \vbox_set_split_to_ht:NNn \l__mark_box \l__mark_box \c_max_dim
+          \seq_map_inline:Nn \g__mark_classes_seq
+            {
+              \tl_gset_eq:Nc \g__mark_new_top_tl { g__mark_#1_last_##1_tl }
+              \tl_gset_eq:cN { g__mark_#1_top_##1_tl } \g__mark_new_top_tl
+              \tl_gset:No \g__mark_tmp_tl
+                { \tex_splitbotmarks:D \use:c { c__mark_class_##1_mark } }
+              \tl_if_empty:NTF \g__mark_tmp_tl
+                {
+                  \tl_gset_eq:cN { g__mark_#1_last_ ##1_tl }
+                    \g__mark_new_top_tl
+                  \tl_gset_eq:cN { g__mark_#1_first_##1_tl }
+                    \g__mark_new_top_tl
+                }
+                {
+                  \tl_gset_eq:cN { g__mark_#1_last_##1_tl } \g__mark_tmp_tl
+                  \tl_gset:co { g__mark_#1_first_##1_tl }
+                    {
+                      \tex_splitfirstmarks:D
+                        \use:c { c__mark_class_##1_mark }
+                    }
+                }
+            }
+        }
+        {
+          \msg_error:nnn { mark } { infinite-shrinkage } {#1}
+          \seq_map_inline:Nn \g__mark_classes_seq
+            {
+              \tl_gset_eq:cc { g__mark_#1_top_  ##1_tl }
+                             { g__mark_#1_last_ ##1_tl }
+              \tl_gset_eq:cc { g__mark_#1_first_##1_tl }
+                             { g__mark_#1_last_ ##1_tl }
+            }
+        }
+    \group_end:
+  }
+\cs_new_protected:Npn \__mark_update_structure_alias:nn #1#2 {
+  \seq_map_inline:Nn \g__mark_classes_seq
+    {
+      \tl_gset_eq:cc { g__mark_ #1 _top_   ##1 _tl }
+                     { g__mark_ #2 _top_   ##1 _tl }
+      \tl_gset_eq:cc { g__mark_ #1 _first_ ##1 _tl }
+                     { g__mark_ #2 _first_ ##1 _tl }
+      \tl_gset_eq:cc { g__mark_ #1 _last_  ##1 _tl }
+                     { g__mark_ #2 _last_  ##1 _tl }
+    }
+}
+\cs_new_protected:Npn \__mark_update_structure_to_err:n #1 {
+  \seq_map_inline:Nn \g__mark_classes_seq
+      {
+        \tl_gset:cn { g__mark_ #1 _top_   ##1 _tl } { \__mark_error:n {#1} }
+        \tl_gset:cn { g__mark_ #1 _first_ ##1 _tl } { \__mark_error:n {#1} }
+        \tl_gset:cn { g__mark_ #1 _last_  ##1 _tl } { \__mark_error:n {#1} }
+      }
+}
+\cs_new_protected:Npn \__mark_error:n #1 {
+  \msg_error:nnn { mark } { invalid-use } {#1}
+}
+\cs_new_protected:Npn \mark_insert:nn #1#2
+{
+  \seq_if_in:NnTF \g__mark_classes_seq {#1}
+      {
+        \group_begin:
+          \@kernel at before@insertmark
+          \hook_use:n { insertmark }
+          \unrestored at protected@xdef \g__mark_tmp_tl {#2}
+          \__mark_debug:n{ \iow_term:x { Marks:~ set~#1~<-~
+              '\tl_to_str:V \g__mark_tmp_tl' ~ \msg_line_context: } }
+          \tex_marks:D \use:c { c__mark_class_ #1 _mark }
+            {
+              \tl_if_empty:NTF \g__mark_tmp_tl
+                { \exp_not:n { \prg_do_nothing: } }
+                { \exp_not:o { \g__mark_tmp_tl } }
+            }
+        \group_end:
+        \if at nobreak\ifvmode\nobreak\fi\fi
+      }
+      {
+        \msg_error:nnx { mark } { unknown-class }
+          { \tl_to_str:n {#1} }
+      }
+}
+\cs_new:Npn \@kernel at before@insertmark {
+          \cs_set_eq:NN \label    \scan_stop:
+          \cs_set_eq:NN \index    \scan_stop:
+          \cs_set_eq:NN \glossary \scan_stop:
+}
+\hook_new:n {insertmark}
+\cs_new:Npn \mark_use_first:nn #1#2 { \exp_not:v { g__mark_#1_first_#2_tl } }
+\cs_new:Npn \mark_use_last:nn #1#2  { \exp_not:v { g__mark_#1_last_#2_tl }  }
+\cs_new:Npn \mark_use_top:nn #1#2   { \exp_not:v { g__mark_#1_top_#2_tl }   }
+\prg_new_conditional:Npnn \mark_if_eq:nnnn #1#2#3#4 { T , F , TF }
+{
+  \tl_if_eq:ccTF { g__mark_ #1 _#3_ #2 _tl }
+                 { g__mark_ #1 _#4_ #2 _tl }
+                 \prg_return_true:
+                 \prg_return_false:
+}
+\prg_new_conditional:Npnn \mark_if_eq:nnnnnn #1#2#3#4#5#6 { T , F , TF }
+{
+  \tl_if_eq:ccTF { g__mark_ #1 _#3_ #2 _tl }
+                 { g__mark_ #4 _#6_ #5 _tl }
+                 \prg_return_true:
+                 \prg_return_false:
+}
+\prop_gput:Nnn \g_msg_module_type_prop { mark } { LaTeX }
+\msg_new:nnnn { mark } { class-already-defined }
+  { Mark~class~'#1'~already~defined }
+  {
+    \c__msg_coding_error_text_tl
+    LaTeX~was~asked~to~define~a~new~mark~class~called~'#1':~
+    this~mark~class~already~exists.
+    \c__msg_return_text_tl
+  }
+\msg_new:nnnn { mark } { unknown-class }
+  { Unknown~mark~class~'#1'. }
+  {
+    \c__msg_coding_error_text_tl
+    LaTeX~was~asked~to~manipulate~a~mark~of~class~'#1',~
+    but~this~class~of~marks~does~not~exist.
+  }
+
+\msg_new:nnnn { mark } { invalid-use }
+  { Mark~region~'#1'~not ~usable }
+  {
+    \c__msg_coding_error_text_tl
+    The~region~'#1'~can~only~be~used~after~
+    all~columns~have~been~assembled.
+    \c__msg_return_text_tl
+  }
+\msg_new:nnnn { mark } { infinite-shrinkage }
+  { Infinite~shrinkage~found~in~'#1'. }
+  {
+    \c__msg_coding_error_text_tl
+    The~mark~region~'#1'~contains~some~infinite~negative~glue~
+    allowing~it~to~shrink~to~an~arbitrary~size.~
+    This~makes~it~impossible~to~split~the~region~apart~to~
+    get~at~its~marks.~They~are~lost.
+  }
+\bool_new:N \g__mark_debug_bool
+\cs_new_eq:NN \__mark_debug:n \use_none:n
+\cs_new_protected:Npn \mark_debug_on:
+  {
+    \bool_gset_true:N \g__mark_debug_bool
+    \__mark_debug_gset:
+  }
+\cs_new_protected:Npn \mark_debug_off:
+  {
+    \bool_gset_false:N \g__mark_debug_bool
+    \__mark_debug_gset:
+  }
+\cs_new_protected:Npn \__mark_debug_gset:
+  {
+    \cs_gset_protected:Npx \__mark_debug:n ##1
+      { \bool_if:NT \g__mark_debug_bool {##1} }
+  }
+\cs_new_eq:NN \DebugMarksOn   \mark_debug_on:
+\cs_new_eq:NN \DebugMarksOff  \mark_debug_off:
+\cs_new_protected:Npn \__mark_class_status:nn #1#2
+   {
+           \typeout{ Marks:~#2~ #1:}
+           \typeout{\@spaces page~ (current):
+             | \exp_not:v { g__mark_page_top_ #2 _tl }
+             | \exp_not:v { g__mark_page_first_ #2 _tl }
+             | \exp_not:v { g__mark_page_last_ #2 _tl }     |}
+           \typeout{\@spaces page~ (previous):
+             | \exp_not:v { g__mark_previous-page_top_ #2 _tl }
+             | \exp_not:v { g__mark_previous-page_first_ #2 _tl }
+             | \exp_not:v { g__mark_previous-page_last_ #2 _tl }     |}
+           \typeout{\@spaces column~ (previous):
+             | \exp_not:v { g__mark_previous-column_top_ #2 _tl }
+             | \exp_not:v { g__mark_previous-column_first_ #2 _tl }
+             | \exp_not:v { g__mark_previous-column_last_ #2 _tl }     |}
+           \typeout{\@spaces column~ (current):
+             | \exp_not:v { g__mark_column_top_ #2 _tl }
+             | \exp_not:v { g__mark_column_first_ #2 _tl }
+             | \exp_not:v { g__mark_column_last_ #2 _tl }     |}
+           \typeout{\@spaces column~ (first):
+             | \exp_not:v { g__mark_first-column_top_ #2 _tl }
+             | \exp_not:v { g__mark_first-column_first_ #2 _tl }
+             | \exp_not:v { g__mark_first-column_last_ #2 _tl }     |}
+           \typeout{\@spaces column~ (second):
+             | \exp_not:v { g__mark_last-column_top_ #2 _tl }
+             | \exp_not:v { g__mark_last-column_first_ #2 _tl }
+             | \exp_not:v { g__mark_last-column_last_ #2 _tl }     |}
+}
+\cs_new_protected:Npn \__mark_status:n #1
+  {
+    \seq_map_inline:Nn \g__mark_classes_seq
+      { \__mark_class_status:nn {#1} {##1} }
+  }
+\cs_new_eq:NN  \NewMarkClass \mark_new_class:n
+\@onlypreamble \NewMarkClass
+\cs_new_eq:NN \InsertMark  \mark_insert:nn
+\NewExpandableDocumentCommand \FirstMark { O{page} m }
+                    { \mark_use_first:nn {#1}{#2} }
+\NewExpandableDocumentCommand \LastMark { O{page} m }
+                    { \mark_use_last:nn {#1}{#2} }
+\NewExpandableDocumentCommand \TopMark { O{page} m }
+                    { \mark_use_top:nn {#1}{#2} }
+\NewExpandableDocumentCommand \IfMarksEqualTF {O{page}mmm} {
+  \mark_if_eq:nnnnTF {#1}{#2}{#3}{#4}
+}
+\cs_new_protected:Npn \__mark_update_singlecol_structures: {
+  \box_if_vertical:NTF \@outputbox
+      {
+        \__mark_update_structure:nn {page}
+           { \vbox_unpack:N  \@outputbox }
+      }
+      {
+        \__mark_update_structure:nn {page}
+           { \hbox_unpack:N  \@outputbox }
+      }
+  \__mark_update_structure_alias:nn {previous-column}{previous-page}
+  \__mark_update_structure_alias:nn {column}{page}
+  \__mark_update_structure_alias:nn {first-column}{page}
+  \__mark_update_structure_alias:nn {last-column}{page}
+     \__mark_debug:n
+         {
+           \__mark_status:n
+                { in~ OR~ (
+                  \legacy_if:nTF {@twoside}
+                         { twoside-
+                           \int_if_odd:nTF \c at page
+                               { odd }{ even }
+                         }
+                         { oneside }
+                         )
+                }
+         }
+}
+\cs_new_protected:Npn \__mark_update_dblcol_structures: {
+  \box_if_vertical:NTF \@outputbox
+      {
+        \__mark_update_structure:nn {column}
+           { \vbox_unpack:N  \@outputbox }
+      }
+      {
+        \__mark_update_structure:nn {column}
+           { \hbox_unpack:N  \@outputbox }
+      }
+  \legacy_if:nTF {@firstcolumn}
+    {
+      \__mark_update_structure_alias:nn {first-column}{column}
+      \__mark_update_structure_to_err:n {last-column}
+    }
+    {
+      \__mark_update_structure_alias:nn {last-column}{column}
+      \seq_map_inline:Nn \g__mark_classes_seq
+        {
+          \tl_gset_eq:cc { g__mark_previous-page_top_   ##1 _tl }
+                         { g__mark_page_top_            ##1 _tl }
+          \tl_gset_eq:cc { g__mark_previous-page_first_ ##1 _tl }
+                         { g__mark_page_first_          ##1 _tl }
+          \tl_gset_eq:cc { g__mark_previous-page_last_  ##1 _tl }
+                         { g__mark_page_last_           ##1 _tl }
+          \tl_gset_eq:cc { g__mark_page_top_           ##1 _tl }
+                         { g__mark_first-column_top_   ##1 _tl }
+          \tl_gset_eq:cc { g__mark_ page_first_        ##1 _tl }
+                         { g__mark_first-column_first_ ##1 _tl }
+          \tl_gset_eq:cc { g__mark_page_last_          ##1 _tl }
+                         { g__mark_last-column_last_   ##1 _tl }
+        }
+    }
+     \__mark_debug:n
+         {
+           \__mark_status:n
+              { in~ OR~ (
+                \legacy_if:nTF {@twoside}
+                       { twoside-
+                         \int_if_odd:nTF \c at page
+                             { odd }{ even }
+                       }
+                       { oneside }
+                       \space
+                       \legacy_if:nTF {@firstcolumn}
+                              { first~ }{ second~ }
+                              column )
+              }
+         }
+}
+\cs_new_eq:NN  \@expl@@@mark at update@singlecol at structures@@
+               \__mark_update_singlecol_structures:
+\cs_new_eq:NN  \@expl@@@mark at update@dblcol at structures@@
+               \__mark_update_dblcol_structures:
+\ExplSyntaxOff
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%% From File: ltpage.dtx
 \def\pagestyle#1{%
   \@ifundefined{ps@#1}%
@@ -13364,11 +13858,15 @@
      \hfil}\let\@evenhead\@empty\let\@evenfoot\@oddfoot}
 \let\@leftmark\@firstoftwo
 \let\@rightmark\@secondoftwo
+\ExplSyntaxOn
 \DeclareRobustCommand*\markboth[2]{%
   \begingroup
     \let\label\relax \let\index\relax \let\glossary\relax
     \unrestored at protected@xdef\@themark {{#1}{#2}}%
     \@temptokena \expandafter{\@themark}%
+    \mark_insert:nn{2e-left}{#1}
+    \mark_insert:nn{2e-right}{#2}
+    \tl_if_empty:nF{#2}{ \mark_insert:nn{2e-right-nonempty}{#2} }
     \mark{\the\@temptokena}%
   \endgroup
   \if at nobreak\ifvmode\nobreak\fi\fi}
@@ -13377,9 +13875,12 @@
     \let\label\relax \let\index\relax \let\glossary\relax
     \expandafter\@markright\@themark {#1}%
     \@temptokena \expandafter{\@themark}%
+    \mark_insert:nn{2e-right}{#1}
+    \tl_if_empty:nF{#1}{ \mark_insert:nn{2e-right-nonempty}{#1} }
     \mark{\the\@temptokena}%
   \endgroup
   \if at nobreak\ifvmode\nobreak\fi\fi}
+\ExplSyntaxOff
 \def\@markright#1#2#3{\@temptokena {#1}%
   \unrestored at protected@xdef\@themark{{\the\@temptokena}{#3}}}
 \def\leftmark{\expandafter\@leftmark\botmark\@empty\@empty}
@@ -13768,22 +14269,16 @@
   \xdef\@currpath{\ifx\reserved at b\@empty\else\reserved at b/\fi}%
   \global\let\@currext#4%
   \@ifl at aded\@currext\@currname
-    {\@if at ptions\@currext{\@currname}{#2}{}%
-      {\@latex at error
-        {Option clash for \@cls at pkg\space \@currname}%
-        {The package \@currname\space has already been loaded
-         with options:\MessageBreak
-         \space\space[\@ptionlist{\@currname.\@currext}]\MessageBreak
-         There has now been an attempt to load it
-          with options\MessageBreak
-         \space\space[#2]\MessageBreak
-         Adding the global options:\MessageBreak
-         \space\space
-              \@ptionlist{\@currname.\@currext},#2\MessageBreak
-         to your \noexpand\documentclass declaration may fix this.%
-         \MessageBreak
-         Try typing \space <return> \space to proceed.}}%
-     \@firstofone}%
+    {%
+      \@ifundefined{opt at fam@\@currname.\@currext}
+        {\@onefilewithoptions at clashchk{#2}}
+        {%
+          \@namedef{opt@\@currname.\@currext}{#2}%
+          \expandafter\expandafter\expandafter\ProcessKeyOptions
+            \expandafter\expandafter\expandafter
+              [\csname opt at fam@\@currname.\@currext\endcsname]%
+        }%
+    }%
     {\makeatletter
      \@reset at ptions
      \IfFileExists{\@currpath\@currname.\@currext}{}%
@@ -13823,6 +14318,23 @@
      \ifx\@currext\@clsextension\let\LoadClass\@twoloadclasserror\fi}%
     \@popfilename
     \@reset at ptions}
+\def\@onefilewithoptions at clashchk#1{%
+  \@if at ptions\@currext{\@currname}{#1}{}%
+      {\@latex at error
+        {Option clash for \@cls at pkg\space \@currname}%
+        {The package \@currname\space has already been loaded
+         with options:\MessageBreak
+         \space\space[\@ptionlist{\@currname.\@currext}]\MessageBreak
+         There has now been an attempt to load it
+          with options\MessageBreak
+         \space\space[#1]\MessageBreak
+         Adding the global options:\MessageBreak
+         \space\space
+              \@ptionlist{\@currname.\@currext},#1\MessageBreak
+         to your \noexpand\documentclass declaration may fix this.%
+         \MessageBreak
+         Try typing \space <return> \space to proceed.}}%
+     \@firstofone}
 \let\@currpkg at reqd\@empty
 \@onlypreamble\@onefilewithoptions
 \let\@unprocessedoptions\@undefined
@@ -14280,9 +14792,197 @@
     \expandafter\@secondoftwo
   \fi
 }
+%%% From File: ltkeys.dtx
+\ExplSyntaxOn
+\group_begin:
+  \cs_set_protected:Npn \__keys_tmp:nn #1#2
+    {
+      \quark_if_recursion_tail_stop:n {#1}
+      \cs_new_eq:cc
+        { \c__keys_props_root_str . #2 }
+        { \c__keys_props_root_str . #1 }
+      \__keys_tmp:nn
+    }
+  \__keys_tmp:nn
+    { code:n }          { code }
+    { legacy_if_set:n } { if }
+    { tl_set:N }        { store }
+    { usage:n }         { usage }
+    { \q_recursion_tail } { }
+    \q_recursion_stop
+\group_end:
+\cs_generate_variant:Nn \clist_put_right:Nn { Nv }
+\clist_new:N \l__keys_options_clist
+\bool_new:N \l__keys_options_loading_bool
+\cs_new_protected:Npn \__keys_options:n #1
+  { \__keys_options_expand_module:Nn \__keys_options_aux:n {#1} }
+\cs_new_protected:Npn \__keys_options_aux:n #1
+  {
+    \cs_gset_nopar:cpn { opt at fam@\@currname.\@currext } {#1}
+    \cs_set_protected:Npn \__keys_option_end: { }
+    \clist_clear:N \l__keys_options_clist
+    \__keys_options_global:n {#1}
+    \__keys_options_local:
+    \keys_if_exist:nnF {#1} { unknown }
+      {
+        \keys_define:nn {#1}
+          {
+            unknown .code:n =
+              {
+                \msg_error:nnxx { keys } { option-unknown }
+                  { \l_keys_key_str } { \@currname }
+              }
+          }
+        \cs_set_protected:Npn \__keys_option_end:
+          { \keys_define:nn {#1} { unknown .undefine: } }
+      }
+    \bool_set_true:N \l__keys_options_loading_bool
+    \keys_set:nV {#1} \l__keys_options_clist
+    \bool_set_false:N \l__keys_options_loading_bool
+    \AtEndOfPackage { \cs_set_eq:NN \@unprocessedoptions \scan_stop: }
+    \__keys_option_end:
+    \__keys_options_loaded:n {#1}
+  }
+\msg_new:nnnn { keys } { option-unknown }
+  { Unknown~option~'#1'~for~package~#2. }
+  {
+    LaTeX~has~been~asked~to~set~an~option~called~'#1'~
+    but~the~#2~package~has~not~created~an~option~with~this~name.
+  }
+\cs_new_protected:Npn \__keys_options_global:n #1
+  {
+    \cs_if_eq:NNF \@classoptionslist \scan_stop:
+      {
+        \cs_if_eq:NNTF \@currext \@clsextension
+          { \__keys_options_class:n {#1} }
+          { \__keys_options_package:n {#1} }
+      }
+  }
+\cs_new_protected:Npn \__keys_options_class:n #1
+  {
+    \cs_if_free:cF { opt@ \@currname . \@currext }
+      {
+        \keys_if_exist:nnTF {#1} { unknown }
+          {
+            \clist_put_right:Nv \l__keys_options_clist
+              { opt@ \@currname . \@currext }
+          }
+          {
+            \clist_map_inline:cn { opt@ \@currname . \@currext }
+              {
+                \keys_if_exist:neTF
+                  {#1} { \__keys_remove_equals:n {##1} }
+                  { \clist_put_right:Nn \l__keys_options_clist {##1} }
+                  { \clist_put_right:Nn \@unusedoptionlist {##1} }
+              }
+          }
+      }
+  }
+\cs_new_protected:Npn \__keys_options_package:n #1
+  {
+    \clist_map_inline:Nn \@classoptionslist
+      {
+        \keys_if_exist:neT {#1} { \__keys_remove_equals:n {##1} }
+          {
+            \clist_put_right:Nn \l__keys_options_clist {##1}
+            \clist_remove_all:Nn \@unusedoptionlist {##1}
+          }
+      }
+  }
+\cs_new_protected:Npn \__keys_options_local:
+  {
+    \cs_if_eq:NNF \@currext \@clsextension
+      {
+        \cs_if_exist:cT { opt@ \@currname . \@currext }
+          {
+            \clist_put_right:Nv \l__keys_options_clist
+              { opt@ \@currname . \@currext }
+          }
+      }
+  }
+\cs_new:Npn \__keys_remove_equals:n #1
+  { \__keys_remove_equals:w #1 = \s__keys_stop }
+\cs_new:Npn \__keys_remove_equals:w #1 = #2 \s__keys_stop { \exp_not:n {#1} }
+\cs_generate_variant:Nn \keys_define:nn { nx }
+\cs_new_protected:Npn \__keys_options_expand_module:Nn #1#2
+  {
+    \cs:w __keys_options_expand_module:nN \use:e { \cs_end: {#2} } #1
+  }
+\cs_new_protected:Npn \__keys_options_expand_module:nN #1#2
+  { #2 {#1} }
+\NewDocumentCommand \DeclareKeys { O { \@currname } +m }
+  { \__keys_options_expand_module:Nn \keys_define:nn {#1} {#2} }
+\NewDocumentCommand \DeclareUnknownKeyHandler { O { \@currname } +m }
+  {
+    \cs_set_protected:cpn { __keys_unknown_handler_ #1 :nn } ##1##2 {#2}
+    \__keys_options_expand_module:Nn \keys_define:nx {#1}
+      {
+        unknown .code:n =
+          \exp_not:N \exp_args:NV
+            \exp_not:c { __keys_unknown_handler_ #1 :nn }
+            \exp_not:N \l_keys_key_str {####1}
+      }
+  }
+\NewDocumentCommand \ProcessKeyOptions { O { \@currname } }
+  { \__keys_options:n {#1} }
+\@onlypreamble \ProcessKeyOptions
+\cs_new_protected:Npn \__keys_options_loaded:n #1
+  {
+    \prop_get:NnNT \l_keys_usage_load_prop {#1} \l__keys_tmpa_tl
+      {
+        \clist_map_inline:Nn \l__keys_tmpa_tl
+          {
+            \keys_define:nn {#1}
+              {
+                ##1 .code:n =
+                  \__keys_options_loaded:nn {#1} {##1}
+              }
+          }
+      }
+  }
+\cs_new_protected:Npn \__keys_options_loaded:nn #1#2
+  {
+    \bool_if:NTF \l__keys_options_loading_bool
+      {
+        \msg_warning:nnxx { keys } { load-option-ignored }
+          { \use:c { opt at fam@\@currname.\@currext } } {#2}
+      }
+      { \msg_error:nnnn { keys } { load-only } {#1} {#2} }
+  }
+\msg_new:nnn { keys } { load-option-ignored }
+  { Package~"#1"~has~already~been~loaded:~ignoring~load-time~option~"#2". }
+\msg_new:nnnn { keys } { load-only }
+  { Key~"#2"~may~only~be~used~in~the~during~loading~of~package~"#1". }
+  {
+    LaTeX~was~asked~to~set~a~key~called~"#2",~but~this~is~only~allowed~
+    in~the~optional~argument~when~loading~package~"#1".
+  }
+\tl_gput_left:Nn \@kernel at after@begindocument
+  {
+    \prop_map_inline:Nn \l_keys_usage_preamble_prop
+      {
+        \clist_map_inline:nn {#2}
+          {
+            \keys_define:nn {#1}
+              {
+                ##1 .code:n =
+                  \msg_error:nnn { keys } { preamble-only } {##1}
+              }
+          }
+      }
+  }
+\msg_new:nnnn { keys } { preamble-only }
+  { Key~"#1"~may~only~be~used~in~the~preamble. }
+  {
+    LaTeX~was~asked~to~set~a~key~called~"#1",~but~this~is~only~allowed~
+    before~\begin{document}.~You~will~need~to~set~the~key~earlier.
+  }
+\NewDocumentCommand \SetKeys { O { \@currname } +m }
+  { \__keys_options_expand_module:Nn \keys_set:nn {#1} {#2} }
+\ExplSyntaxOff
 %%% From File: ltfilehook.dtx
-\providecommand\ltfilehookversion{v1.0l}
-\providecommand\ltfilehookdate{2021/08/27}
+\providecommand\ltfilehookversion{v1.0m}
+\providecommand\ltfilehookdate{2022/04/01}
 \ExplSyntaxOn
 \tl_new:N \CurrentFile
 \tl_new:N \CurrentFilePath
@@ -14421,8 +15121,16 @@
 \cs_new_eq:NN \undeclare at file@substitution \__filehook_subst_remove:n
 \ExplSyntaxOff
 \ExplSyntaxOff
-\def\set at curr@file#1{%
+\def\set at curr@file{%
   \begingroup
+    \set at curr@file at aux}
+\edef\set at curr@file at nosearch{%
+  \begingroup
+    \let\noexpand\input at path\noexpand\@empty
+    \csname seq_clear:N\endcsname
+      \expandafter\noexpand\csname l_file_search_path_seq\endcsname
+    \noexpand\set at curr@file at aux}
+\def\set at curr@file at aux#1{%
     \escapechar\m at ne
     \let\protect\string
     \edef~{\string~}%
@@ -14557,12 +15265,13 @@
 \declare at file@substitution{atveryend.sty}{atveryend-ltx.sty}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%
-%% Copyright (C) 2020-2021
+%% Copyright (C) 2020-2022
 %%               Frank Mittelbach, LaTeX Team
 %%
 %%% From File: ltshipout.dtx
-\providecommand\ltshipoutversion{v1.0j}
-\providecommand\ltshipoutdate{2021/06/09}
+\providecommand\ltshipoutversion{v1.0m}
+\providecommand\ltshipoutdate{2022/05/08}
+ %    \cs{AtBeginDvi} is the existing \LaTeXe{} interface to fill the
 \ExplSyntaxOn
 \bool_new:N \g__shipout_debug_bool
 \cs_new_eq:NN \__shipout_debug:n  \use_none:n
@@ -14586,21 +15295,21 @@
 \box_new:N  \l__shipout_raw_box
 \sys_if_engine_luatex:TF
   {
-    \newluafunction \__shipout_finalize_box:
+    \newprotectedluacmd \__shipout_finalize_box:
     \exp_args:Nx \everyjob {
       \exp_not:V \everyjob
       \exp_not:N \lua_now:n {
         luatexbase.create_callback('pre_shipout_filter', 'list')
         local~call, getbox, setbox = luatexbase.call_callback, tex.getbox, tex.setbox~
-        lua.get_functions_table()[\the \__shipout_finalize_box:] = function()
-          local~result = call('pre_shipout_filter', getbox(\the \l_shipout_box))
-          if~not (result == true) then~
+        lua.get_functions_table()[\the \allocationnumber] = function()
+          local~head = getbox(\the \l_shipout_box)
+          local~result = call('pre_shipout_filter', head)
+          if~not (result == head) then~
             setbox(\the \l_shipout_box, result~or~nil)
           end~
         end
       }
     }
-    \protected \luadef \__shipout_finalize_box: \the \__shipout_finalize_box:
   } {
     \cs_set_eq:NN \__shipout_finalize_box: \scan_stop:
   }
@@ -14673,8 +15382,8 @@
                       \__shipout_add_foreground_box:n
                           { \UseHook{shipout/lastpage}
                             \@kernel at after@shipout at lastpage }
+                      \bool_gset_true:N \g__shipout_lastpage_handled_bool
                     }
-                    \bool_gset_true:N \g__shipout_lastpage_handled_bool
                 }
               \__shipout_finalize_box:
               \cs_set_eq:NN \protect \exp_not:N
@@ -14919,8 +15628,17 @@
         \iow_now:Nx \@auxout {
           \gdef\string\@abspage at last {\int_use:N \g_shipout_readonly_int}}
      \fi
-      \bool_if:NF \g__shipout_lastpage_handled_bool
+      \bool_if:NTF \g__shipout_lastpage_handled_bool
          {
+           \int_compare:nNnF \@abspage at last = \g_shipout_readonly_int
+            {
+              \@latex at warning@no at line{Hook~ 'shipout/lastpage'~ executed~
+                on~ wrong~ page~ (\@abspage at last\space not~
+                \int_use:N\g_shipout_readonly_int).\MessageBreak
+                Rerun~ to~ correct~ this}%
+            }
+         }
+         {
           \bool_lazy_and:nnF
             { \hook_if_empty_p:n {shipout/lastpage} }
             { \tl_if_empty_p:N \@kernel at after@shipout at lastpage }
@@ -14973,7 +15691,7 @@
               \__shipout_add_foreground_picture:n
 \ExplSyntaxOff
 \ExplSyntaxOn
-\cs_new_protected:Npn \AtEndDvi {\AddToHook{shipout/lastpage}}
+\cs_new_protected:Npn \AtEndDvi #1 {\AddToHook{shipout/lastpage}{#1}}
 \ExplSyntaxOff
 \disable at package@load{atenddvi}
    {\PackageWarning{atenddvi}
@@ -15307,8 +16025,10 @@
 }%
 \def \@opcol {%
   \if at twocolumn
+    \@expl@@@mark at update@dblcol at structures@@
     \@outputdblcol
   \else
+    \@expl@@@mark at update@singlecol at structures@@
     \@outputpage
   \fi
   \global \@mparbottom \z@ \global \@textfloatsheight \z@
@@ -16074,6 +16794,10 @@
 \def\newmarks{%
   \e at alloc\marks \e at alloc@chardef{\count256}\m at ne\e at alloc@top}
 \fi
+\NewMarkClass {2e-left}
+\NewMarkClass {2e-right}
+\NewMarkClass {2e-right-nonempty}
+
 \ifx\XeTeXcharclass\@undefined
 \else
 \ifdim\the\XeTeXversion\XeTeXrevision\p@>0.99993\p@
@@ -16385,23 +17109,23 @@
 \uccode`\^^9e=`\^^d0 % d-bar
 \lccode`\^^[=`\^^[   % oe in OT1
 \fi % End of reset block for 8-bit engines
+\ExplSyntaxOn
+\protected\def\@expl at text@lowercase@@n{\text_lowercase:n}
+\protected\def\@expl at text@uppercase@@n{\text_uppercase:n}
+\tl_put_right:Nn \l_text_case_exclude_arg_tl  { \NoCaseChange }
+\cs_new_protected:Npn \NoCaseChange #1 {#1}
+\ExplSyntaxOff
 \DeclareRobustCommand{\MakeUppercase}[1]{{%
       \def\i{I}\def\j{J}%
       \def\reserved at a##1##2{\let##1##2\reserved at a}%
       \expandafter\reserved at a\@uclclist\reserved at b{\reserved at b\@gobble}%
-      \let\UTF at two@octets at noexpand\@empty
-      \let\UTF at three@octets at noexpand\@empty
-      \let\UTF at four@octets at noexpand\@empty
-      \protected at edef\reserved at a{\uppercase{#1}}%
+      \protected at edef\reserved at a{\@expl at text@uppercase@@n{\noexpand\unexpanded{#1}}}%
       \reserved at a
    }}
 \DeclareRobustCommand{\MakeLowercase}[1]{{%
       \def\reserved at a##1##2{\let##2##1\reserved at a}%
       \expandafter\reserved at a\@uclclist\reserved at b{\reserved at b\@gobble}%
-      \let\UTF at two@octets at noexpand\@empty
-      \let\UTF at three@octets at noexpand\@empty
-      \let\UTF at four@octets at noexpand\@empty
-      \protected at edef\reserved at a{\lowercase{#1}}%
+      \protected at edef\reserved at a{\@expl at text@lowercase@@n{\noexpand\unexpanded{#1}}}%
       \reserved at a
    }}
 \def\@uclclist{\oe\OE\o\O\ae\AE

Modified: trunk/Master/texmf-dist/tex/latex/base/latex209.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/latex209.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/latex209.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -15,7 +15,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/latexrelease.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/latexrelease.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/latexrelease.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -20,6 +20,7 @@
 %% lterror.dtx  (with options: `latexrelease')
 %% ltpar.dtx  (with options: `latexrelease')
 %% ltpara.dtx  (with options: `latexrelease')
+%% ltmeta.dtx  (with options: `latexrelease')
 %% ltspace.dtx  (with options: `latexrelease')
 %% ltlogos.dtx  (with options: `latexrelease')
 %% ltfiles.dtx  (with options: `latexrelease')
@@ -47,6 +48,7 @@
 %% ltfloat.dtx  (with options: `latexrelease')
 %% ltidxglo.dtx  (with options: `latexrelease')
 %% ltbibl.dtx  (with options: `latexrelease')
+%% ltmarks.dtx  (with options: `latexrelease')
 %% ltpage.dtx  (with options: `latexrelease')
 %% ltclass.dtx  (with options: `latexrelease,tracerollback')
 %% ltfilehook.dtx  (with options: `latexrelease')
@@ -63,7 +65,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -288,7 +290,7 @@
 }
 %%% From File: ltvers.dtx
 \edef\latexreleaseversion
-   {2021-11-15}
+   {2022-06-01}
 \newif\if at includeinrelease
 \@includeinreleasefalse
 \def\IncludeInRelease#1{%
@@ -381,7 +383,7 @@
   \GenericInfo{}{BEGIN module: \new at modulename\space (\new at moduledate)}%
   \GenericInfo{}{ \@spaces\@spaces\@spaces\space#3\@gobble}%
   \ifnum\sourceLaTeXdate<%
-      \expandafter\@parse at version\new at moduledate//00\@nil\relax
+        \expandafter\@parse at version\new at moduledate//00\@nil\relax
     \ifnum\expandafter\@parse at version\fmtversion//00\@nil<%
           \expandafter\@parse at version\new at moduledate//00\@nil\relax
       \GenericInfo{}{Skipping module \new at modulename}%
@@ -396,7 +398,19 @@
     \@skipping at moduletrue
     \expandafter\new at module@skip
   \fi}
-\long\def\new at module@skip#1\IncludeInRelease{\IncludeInRelease}
+\long\def\new at module@skip#1\IncludeInRelease{%
+  \long\def\reserved at a##1\EndModuleRelease{}%
+  \if\relax\detokenize\expandafter{\reserved at a#1{}{}\EndModuleRelease}\relax
+  \else
+    \@latex at error{Missing mandatory \string\IncludeInRelease{0000/00/00}}\@ehc
+    \expandafter\@secondoftwo
+  \fi
+  \@gobble
+    {\@expandtwoargs\IncludeInRelease
+         {0000/00/00}{\new at modulename}%
+         {ERROR! Emergency recovery}%
+     #1}%
+  \IncludeInRelease}
 \def\EndModuleRelease{%
   \ifx\new at modulename\@empty
     \@latex at error{Extra \string\EndModuleRelease.}\@eha
@@ -407,7 +421,7 @@
     \@skipping at modulefalse
   \fi}
 \ProvidesPackage{latexrelease}
-          [2021/04/29 v1.0n LaTeX release emulation and tests
+          [2022/02/28 v1.0o LaTeX release emulation and tests
               (including releases up to \latexreleaseversion)]
 \NeedsTeXFormat{LaTeX2e}[1996/06/01]
 \@ifundefined{sourceLaTeXdate}{%
@@ -471,7 +485,7 @@
   \catcode58=11 % :
   \catcode126=10 % ~
   \catcode32=09 % <space>
-  \xdef\latexrelease at postexpl{\unexpanded{%
+  \xdef\latexrelease at postltexpl{\unexpanded{%
 \cs_gset_protected:Npn \__latexrelease_declare_command:w
   { \@star at or@long \__latexrelease_declare_command:Nw }
 \cs_gset_protected:Npn \__latexrelease_declare_command:Nw #1
@@ -511,26 +525,32 @@
       { \cs_set_eq:NN #3 \tex_undefined:D            \use:n      }
   }
 \tl_clear_new:N \l__latexrelease_restores_tl
-\cs_gset:Npn \__latexrelease_tmp:w #1 #2
+\cs_gset:Npn \__latexrelease_redefines:w #1 #2
   {
-    \quark_if_recursion_tail_stop_do:Nn #1
-      { \cs_undefine:N \__latexrelease_tmp:w }
+    \quark_if_recursion_tail_stop:N #1
     \tl_put_right:Nn \l__latexrelease_restores_tl {#1}
     \cs_set_eq:cN { __latexrelease_ \cs_to_str:N #1 } #1
     \cs_set_eq:NN #1 #2
-    \__latexrelease_tmp:w
+    \__latexrelease_redefines:w
   }
-\__latexrelease_tmp:w
+\__latexrelease_redefines:w
   \__kernel_chk_if_free_cs:N \use_none:n
   \e at alloc \__latexrelease_e at alloc:NnnnnN
   \__kernel_msg_error:nnx \use_none:nnn
   \msg_new:nnnn \msg_gset:nnnn
-  \NewDocumentCommand \DeclareDocumentCommand
+  % \NewDocumentCommand \DeclareDocumentCommand % after ltcmd.dtx
   \newcommand \__latexrelease_declare_command:w
   \__kernel_msg_error:nnn  \use_none:nnn  % needed while redirect for kernel msgs doesn't work
   \q_recursion_tail \q_recursion_tail
   \q_recursion_stop
 \msg_redirect_name:nnn { hooks } { exists } { none }
+\cs_gset_protected:Npn \latexrelease at postltcmd
+  {
+    \__latexrelease_redefines:w
+      \NewDocumentCommand \DeclareDocumentCommand
+      \q_recursion_tail \q_recursion_tail
+      \q_recursion_stop
+  }
   }}%
 \endgroup
 %%% From File: ltdirchk.dtx
@@ -847,6 +867,40 @@
   \let\tracingstacklevels\@undefined
 \fi
 \EndIncludeInRelease
+\IncludeInRelease{2022/06/01}{\obeylines}%
+    {Add a redirection to obeylines and obeyspaces}%
+\begingroup
+\catcode`\^^M=\active % these lines must end with %
+  \gdef\obeylines{\catcode`\^^M\active%
+    \let^^M\obeyedline%
+  }%
+  \global\let^^M\par % this is in case ^^M appears in a \write
+\endgroup
+\protected\gdef\obeyedline{\par}
+\global\let\obeyedspace\space
+\begingroup
+\catcode`\ =\active%
+\gdef\obeyspaces{\catcode`\ \active\let =\obeyedspace}%
+\global\let =\space%
+\endgroup
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}{\obeylines}%
+    {Add a redirection to obeylines and obeyspaces}%
+
+\expandafter\let\csname obeylines \endcsname\@undefined
+\expandafter\let\csname obeyspace \endcsname\@undefined
+
+\begingroup
+\catcode`\^^M=\active % these lines must end with %
+  \gdef\obeylines{\catcode`\^^M\active \let^^M\par %
+                 }%
+  \global\let^^M\RawParEnd % this is in case ^^M appears in a \write
+\endgroup
+\def\obeyspaces{\catcode`\ \active}
+
+\let\obeyedline\@undefined
+\let\obeyedspace\@undefined
+\EndIncludeInRelease
 \IncludeInRelease{2021/06/01}{\loggingall}
                  {\tracingstacklevels and \tracinglostchars=3}%
 \edef\loggingall{%
@@ -1110,6 +1164,14 @@
   \e at alloc\luafunction\e at alloc@chardef
     \e at alloc@luafunction at count\m at ne\e at alloc@top
 }
+\def\newluacmd{%
+  \e at alloc\luafunction\luadef
+    \e at alloc@luafunction at count\m at ne\e at alloc@top
+}
+\def\newprotectedluacmd{%
+  \e at alloc\luafunction{\protected\luadef}
+    \e at alloc@luafunction at count\m at ne\e at alloc@top
+}
 \ifx\e at alloc@whatsit at count\@undefined
   \countdef\e at alloc@whatsit at count=261
   \e at alloc@whatsit at count=\z@
@@ -1290,6 +1352,7 @@
   }%
 \input{expl3.ltx}
 \EndIncludeInRelease
+\@ifundefined{ExplSyntaxOff}{}{\latexrelease at postltexpl}
 \IncludeInRelease{2020/10/01}{\@expl at cs@to at str@@N}%
         {expl3 macros added for the 2020-10-01 release}%
 \ExplSyntaxOn
@@ -1311,6 +1374,42 @@
 \let \@expl at cs@replacement at spec@@N \@undefined
 \let \@expl at str@map at function@@NN \@undefined
 \EndIncludeInRelease
+\IncludeInRelease{2022/06/01}%
+                 {\fpeval}{fp and int calculations}%
+\ExplSyntaxOn
+\cs_new_eq:NN \fpeval \fp_eval:n
+\cs_new_eq:NN \inteval \int_eval:n
+\cs_new_eq:NN \dimeval  \dim_eval:n
+\cs_new_eq:NN \skipeval \skip_eval:n
+\ExplSyntaxOff
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\fpeval}{fp and int calculations}%
+
+\let\fpeval\@undefined
+\let\inteval\@undefined
+\let\dimeval\@undefined
+\let\skipeval\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2022/06/01}%
+                 {\ExpandArgs}{Some pre-expansion commands}%
+\ExplSyntaxOn
+\cs_new_eq:NN \UseName \use:c
+\cs_new:Npn \ExpandArgs #1
+  {
+    \cs_if_exist_use:cF { exp_args:N #1 }
+      { \msg_expandable_error:nnn { kernel } { unknown-arg-expansion } {#1} }
+  }
+\msg_new:nnn { kernel } { unknown-arg-expansion }
+  { Unknown~arg~expansion~"#1" }
+\ExplSyntaxOff
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\ExpandArgs}{Some pre-expansion commands}%
+
+\let\UseName\@undefined
+\let\ExpandArgs\@undefined
+\EndIncludeInRelease
 %%% From File: ltdefns.dtx
 \IncludeInRelease{2020/10/01}%
                  {\typeout}{Allow "par" in \typeout}%
@@ -1791,8 +1890,8 @@
 
 \EndIncludeInRelease
 %%% From File: ltcmd.dtx
-\def\ltcmdversion{v1.0i}
-\def\ltcmddate{2021-12-02}
+\def\ltcmdversion{v1.0l}
+\def\ltcmddate{2022-03-18}
 \edef\@latexrelease at catcode@null{\the\catcode`\^^@ }
 \catcode`\^^@=12
 \ExplSyntaxOn
@@ -2978,21 +3077,21 @@
 \cs_new_protected:Npn \__cmd_show_command_aux:nNNn #1 #2 #3 #4
   {
     \__cmd_split_signature:n {#4}
-    \iow_term:x
+    \tl_show:x
       {
-        > ~ \token_to_str:N #2 = #1: \iow_newline:
+        \token_to_str:N #2 = #1: \iow_newline:
         \tl_use:N \l__cmd_tmpa_tl
-        -> \cs_replacement_spec:N #3 .
+        -> \cs_replacement_spec:N #3
       }
   }
 \cs_new_protected:Npn \__cmd_show_environment:N #1
   {
     \exp_after:wN \__cmd_show_environment:Nnnw #1 \q__cmd
-    \iow_term:x
+    \tl_show:x
       {
-        > ~ \token_to_str:N \end { \cs_to_str:N #1 } : \iow_newline:
+        \token_to_str:N \end { \cs_to_str:N #1 } : \iow_newline:
         -> \exp_args:Nc \cs_replacement_spec:N
-          { environment~ \cs_to_str:N #1 ~end~aux~ } .
+          { environment~ \cs_to_str:N #1 ~end~aux~ }
       }
   }
 \cs_new_protected:Npn \__cmd_show_environment:Nnnw #1 #2 #3 #4 \q__cmd
@@ -3951,22 +4050,14 @@
     \exp_args:Ne \str_case_e:nnF
       {
         \exp_args:Nf \tl_if_empty:nT { \cs_argument_spec:N #1 }
-          {
-            \token_if_macro:NT #1
-              {
-                \exp_after:wN \exp_after:wN
-                \exp_after:wN \token_to_str:N
-                \exp_after:wN \use_i_delimit_by_q_stop:nw
-                  #1 \scan_stop: \q_stop
-              }
-          }
+          { \exp_not:N \exp_not:n { \exp_not:e { \tl_head:N #1 } } }
       }
       {
-        { \token_to_str:N \__cmd_start:nNNnnn } {#2}
-        { \token_to_str:N \__cmd_start_expandable:nNNNNn } {#3}
-        { \token_to_str:N \__cmd_start_env:nnnnn } {#4}
+        { \exp_not:N \__cmd_start:nNNnnn } {#2}
+        { \exp_not:N \__cmd_start_expandable:nNNNNn } {#3}
+        { \exp_not:N \__cmd_start_env:nnnnn } {#4}
         {
-          \exp_after:wN \token_to_str:N
+          \exp_after:wN \exp_not:N
             \cs:w environment~
               \exp_last_unbraced:Ne \use_none:nnn
                 { \cs_to_str:N #1 } ~end~aux \cs_end:
@@ -4411,6 +4502,19 @@
 \cs_new:Npn \IfValueF { \tl_if_novalue:nT }
 \cs_new:Npn \IfValueT { \tl_if_novalue:nF }
 \cs_new:Npn \IfValueTF #1#2#3 { \tl_if_novalue:nTF {#1} {#3} {#2} }
+\IncludeInRelease{2022/06/01}%
+                 {\IfBlankTF}{Testing~for~empty~or~blank}%
+\cs_new_eq:NN \IfBlankF  \tl_if_blank:nF
+\cs_new_eq:NN \IfBlankT  \tl_if_blank:nT
+\cs_new_eq:NN \IfBlankTF \tl_if_blank:nTF
+\EndIncludeInRelease
+\IncludeInRelease{2021/11/15}%
+                 {\IfBlankTF}{Testing~for~empty~or~blank}%
+\cs_undefine:N \IfBlankF
+\cs_undefine:N \IfBlankT
+\cs_undefine:N \IfBlankTF
+
+\EndIncludeInRelease
 \tl_new:N \ProcessedArgument
 \cs_new_eq:NN \ReverseBoolean \__cmd_bool_reverse:N
 \cs_new_eq:NN \SplitArgument  \__cmd_split_argument:nnn
@@ -4437,12 +4541,12 @@
 
 \EndModuleRelease
 \ExplSyntaxOff
-\@ifundefined{ExplSyntaxOff}{}{\latexrelease at postexpl}
+\@ifundefined{ExplSyntaxOff}{}{\latexrelease at postltcmd}
 \catcode`\^^@=\@latexrelease at catcode@null\relax
 
 %%% From File: lthooks.dtx
-\def\lthooksversion{v1.0s}
-\def\lthooksdate{2021/09/28}
+\def\lthooksversion{v1.0u}
+\def\lthooksdate{2022/05/19}
 \ExplSyntaxOn
 \NewModuleRelease{2020/10/01}{lthooks}
                  {The~hook~management~system}
@@ -5022,6 +5126,7 @@
 \tl_const:cn { c__hook_generic_env/./begin_tl } { + }
 \tl_const:cn { c__hook_generic_env/./end_tl   } { + }
 \tl_const:cn { c__hook_generic_include/./end_tl } { - }
+\tl_const:cn { c__hook_generic_include/./excluded_tl } { + }
 \clist_map_inline:nn { file , package , class , include }
   {
     \tl_const:cn { c__hook_deprecated_#1/./before_tl } { }
@@ -5083,6 +5188,8 @@
     \__hook_normalize_hook_rule_args:Nnnnn \__hook_gset_rule:nnnn
       {#1} {#2} {#3} {#4}
   }
+\IncludeInRelease{2022/06/01}{\__hook_gset_rule:nnnn}
+                 {Refuse~setting~rule~for~one-time~hooks}
 \cs_new_protected:Npn \__hook_gset_rule:nnnn #1#2#3#4
   {
     \__hook_if_deprecated_generic:nT {#1}
@@ -5090,6 +5197,37 @@
         \__hook_deprecated_generic_warn:n {#1}
         \__hook_do_deprecated_generic:Nn \__hook_gset_rule:nnnn {#1}
           {#2} {#3} {#4}
+        \__hook_clean_to_scan:w
+      }
+    \__hook_if_execute_immediately:nT {#1}
+      {
+        \msg_error:nnnnnn { hooks } { rule-too-late }
+          {#1} {#2} {#3} {#4}
+        \__hook_clean_to_scan:w
+      }
+    \__hook_init_structure:n {#1}
+    \__hook_rule_gclear:nnn {#1} {#2} {#4}
+    \cs_if_exist_use:cTF { __hook_rule_#3_gset:nnn }
+      {
+          {#1} {#2} {#4}
+        \__hook_update_hook_code:n {#1}
+      }
+      {
+        \msg_error:nnnnnn { hooks } { unknown-rule }
+          {#1} {#2} {#3} {#4}
+      }
+    \s__hook_mark
+  }
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}{\__hook_gset_rule:nnnn}
+                 {Refuse~setting~rule~for~one-time~hooks}
+\cs_new_protected:Npn \__hook_gset_rule:nnnn #1#2#3#4
+  {
+    \__hook_if_deprecated_generic:nT {#1}
+      {
+        \__hook_deprecated_generic_warn:n {#1}
+        \__hook_do_deprecated_generic:Nn \__hook_gset_rule:nnnn {#1}
+          {#2} {#3} {#4}
         \exp_after:wN \use_none:nnnnnnnnn \use_none:n
       }
     \__hook_init_structure:n {#1}
@@ -5099,9 +5237,12 @@
           {#1} {#2} {#4}
         \__hook_update_hook_code:n {#1}
       }
-      { \msg_error:nnnnnn { hooks } { unknown-rule }
-                          {#1} {#2} {#3} {#4}        }
+      {
+        \msg_error:nnnnnn { hooks } { unknown-rule }
+          {#1} {#2} {#3} {#4}
+      }
   }
+\EndIncludeInRelease
 \cs_new_protected:Npn \__hook_rule_before_gset:nnn #1#2#3
   {
     \__hook_tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl }
@@ -5171,8 +5312,8 @@
 }
 \cs_new_protected:Npn \__hook_initialize_hook_code:n #1
   {
-    \__hook_debug:n{ \iow_term:x{^^JUpdate~ code~ for~ hook~
-                                    '#1' \on at line :^^J} }
+    \__hook_debug:n
+      { \iow_term:x { ^^J Update~code~for~hook~'#1' \on at line :^^J } }
     \__hook_include_legacy_code_chunk:n {#1}
     \__hook_if_usable:nT {#1}
       {
@@ -5193,8 +5334,8 @@
             \prop_set_eq:Nc \l__hook_work_prop { g__hook_#1_code_prop }
             \__hook_initialize_single:ccn
               { __hook~#1 } { g__hook_#1_labels_clist } {#1}
-            \__hook_debug:n{ \exp_args:NNx \prop_gput:Nnn
-                                       \g__hook_used_prop {#1}{} }
+            \__hook_debug:n
+              { \exp_args:NNx \prop_gput:Nnn \g__hook_used_prop {#1} { } }
           }
       }
   }
@@ -5351,12 +5492,12 @@
        }
     \prop_put:Nnn \l__hook_work_prop {#1} { }
   }
-\cs_new_eq:cc { __hook_apply_-rule_<:nnn  } { __hook_apply_rule_>:nnn }
-\cs_new_eq:cc { __hook_apply_-rule_>:nnn  } { __hook_apply_rule_<:nnn }
+\cs_new_eq:cc { __hook_apply_-rule_<:nnn } { __hook_apply_rule_>:nnn }
+\cs_new_eq:cc { __hook_apply_-rule_>:nnn } { __hook_apply_rule_<:nnn }
 \cs_new_eq:cc { __hook_apply_-rule_<-:nnn } { __hook_apply_rule_<-:nnn }
 \cs_new_eq:cc { __hook_apply_-rule_->:nnn } { __hook_apply_rule_->:nnn }
-\cs_new_eq:cc { __hook_apply_-rule_xE:nnn  } { __hook_apply_rule_xE:nnn }
-\cs_new_eq:cc { __hook_apply_-rule_xW:nnn  } { __hook_apply_rule_xW:nnn }
+\cs_new_eq:cc { __hook_apply_-rule_xE:nnn } { __hook_apply_rule_xE:nnn }
+\cs_new_eq:cc { __hook_apply_-rule_xW:nnn } { __hook_apply_rule_xW:nnn }
 \cs_new_protected:Npn \__hook_msg_pair_found:nnn #1#2#3
   {
     \iow_term:x{~ \str_if_eq:nnTF {#3} {??} {default} {~normal} ~
@@ -5652,9 +5793,9 @@
     \__hook_tl_gclear:c { __hook~#1 }
     \__hook_tl_gclear:c { __hook_next~#1 }
     \__hook_tl_gclear:c { __hook_toplevel~#1 }
-    \prop_gclear:c { g__hook_#1_code_prop }
+    \prop_gclear_new:c { g__hook_#1_code_prop }
   }
-\prg_new_conditional:Npnn \__hook_if_execute_immediately:n #1 { F, TF }
+\prg_new_conditional:Npnn \__hook_if_execute_immediately:n #1 { T, F, TF }
   {
     \__hook_if_usable:nTF {#1}
       {
@@ -5777,7 +5918,8 @@
     This~command~was~ignored.
   }
 \msg_new:nnnn { hooks } { unknown-rule }
-  { Unknown~ relationship~ '#3'~
+  {
+    Unknown~ relationship~ '#3'~
     between~ labels~ '#2'~ and~ '#4'~
     \str_if_eq:nnF {#1} {??} { ~in~hook~'#1' }. ~
     Perhaps~ a~ misspelling?
@@ -5791,6 +5933,19 @@
     'voids'~ or~
     'unrelated'.
   }
+\msg_new:nnnn { hooks } { rule-too-late }
+  {
+    Sorting~rule~for~'#1'~hook~applied~too~late.\\
+    Try~setting~this~rule~earlier.
+  }
+  {
+    You~tried~to~set~the~ordering~of~hook~'#1'~using\\
+    \ \ \iow_char:N\\DeclareHookRule{#1}{#2}{#3}{#4}\\
+    but~hook~'#1'~was~already~used~as~a~one-time~hook,~
+    thus~sorting~is\\
+    no~longer~possible.~Declare~the~rule~
+    before~the~hook~is~used.
+  }
 \msg_new:nnnn { hooks } { misused-top-level }
   {
     Illegal~use~of~\iow_char:N \\AddToHook{#1}[top-level]{...}.\\
@@ -6422,6 +6577,7 @@
 
 \EndModuleRelease
 \ExplSyntaxOff
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%% From File: ltalloc.dtx
 %%% From File: ltcntrl.dtx
 %%% From File: lterror.dtx
@@ -6470,7 +6626,7 @@
 %% File: ltpara.dtx (C) Copyright 2020-2021
 %%% From File: ltpara.dtx
 \def\ltparaversion{v1.0k}
-\def\ltparadate{2021/11/11}
+\def\ltparadate{2022/05/13}
 
 
 \ExplSyntaxOn
@@ -6614,6 +6770,45 @@
 \EndModuleRelease
 \ExplSyntaxOff
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% File: ltmeta.dtx (C) Copyright 2021, 2022
+%%% From File: ltmeta.dtx
+\def\ltmetaversion{v1.0b}
+\def\ltmetadate{2022/05/18}
+\NewModuleRelease{2022/06/01}{ltmeta}
+                 {Document Metadata handling}
+\let \IfDocumentMetadataTF \@secondoftwo
+\protected\def\DocumentMetadata{%
+  \InputIfFileExists{documentmetadata-support.ltx}%
+     {}%
+     {%
+       \@latex at error{No support files for
+                    \noexpand\DocumentMetadata found}
+         {Is the 'LaTeX-lab' bundle installed?%
+         \MessageBreak
+         Without it, the declaration is ignored.}%
+      \let\DocumentMetadata\@gobble
+     }%
+  \let \IfDocumentMetadataTF \@firstoftwo
+  \DocumentMetadata
+}
+\NewDocumentCommand\MakeLinkTarget{sO{}m}{%
+  \ifvmode
+    \special{}%
+  \else
+    \@savsf\spacefactor
+    \smash{}%
+    \spacefactor\@savsf
+  \fi}
+\NewDocumentCommand\LinkTargetOn{}{}
+\NewDocumentCommand\LinkTargetOff{}{}
+\NewDocumentCommand\NextLinkTarget{m}{}
+\IncludeInRelease{0000/00/00}{ltmeta}%
+                 {Undo Document Metadata handling}
+
+\let\DocumentMetadata\@undefined
+
+\EndModuleRelease
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%% From File: ltspace.dtx
 \IncludeInRelease{2019/10/01}%
                  {\pagebreak}{Make commands robust}%
@@ -7200,8 +7395,61 @@
   \else \@include#1 \fi}
 
 \EndIncludeInRelease
+\IncludeInRelease{2022/06/01}%
+                 {\@include}{Spaces in file names and hooks}%
+\def\@include#1 {%
+\ifx\@nodocument\relax
+  \clearpage
+  \if at filesw
+    \immediate\write\@mainaux{\string\@input{#1.aux}}%
+  \fi
+  \@tempswatrue
+  \if at partsw
+    \@tempswafalse
+    \edef\reserved at b{#1}%
+    \@for\reserved at a:=\@partlist\do
+      {\ifx\reserved at a\reserved at b\@tempswatrue\fi}%
+  \fi
+  \if at tempswa
+    \let\@auxout\@partaux
+    \if at filesw
+      \immediate\openout\@partaux "#1.aux"
+      \immediate\write\@partaux{\relax}%
+    \fi
+    \@filehook at set@CurrentFile
+    \UseHook{include/before}%
+    \UseOneTimeHook{include/#1/before}%
+    \@input@{#1.tex}%
+    \UseOneTimeHook{include/#1/end}%
+    \UseHook{include/end}%
+    \clearpage
+    \UseOneTimeHook{include/#1/after}%
+    \UseHook{include/after}%
+    \clearpage
+    \@writeckpt{#1}%
+    \if at filesw
+      \immediate\closeout\@partaux
+    \fi
+  \else
+    \deadcycles\z@
+    \@nameuse{cp@#1}%
+    \UseHook{include/excluded}%
+    \UseOneTimeHook{include/#1/excluded}%
+  \fi
+  \let\@auxout\@mainaux
+\else
+\@latex at warning{%
+  \noexpand\include should only be used after \string\begin{document}}%
+\@input@{#1}%
+\fi}
+\NewHook{include/before}
+\NewReversedHook{include/end}
+\NewReversedHook{include/after}
+\NewHook{include/excluded}
+\EndIncludeInRelease
 \IncludeInRelease{2020/10/01}%
                  {\@include}{Spaces in file names and hooks}%
+\EndIncludeInRelease
 \def\@include#1 {%
 \ifx\@nodocument\relax
   \clearpage
@@ -7248,9 +7496,8 @@
 \NewHook{include/before}
 \NewReversedHook{include/end}
 \NewReversedHook{include/after}
-\EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\@include}{Spaces in file names}%
+                 {\@include}{Spaces in file names and hooks}%
 \def\@include#1 {%
   \clearpage
   \if at filesw
@@ -7612,6 +7859,7 @@
 \expandafter
   \let\csname\string\T1\string\c-g\endcsname\@undefined
 \EndIncludeInRelease
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%% From File: ltcounts.dtx
 
 \IncludeInRelease{2015/01/01}{\@stpelt}
@@ -8091,6 +8339,7 @@
     \hbadness\z@\showboxdepth\z@\ #1%
     \color at endgroup}}
 \EndIncludeInRelease
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%% From File: ltfssaxes.dtx
 %% Copyright (C) 1999-2020 Frank Mittelbach
 \IncludeInRelease{2020/02/02}%
@@ -10728,8 +10977,47 @@
 
 %%% From File: ltpageno.dtx
 %%% From File: ltxref.dtx
+\IncludeInRelease{2022/06/01}%
+                 {\ref}{Add starred reference commands}%
+\def\@kernel at sref#1{\expandafter\@setref\csname r@#1\endcsname\@firstoftwo{#1}}
+\def\@kernel at spageref#1{\expandafter\@setref\csname r@#1\endcsname
+                 \@secondoftwo{#1}}
+\let\@kernel at ref\@kernel at sref
+\let\@kernel at pageref\@kernel at spageref
+\NewDocumentCommand\ref{s}
+   {\IfBooleanTF{#1}{\@kernel at sref}{\@kernel at ref}}
+\NewDocumentCommand\pageref{s}
+   {\IfBooleanTF{#1}{\@kernel at spageref}{\@kernel at pageref}}
+\def\@kernel at pageref@exp#1{\csname cs_if_exist:cTF\endcsname
+   {r@#1}{\csname tl_item:cn\endcsname{r@#1}{2}}{0}}
+\def\@kernel at ref@exp#1{\csname cs_if_exist:cTF\endcsname
+   {r@#1}{\csname tl_item:cn\endcsname{r@#1}{1}}{0}}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\ref}{Add starred reference commands}%
+\def\ref#1{\expandafter\@setref\csname r@#1\endcsname\@firstoftwo{#1}}
+\def\pageref#1{\expandafter\@setref\csname r@#1\endcsname
+                                   \@secondoftwo{#1}}
+
+\EndIncludeInRelease
+\IncludeInRelease{2022/06/01}%
+                 {\Ref}{Add starred version}%
+\def\@currentcounter{}
+\def\refstepcounter#1{\stepcounter{#1}%
+    \edef\@currentcounter{#1}%
+    \protected at edef\@currentlabel
+       {\csname p@#1\expandafter\endcsname\csname the#1\endcsname}%
+}
+\def\labelformat#1{\expandafter\def\csname p@#1\endcsname##1}
+\def\@kernel at Ref#1{\protected at edef\@tempa{\@kernel at ref{#1}}%
+       \expandafter\MakeUppercase\@tempa}
+\def\@kernel at sRef#1{\protected at edef\@tempa{\@kernel at sref{#1}}%
+       \expandafter\MakeUppercase\@tempa}
+\NewDocumentCommand\Ref{s}
+   {\IfBooleanTF{#1}{\@kernel at sRef}{\@kernel at Ref}}
+\EndIncludeInRelease
 \IncludeInRelease{2020/10/01}%
-                 {\refstepcounter}{Add \@currentcounter}%
+                 {\Ref}{Add starred version}%
 \def\@currentcounter{}
 \def\refstepcounter#1{\stepcounter{#1}%
     \edef\@currentcounter{#1}%
@@ -12695,6 +12983,24 @@
 \EndIncludeInRelease
 %%% From File: ltidxglo.dtx
 %%% From File: ltbibl.dtx
+\IncludeInRelease{2022/06/01}%
+                 {\cite}{check for blank}%
+\DeclareRobustCommand\cite{%
+  \@ifnextchar [{\@tempswatrue\@citex at checkblank}{\@tempswafalse\@citex at checkblank[]}}
+\def\@citex at checkblank[#1]#2{%
+   \IfBlankTF {#2}%
+     {\@citex[#1]{\space}}%
+     {\@citex[#1]{#2}}%
+}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\cite}{check for blank}%
+
+\DeclareRobustCommand\cite{%
+  \@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}
+\let\@citex at checkblank\@undefined
+
+\EndIncludeInRelease
 \IncludeInRelease{2021/06/01}%
                  {\nocite}{Allow nocite in preamble}%
 \def\nocite#1{\@bsphack
@@ -12725,9 +13031,350 @@
   \@esphack}
 
 \EndIncludeInRelease
+%% File: ltmarks.dtx (C) Copyright 2022
+%%% From File: ltmarks.dtx
+\def\ltmarksversion{v1.0d}
+\def\ltmarksdate{2022/06/01}
+%% \end{function}
+
+\ExplSyntaxOn
+\NewModuleRelease{2022/06/01}{ltmarks}
+                 {Marks~handling}
+\seq_new:N \g__mark_classes_seq
+\cs_new_protected:Npn \mark_new_class:n #1
+{
+  \seq_if_in:NnTF \g__mark_classes_seq {#1}
+      {
+        \msg_error:nnn { mark } { class-already-defined }
+          {#1}
+      }
+      { \__mark_new_class:nn {#1} }
+}
+\@onlypreamble \mark_new_class:n
+\cs_new_protected:Npn \__mark_new_class:nn #1
+{
+  \exp_args:Nc \newmarks {c__mark_class_ #1 _mark}
+  \seq_gput_right:Nn \g__mark_classes_seq {#1}
+  \tl_new:c   { g__mark_page_top_   #1 _tl }
+  \tl_new:c   { g__mark_page_first_ #1 _tl }
+  \tl_new:c   { g__mark_page_last_  #1 _tl }
+  \tl_new:c   { g__mark_previous-page_top_   #1 _tl }
+  \tl_new:c   { g__mark_previous-page_first_ #1 _tl }
+  \tl_new:c   { g__mark_previous-page_last_  #1 _tl }
+  \tl_new:c   { g__mark_column_top_   #1 _tl }
+  \tl_new:c   { g__mark_column_first_ #1 _tl }
+  \tl_new:c   { g__mark_column_last_  #1 _tl }
+  \tl_new:c   { g__mark_previous-column_top_   #1 _tl }
+  \tl_new:c   { g__mark_previous-column_first_ #1 _tl }
+  \tl_new:c   { g__mark_previous-column_last_  #1 _tl }
+  \tl_new:c   { g__mark_first-column_top_   #1 _tl }
+  \tl_new:c   { g__mark_first-column_first_ #1 _tl }
+  \tl_new:c   { g__mark_first-column_last_  #1 _tl }
+  \tl_new:c   { g__mark_last-column_top_    #1 _tl }
+  \tl_new:c   { g__mark_last-column_first_  #1 _tl }
+  \tl_new:c   { g__mark_last-column_last_   #1 _tl }
+}
+\box_new:N \l__mark_box
+\tl_new:N  \g__mark_tmp_tl
+\tl_new:N  \g__mark_new_top_tl
+\cs_new_protected:Npn \__mark_update_structure:nn #1#2
+  {
+    \__mark_update_structure_alias:nn { previous-#1 } {#1}
+    \group_begin:
+      \dim_set_eq:NN \tex_splitmaxdepth:D \c_max_dim
+      \int_set_eq:NN \tex_vbadness:D      \c_max_int
+      \dim_set_eq:NN \tex_vfuzz:D         \c_max_dim
+      \vbox_set_to_ht:Nnn \l__mark_box { -.5\c_max_dim }
+        {
+          #2
+          \tex_unskip:D
+          \box_set_to_last:N \l__mark_box
+          \int_compare:nNnT \tex_lastnodetype:D < 0
+            {
+              \box_if_vertical:NT \l__mark_box
+                {
+                  \vbox_set_to_ht:Nnn \l__mark_box { -.5\c_max_dim }
+                    {
+                      \vbox_unpack:N \l__mark_box
+                      \tex_kern:D \c_zero_dim % ensure that box
+                                              % is not empty
+                    }
+                    \int_compare:nNnT \tex_badness:D > 0
+                      { \vbox_unpack:N \l__mark_box }
+                  }
+            }
+          \tex_kern:D \c_zero_dim
+        }
+      \int_compare:nNnTF \tex_badness:D > 0
+        {
+          \vbox_set_split_to_ht:NNn \l__mark_box \l__mark_box \c_max_dim
+          \seq_map_inline:Nn \g__mark_classes_seq
+            {
+              \tl_gset_eq:Nc \g__mark_new_top_tl { g__mark_#1_last_##1_tl }
+              \tl_gset_eq:cN { g__mark_#1_top_##1_tl } \g__mark_new_top_tl
+              \tl_gset:No \g__mark_tmp_tl
+                { \tex_splitbotmarks:D \use:c { c__mark_class_##1_mark } }
+              \tl_if_empty:NTF \g__mark_tmp_tl
+                {
+                  \tl_gset_eq:cN { g__mark_#1_last_ ##1_tl }
+                    \g__mark_new_top_tl
+                  \tl_gset_eq:cN { g__mark_#1_first_##1_tl }
+                    \g__mark_new_top_tl
+                }
+                {
+                  \tl_gset_eq:cN { g__mark_#1_last_##1_tl } \g__mark_tmp_tl
+                  \tl_gset:co { g__mark_#1_first_##1_tl }
+                    {
+                      \tex_splitfirstmarks:D
+                        \use:c { c__mark_class_##1_mark }
+                    }
+                }
+            }
+        }
+        {
+          \msg_error:nnn { mark } { infinite-shrinkage } {#1}
+          \seq_map_inline:Nn \g__mark_classes_seq
+            {
+              \tl_gset_eq:cc { g__mark_#1_top_  ##1_tl }
+                             { g__mark_#1_last_ ##1_tl }
+              \tl_gset_eq:cc { g__mark_#1_first_##1_tl }
+                             { g__mark_#1_last_ ##1_tl }
+            }
+        }
+    \group_end:
+  }
+\cs_new_protected:Npn \__mark_update_structure_alias:nn #1#2 {
+  \seq_map_inline:Nn \g__mark_classes_seq
+    {
+      \tl_gset_eq:cc { g__mark_ #1 _top_   ##1 _tl }
+                     { g__mark_ #2 _top_   ##1 _tl }
+      \tl_gset_eq:cc { g__mark_ #1 _first_ ##1 _tl }
+                     { g__mark_ #2 _first_ ##1 _tl }
+      \tl_gset_eq:cc { g__mark_ #1 _last_  ##1 _tl }
+                     { g__mark_ #2 _last_  ##1 _tl }
+    }
+}
+\cs_new_protected:Npn \__mark_update_structure_to_err:n #1 {
+  \seq_map_inline:Nn \g__mark_classes_seq
+      {
+        \tl_gset:cn { g__mark_ #1 _top_   ##1 _tl } { \__mark_error:n {#1} }
+        \tl_gset:cn { g__mark_ #1 _first_ ##1 _tl } { \__mark_error:n {#1} }
+        \tl_gset:cn { g__mark_ #1 _last_  ##1 _tl } { \__mark_error:n {#1} }
+      }
+}
+\cs_new_protected:Npn \__mark_error:n #1 {
+  \msg_error:nnn { mark } { invalid-use } {#1}
+}
+\cs_new_protected:Npn \mark_insert:nn #1#2
+{
+  \seq_if_in:NnTF \g__mark_classes_seq {#1}
+      {
+        \group_begin:
+          \@kernel at before@insertmark
+          \hook_use:n { insertmark }
+          \unrestored at protected@xdef \g__mark_tmp_tl {#2}
+          \tex_marks:D \use:c { c__mark_class_ #1 _mark }
+            {
+              \tl_if_empty:NTF \g__mark_tmp_tl
+                { \exp_not:n { \prg_do_nothing: } }
+                { \exp_not:o { \g__mark_tmp_tl } }
+            }
+        \group_end:
+        \if at nobreak\ifvmode\nobreak\fi\fi
+      }
+      {
+        \msg_error:nnx { mark } { unknown-class }
+          { \tl_to_str:n {#1} }
+      }
+}
+\cs_new:Npn \@kernel at before@insertmark {
+          \cs_set_eq:NN \label    \scan_stop:
+          \cs_set_eq:NN \index    \scan_stop:
+          \cs_set_eq:NN \glossary \scan_stop:
+}
+\hook_new:n {insertmark}
+\cs_new:Npn \mark_use_first:nn #1#2 { \exp_not:v { g__mark_#1_first_#2_tl } }
+\cs_new:Npn \mark_use_last:nn #1#2  { \exp_not:v { g__mark_#1_last_#2_tl }  }
+\cs_new:Npn \mark_use_top:nn #1#2   { \exp_not:v { g__mark_#1_top_#2_tl }   }
+\prg_new_conditional:Npnn \mark_if_eq:nnnn #1#2#3#4 { T , F , TF }
+{
+  \tl_if_eq:ccTF { g__mark_ #1 _#3_ #2 _tl }
+                 { g__mark_ #1 _#4_ #2 _tl }
+                 \prg_return_true:
+                 \prg_return_false:
+}
+\prg_new_conditional:Npnn \mark_if_eq:nnnnnn #1#2#3#4#5#6 { T , F , TF }
+{
+  \tl_if_eq:ccTF { g__mark_ #1 _#3_ #2 _tl }
+                 { g__mark_ #4 _#6_ #5 _tl }
+                 \prg_return_true:
+                 \prg_return_false:
+}
+\prop_gput:Nnn \g_msg_module_type_prop { mark } { LaTeX }
+\msg_new:nnnn { mark } { class-already-defined }
+  { Mark~class~'#1'~already~defined }
+  {
+    \c__msg_coding_error_text_tl
+    LaTeX~was~asked~to~define~a~new~mark~class~called~'#1':~
+    this~mark~class~already~exists.
+    \c__msg_return_text_tl
+  }
+\msg_new:nnnn { mark } { unknown-class }
+  { Unknown~mark~class~'#1'. }
+  {
+    \c__msg_coding_error_text_tl
+    LaTeX~was~asked~to~manipulate~a~mark~of~class~'#1',~
+    but~this~class~of~marks~does~not~exist.
+  }
+
+\msg_new:nnnn { mark } { invalid-use }
+  { Mark~region~'#1'~not ~usable }
+  {
+    \c__msg_coding_error_text_tl
+    The~region~'#1'~can~only~be~used~after~
+    all~columns~have~been~assembled.
+    \c__msg_return_text_tl
+  }
+\msg_new:nnnn { mark } { infinite-shrinkage }
+  { Infinite~shrinkage~found~in~'#1'. }
+  {
+    \c__msg_coding_error_text_tl
+    The~mark~region~'#1'~contains~some~infinite~negative~glue~
+    allowing~it~to~shrink~to~an~arbitrary~size.~
+    This~makes~it~impossible~to~split~the~region~apart~to~
+    get~at~its~marks.~They~are~lost.
+  }
+\bool_new:N \g__mark_debug_bool
+\cs_new_eq:NN \__mark_debug:n \use_none:n
+\cs_new_protected:Npn \mark_debug_on:
+  {
+    \bool_gset_true:N \g__mark_debug_bool
+    \__mark_debug_gset:
+  }
+\cs_new_protected:Npn \mark_debug_off:
+  {
+    \bool_gset_false:N \g__mark_debug_bool
+    \__mark_debug_gset:
+  }
+\cs_new_protected:Npn \__mark_debug_gset:
+  {
+    \cs_gset_protected:Npx \__mark_debug:n ##1
+      { \bool_if:NT \g__mark_debug_bool {##1} }
+  }
+\cs_new_eq:NN \DebugMarksOn   \mark_debug_on:
+\cs_new_eq:NN \DebugMarksOff  \mark_debug_off:
+\cs_new_eq:NN  \NewMarkClass \mark_new_class:n
+\@onlypreamble \NewMarkClass
+\cs_new_eq:NN \InsertMark  \mark_insert:nn
+\NewExpandableDocumentCommand \FirstMark { O{page} m }
+                    { \mark_use_first:nn {#1}{#2} }
+\NewExpandableDocumentCommand \LastMark { O{page} m }
+                    { \mark_use_last:nn {#1}{#2} }
+\NewExpandableDocumentCommand \TopMark { O{page} m }
+                    { \mark_use_top:nn {#1}{#2} }
+\NewExpandableDocumentCommand \IfMarksEqualTF {O{page}mmm} {
+  \mark_if_eq:nnnnTF {#1}{#2}{#3}{#4}
+}
+\cs_new_protected:Npn \__mark_update_singlecol_structures: {
+  \box_if_vertical:NTF \@outputbox
+      {
+        \__mark_update_structure:nn {page}
+           { \vbox_unpack:N  \@outputbox }
+      }
+      {
+        \__mark_update_structure:nn {page}
+           { \hbox_unpack:N  \@outputbox }
+      }
+  \__mark_update_structure_alias:nn {previous-column}{previous-page}
+  \__mark_update_structure_alias:nn {column}{page}
+  \__mark_update_structure_alias:nn {first-column}{page}
+  \__mark_update_structure_alias:nn {last-column}{page}
+}
+\cs_new_protected:Npn \__mark_update_dblcol_structures: {
+  \box_if_vertical:NTF \@outputbox
+      {
+        \__mark_update_structure:nn {column}
+           { \vbox_unpack:N  \@outputbox }
+      }
+      {
+        \__mark_update_structure:nn {column}
+           { \hbox_unpack:N  \@outputbox }
+      }
+  \legacy_if:nTF {@firstcolumn}
+    {
+      \__mark_update_structure_alias:nn {first-column}{column}
+      \__mark_update_structure_to_err:n {last-column}
+    }
+    {
+      \__mark_update_structure_alias:nn {last-column}{column}
+      \seq_map_inline:Nn \g__mark_classes_seq
+        {
+          \tl_gset_eq:cc { g__mark_previous-page_top_   ##1 _tl }
+                         { g__mark_page_top_            ##1 _tl }
+          \tl_gset_eq:cc { g__mark_previous-page_first_ ##1 _tl }
+                         { g__mark_page_first_          ##1 _tl }
+          \tl_gset_eq:cc { g__mark_previous-page_last_  ##1 _tl }
+                         { g__mark_page_last_           ##1 _tl }
+          \tl_gset_eq:cc { g__mark_page_top_           ##1 _tl }
+                         { g__mark_first-column_top_   ##1 _tl }
+          \tl_gset_eq:cc { g__mark_ page_first_        ##1 _tl }
+                         { g__mark_first-column_first_ ##1 _tl }
+          \tl_gset_eq:cc { g__mark_page_last_          ##1 _tl }
+                         { g__mark_last-column_last_   ##1 _tl }
+        }
+    }
+}
+\cs_new_eq:NN  \@expl@@@mark at update@singlecol at structures@@
+               \__mark_update_singlecol_structures:
+\cs_new_eq:NN  \@expl@@@mark at update@dblcol at structures@@
+               \__mark_update_dblcol_structures:
+\IncludeInRelease{0000/00/00}{ltmarks}%
+                 {Undo~Marks~handling}
+
+\DeclareRobustCommand \NewMarkClass[1]{}
+\DeclareRobustCommand \InsertMark[2]{}
+\RenewExpandableDocumentCommand \FirstMark { O{} m } { }
+\RenewExpandableDocumentCommand \LastMark { O{} m } { }
+\RenewExpandableDocumentCommand \TopMark { O{} m } { }
+\RenewExpandableDocumentCommand \IfMarksEqualTF { O{} mmm }{ }
+
+\let \@expl@@@mark at update@singlecol at structures@@ \relax
+\let \@expl@@@mark at update@dblcol at structures@@ \relax
+
+
+\EndModuleRelease
+\ExplSyntaxOff
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%% From File: ltpage.dtx
+\IncludeInRelease{2022/06/01}%
+                 {\markboth}{New mark support}%
+\ExplSyntaxOn
+\DeclareRobustCommand*\markboth[2]{%
+  \begingroup
+    \let\label\relax \let\index\relax \let\glossary\relax
+    \unrestored at protected@xdef\@themark {{#1}{#2}}%
+    \@temptokena \expandafter{\@themark}%
+    \mark_insert:nn{2e-left}{#1}
+    \mark_insert:nn{2e-right}{#2}
+    \tl_if_empty:nF{#2}{ \mark_insert:nn{2e-right-nonempty}{#2} }
+    \mark{\the\@temptokena}%
+  \endgroup
+  \if at nobreak\ifvmode\nobreak\fi\fi}
+\DeclareRobustCommand*\markright[1]{%
+  \begingroup
+    \let\label\relax \let\index\relax \let\glossary\relax
+    \expandafter\@markright\@themark {#1}%
+    \@temptokena \expandafter{\@themark}%
+    \mark_insert:nn{2e-right}{#1}
+    \tl_if_empty:nF{#1}{ \mark_insert:nn{2e-right-nonempty}{#1} }
+    \mark{\the\@temptokena}%
+  \endgroup
+  \if at nobreak\ifvmode\nobreak\fi\fi}
+\ExplSyntaxOff
+\EndIncludeInRelease
 \IncludeInRelease{2019/10/01}%
                  {\markboth}{Make commands robust}%
+
 \DeclareRobustCommand*\markboth[2]{%
   \begingroup
     \let\label\relax \let\index\relax \let\glossary\relax
@@ -12744,6 +13391,7 @@
     \mark{\the\@temptokena}%
   \endgroup
   \if at nobreak\ifvmode\nobreak\fi\fi}
+
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
                  {\markboth}{Make commands robust}%
@@ -13313,22 +13961,16 @@
   \xdef\@currpath{\ifx\reserved at b\@empty\else\reserved at b/\fi}%
   \global\let\@currext#4%
   \@ifl at aded\@currext\@currname
-    {\@if at ptions\@currext{\@currname}{#2}{}%
-      {\@latex at error
-        {Option clash for \@cls at pkg\space \@currname}%
-        {The package \@currname\space has already been loaded
-         with options:\MessageBreak
-         \space\space[\@ptionlist{\@currname.\@currext}]\MessageBreak
-         There has now been an attempt to load it
-          with options\MessageBreak
-         \space\space[#2]\MessageBreak
-         Adding the global options:\MessageBreak
-         \space\space
-              \@ptionlist{\@currname.\@currext},#2\MessageBreak
-         to your \noexpand\documentclass declaration may fix this.%
-         \MessageBreak
-         Try typing \space <return> \space to proceed.}}%
-     \@firstofone}%
+    {%
+      \@ifundefined{opt at fam@\@currname.\@currext}
+        {\@onefilewithoptions at clashchk{#2}}
+        {%
+          \@namedef{opt@\@currname.\@currext}{#2}%
+          \expandafter\expandafter\expandafter\ProcessKeyOptions
+            \expandafter\expandafter\expandafter
+              [\csname opt at fam@\@currname.\@currext\endcsname]%
+        }%
+    }%
     {\makeatletter
      \@reset at ptions
      \IfFileExists{\@currpath\@currname.\@currext}{}%
@@ -13368,6 +14010,23 @@
      \ifx\@currext\@clsextension\let\LoadClass\@twoloadclasserror\fi}%
     \@popfilename
     \@reset at ptions}
+\def\@onefilewithoptions at clashchk#1{%
+  \@if at ptions\@currext{\@currname}{#1}{}%
+      {\@latex at error
+        {Option clash for \@cls at pkg\space \@currname}%
+        {The package \@currname\space has already been loaded
+         with options:\MessageBreak
+         \space\space[\@ptionlist{\@currname.\@currext}]\MessageBreak
+         There has now been an attempt to load it
+          with options\MessageBreak
+         \space\space[#1]\MessageBreak
+         Adding the global options:\MessageBreak
+         \space\space
+              \@ptionlist{\@currname.\@currext},#1\MessageBreak
+         to your \noexpand\documentclass declaration may fix this.%
+         \MessageBreak
+         Try typing \space <return> \space to proceed.}}%
+     \@firstofone}
 \let\@currpkg at reqd\@empty
 \@onlypreamble\@onefilewithoptions
 \let\@unprocessedoptions\@undefined
@@ -13850,8 +14509,8 @@
 \endgroup%
 \EndIncludeInRelease
 %%% From File: ltfilehook.dtx
-\providecommand\ltfilehookversion{v1.0l}
-\providecommand\ltfilehookdate{2021/08/27}
+\providecommand\ltfilehookversion{v1.0m}
+\providecommand\ltfilehookdate{2022/04/01}
 \IncludeInRelease{2020/10/01}%
                  {\CurrentFile}{Hook management file}%
 \ExplSyntaxOn
@@ -14092,6 +14751,36 @@
 \let \undeclare at file@substitution \@gobble
 
 \EndIncludeInRelease
+\IncludeInRelease{2022/06/01}%
+          {\set at curr@file}{Setting current file name}%
+\def\set at curr@file{%
+  \begingroup
+    \set at curr@file at aux}
+\edef\set at curr@file at nosearch{%
+  \begingroup
+    \let\noexpand\input at path\noexpand\@empty
+    \csname seq_clear:N\endcsname
+      \expandafter\noexpand\csname l_file_search_path_seq\endcsname
+    \noexpand\set at curr@file at aux}
+\def\set at curr@file at aux#1{%
+    \escapechar\m at ne
+    \let\protect\string
+    \edef~{\string~}%
+    \expandafter\def\csname\expandafter\endcsname
+      \expandafter{\csname\endcsname}%
+    \@expl@@@filehook at if@no at extension@@nTF{#1}%
+      {\@tempswatrue}{\@tempswafalse}%
+    \@kernel at make@file at csname\@curr at file
+      \@expl@@@filehook at resolve@file at subst@@w {#1}%
+    \@expl@@@filehook at if@file at replaced@@TF
+      {\@kernel at make@file at csname\@curr at file@reqd
+         \@expl@@@filehook at normalize@file at name@@w{#1}%
+       \if at tempswa \@expl@@@filehook at drop@extension@@N\@curr at file@reqd \fi}%
+      {\if at tempswa \@expl@@@filehook at drop@extension@@N\@curr at file \fi
+       \global\let\@curr at file@reqd\@curr at file}%
+    \@expl@@@filehook at clear@replacement at flag@@
+  \endgroup}
+\EndIncludeInRelease
 \IncludeInRelease{2021/06/01}%
           {\set at curr@file}{Setting current file name}%
 \def\set at curr@file#1{%
@@ -14113,6 +14802,7 @@
        \global\let\@curr at file@reqd\@curr at file}%
     \@expl@@@filehook at clear@replacement at flag@@
   \endgroup}
+\let\set at curr@file at nosearch\@undefined
 \EndIncludeInRelease
 \IncludeInRelease{2020/10/01}%
           {\set at curr@file}{Setting current file name}%
@@ -14133,6 +14823,7 @@
        \global\let\@curr at file@reqd\@curr at file}%
     \@expl@@@filehook at clear@replacement at flag@@
   \endgroup}
+\let\set at curr@file at nosearch\@undefined
 \EndIncludeInRelease
 \IncludeInRelease{2019/10/01}%
           {\set at curr@file}{Setting current file name}%
@@ -14146,10 +14837,12 @@
         \csname\@firstofone#1\@empty\endcsname}}%
   \endgroup
 }
+\let\set at curr@file at nosearch\@undefined
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
           {\set at curr@file}{Setting current file name}%
 \let\set at curr@file\@undefined
+\let\set at curr@file at nosearch\@undefined
 \EndIncludeInRelease
 \IncludeInRelease{2020/10/01}%
           {\@kernel at make@file at csname}{Make file csname}%
@@ -14297,12 +14990,13 @@
 \EndIncludeInRelease
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%
-%% Copyright (C) 2020-2021
+%% Copyright (C) 2020-2022
 %%               Frank Mittelbach, LaTeX Team
 %%
 %%% From File: ltshipout.dtx
-\providecommand\ltshipoutversion{v1.0j}
-\providecommand\ltshipoutdate{2021/06/09}
+\providecommand\ltshipoutversion{v1.0m}
+\providecommand\ltshipoutdate{2022/05/08}
+ %    \cs{AtBeginDvi} is the existing \LaTeXe{} interface to fill the
 \IncludeInRelease{2020/10/01}%
                  {\shipout}{Hook management (shipout)}%
 \ExplSyntaxOn
@@ -14328,21 +15022,21 @@
 \box_new:N  \l__shipout_raw_box
 \sys_if_engine_luatex:TF
   {
-    \newluafunction \__shipout_finalize_box:
+    \newprotectedluacmd \__shipout_finalize_box:
     \exp_args:Nx \everyjob {
       \exp_not:V \everyjob
       \exp_not:N \lua_now:n {
         luatexbase.create_callback('pre_shipout_filter', 'list')
         local~call, getbox, setbox = luatexbase.call_callback, tex.getbox, tex.setbox~
-        lua.get_functions_table()[\the \__shipout_finalize_box:] = function()
-          local~result = call('pre_shipout_filter', getbox(\the \l_shipout_box))
-          if~not (result == true) then~
+        lua.get_functions_table()[\the \allocationnumber] = function()
+          local~head = getbox(\the \l_shipout_box)
+          local~result = call('pre_shipout_filter', head)
+          if~not (result == head) then~
             setbox(\the \l_shipout_box, result~or~nil)
           end~
         end
       }
     }
-    \protected \luadef \__shipout_finalize_box: \the \__shipout_finalize_box:
   } {
     \cs_set_eq:NN \__shipout_finalize_box: \scan_stop:
   }
@@ -14415,8 +15109,8 @@
                       \__shipout_add_foreground_box:n
                           { \UseHook{shipout/lastpage}
                             \@kernel at after@shipout at lastpage }
+                      \bool_gset_true:N \g__shipout_lastpage_handled_bool
                     }
-                    \bool_gset_true:N \g__shipout_lastpage_handled_bool
                 }
               \__shipout_finalize_box:
               \cs_set_eq:NN \protect \exp_not:N
@@ -14661,8 +15355,17 @@
         \iow_now:Nx \@auxout {
           \gdef\string\@abspage at last {\int_use:N \g_shipout_readonly_int}}
      \fi
-      \bool_if:NF \g__shipout_lastpage_handled_bool
+      \bool_if:NTF \g__shipout_lastpage_handled_bool
          {
+           \int_compare:nNnF \@abspage at last = \g_shipout_readonly_int
+            {
+              \@latex at warning@no at line{Hook~ 'shipout/lastpage'~ executed~
+                on~ wrong~ page~ (\@abspage at last\space not~
+                \int_use:N\g_shipout_readonly_int).\MessageBreak
+                Rerun~ to~ correct~ this}%
+            }
+         }
+         {
           \bool_lazy_and:nnF
             { \hook_if_empty_p:n {shipout/lastpage} }
             { \tl_if_empty_p:N \@kernel at after@shipout at lastpage }
@@ -14754,7 +15457,7 @@
 \IncludeInRelease{2020/10/01}%
                  {\AtEndDvi}{atenddvi emulation}%
 \ExplSyntaxOn
-\cs_new_protected:Npn \AtEndDvi {\AddToHook{shipout/lastpage}}
+\cs_new_protected:Npn \AtEndDvi #1 {\AddToHook{shipout/lastpage}{#1}}
 \ExplSyntaxOff
 \disable at package@load{atenddvi}
    {\PackageWarning{atenddvi}
@@ -15746,6 +16449,16 @@
                  {\newmarks}{Extended Allocation}%
 \let\newmarks\@undefined
 \EndIncludeInRelease
+\IncludeInRelease{2022/06/01}%
+                 {2e-left}{Delayed legacy marks}%
+\NewMarkClass {2e-left}
+\NewMarkClass {2e-right}
+\NewMarkClass {2e-right-nonempty}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {2e-left}{Delayed legacy marks}%
+
+\EndIncludeInRelease
 \IncludeInRelease{2015/01/01}%
               {\newXeTeXintercharclass}{Extended Allocation}%
 \ifx\XeTeXcharclass\@undefined

Modified: trunk/Master/texmf-dist/tex/latex/base/latexsym.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/latexsym.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/latexsym.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/latin1.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/latin1.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/latin1.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
  \ProvidesFile{latin1.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Modified: trunk/Master/texmf-dist/tex/latex/base/latin10.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/latin10.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/latin10.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
  \ProvidesFile{latin10.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Modified: trunk/Master/texmf-dist/tex/latex/base/latin2.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/latin2.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/latin2.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
  \ProvidesFile{latin2.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Modified: trunk/Master/texmf-dist/tex/latex/base/latin3.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/latin3.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/latin3.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
  \ProvidesFile{latin3.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Modified: trunk/Master/texmf-dist/tex/latex/base/latin4.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/latin4.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/latin4.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
  \ProvidesFile{latin4.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Modified: trunk/Master/texmf-dist/tex/latex/base/latin5.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/latin5.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/latin5.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
  \ProvidesFile{latin5.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Modified: trunk/Master/texmf-dist/tex/latex/base/latin9.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/latin9.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/latin9.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
  \ProvidesFile{latin9.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Modified: trunk/Master/texmf-dist/tex/latex/base/lcyenc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/lcyenc.dfu	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/lcyenc.dfu	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,10 +42,10 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
  \ProvidesFile{lcyenc.dfu}
-   [2021/06/21 v1.2n UTF-8 support]
+   [2022/06/07 v1.3c UTF-8 support]
 \DeclareUnicodeCharacter{00A4}{\textcurrency}
-\DeclareUnicodeCharacter{00AB}{\guillemotleft}
-\DeclareUnicodeCharacter{00BB}{\guillemotright}
+\DeclareUnicodeCharacter{00AB}{\guillemetleft}
+\DeclareUnicodeCharacter{00BB}{\guillemetright}
 \DeclareUnicodeCharacter{00C6}{\AE}
 \DeclareUnicodeCharacter{00D8}{\O}
 \DeclareUnicodeCharacter{00DF}{\ss}

Modified: trunk/Master/texmf-dist/tex/latex/base/leqno.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/leqno.clo	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/leqno.clo	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/leqno.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/leqno.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/leqno.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/letter.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/letter.cls	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/letter.cls	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -43,7 +43,7 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}[1996/06/01]
 \ProvidesClass{letter}
-              [2021/03/05 v1.3c
+              [2021/12/07 v1.3c
                Standard LaTeX document class]
 \newcommand\@ptsize{}
 \DeclareOption{a4paper}

Modified: trunk/Master/texmf-dist/tex/latex/base/letter.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/letter.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/letter.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/ltluatex.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ltluatex.lua	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ltluatex.lua	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 -- (but please observe conditions on bug reports sent to that address!)
 -- 
 -- 
--- Copyright (C) 2015-2021
+-- Copyright (C) 2015-2022
 -- The LaTeX Project and any individual authors listed elsewhere
 -- in this file.
 -- 
@@ -288,8 +288,8 @@
   post_linebreak_filter  = reverselist,
   hpack_filter           = list,
   vpack_filter           = list,
-  hpack_quality          = list,
-  vpack_quality          = list,
+  hpack_quality          = exclusive,
+  vpack_quality          = exclusive,
   pre_output_filter      = list,
   process_rule           = exclusive,
   hyphenate              = simple,
@@ -352,7 +352,6 @@
 local function list_handler(name)
   return function(head, ...)
     local ret
-    local alltrue = true
     for _,i in ipairs(callbacklist[name]) do
       ret = i.func(head, ...)
       if ret == false then
@@ -363,20 +362,18 @@
         return false
       end
       if ret ~= true then
-        alltrue = false
         head = ret
       end
     end
-    return alltrue and true or head
+    return head
   end
 end
-local function list_handler_default()
-  return true
+local function list_handler_default(head)
+return head
 end
 local function reverselist_handler(name)
   return function(head, ...)
     local ret
-    local alltrue = true
     local callbacks = callbacklist[name]
     for i = #callbacks, 1, -1 do
       local cb = callbacks[i]
@@ -389,11 +386,10 @@
         return false
       end
       if ret ~= true then
-        alltrue = false
         head = ret
       end
     end
-    return alltrue and true or head
+    return head
   end
 end
 local function simple_handler(name)
@@ -609,14 +605,10 @@
   if current == false then
     flush_list(head)
     return nil
-  elseif current == true then
-    current = head
   end
   current = call_callback("mlist_to_hlist", current, display_type, need_penalties)
   local post = call_callback("post_mlist_to_hlist_filter", current, display_type, need_penalties)
-  if post == true then
-    return current
-  elseif post == false then
+  if post == false then
     flush_list(current)
     return nil
   end

Modified: trunk/Master/texmf-dist/tex/latex/base/ltluatex.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ltluatex.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ltluatex.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -47,7 +47,7 @@
   #1#2[#3]{\endgroup\immediate\write-1{File: #1 #3}}
 \fi
 \ProvidesFile{ltluatex.tex}%
-[2021/10/15 v1.1v
+[2021/12/27 v1.1x
   LuaTeX support for plain TeX (core)
 ]
 \edef\etatcatcode{\the\catcode`\@}
@@ -225,6 +225,14 @@
   \e at alloc\luafunction\e at alloc@chardef
     \e at alloc@luafunction at count\m at ne\e at alloc@top
 }
+\def\newluacmd{%
+  \e at alloc\luafunction\luadef
+    \e at alloc@luafunction at count\m at ne\e at alloc@top
+}
+\def\newprotectedluacmd{%
+  \e at alloc\luafunction{\protected\luadef}
+    \e at alloc@luafunction at count\m at ne\e at alloc@top
+}
 \ifx\e at alloc@whatsit at count\@undefined
   \countdef\e at alloc@whatsit at count=261
   \e at alloc@whatsit at count=\z@

Modified: trunk/Master/texmf-dist/tex/latex/base/ltxcheck.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ltxcheck.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ltxcheck.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %

Added: trunk/Master/texmf-dist/tex/latex/base/ltxdoc.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ltxdoc.cfg	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/base/ltxdoc.cfg	2022-06-08 20:41:20 UTC (rev 63514)
@@ -0,0 +1,71 @@
+%%
+%% This is file `ltxdoc.cfg',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ltxdoc.dtx  (with options: `cfg')
+%% 
+%% This is a generated file.
+%% 
+%% The source is maintained by the LaTeX Project team and bug
+%% reports for it can be opened at https://latex-project.org/bugs.html
+%% (but please observe conditions on bug reports sent to that address!)
+%% 
+%% 
+%% Copyright (C) 1993-2022
+%% The LaTeX Project and any individual authors listed elsewhere
+%% in this file.
+%% 
+%% This file was generated from file(s) of the LaTeX base system.
+%% --------------------------------------------------------------
+%% 
+%% It 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
+%%    https://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008 or later.
+%% 
+%% This file has the LPPL maintenance status "maintained".
+%% 
+%% This file may only be distributed together with a copy of the LaTeX
+%% base system. You may however distribute the LaTeX base system without
+%% such generated files.
+%% 
+%% The list of all files belonging to the LaTeX base distribution is
+%% given in the file `manifest.txt'. See also `legal.txt' for additional
+%% information.
+%% 
+%% The list of derived (unpacked) files belonging to the distribution
+%% and covered by LPPL is defined by the unpacking scripts (with
+%% extension .ins) which are part of the distribution.
+
+\ProvidesFile{ltxdoc.cfg}%
+  [2021/12/07 v2.0c ltxdoc.cls configuration (LaTeX Project)]
+\PassOptionsToClass{a4paper}{article}
+
+
+\AddToHook{package/hyperref/after}{%
+%%  \RequirePackage{hypdoc}%       % this is now triggered by doc
+  \RequirePackage{pdftexcmds}\relax
+  \ifnum\pdf at strcmp{\jobname}{inputenc}=0 %
+    \hypersetup{pdfencoding=auto}%
+    \pdfstringdefDisableCommands{%
+      \def\meta#1{% inputenc.dtx
+        \9060\010#1\9060\011%
+      }%
+    }%
+  \else
+  \fi
+  \pdfstringdefDisableCommands{%
+    \let\env\relax % longtable.dtx
+    \let\mytt\relax % tabularx.dtx
+  }%
+}
+
+
+\endinput
+%%
+%% End of file `ltxdoc.cfg'.


Property changes on: trunk/Master/texmf-dist/tex/latex/base/ltxdoc.cfg
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/base/ltxdoc.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ltxdoc.cls	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ltxdoc.cls	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -43,19 +43,29 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesClass{ltxdoc}
-         [2020/12/05 v2.1b Standard LaTeX documentation class]
+         [2022/06/03 v2.1f Standard LaTeX documentation class]
 \DeclareOption{a5paper}{\@latexerr{Option not supported}%
    {}}
+\newif\ifltxdoc at load@cfg@ \ltxdoc at load@cfg at true
+\DeclareOption{nocfg}{\ltxdoc at load@cfg at false}
+\let\ltxdoc at doc@version\@empty  % use current version by default
+\DeclareOption{doc2}{\def\ltxdoc at doc@version{=v2}}
 \DeclareOption*{%
     \PassOptionsToClass  {\CurrentOption}{article}}
+\ProcessOptions
+\ifltxdoc at load@cfg@
 \InputIfFileExists{ltxdoc.cfg}
            {\typeout{*************************************^^J%
                      * Local config file ltxdoc.cfg used^^J%
                      *************************************}}
            {}
-\ProcessOptions
+\else
+   \typeout{*************************************^^J%
+            * Local config file ignored^^J%
+            *************************************}
+\fi
 \LoadClass{article}
-\RequirePackage{doc}
+\RequirePackage{doc}[\ltxdoc at doc@version]
 \AtBeginDocument{\MakeShortVerb{\|}}
 \DeclareFontShape{OT1}{cmtt}{bx}{n}{<-> ssub * cmtt/m/n}{}
 \DeclareFontFamily{OMS}{cmtt}{\skewchar\font 48}  % '60
@@ -71,7 +81,6 @@
 \setcounter{StandardModuleDepth}{1}
 \def\cmd#1{\cs{\expandafter\cmd at to@cs\string#1}}
 \def\cmd at to@cs#1#2{\char\number`#2\relax}
-\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}}
 \providecommand\marg[1]{%
   {\ttfamily\char`\{}\meta{#1}{\ttfamily\char`\}}}
 \providecommand\oarg[1]{%
@@ -255,6 +264,14 @@
   \vskip 1.5em}
 \providecommand\url{\texttt}
 \def\task#1#2{}
+\providecommand\LuaTeX{Lua\TeX}
+\providecommand\cls{\textsf}
+\providecommand\pkg{\textsf}
+\providecommand\enquote[1]{``#1''}
+\DeclareRobustCommand\cs[1]{\texttt{\bslash\detokenize{#1}}}%
+\AtBeginDocument{%
+  \renewcommand\PrintMacroName[1]{\MacroFont\detokenize{#1}}%
+  }
 \endinput
 %%
 %% End of file `ltxdoc.cls'.

Modified: trunk/Master/texmf-dist/tex/latex/base/ly1enc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ly1enc.dfu	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ly1enc.dfu	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
  \ProvidesFile{ly1enc.dfu}
-   [2021/06/21 v1.2n UTF-8 support]
+   [2022/06/07 v1.3c UTF-8 support]
 \DeclareUnicodeCharacter{00A0}{\nobreakspace}
 \DeclareUnicodeCharacter{00A1}{\textexclamdown}
 \DeclareUnicodeCharacter{00A2}{\textcent}
@@ -52,7 +52,7 @@
 \DeclareUnicodeCharacter{00A6}{\textbrokenbar}
 \DeclareUnicodeCharacter{00A7}{\textsection}
 \DeclareUnicodeCharacter{00AA}{\textordfeminine}
-\DeclareUnicodeCharacter{00AB}{\guillemotleft}
+\DeclareUnicodeCharacter{00AB}{\guillemetleft}
 \DeclareUnicodeCharacter{00AD}{\-}
 \DeclareUnicodeCharacter{00AE}{\textregistered}
 \DeclareUnicodeCharacter{00B0}{\textdegree}
@@ -60,7 +60,7 @@
 \DeclareUnicodeCharacter{00B6}{\textparagraph}
 \DeclareUnicodeCharacter{00B7}{\textperiodcentered}
 \DeclareUnicodeCharacter{00BA}{\textordmasculine}
-\DeclareUnicodeCharacter{00BB}{\guillemotright}
+\DeclareUnicodeCharacter{00BB}{\guillemetright}
 \DeclareUnicodeCharacter{00BC}{\textonequarter}
 \DeclareUnicodeCharacter{00BD}{\textonehalf}
 \DeclareUnicodeCharacter{00BE}{\textthreequarters}

Modified: trunk/Master/texmf-dist/tex/latex/base/macce.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/macce.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/macce.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
   \ProvidesFile{macce.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Modified: trunk/Master/texmf-dist/tex/latex/base/makeidx.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/makeidx.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/makeidx.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/newlfont.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/newlfont.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/newlfont.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/next.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/next.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/next.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,6 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 
-
   \ProvidesFile{next.def}
    [2021/02/14 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}

Modified: trunk/Master/texmf-dist/tex/latex/base/nfssfont.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/nfssfont.tex	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/nfssfont.tex	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/oldlfont.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/oldlfont.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/oldlfont.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/omlcmm.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/omlcmm.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/omlcmm.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/omlcmr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/omlcmr.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/omlcmr.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/omlenc.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/omlenc.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/omlenc.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -49,6 +49,7 @@
 \DeclareTextSymbol{\textless}{OML}{`\<}
 \DeclareTextSymbol{\textgreater}{OML}{`\>}
 \DeclareTextAccent{\t}{OML}{127}  % "7F
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \endinput
 %%
 %% End of file `omlenc.def'.

Modified: trunk/Master/texmf-dist/tex/latex/base/omllcmm.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/omllcmm.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/omllcmm.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/omscmr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/omscmr.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/omscmr.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/omscmsy.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/omscmsy.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/omscmsy.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/omsenc.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/omsenc.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/omsenc.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -65,6 +65,7 @@
       \char 13 % "0D
    }%
  \egroup}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \endinput
 %%
 %% End of file `omsenc.def'.

Modified: trunk/Master/texmf-dist/tex/latex/base/omsenc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/omsenc.dfu	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/omsenc.dfu	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
  \ProvidesFile{omsenc.dfu}
-   [2021/06/21 v1.2n UTF-8 support]
+   [2022/06/07 v1.3c UTF-8 support]
 \DeclareUnicodeCharacter{00A7}{\textsection}
 \DeclareUnicodeCharacter{00B6}{\textparagraph}
 \DeclareUnicodeCharacter{00B7}{\textperiodcentered}

Modified: trunk/Master/texmf-dist/tex/latex/base/omslcmsy.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/omslcmsy.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/omslcmsy.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/omxcmex.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/omxcmex.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/omxcmex.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/omxlcmex.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/omxlcmex.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/omxlcmex.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/openbib.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/openbib.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/openbib.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/ot1cmdh.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot1cmdh.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ot1cmdh.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/ot1cmfib.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot1cmfib.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ot1cmfib.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/ot1cmfr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot1cmfr.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ot1cmfr.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/ot1cmr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot1cmr.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ot1cmr.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/ot1cmss.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot1cmss.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ot1cmss.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/ot1cmtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot1cmtt.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ot1cmtt.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/ot1cmvtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot1cmvtt.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ot1cmvtt.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/ot1enc.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot1enc.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ot1enc.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -120,6 +120,7 @@
 \ifx\textcommaabove\@undefined\else
 \DeclareTextCompositeCommand{\c}{OT1}{g}{\textcommaabove{g}}
 \fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \endinput
 %%
 %% End of file `ot1enc.def'.

Modified: trunk/Master/texmf-dist/tex/latex/base/ot1enc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot1enc.dfu	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ot1enc.dfu	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
  \ProvidesFile{ot1enc.dfu}
-   [2021/06/21 v1.2n UTF-8 support]
+   [2022/06/07 v1.3c UTF-8 support]
 \DeclareUnicodeCharacter{00A0}{\nobreakspace}
 \DeclareUnicodeCharacter{00A1}{\textexclamdown}
 \DeclareUnicodeCharacter{00A3}{\textsterling}

Modified: trunk/Master/texmf-dist/tex/latex/base/ot1lcmss.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot1lcmss.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ot1lcmss.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/ot1lcmtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot1lcmtt.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ot1lcmtt.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/ot2enc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot2enc.dfu	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ot2enc.dfu	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,9 +42,9 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
  \ProvidesFile{ot2enc.dfu}
-   [2021/06/21 v1.2n UTF-8 support]
-\DeclareUnicodeCharacter{00AB}{\guillemotleft}
-\DeclareUnicodeCharacter{00BB}{\guillemotright}
+   [2022/06/07 v1.3c UTF-8 support]
+\DeclareUnicodeCharacter{00AB}{\guillemetleft}
+\DeclareUnicodeCharacter{00BB}{\guillemetright}
 \DeclareUnicodeCharacter{0131}{\i}
 \DeclareUnicodeCharacter{0237}{\j}
 \DeclareUnicodeCharacter{0400}{\@tabacckludge`\CYRE}

Modified: trunk/Master/texmf-dist/tex/latex/base/ot4enc.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot4enc.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/ot4enc.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -126,6 +126,7 @@
 \DeclareTextComposite{\.}{OT4}{z}{187}
 \DeclareTextComposite{\'}{OT4}{O}{211}
 \DeclareTextComposite{\'}{OT4}{o}{243}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \endinput
 %%
 %% End of file `ot4enc.def'.

Modified: trunk/Master/texmf-dist/tex/latex/base/preload.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/preload.cfg	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/preload.cfg	2022-06-08 20:41:20 UTC (rev 63514)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/preload.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/preload.ltx	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/preload.ltx	2022-06-08 20:41:20 UTC (rev 63514)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/proc.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/proc.cls	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/proc.cls	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -43,7 +43,7 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
 \ProvidesClass{proc}
-              [2020/11/23 v1.3l
+              [2021/12/09 v1.3m
                Standard LaTeX document class]
 \DeclareOption{a5paper}
     {\ClassError{proc}{Option `a5paper' not supported}{}}
@@ -88,9 +88,12 @@
 \setlength\columnsep{.375in}
 \let\@oddhead\@empty
 \let\@evenhead\@empty
-\def\@oddfoot{\normalfont\rightmark \hfil
-              \pagename{} \thepage}
-\def\@evenfoot{\@oddfoot}
+\def\@oddfoot{\rightmark \hfil \pagename{} \thepage}
+\if at twoside
+  \def\@evenfoot{\pagename{} \thepage \hfil \leftmark}
+\else
+  \def\@evenfoot{\@oddfoot}
+\fi
 \def\maketitle{\par
  \begingroup
    \renewcommand\thefootnote{\fnsymbol{footnote}}%

Modified: trunk/Master/texmf-dist/tex/latex/base/proc.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/proc.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/proc.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -43,7 +43,7 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
 \ProvidesFile{proc.sty}
-              [2020/11/23 v1.3l
+              [2021/12/09 v1.3m
                LaTeX 2.09 compatibility style option `proc']
 \if at compatibility
 \else
@@ -84,9 +84,12 @@
 \setlength\columnsep{.375in}
 \let\@oddhead\@empty
 \let\@evenhead\@empty
-\def\@oddfoot{\normalfont\rightmark \hfil
-              \pagename{} \thepage}
-\def\@evenfoot{\@oddfoot}
+\def\@oddfoot{\rightmark \hfil \pagename{} \thepage}
+\if at twoside
+  \def\@evenfoot{\pagename{} \thepage \hfil \leftmark}
+\else
+  \def\@evenfoot{\@oddfoot}
+\fi
 \def\maketitle{\par
  \begingroup
    \renewcommand\thefootnote{\fnsymbol{footnote}}%

Modified: trunk/Master/texmf-dist/tex/latex/base/report.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/report.cls	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/report.cls	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/report.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/report.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/report.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/sfonts.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/sfonts.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/sfonts.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/shortvrb.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/shortvrb.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/shortvrb.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -43,11 +43,16 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}[1994/12/01]
 \ProvidesPackage{shortvrb}
-  [2021/10/04 v2.1n
-   Standard LaTeX documentation package (FMi)]
+  [2022/06/08 v3.0j
+   Standard LaTeX documentation package V3 (FMi)]
 %%
 %% Package `doc' to use with LaTeX 2e
-%% Copyright (C) 1989-2020 Frank Mittelbach, all rights reserved.
+%% Copyright (C) 1989-2022 Frank Mittelbach, all rights reserved.
+
+
+
+
+
 \def\MakeShortVerb{%
   \@ifstar
     {\def\@shortvrbdef{\verb*}\@MakeShortVerb}%
@@ -67,13 +72,20 @@
     \endgroup
     \global\catcode`#1\active
   \else
-    \@shortvrbinfo\@empty{#1 already}{\@empty\verb(*)}%
+    \@shortvrbinfo\@empty{#1 already}%
+                         {\@empty\verb% % to fool emacs highlighting
+                          (*)}%
   \fi}
 \def\DeleteShortVerb#1{%
   \expandafter\ifx\csname cc\string#1\endcsname\relax
-    \@shortvrbinfo\@empty{#1 not}{\@empty\verb(*)}%
+    \@shortvrbinfo\@empty{#1 not}%
+                         {\@empty\verb% % to fool emacs highlighting
+                          (*)}%
   \else
-    \@shortvrbinfo{Deleted }{#1 as}{\@empty\verb(*)}%
+    \@shortvrbinfo{Deleted }{#1 as}%
+                            {\@empty\verb% % to fool emacs
+                                           % highlighting
+                            (*)}%
     \rem at special{#1}%
     \global\catcode`#1\csname cc\string#1\endcsname
     \global \expandafter\let \csname cc\string#1\endcsname \relax
@@ -103,6 +115,7 @@
       \ifnum`#1=`##1 \else \noexpand\@makeother\noexpand##1\fi}%
     \xdef\@sanitize{\@sanitize}%
   \endgroup}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \endinput
 %%
 %% End of file `shortvrb.sty'.

Modified: trunk/Master/texmf-dist/tex/latex/base/showidx.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/showidx.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/showidx.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/size10.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/size10.clo	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/size10.clo	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/size11.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/size11.clo	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/size11.clo	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/size12.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/size12.clo	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/size12.clo	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/slides.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/slides.cls	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/slides.cls	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -43,7 +43,7 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}[1997/06/01]
 \ProvidesClass{slides}
-              [2021/10/04 v2.4b
+              [2022/05/18 v2.4b
                Standard LaTeX document class]
 \input{slides.def}
 \InputIfFileExists{sfonts.cfg}

Modified: trunk/Master/texmf-dist/tex/latex/base/slides.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/slides.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/slides.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 \ProvidesFile{slides.def}
-              [2021/10/04 v2.4b
+              [2022/05/18 v2.4b
                SLiTeX definitions]
 \message{hacks,}
 

Modified: trunk/Master/texmf-dist/tex/latex/base/slides.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/slides.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/slides.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/source2edoc.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/source2edoc.cls	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/source2edoc.cls	2022-06-08 20:41:20 UTC (rev 63514)
@@ -2,9 +2,11 @@
 % This class is buggy and needs fixing
 
 \ProvidesClass{source2edoc}
-              [2021/01/14 v0.2b Quick hack to typeset source2.tex
+              [2022/04/03 v0.2c Quick hack to typeset source2.tex
                (not usable for anything else and buggy -- will vanish again)!]
 
+
+
 \LoadClass{l3doc}
 
 \RemoveFromHook{begindocument}[l3doc]          % drop the standard setting  making " a shortverb
@@ -18,7 +20,7 @@
 \ExplSyntaxOn
 
 % in 2e we have a lot of functions that have no ``user-level'' documentation so we disable
-% a bogus backref in that case. Over time the sources should be clean up to have such documentation.
+% a bogus backref in that case. Over time the sources should be cleaned up to have such documentation.
 
 \cs_set_protected:Npn \__codedoc_print_documented:
   {
@@ -169,7 +171,10 @@
          t\or u\or v\or w\or x\or y\or z\or A\or B\or C\or
          D\or E\or F\or G\or H\or I\or J\or K\or L\or M\or
          N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or
-         X\or Y\or Z\else\@ctrerr\fi}
+         X\or Y\or Z\or
+         aa\or bb\or cc\or  % we are getting definitely too many modules
+         dd%
+         \else\@ctrerr\fi}
 \def\docincludeaux{%
   \def\thepart{\aalph{part}}\def\filesep{\thepart-}%
   \let\filekey\@gobble
@@ -293,6 +298,11 @@
     \fi}%
 \endgroup%
 
+
+% don't run tocs when they are in some module files
+\AddToHook{cmd/tableofcontents/after}{\global\let\tableofcontents\relax} 
+
+
 \InputIfFileExists{ltxdoc.cfg}
            {\typeout{*************************************^^J%
                      * Local config file ltxdoc.cfg used^^J%
@@ -300,6 +310,7 @@
            {}
 
 
+
 \errorstopmode
 \batchmode           
 

Modified: trunk/Master/texmf-dist/tex/latex/base/structuredlog.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/structuredlog.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/structuredlog.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,8 +42,8 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 %%% From File: ltfilehook.dtx
-\providecommand\ltfilehookversion{v1.0l}
-\providecommand\ltfilehookdate{2021/08/27}
+\providecommand\ltfilehookversion{v1.0m}
+\providecommand\ltfilehookdate{2022/04/01}
 \ProvidesExplPackage
     {structuredlog}{\ltfilehookdate}{\ltfilehookversion}
     {Structuring the TeX transcript file}

Modified: trunk/Master/texmf-dist/tex/latex/base/syntonly.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/syntonly.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/syntonly.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/t1cmdh.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t1cmdh.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/t1cmdh.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/t1cmfib.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t1cmfib.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/t1cmfib.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/t1cmfr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t1cmfr.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/t1cmfr.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/t1cmr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t1cmr.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/t1cmr.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/t1cmss.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t1cmss.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/t1cmss.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/t1cmtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t1cmtt.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/t1cmtt.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/t1cmvtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t1cmvtt.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/t1cmvtt.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/t1enc.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t1enc.def	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/t1enc.def	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -291,6 +291,7 @@
 \DeclareTextCompositeCommand{\c}{T1}{R}{\textcommabelow{R}}
 \DeclareTextCompositeCommand{\c}{T1}{r}{\textcommabelow{r}}
 \fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \endinput
 %%
 %% End of file `t1enc.def'.

Modified: trunk/Master/texmf-dist/tex/latex/base/t1enc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t1enc.dfu	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/t1enc.dfu	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,13 +42,13 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
   \ProvidesFile{t1enc.dfu}
-   [2021/06/21 v1.2n UTF-8 support]
+   [2022/06/07 v1.3c UTF-8 support]
 \DeclareUnicodeCharacter{00A0}{\nobreakspace}
 \DeclareUnicodeCharacter{00A1}{\textexclamdown}
 \DeclareUnicodeCharacter{00A3}{\textsterling}
-\DeclareUnicodeCharacter{00AB}{\guillemotleft}
+\DeclareUnicodeCharacter{00AB}{\guillemetleft}
 \DeclareUnicodeCharacter{00AD}{\-}
-\DeclareUnicodeCharacter{00BB}{\guillemotright}
+\DeclareUnicodeCharacter{00BB}{\guillemetright}
 \DeclareUnicodeCharacter{00BF}{\textquestiondown}
 \DeclareUnicodeCharacter{00C0}{\@tabacckludge`A}
 \DeclareUnicodeCharacter{00C1}{\@tabacckludge'A}
@@ -231,6 +231,15 @@
 \DeclareUnicodeCharacter{017C}{\.z}
 \DeclareUnicodeCharacter{017D}{\v Z}
 \DeclareUnicodeCharacter{017E}{\v z}
+\DeclareUnicodeCharacter{01C4}{D\v Z}
+\DeclareUnicodeCharacter{01C5}{D\v z}
+\DeclareUnicodeCharacter{01C6}{d\v z}
+\DeclareUnicodeCharacter{01C7}{LJ}
+\DeclareUnicodeCharacter{01C8}{Lj}
+\DeclareUnicodeCharacter{01C9}{lj}
+\DeclareUnicodeCharacter{01CA}{NJ}
+\DeclareUnicodeCharacter{01CB}{Nj}
+\DeclareUnicodeCharacter{01CC}{nj}
 \DeclareUnicodeCharacter{01CD}{\v A}
 \DeclareUnicodeCharacter{01CE}{\v a}
 \DeclareUnicodeCharacter{01CF}{\v I}

Modified: trunk/Master/texmf-dist/tex/latex/base/t1enc.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t1enc.sty	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/t1enc.sty	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/t1lcmss.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t1lcmss.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/t1lcmss.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/t1lcmtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t1lcmtt.fd	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/t1lcmtt.fd	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/base/t2aenc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t2aenc.dfu	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/t2aenc.dfu	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,11 +42,11 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
  \ProvidesFile{t2aenc.dfu}
-   [2021/06/21 v1.2n UTF-8 support]
+   [2022/06/07 v1.3c UTF-8 support]
 \DeclareUnicodeCharacter{00A4}{\textcurrency}
 \DeclareUnicodeCharacter{00A7}{\textsection}
-\DeclareUnicodeCharacter{00AB}{\guillemotleft}
-\DeclareUnicodeCharacter{00BB}{\guillemotright}
+\DeclareUnicodeCharacter{00AB}{\guillemetleft}
+\DeclareUnicodeCharacter{00BB}{\guillemetright}
 \DeclareUnicodeCharacter{0131}{\i}
 \DeclareUnicodeCharacter{0237}{\j}
 \DeclareUnicodeCharacter{0400}{\@tabacckludge`\CYRE}
@@ -228,7 +228,9 @@
 \DeclareUnicodeCharacter{2031}{\textpertenthousand}
 \DeclareUnicodeCharacter{2116}{\textnumero}
 \DeclareUnicodeCharacter{2329}{\textlangle}
+\DeclareUnicodeCharacter{3008}{\textlangle}
 \DeclareUnicodeCharacter{232A}{\textrangle}
+\DeclareUnicodeCharacter{3009}{\textrangle}
 \DeclareUnicodeCharacter{2423}{\textvisiblespace}
 \DeclareUnicodeCharacter{27E8}{\textlangle}
 \DeclareUnicodeCharacter{27E9}{\textrangle}

Modified: trunk/Master/texmf-dist/tex/latex/base/t2benc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t2benc.dfu	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/t2benc.dfu	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,11 +42,11 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
  \ProvidesFile{t2benc.dfu}
-   [2021/06/21 v1.2n UTF-8 support]
+   [2022/06/07 v1.3c UTF-8 support]
 \DeclareUnicodeCharacter{00A4}{\textcurrency}
 \DeclareUnicodeCharacter{00A7}{\textsection}
-\DeclareUnicodeCharacter{00AB}{\guillemotleft}
-\DeclareUnicodeCharacter{00BB}{\guillemotright}
+\DeclareUnicodeCharacter{00AB}{\guillemetleft}
+\DeclareUnicodeCharacter{00BB}{\guillemetright}
 \DeclareUnicodeCharacter{0131}{\i}
 \DeclareUnicodeCharacter{0237}{\j}
 \DeclareUnicodeCharacter{0400}{\@tabacckludge`\CYRE}
@@ -222,7 +222,9 @@
 \DeclareUnicodeCharacter{2031}{\textpertenthousand}
 \DeclareUnicodeCharacter{2116}{\textnumero}
 \DeclareUnicodeCharacter{2329}{\textlangle}
+\DeclareUnicodeCharacter{3008}{\textlangle}
 \DeclareUnicodeCharacter{232A}{\textrangle}
+\DeclareUnicodeCharacter{3009}{\textrangle}
 \DeclareUnicodeCharacter{2423}{\textvisiblespace}
 \DeclareUnicodeCharacter{27E8}{\textlangle}
 \DeclareUnicodeCharacter{27E9}{\textrangle}

Modified: trunk/Master/texmf-dist/tex/latex/base/t2cenc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t2cenc.dfu	2022-06-08 20:37:30 UTC (rev 63513)
+++ trunk/Master/texmf-dist/tex/latex/base/t2cenc.dfu	2022-06-08 20:41:20 UTC (rev 63514)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,11 +42,11 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
  \ProvidesFile{t2cenc.dfu}
-   [2021/06/21 v1.2n UTF-8 support]
+   [2022/06/07 v1.3c UTF-8 support]
 \DeclareUnicodeCharacter{00A4}{\textcurrency}
 \DeclareUnicodeCharacter{00A7}{\textsection}
-\DeclareUnicodeCharacter{00AB}{\guillemotleft}
-\DeclareUnicodeCharacter{00BB}{\guillemotright}
+\DeclareUnicodeCharacter{00AB}{\guillemetleft}
+\DeclareUnicodeCharacter{00BB}{\guillemetright}
 \DeclareUnicodeCharacter{0131}{\i}
 \DeclareUnicodeCharacter{0237}{\j}
 \DeclareUnicodeCharacter{0400}{\@tabacckludge`\CYRE}
@@ -218,7 +218,9 @@
 \DeclareUnicodeCharacter{2031}{\textpertenthousand}
 \DeclareUnicodeCharacter{2116}{\textnumero}
 \DeclareUnicodeCharacter{2329}{\textlangle}
+\DeclareUnicodeCharacter{3008}{\textlangle}
 \DeclareUnicodeCharacter{232A}{\textrangle}
+\DeclareUnicodeCharacter{3009}{\textrangle}
 \DeclareUnicodeCharacter{2423}{\textvisiblespace}
 \DeclareUnicodeCharacter{27E8}{\textlangle}
 \DeclareUnicodeCharacter{27E9}{\textrangle}

Modified: trunk/Master/texmf-dist/tex/latex/base/testpage.tex
===================================================================

@@ Diff output truncated at 1234567 characters. @@


More information about the tex-live-commits mailing list.