texlive[64899] Master/texmf-dist: latex-dev 2022-11 (2nov22)

commits+karl at tug.org commits+karl at tug.org
Wed Nov 2 23:00:49 CET 2022


Revision: 64899
          http://tug.org/svn/texlive?view=revision&revision=64899
Author:   karl
Date:     2022-11-02 23:00:49 +0100 (Wed, 02 Nov 2022)
Log Message:
-----------
latex-dev 2022-11 (2nov22)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/README.md
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/amsbsy.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/amscd.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/amsgen.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/amsmath.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/amsopn.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/amstext.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/amsxtra.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/subeqn.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/technote.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/testmath.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/README.md
    trunk/Master/texmf-dist/doc/latex-dev/base/alltt.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/cfgguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/changes.txt
    trunk/Master/texmf-dist/doc/latex-dev/base/classes.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/clsguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/cmfonts.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/cyrguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/doc-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/docstrip.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/encguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/exscale.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/fix-cm.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/fntguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/graphpap.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ifthen.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/inputenc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/lamport-manual.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/latexrelease.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/latexsym.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/lb2.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/letter.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/lgc2.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/lppl.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltfilehook-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltfilehook-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/lthooks-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/lthooks-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltluatex.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltmarks-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltmarks-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews01.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews02.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews03.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews04.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews05.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews06.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews07.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews08.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews09.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews10.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews11.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews12.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews13.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews14.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews15.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews16.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews17.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews18.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews19.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews20.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews21.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews22.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews23.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews24.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews25.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews26.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews27.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews28.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews29.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews30.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews31.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews32.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews33.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews34.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews35.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews36.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews36.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltpara-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltpara-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltshipout-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltshipout-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltx3info.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltxdoc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/makeindx.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/modguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/nfssfont.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/proc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/slides.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/slifonts.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/source2e.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/syntonly.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/tlc2.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/tulm.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/usrguide-historic.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/usrguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/usrguide.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/utf8ienc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/webcomp.pdf
    trunk/Master/texmf-dist/doc/latex-dev/firstaid/changes.txt
    trunk/Master/texmf-dist/doc/latex-dev/firstaid/latex2e-first-aid-for-external-files.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/README.md
    trunk/Master/texmf-dist/doc/latex-dev/graphics/changes.txt
    trunk/Master/texmf-dist/doc/latex-dev/graphics/color.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/drivers.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/epsfig.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/graphics.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/graphicx.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/grfguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/keyval.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/lscape.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/mathcolor.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/rotating.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/rotex.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/trig.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/README.md
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/changes.txt
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/documentmetadata-support-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/documentmetadata-support-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-footnotes.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-new-or.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-testphase.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/README.md
    trunk/Master/texmf-dist/doc/latex-dev/tools/afterpage.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/array.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/bm.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/calc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/changes.txt
    trunk/Master/texmf-dist/doc/latex-dev/tools/dcolumn.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/delarray.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/enumerate.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/fileerr.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/fontsmpl.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/ftnright.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/hhline.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/indentfirst.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/layout.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/longtable.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/multicol.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/rawfonts.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/shellesc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/showkeys.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/somedefs.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/tabularx.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/theorem.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/tools-overview.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/trace.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/varioref.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/verbatim.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/xr.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/xspace.pdf
    trunk/Master/texmf-dist/source/latex-dev/base/ltclass.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltdefns.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltfinal.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltkeys.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltluatex.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltvers.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx
    trunk/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx
    trunk/Master/texmf-dist/source/latex-dev/graphics/mathcolor.dtx
    trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-footnotes.dtx
    trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab.ins
    trunk/Master/texmf-dist/tex/latex-dev/base/latex.ltx
    trunk/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua
    trunk/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex
    trunk/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx
    trunk/Master/texmf-dist/tex/latex-dev/graphics/mathcolor.ltx
    trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx

Removed Paths:
-------------
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-prototype.pdf
    trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-prototype.dtx
    trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-prototype.sty
    trunk/Master/texmf-dist/tex/latex-dev/latex-lab/prototype-latex-lab-testphase.ltx

Modified: trunk/Master/texmf-dist/doc/latex-dev/amsmath/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/amsmath/README.md	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/doc/latex-dev/amsmath/README.md	2022-11-02 22:00:49 UTC (rev 64899)
@@ -1,7 +1,7 @@
 The amsmath bundle for LaTeX
 ============================
 
-Release 2022-11-01 pre-release 0
+Release 2023-05-01 pre-release 0
 
 Overview
 --------

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

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

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

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

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

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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/README.md	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/README.md	2022-11-02 22:00:49 UTC (rev 64899)
@@ -1,7 +1,7 @@
 The LaTeX kernel
 ================
 
-Release 2022-11-01 pre-release 2
+Release 2023-05-01 pre-release 0
 
 Overview
 --------

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

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/changes.txt	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/changes.txt	2022-11-02 22:00:49 UTC (rev 64899)
@@ -6,6 +6,46 @@
 are not part of the distribution.
 ================================================================================
 
+================================================================================
+All changes above are only part of the development branch for the next release.
+================================================================================	
+
+#########################
+# 2022-11-01 Release
+#########################
+
+2022-10-26  Joseph Wright  <Joseph.Wright at latex-project.org>
+
+	* ltfinal.dtx:
+	Introduce optional argument for case-changing commands
+	Make case changing commands language-aware
+	Auto-detect babel locale for case changing
+
+2022-10-22  David Carlisle  <David.Carlisle at latex-project.org>
+
+	* ltclass.dtx, ltdefns.dtx: Further \protect guards for gh/932
+
+	* utf8ienc.dtx: Correct the description of UTF-8 octets.
+
+2022-10-22  Joseph Wright  <Joseph.Wright at latex-project.org>
+
+	* ltkeys.dtx: Correct handling of unknown option list
+
+2022-10-20  Joseph Wright  <Joseph.Wright at latex-project.org>
+
+	* ltclass.dtx, ltkeys.dtx:
+	Correct an argument for a message
+	Define key option handler in ltkeys
+
+2022-10-10  David Carlisle  <David.Carlisle at latex-project.org>
+
+	* ltclass.dtx: use \protected at edef rather than \edef when expanding option lists
+
+2022-10-03  Marcel Krüger  <marcel.krueger at latex-project.org>
+
+	* ltluatex.dtx:
+	Add ordering rules for callback handlers
+
 2022-09-20  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* ltfssdcl.dtx (section{Interface Commands}):
@@ -92,10 +132,6 @@
 	* cmfonts.fdd
 	Add font definitions for slanted small caps (gh/782)
 
-================================================================================
-All changes above are only part of the development branch for the next release.
-================================================================================	
-
 #########################
 # 2022-06-01 PL5 Release
 #########################

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews36.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews36.tex	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews36.tex	2022-11-02 22:00:49 UTC (rev 64899)
@@ -123,7 +123,7 @@
 \tubcommand{\input{tubltmac}}
 
 \publicationmonth{November}
-\publicationyear{2022  --- DRAFT version for upcoming release}
+\publicationyear{2022} %  --- DRAFT version for upcoming release}
 
 \publicationissue{36}
 
@@ -143,16 +143,30 @@
 
 \section{Introduction}
 
-\emph{to be written}
+The 2022-11 release of \LaTeX{} is largely a consolidation release
+where we made a number of minor improvements to fix some bugs or
+improve one or the other interface.
 
+The only really important functionality that was added is described in
+the next section: the ability to easily define document-level commands
+and environments that accept a key/value list in one of its (usually
+optional) arguments, including the ability to determine if the argument
+does in fact contain such a key/value list or just a single
+\enquote{classical} value.
 
-\subsection{Auto-detecting key--value arguments}
+For the \enquote{Tagged \LaTeX{} Project} this functionality is very
+important because many document-level commands will need to accept
+such key/value lists, for example, to specify alternative text or
+overwrite default tagging if that becomes necessary in a document.
 
+
+\section{Auto-detecting key/value arguments}
+
 To allow extension of the core \LaTeX{} syntax, \pkg{ltcmd} now supports
-a \texttt{={...}} modifier when grabbing arguments. This modifier instructs
+a \texttt{={...}}\ modifier when grabbing arguments. This modifier instructs
 \LaTeX{} that the argument should be passed to the underlying code as
-a set of keyvals. If the argument does not \enquote{look like} a set
-of keyvals, it will be converted into a single key--value pair, with
+a set of key/values. If the argument does not \enquote{look like} a set
+of key/values, it will be converted into a single key/value pair, with
 the argument to \texttt{=} specifying the name of that key. For
 example, the \cs{caption} command could be defined as
 \begin{verbatim}
@@ -161,26 +175,29 @@
          {...}
 \end{verbatim}
 which would mean that if the optional argument does \emph{not}
-contain keyval data, it will be converted to a single keyval
+contain key/value data, it will be converted to a single key/value
 pair with the key name \texttt{short-text}.
 
 Arguments which begin with \texttt{=,} are always interpreted as
-keyvals even if they do not contain further \texttt{=} signs.
+key/values even if they do not contain further \texttt{=} signs.
 Any \texttt{=} signs enclosed within \verb|$...$| or \verb|\(...\)|,
 i.e.~in inline math mode, are ignored, meaning that
 only \texttt{=} outside of math mode will generally cause
-interpretation as keyval material.
+interpretation as key/value material.
 
 In case the argument contains a \enquote{textual} \texttt{=} sign that
-is mistaken as key/value indicator you can hide it using a brace
+is mistaken as a key/value indicator you can hide it using a brace
 group as you would do in other places, e.g.,
 \begin{verbatim}
 \caption[{Use of = signs}]
         {Use of = signs in optional arguments}
 \end{verbatim}
-However, because a \texttt{=} sign in math mode are already ignored, this
+However, because \texttt{=} signs in math mode are already ignored, this
 should seldom be necessary.
 
+
+\section{A note for font package developers}
+
 \subsection{Encoding subsets for \texttt{TS1} encoded fonts}
 
 The text companion encoding \texttt{TS1} is unfortunately not very
@@ -204,29 +221,51 @@
 %
 \githubissue{905}
 
+\section{New or improved commands}
 
+\subsection{Better language handling for case-changing commands}
 
-\section{New or improved commands}
+The commands \cs{MakeUppercase}, \cs{MakeLowercase} and \cs{MakeTitlecase} now
+automatically detect the locale currently in use when \pkg{babel} is loaded.
+This allows automatic adjustment of letter mappings where appropriate. They
+also accept a leading optional argument. This accepts a key--value list of
+control settings. At present, there is one key available: \texttt{locale},
+which can also be accessed via the alias \texttt{lang}. This is intended to
+allow local setting of the language, which can be done using a BCP-47
+descriptor. For example, this could be used to force Turkish case changing in
+otherwise English input
+\begin{verbatim}
+\MakeUppercase[lang = tr]{Ragıp Hulûsi Özdem}
+\end{verbatim}
+yields
+  \MakeUppercase[lang = tr]{Ragıp Hulûsi Özdem}.
+%   RAGIP HULÛS\.I ÖZDEM.                           %TUB
 
-
 \section{Code improvements}
 
-\subsection{Support for slanted small caps in the EC-fonts }
-Since some time \LaTeX{} supports the combination of the shapes
-small caps and italic/slanted. The EC-fonts contain slanted small caps fonts
+\subsection{Support for slanted small caps in the EC fonts}
+For some time \LaTeX{} has supported the combination of the shapes
+small caps and italic/slanted. The EC fonts contain slanted small caps fonts
 but using them required the loading of an external package. Suitable font definitions
 have now been added to \pkg{t1cmd.fd} and so from now on
 \begin{verbatim}
- \textsc{\textsl{slanted small}}
- \textsc{\textit{italic small caps}}
+\usepackage[T1]{fontenc}
+...
+ \textsc{\textsl{Slanted Small Caps}};
+ \textsc{\textit{Italic Small Caps}};
  \bfseries
- \textsc{\textsl{bold slanted small caps}}
- \textsc{\textit{bold italic small caps}}
+ \textsc{\textsl{Bold Slanted Small Caps}};
+ \textsc{\textit{Bold Italic Small Caps}}.
 \end{verbatim}
 will give the expected result: {\fontfamily{cmr}
-\textsc{\textsl{slanted small}} \textsc{\textit{italic small caps}}
+\textsc{\textsl{Slanted Small Caps}}; \textsc{\textit{Italic Small Caps}};
 \bfseries
-\textsc{\textsl{bold slanted small caps}} \textsc{\textit{bold italic small caps}}}
+\textsc{\textsl{Bold Slanted Small Caps}}; \textsc{\textit{Bold Italic Small Caps}}}.
+
+Given that the Computer Modern fonts in \texttt{T1} do not have real italic small caps but only
+slanted small caps, the latter is substituted for the former, which is
+why above both work but you see no difference between the two (and in the log you get a
+substitution warning for the \cs{textit}\cs{textsc} shape combination).
 %
 \githubissue{782}
 
@@ -242,6 +281,31 @@
 \githubissue{879}
 
 
+
+\subsection{Improve font series handling with incorrect \texttt{.fd} files}
+
+By convention, the font series value is supposed to contain no
+\texttt{m}, unless you refer to the \enquote{medium} series (which is
+represented by a single \texttt{m}). For example, one should write
+\texttt{c} for \enquote{medium weight, condensed width} and not
+\texttt{mc}. This was one of the many space-conserving methods
+necessary in the early days of \LaTeXe.
+
+Some older \texttt{.fd} files
+do not obey that convention but use \texttt{mc}, \texttt{bm}, etc., in
+their declarations. As a result, some font selection scheme
+functionality was not working when confronted with such \texttt{.fd}
+files. We have therefore augmented \cs{DeclareSymbolFont} and
+\cs{SetSymbolFont} to strip any surplus \texttt{m} from their series argument
+so that they do not unnecessarily trigger font
+substitutions. Regardless of this support such 
+\texttt{.fd} files should get fixed by their maintainers.
+%
+\githubissue{918}
+
+
+
+
 \subsection{Detect nested \texttt{minipage} environments}
 
 Nesting of \texttt{minipage} environments is only partially supported
@@ -248,7 +312,7 @@
 in \LaTeX{} and can lead to incorrect output, such as overfull boxes
 or footnotes appearing in the wrong place;
 see~\cite[p.~106]{36:Lamport}. However, until now there was no warning
-if that happpened.  This has been changed and the environment now
+if that happened.  This has been changed and the environment now
 warns if you nest it in another \texttt{minipage} environment that
 already contains footnotes.
 %
@@ -255,18 +319,21 @@
 \githubissue{168}
 
 
+\subsection{Robust commands in package options}
+With the standard key-based option handler added in the last release,
+or with contributed packages offering similar features, users may
+expect to be able to use a package option such as
+\verb|[font=\bfseries]|.
+Previously this failed with internal errors as the option list was
+expanded via \verb|\edef|. This has now been changed to use the
+existing command \verb|\protected at edef| so that any \LaTeX\ robust
+command should be safe to pass to a key value option.
+%
+\githubissue{932}
 
-\subsection{\LuaTeX\ callback efficiency improvement}
 
-The mechanism for providing the
-\texttt{pre/post\_mlist\_to\_hlist\_filter} callbacks in \LuaTeX\ has
-been improved to make it more reusable and to avoid overhead if these
-callbacks are not used.
-%
-\githubissue{830}
 
 
-
 \subsection{Improve \pkg{l3docstrip} integration into \pkg{docstrip}}
 
 In 2020 we merged \pkg{l3docstrip.tex} into \pkg{docstrip.tex} to
@@ -282,35 +349,56 @@
 
 
 
-\subsection{Improve font series handling with incorrect \texttt{.fd} files}
+\subsection{\LuaTeX\ callback efficiency improvement}
 
-By convention, the font series value is supposed to contain no
-\texttt{m}, unless you refer to the \enquote{medium} series (which is
-represented by a single \texttt{m}). For example, one should write
-\texttt{c} for \enquote{medium weight, condensed width} and not
-\texttt{mc}. This was one of the many space-conserving methods
-necessary in the early days of \LaTeXe.
-
-Some older \texttt{.fd} files
-do not obey that convention but use \texttt{mc}, \texttt{bm}, etc., in
-their declarations. As a result, some font selection scheme
-functionality was not working when confronted with such \texttt{.fd}
-files. We have therefore augmented \cs{DeclareSymbolFont} and
-\cs{SetSymbolFont} to strip their series argument from any surplus
-\texttt{m} so that they do not unnecessarily trigger font
-substitutions. Regardless of this support such 
-\texttt{.fd} files should get fixed by their maintainers.
+The mechanism for providing the
+\texttt{pre/post\_mlist\_to\_hlist\_filter} callbacks in \LuaTeX\ has
+been improved to make it more reusable and to avoid overhead if these
+callbacks are not used.
 %
-\githubissue{918}
+\githubissue{830}
 
 
+\subsection{Rule-based ordering for \LuaTeX\ callback handlers}
 
+In \hologo{LuaLaTeX} the callback handlers used to be called in the order
+in which they were registered in, but this was often rather fragile.
+It depends a lot on the load order and any attempts to enforce a
+different order required unregistering and reregistering the handlers to
+be reordered. Additionally, even if some ordering constraints where
+enforced that way, another package loaded later could accidentally
+overwrite it.
+
+To improve this, we now order the callback handlers based on ordering
+rules similar to the hook rules.
+
+When registering a callback which should run before or after another
+callback, \verb+luatexbase.declare_callback_rule+ can now be used to
+record this ordering constraint.
+For example
+\begin{verbatim}
+luatexbase.add_to_callback
+ ('pre_shaping_filter', my_handler, 'my_name')
+luatexbase.declare_callback_rule
+ ('pre_shaping_filter',
+            'my_name', 'before', 'other_name')
+\end{verbatim}
+will ensure that \verb+my_handler+ will always be called before the
+handler registered as \verb+other_name+.
+
+This also means that the order in which callbacks are registered no
+longer implicitly defines an order.
+Code which relied on this implicit order should now define the order
+rules explicitly.
+
+
+
 \section{Bug fixes}
 
-\subsection{Prevent \TeX{} from loosing a \cs{smash}}
+\subsection{Prevent \TeX{} from losing a \cs{smash}}
 
 When \TeX{} is typesetting a fraction, it will rebox the material in
-either numerator or the denumerator depending on which is wider. If
+either the numerator or denominator, depending on which is wider. If
 the repackaged part consists of a single box, that box gets new
 dimensions and if it was built using a \cs{smash} that effect vanishes
 (because a smash is nothing other than zeroing some box dimension,
@@ -321,21 +409,29 @@
 \end{verbatim}
 the $2$ in the denominators was not always at the same vertical position, because
 the second \cs{smash} was ignored due to reboxing:
+\vspace{-1.2\baselineskip}
 \[
 \makeatletter
 \def\mathsm at sh#1#2{\setbox\z@\hbox{$\m at th#1{#2}$}\finsm at sh} % old definition
 \makeatother
 \newcommand*\drawbaseline{\rlap{\vrule width 60pt height 0.1pt depth 0pt }}
+\qquad
 \frac{1}{\drawbaseline2} = \frac{1}{\smash{2^X}}      \neq 
 \frac{100}{\smash{2^X}}
+\pagebreak     % not TUB
 \]
-The differences are subtle but noticeable. This is now corrected and the \cs{smash} is always
+The differences are subtle but noticeable.
+This is now corrected and the \cs{smash} is always
 honored. Thus now you get this output:
+\vspace{-1.2\baselineskip}
 \[
 \newcommand*\drawbaseline{\rlap{\vrule width 60pt height 0.1pt depth 0pt }}
+\qquad
 \frac{1}{\drawbaseline2} = \frac{1}{\smash{2^X}}      \neq 
 \frac{100}{\smash{2^X}}
 \]
+\par
+\vspace{-1.5\baselineskip}
 %
 \githubissue{517}
 
@@ -342,7 +438,7 @@
 
 \subsection{Resolve an issue with \cs{mathchoice} and \texttt{localalphabets}}
 
-The code for keeping a number of math alphabetcs local (introduced in
+The code for keeping a number of math alphabets local (introduced in
 2021; see~\cite{36:ltnews34}) used \cs{aftergroup} to do some cleanup actions after a
 formula had finished.  Unfortunately, \cs{aftergroup} can't be used
 inside the arguments of the \cs{mathchoice} primitive and as a result one
@@ -352,19 +448,28 @@
 %
 \githubissue{921}
 
+\subsection{Reporting of unused global options when using key/value processing}
 
+Using the new key/value option processor did not properly report any unused
+global options when it was used in handling class options. This has now been
+corrected.
+%
+\githubissue{938}
 
-\section{Changes to packages in the \pkg{amsmath} category}
 
+%\section{Changes to packages in the \pkg{amsmath} category}
 
+
+%\newpage   TUB?
+
 \section{Changes to packages in the \pkg{graphics} category}
 
 \subsection{Fix a \cs{mathcolor} bug}
 
-The \cs{mathcolor} command intorduced in \cite{36:ltnews35} needs to
-scan for following sub and superscripts, but if it did so at the end
+The \cs{mathcolor} command introduced in \cite{36:ltnews35} needs to
+scan for following sub- and superscripts, but if it did so at the end
 of an alignment cell, e.g., in a \texttt{array} environment, the
-\texttt{\&} was evaluated too early causing some internal errors. This
+\texttt{\&} was evaluated too early, causing some internal errors. This
 is now properly guarded for.
 %
 \githubissue{901}
@@ -375,7 +480,7 @@
 
 \subsection{\pkg{array}: Correctly identify single-line m-cells}
 
-Cells in m-columns that only contain a single line are supposed to
+Cells in m-columns that contain only a single line are supposed to
 behave like single-line p-cells and align at the same baseline. To
 test for the condition, \pkg{array} used to compare the height of the cell to
 the height of the strut used for the table rows. However, the height of that
@@ -388,7 +493,7 @@
 \githubissue{766}
 
 
-\medskip
+%\medskip
 
 \begin{thebibliography}{9}
 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/usrguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/usrguide.tex	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/usrguide.tex	2022-11-02 22:00:49 UTC (rev 64899)
@@ -39,7 +39,7 @@
    \footnote{This file may 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. See the source
-    \texttt{usrguide3.tex} for full details.}%
+    \texttt{usrguide.tex} for full details.}%
 }
 
 \date{2022-07-05}
@@ -75,7 +75,7 @@
 \section{Introduction}
 
 \LaTeXe{} was released in 1994 and added a number of then-new concepts to
-\LaTeX{}. These are described in \texttt{usrguide-old}, which has largely remained
+\LaTeX{}. These are described in \texttt{usrguide-historic}, which has largely remained
 unchanged. Since then, the \LaTeX{} team have worked on a number of ideas,
 firstly a programming language for \LaTeX{} (\pkg{expl3}) and then a range of
 tools for document authors which build on that language. Here, we describe
@@ -1166,6 +1166,13 @@
   \end{tabular}
 \end{quotation}
 
+The case-changing commands take an optional argument which can be used to
+tailor the output. This optional argument accepts the key \texttt{locale},
+also available under the alias \texttt{lang},
+which can be used to give a language identifier in BCP-47
+format. This is then applied to select language-specific features during
+case-changing.
+
 The input given to these commands is `expanded' before case changing is
 applied. This means that any commands within the input that convert to pure
 text will be case changed. Mathematical content is automatically excluded, as

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

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/firstaid/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/firstaid/changes.txt	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/doc/latex-dev/firstaid/changes.txt	2022-11-02 22:00:49 UTC (rev 64899)
@@ -1,3 +1,19 @@
+2022-10-27	Joseph Wright <Joseph.Wright at latex-project.org>
+
+	* latex2e-first-aid-for-external-files.dtx:
+	Much easier babel patch
+
+2022-10-27	Joseph Wright <Joseph.Wright at latex-project.org>
+
+	* latex2e-first-aid-for-external-files.dtx:
+	Add first aid for babel to undo a no-longer required patch
+
+2022-10-03	Joseph Wright <Joseph.Wright at latex-project.org>
+
+	* latex2e-first-aid-for-external-files.dtx:
+	Add first aid for memoir to support kernel-provided
+	\stock... dimens
+
 2022-02-20  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* latex2e-first-aid-for-external-files.dtx:

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/graphics/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/graphics/README.md	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/doc/latex-dev/graphics/README.md	2022-11-02 22:00:49 UTC (rev 64899)
@@ -1,7 +1,7 @@
 The LaTeX `graphics` bundle
 ===========================
 
-Release 2022-11-01 pre-release 0
+Release 2023-05-01 pre-release 0
 
 Overview
 --------

Modified: trunk/Master/texmf-dist/doc/latex-dev/graphics/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/graphics/changes.txt	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/doc/latex-dev/graphics/changes.txt	2022-11-02 22:00:49 UTC (rev 64899)
@@ -9,6 +9,16 @@
 ================================================================================
 
 #########################
+# 2022-11-01 Release
+#########################
+
+2022-07-25  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* mathcolor.dtx (section{The Implementation}):
+	Avoid ending an alignment cell prematurely when hitting an
+	& during scanning (gh/901)
+
+#########################
 # 2022-06-01 Release
 #########################
 

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

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

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

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

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

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

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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/latex-lab/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/latex-lab/README.md	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/doc/latex-dev/latex-lab/README.md	2022-11-02 22:00:49 UTC (rev 64899)
@@ -1,6 +1,6 @@
 # LaTeX laboratory
 
-Release 2022-06-01 pre-release 4
+Release 2023-05-01 pre-release 0
 
 ## Overview
 

Modified: trunk/Master/texmf-dist/doc/latex-dev/latex-lab/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/latex-lab/changes.txt	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/doc/latex-dev/latex-lab/changes.txt	2022-11-02 22:00:49 UTC (rev 64899)
@@ -1,3 +1,13 @@
+2022-07-22  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* latex-lab-footnotes.dtx (subsection{Document-level commands}):
+	Make mandatory arguments of  \footnote and \footnotetext long (gh863)
+
+2022-05-28 Joseph Wright <Joseph.Wright at latex-project.org>
+
+	* latex-lab-prototype.dtx
+	 Removed
+
 2022-14-04 Ulrike Fischer <Ulrike.Fischer at latex-project.org>
 
 	* documentmeta-support.dtx:

Modified: trunk/Master/texmf-dist/doc/latex-dev/latex-lab/documentmetadata-support-code.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/latex-lab/documentmetadata-support-doc.pdf
===================================================================
(Binary files differ)

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-new-or.pdf
===================================================================
(Binary files differ)

Deleted: trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-prototype.pdf
===================================================================
(Binary files differ)

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/tools/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/tools/README.md	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/doc/latex-dev/tools/README.md	2022-11-02 22:00:49 UTC (rev 64899)
@@ -1,7 +1,7 @@
 The LaTeX `tools` bundle
 ========================
 
-Release 2022-11-01 pre-release 2
+Release 2023-05-01 pre-release 0
 
 Overview
 --------

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/tools/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/tools/changes.txt	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/doc/latex-dev/tools/changes.txt	2022-11-02 22:00:49 UTC (rev 64899)
@@ -5,6 +5,14 @@
 are not part of the distribution.
 =======================================================================
 
+================================================================================
+All changes above are only part of the development branch for the next release.
+================================================================================
+
+#########################
+# 2022-11-01 Release
+#########################
+
 2022-09-04  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* array.dtx (section{The macros \texttt{\textbackslash @classz}):
@@ -11,10 +19,6 @@
 	Test against \strutbox height to determine if an m-cell contains
 	 only a single line (gh/766)
 
-================================================================================
-All changes above are only part of the development branch for the next release.
-================================================================================
-
 #########################
 # 2022-06-01 Release
 #########################

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltclass.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltclass.dtx	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltclass.dtx	2022-11-02 22:00:49 UTC (rev 64899)
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltclass.dtx}
-             [2022/06/20 v1.5c LaTeX Kernel (Class & Package Interface)]
+             [2022/10/22 v1.5e LaTeX Kernel (Class & Package Interface)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltclass.dtx}
@@ -1302,7 +1302,10 @@
     {\@expl@@@filehook at resolve@file at subst@@w #3.#1\@nil}%
       \reserved at a\reserved at b
   \@expl@@@filehook at clear@replacement at flag@@
-  \expandafter\xdef\csname opt@\reserved at a\endcsname{%
+%    \end{macrocode}
+% \changes{v1.5d}{2022/10/10}{Use \cs{protected at xdef}.}
+%    \begin{macrocode}
+  \expandafter\protected at xdef\csname opt@\reserved at a\endcsname{%
     \@ifundefined{opt@\reserved at a}\@empty
       {\csname opt@\reserved at a\endcsname,}%
     \zap at space#2 \@empty}%
@@ -1476,10 +1479,12 @@
 %         {Star form added.}
 % \changes{v0.2c}{1993/11/17}
 %         {restoring \cs{@fileswith at pti@ns} added.}
+% \changes{v1.5d}{2022/10/10}
+%         {Use \cs{protected at edef}.}
 %    \begin{macrocode}
 \def\ProcessOptions{%
   \let\ds@\@empty
-  \edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
+  \protected at edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
   \@ifstar\@xprocess at ptions\@process at ptions}
 \@onlypreamble\ProcessOptions
 %    \end{macrocode}
@@ -1505,6 +1510,7 @@
 % \changes{v0.2y}{1994/02/07}
 %         {Add extra ,s so `two' is not matched with `twocolumn'}
 % \changes{v1.3z}{2021/03/05}{modify so braces to not give errors (gh/513)}
+% \changes{v1.5e}{2022/10/22}{Use \cs{detokenize}}
 %    \begin{macrocode}
 %</2ekernel>
 %<latexrelease>\IncludeInRelease{2021/06/01}%
@@ -1515,7 +1521,7 @@
    \ifx\@classoptionslist\relax\else
     \@for\CurrentOption:=\@classoptionslist\do{%
       \ifx\CurrentOption\@empty\else
-        \@ifundefined{ds@\CurrentOption}{}{%
+        \@ifundefined{ds@\detokenize\expandafter{\CurrentOption}}{}{%
           \@use at ption
           \expandafter\let\csname ds@\CurrentOption\endcsname\@empty
         }%
@@ -1552,6 +1558,7 @@
 %    \end{macrocode}
 %
 % The common part of |\ProcessOptions| and |\ProcessOptions*|.
+% \changes{v1.5e}{2022/10/22}{Use \cs{detokenize}}
 %    \begin{macrocode}
 %</2ekernel>
 %<*2ekernel|latexrelease>
@@ -1559,7 +1566,7 @@
 %<latexrelease>                 {\@process at pti@ns}{Unused options issue}%
 \def\@process at pti@ns{%
   \@for\CurrentOption:=\@curroptions\do{%
-    \@ifundefined{ds@\CurrentOption}%
+    \@ifundefined{ds@\detokenize\expandafter{\CurrentOption}}%
       {\@use at ption
        \default at ds}%
 %    \end{macrocode}
@@ -1627,6 +1634,7 @@
 % \changes{v1.0e}{1994/05/17}
 %         {Execute option after removing from list, not before}
 % \changes{v1.3x}{2021/02/18}{filter out =value from unused option list (gh/85)}
+% \changes{v1.5e}{2022/10/22}{Use \cs{detokenize}}
 %    \begin{macrocode}
 %</2ekernel>
 %<latexrelease>\IncludeInRelease{2021/06/01}%
@@ -1636,7 +1644,7 @@
   \@expandtwoargs\@removeelement
      {\expandafter\@remove at eq@value\CurrentOption=\@nil}%
   \@unusedoptionlist\@unusedoptionlist
-  \csname ds@\CurrentOption\endcsname}
+  \csname ds@\detokenize\expandafter{\CurrentOption}\endcsname}
 %</2ekernel|latexrelease>
 %<latexrelease>\EndIncludeInRelease
 %<latexrelease>\IncludeInRelease{0000/00/00}%
@@ -1988,6 +1996,7 @@
 % \changes{v2.1b}{2016/11/09}
 %         {Improve \cs{ifx} tests PR/4497}
 % \changes{v1.3x}{2021/02/18}{save raw class option list (gh/85)}
+% \changes{v1.5e}{2022/10/22}{Use \cs{protected at xdef}.}
 %    \begin{macrocode}
 %</2ekernel>
 %<latexrelease>\IncludeInRelease{2020/10/01}%
@@ -1996,7 +2005,7 @@
 \def\@fileswith at pti@ns#1[#2]#3[#4]{%
   \ifx#1\@clsextension
     \ifx\@classoptionslist\relax
-      \xdef\@classoptionslist{\zap at space#2 \@empty}%
+      \protected at xdef\@classoptionslist{\zap at space#2 \@empty}%
 %    \end{macrocode}
 % Save raw class list.
 %    \begin{macrocode}
@@ -2177,6 +2186,8 @@
 %    \end{macrocode}
 % \changes{v1.5b}{2022/03/18}{Switch to \cs{ProcessKeyOptions}}
 % \changes{v1.5c}{2022/06/20}{Pass raw options to \cs{ProcessKeyOptions}}
+% \changes{v1.5e}{2022/10/20}
+%         {Define key option handler in \pkg{ltkeys}}
 %    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.
@@ -2183,15 +2194,16 @@
 %    Otherwise, we use the more classical clash handler.
 %    \begin{macrocode}
     {%
-      \@ifundefined{opt at fam@\@currname.\@currext}
+      \@ifundefined{opt at handler@\@currname.\@currext}
         {\@onefilewithoptions at clashchk{#2}}
         {%
-          \expandafter\edef\csname opt@\@currname.\@currext\endcsname
+%    \end{macrocode}
+% \changes{v1.5d}{2022/10/10}{Use \cs{protected at edef}.}
+%    \begin{macrocode}
+          \expandafter\protected at edef\csname opt@\@currname.\@currext\endcsname
             {\zap at space#2 \@empty}%
           \@namedef{@raw at opt@\@currname.\@currext}{#2}%
-          \expandafter\expandafter\expandafter\ProcessKeyOptions
-            \expandafter\expandafter\expandafter
-              [\csname opt at fam@\@currname.\@currext\endcsname]%
+          \@nameuse{opt at handler@\@currname.\@currext}%
         }%
     }%
     {\makeatletter
@@ -2693,10 +2705,11 @@
 % \changes{v0.2v}{1994/01/29}
 %         {Macro added.}
 % \changes{v1.0t}{1995/11/14}{Allow empty option}
+% \changes{v1.5d}{2022/10/10}{Use \cs{protected at edef}.}
 %    \begin{macrocode}
 \def\@@unprocessedoptions{%
   \ifx\@currext\@pkgextension
-    \edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
+    \protected at edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
     \@for\CurrentOption:=\@curroptions\do{%
         \ifx\CurrentOption\@empty\else\@unknownoptionerror\fi}%
   \fi}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltdefns.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltdefns.dtx	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltdefns.dtx	2022-11-02 22:00:49 UTC (rev 64899)
@@ -32,7 +32,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltdefns.dtx}
-             [2022/05/13 v1.5q LaTeX Kernel (definition commands)]
+             [2022/05/22 v1.5r LaTeX Kernel (definition commands)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltdefns.dtx}
@@ -966,9 +966,22 @@
 %
 % \begin{macro}{\@expandtwoargs}
 %    A macro to totally expand two arguments to another macro
+% \changes{v1.5r}{2022/10/22}{Use \cs{protected at edef}.}
 %    \begin{macrocode}
+%</2ekernel>
+%<latexrelease>\IncludeInRelease{2022/11/01}%
+%<latexrelease>        {\@expandtwoargs}{protected edef}%
+%<*2ekernel|latexrelease>
 \def\@expandtwoargs#1#2#3{%
-\edef\reserved at a{\noexpand#1{#2}{#3}}\reserved at a}
+\protected at edef\reserved at a{\noexpand#1{#2}{#3}}\reserved at a}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{00/00/00}%
+%<latexrelease>        {\@expandtwoargs}{protected edef}%
+%<latexrelease>\def\@expandtwoargs#1#2#3{%
+%<latexrelease>\edef\reserved at a{\noexpand#1{#2}{#3}}\reserved at a}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
 %    \end{macrocode}
 % \end{macro}
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltfinal.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltfinal.dtx	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltfinal.dtx	2022-11-02 22:00:49 UTC (rev 64899)
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltfinal.dtx}
-             [2022/08/29 v2.2w LaTeX Kernel (Final Settings)]
+             [2022/10/26 v2.2x LaTeX Kernel (Final Settings)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltfinal.dtx}
@@ -1085,6 +1085,9 @@
 % \changes{v2.2t}{2022/04/21}{Support \cs{noexpand} in argument of \cs{@expl at text@uppercase@@n}}
 % \changes{v2.2v}{2022/06/30}{Just use \cs{text_lowercase:n} without \cs{protectd at edf} gh/881x}%
 % \changes{v2.2w}{2022/07/04}{Introduced \cs{CaseSwitch}, \cs{DeclareCaseChangeEquivalent} and \cs{MakeTitlecase} to support hooking into case changing gh/889}%
+% \changes{v2.2x}{2022/10/26}{Introduce optional argument for case-changing commands}
+% \changes{v2.2x}{2022/10/26}{Make case changing commands language-aware}
+% \changes{v2.2x}{2022/10/26}{Auto-detect \pkg{babel} locale}
 % Wrappers around the L3 case changing functions.
 % |\protected| to make them mostly safe as replacements for |uppercase|
 % and |\lowercase|.  
@@ -1109,13 +1112,56 @@
 % functions.
 %    \begin{macrocode}
 \ExplSyntaxOn
-\cs_new_protected_nopar:cpn{MakeUppercase~}{\text_uppercase:n}
-\cs_set_nopar:Npx\MakeUppercase#1{\use:c{MakeUppercase~}{#1}}
-\cs_new_protected_nopar:cpn{MakeLowercase~}{\text_lowercase:n}
-\cs_set_nopar:Npx\MakeLowercase#1{\use:c{MakeLowercase~}{#1}}
-\cs_new_protected_nopar:cpn{MakeTitlecase~}{\text_titlecase:n}
-\cs_set_nopar:Npx\MakeTitlecase#1{\use:c{MakeTitlecase~}{#1}}
+\keys_define:nn { __kernel }
+  {
+    lang   .str_set:N = \reserved at a ,
+    locale .str_set:N = \reserved at a
+  }
+\cs_new_protected:Npn \@@text at case@aux #1#2#3
+  {
+    \cs_set_nopar:Npn \reserved at a { }
+    \tl_if_blank:nTF {#2}
+      { \@@text at case@aux@ }
+      { \keys_set:nn { __kernel } {#2} }
+    \use:c { text_ #1 case:Vn } \reserved at a {#3}
+  }
+\cs_new_protected:Npn \@@text at case@aux@ { }
+\tl_gput_right:Nn \@kernel at after@begindocument
+  {
+    \@ifpackageloaded { babel }
+      {
+        \@ifpackagelater { babel } { 2020-01-15 }
+          {
+            \cs_gset_protected:Npn \@@text at case@aux@
+              {
+                \str_set:Nx \reserved at a
+                  { \localeinfo* { tag.bcp47 } }
+              }
+          }
+          { }
+      }
+      { }
+  }
+\exp_args_generate:n { cnx }
 %    \end{macrocode}
+% The odd use of \emph{three} spaces here is needed as \pkg{ltcmd} uses the
+% name with one and two spaces to give a `friendly' error message for a runaway
+% argument: that means we can't use it here.
+%    \begin{macrocode}
+\cs_set_protected:Npn \reserved at a #1
+  {
+    \cs_generate_variant:cn { text_ \str_lowercase:n {#1} case:nn } { V }
+    \cs_new_protected:cpx { Make#1case \c_space_tl \c_space_tl \c_space_tl } [##1] ##2
+      { \exp_not:N \@@text at case@aux { \str_lowercase:n {#1} } {##1} {##2} }
+     \ExpandArgs { cnx } \NewExpandableDocumentCommand
+       { Make#1case }
+       { O{} +m }
+       { \exp_not:c { Make#1case \c_space_tl \c_space_tl \c_space_tl } [####1] {####2} }
+  }
+\reserved at a { Upper }
+\reserved at a { Lower }
+\reserved at a { Title }
+%    \end{macrocode}
 %
 % \changes{v2.2u}{2022/06/02}{Add \cs{NoCaseChange}}
 % \changes{v2.2u}{2022/06/30}{Add \cs{AddToNoCaseChangeList}}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltkeys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltkeys.dtx	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltkeys.dtx	2022-11-02 22:00:49 UTC (rev 64899)
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltkeys.dtx}
-             [2022/08/21 v1.0k LaTeX Kernel (Keyval options)]
+             [2022/10/22 v1.0l LaTeX Kernel (Keyval options)]
 % \iffalse
 \documentclass{l3doc}
 \GetFileInfo{ltkeys.dtx}
@@ -209,6 +209,8 @@
 % \begin{macro}{\@@_options_aux:n}
 % \changes{v1.0b}{2022/01/15}
 %         {Clear option list in end-of-package hook}
+% \changes{v1.0l}{2022/10/20}
+%         {Define key option handler in \pkg{ltkeys}}
 % \changes{v1.0i}{2022/07/05}{Support \cs{CurrentOption}}
 % \begin{macro}{\@@_options_end:}
 %   The main function calls functions to collect up the global and local
@@ -225,7 +227,8 @@
   { \@@_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_gset_protected:cpn { opt at handler@\@currname.\@currext }
+      { \ProcessKeyOptions [ #1 ] }
     \cs_set_protected:Npn \@@_option_end: { }
     \clist_clear:N \l_@@_options_clist
     \@@_options_global:n {#1}
@@ -294,6 +297,7 @@
 % \begin{macro}{\@@_options_class:nnn}
 % \changes{v1.0h}{2022/06/20}{New function}
 % \changes{v1.0i}{2022/07/05}{Correct naming of raw class options storage}
+% \changes{v1.0l}{2022/10/22}{Correct handling of unused option list}
 %   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
@@ -323,11 +327,12 @@
 \cs_new_protected:Npn \@@_options_class:nnn #1#2#3
   {
     \keys_if_exist:nnTF {#3} {#1}
-      { \clist_put_right:Nn \l_@@_options_clist {#2} }
       {
-        \str_if_eq:eeF
-          { \exp_not:v { @raw at opt@ \@currname . \@currext } }
-          { \exp_not:V \@raw at classoptionslist }
+        \clist_put_right:Nn \l_@@_options_clist {#2}
+        \clist_remove_all:Nn \@unusedoptionlist {#1}
+      }
+      {
+        \clist_if_in:NnF \@unusedoptionlist {#1}
           { \clist_put_right:Nn \@unusedoptionlist {#1} }
       }
   }
@@ -475,6 +480,7 @@
 %
 % \begin{macro}{\@@_options_loaded:n}
 % \begin{macro}{\@@_options_loaded:nn}
+% \changes{v1.0l}{2022/10/20}{Correct an argument for a message}
 %   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.
@@ -496,11 +502,9 @@
 \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_warning:nnnn { keys } { load-option-ignored } }
+      { \msg_error:nnnn { keys } { load-only } }
+        {#1} {#2}
   }
 %    \end{macrocode}
 % \changes{v1.0j}{2022/07/23}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltluatex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltluatex.dtx	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltluatex.dtx	2022-11-02 22:00:49 UTC (rev 64899)
@@ -28,7 +28,7 @@
 \ProvidesFile{ltluatex.dtx}
 %</driver>
 %<*tex>
-[2022/08/13 v1.1y
+[2022/10/03 v1.2a
 %</tex>
 %<plain>  LuaTeX support for plain TeX (core)
 %<*tex>
@@ -380,7 +380,7 @@
 %
 % \noindent
 % \DescribeMacro{create_callback}
-% |luatexbase.create_callback(|\meta{name},meta{type},\meta{default}|)|
+% |luatexbase.create_callback(|\meta{name},\meta{type},\meta{default}|)|
 % Defines a user defined callback. The last argument is a default
 % function or |false|.
 %
@@ -389,6 +389,34 @@
 % |luatexbase.call_callback(|\meta{name},\ldots|)|
 % Calls a user defined callback with the supplied arguments.
 %
+% \noindent
+% \DescribeMacro{declare_callback_rule}
+% |luatexbase.declare_callback_rule(|\meta{name}, \meta{first}, \meta{relation}, \meta{second}|)|
+% Adds an ordering constraint between two callback functions for callback \meta{name}.
+%
+% The kind of constraint added depends on \meta{relation}:
+% \begin{description}
+%   \item[before] The callback function with description \meta{first} will be
+%     executed before the function with description \meta{second}.
+%   \item[after] The callback function with description \meta{first} will be
+%     executed after the function with description \meta{second}.
+%   \item[incompatible-warning] When both a callback function with description \meta{first}
+%     and with description \meta{second} is registered, then a warning is printed when
+%     the callback is executed.
+%   \item[incompatible-error] When both a callback function with description \meta{first}
+%     and with description \meta{second} is registered, then an error is printed when
+%     the callback is executed.
+%   \item[unrelated] Any previously declared callback rule between \meta{first}
+%     and \meta{second} gets disabled.
+% \end{description}
+% Every call to \texttt{declare_callback_rule} with a specific callback \meta{name}
+% and descriptions \meta{first} and \meta{second} overwrites all previous calls with
+% same callback and descriptions.
+%
+% The callback functions do not have to be registered yet when the functions is called.
+% Ony the constraints for which both callback descriptions refer to callbacks
+% registered at the time the callback is called will have an effect.
+%
 % \endgroup
 %
 % \MaybeStop{}
@@ -1288,8 +1316,120 @@
 % actual function as |func| and the identifying description as |description|.
 % Only callbacks with a non-empty list of functions have an entry in this
 % list.
+%
+% Actually there are two tables: |realcallbacklist| directly contains the entries
+% as described above while |callbacklist| only directly contains the already sorted
+% entries. Other entries can be queried through |callbacklist| too which triggers a
+% resort.
+%
+% Additionally |callbackrules| describes the ordering constraints: It contains two
+% element tables with the descriptions of the constrained callback implementations.
+% It can additionally contain a |type| entry indicating the kind of rule. A missing
+% value indicates a normal ordering contraint.
+%
+% \changes{v1.2a}{2022/10/03}{Add rules for callback ordering}
 %    \begin{macrocode}
-local callbacklist = callbacklist or { }
+local realcallbacklist = {}
+local callbackrules = {}
+local callbacklist = setmetatable({}, {
+  __index = function(t, name)
+    local list = realcallbacklist[name]
+    local rules = callbackrules[name]
+    if list and rules then
+      local meta = {}
+      for i, entry in ipairs(list) do
+        local t = {value = entry, count = 0, pos = i}
+        meta[entry.description], list[i] = t, t
+      end
+      local count = #list
+      local pos = count
+      for i, rule in ipairs(rules) do
+        local rule = rules[i]
+        local pre, post = meta[rule[1]], meta[rule[2]]
+        if pre and post then
+          if rule.type then
+            if not rule.hidden then
+              assert(rule.type == 'incompatible-warning' and luatexbase_warning
+                or rule.type == 'incompatible-error' and luatexbase_error)(
+                  "Incompatible functions \"" .. rule[1] .. "\" and \"" .. rule[2]
+                  .. "\" specified for callback \"" .. name .. "\".")
+              rule.hidden = true
+            end
+          else
+            local post_count = post.count
+            post.count = post_count+1
+            if post_count == 0 then
+              local post_pos = post.pos
+              if post_pos ~= pos then
+                local new_post_pos = list[pos]
+                new_post_pos.pos = post_pos
+                list[post_pos] = new_post_pos
+              end
+              list[pos] = nil
+              pos = pos - 1
+            end
+            pre[#pre+1] = post
+          end
+        end
+      end
+      for i=1, count do -- The actual sort begins
+        local current = list[i]
+        if current then
+          meta[current.value.description] = nil
+          for j, cur in ipairs(current) do
+            local count = cur.count
+            if count == 1 then
+              pos = pos + 1
+              list[pos] = cur
+            else
+              cur.count = count - 1
+            end
+          end
+          list[i] = current.value
+        else
+          -- Cycle occured. TODO: Show cycle for debugging
+          -- list[i] = ...
+          local remaining = {}
+          for name, entry in next, meta do
+            local value = entry.value
+            list[#list + 1] = entry.value
+            remaining[#remaining + 1] = name
+          end
+          table.sort(remaining)
+          local first_name = remaining[1]
+          for j, name in ipairs(remaining) do
+            local entry = meta[name]
+            list[i + j - 1] = entry.value
+            for _, post_entry in ipairs(entry) do
+              local post_name = post_entry.value.description
+              if not remaining[post_name] then
+                remaining[post_name] = name
+              end
+            end
+          end
+          local cycle = {first_name}
+          local index = 1
+          local last_name = first_name
+          repeat
+            cycle[last_name] = index
+            last_name = remaining[last_name]
+            index = index + 1
+            cycle[index] = last_name
+          until cycle[last_name]
+          local length = index - cycle[last_name] + 1
+          table.move(cycle, cycle[last_name], index, 1)
+          for i=2, length//2 do
+            cycle[i], cycle[length + 1 - i] = cycle[length + 1 - i], cycle[i]
+          end
+          error('Cycle occured at ' .. table.concat(cycle, ' -> ', 1, length))
+        end
+      end
+    end
+    realcallbacklist[name] = list
+    t[name] = list
+    return list
+  end
+})
 %    \end{macrocode}
 %
 % Numerical codes for callback types, and name-to-value association (the
@@ -1731,6 +1871,7 @@
 % \changes{v1.0a}{2015/09/24}{Function added}
 %   Add a function to a callback. First check arguments.
 % \changes{v1.0k}{2015/12/02}{Give more specific error messages (PHG)}
+% \changes{v1.2a}{2022/10/03}{Add rules for callback ordering}
 %    \begin{macrocode}
 local function add_to_callback(name, func, description)
   if not name or name == "" then
@@ -1751,10 +1892,10 @@
 %   Then test if this callback is already in use. If not, initialise its list
 %   and register the proper handler.
 %    \begin{macrocode}
-  local l = callbacklist[name]
+  local l = realcallbacklist[name]
   if l == nil then
     l = { }
-    callbacklist[name] = l
+    realcallbacklist[name] = l
 %    \end{macrocode}
 % \changes{v1.1y}{2022/08/13}{Adapted code for shared\_callbacks}
 % Handle count for shared engine callbacks.
@@ -1773,6 +1914,7 @@
     end
   end
 %    \end{macrocode}
+% \changes{v1.2a}{2022/10/03}{Add rules for callback ordering}
 %  Actually register the function and give an error if more than one
 %  |exclusive| one is registered.
 %    \begin{macrocode}
@@ -1780,7 +1922,6 @@
     func        = func,
     description = description,
   }
-  local priority = #l + 1
   if callbacktypes[name] == exclusive then
     if #l == 1 then
       luatexbase_error(
@@ -1788,13 +1929,13 @@
         name .. "'")
     end
   end
-  table.insert(l, priority, f)
+  table.insert(l, f)
+  callbacklist[name] = nil
 %    \end{macrocode}
 %  Keep user informed.
 %    \begin{macrocode}
   luatexbase_log(
-    "Inserting `" .. description .. "' at position "
-      .. priority .. " in `" .. name .. "'."
+    "Inserting `" .. description .. "' in `" .. name .. "'."
   )
 end
 luatexbase.add_to_callback = add_to_callback
@@ -1801,6 +1942,56 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{declare_callback_rule}
+%   \changes{v1.2a}{2022/10/03}{Add function}
+%   Add an ordering constraint between two callback implementations
+%    \begin{macrocode}
+local function declare_callback_rule(name, desc1, relation, desc2)
+  if not callbacktypes[name] or
+    not desc1 or not desc2 or
+    desc1 == "" or desc2 == "" then
+    luatexbase_error(
+      "Unable to create ordering constraint. "
+        .. "Correct usage:\n"
+        .. "declare_callback_rule(<callback>, <description_a>, <description_b>)"
+    )
+  end
+  if relation == 'before' then
+    relation = nil
+  elseif relation == 'after' then
+    desc2, desc1 = desc1, desc2
+    relation = nil
+  elseif relation == 'incompatible-warning' or relation == 'incompatible-error' then
+  elseif relation == 'unrelated' then
+  else
+    luatexbase_error(
+      "Unknown relation type in declare_callback_rule"
+    )
+  end
+  callbacklist[name] = nil
+  local rules = callbackrules[name]
+  if rules then
+    for i, rule in ipairs(rules) do
+      if rule[1] == desc1 and rule[2] == desc2 or rule[1] == desc2 and rule[2] == desc1 then
+        if relation == 'unrelated' then
+          table.remove(rules, i)
+        else
+          rule[1], rule[2], rule.type = desc1, desc2, relation
+        end
+        return
+      end
+    end
+    if relation ~= 'unrelated' then
+      rules[#rules + 1] = {desc1, desc2, type = relation}
+    end
+  elseif relation ~= 'unrelated' then
+    callbackrules[name] = {{desc1, desc2, type = relation}}
+  end
+end
+luatexbase.declare_callback_rule = declare_callback_rule
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{remove_from_callback}
 % \changes{v1.0a}{2015/09/24}{Function added}
 % \changes{v1.0k}{2015/12/02}{adjust initialization of cb local (PHG)}
@@ -1807,6 +1998,7 @@
 % \changes{v1.0k}{2015/12/02}{Give more specific error messages (PHG)}
 % \changes{v1.1m}{2020/03/07}{Do not call callback.register for user-defined callbacks}
 % \changes{v1.1y}{2022/08/13}{Adapted code for shared\_callbacks}
+% \changes{v1.2a}{2022/10/03}{Add rules for callback ordering}
 %   Remove a function from a callback. First check arguments.
 %    \begin{macrocode}
 local function remove_from_callback(name, description)
@@ -1823,7 +2015,7 @@
         .. "remove_from_callback(<callback>, <description>)"
     )
   end
-  local l = callbacklist[name]
+  local l = realcallbacklist[name]
   if not l then
     luatexbase_error(
       "No callback list for `" .. name .. "'\n")
@@ -1851,6 +2043,7 @@
     "Removing  `" .. description .. "' from `" .. name .. "'."
   )
   if #l == 0 then
+    realcallbacklist[name] = nil
     callbacklist[name] = nil
     local shared = shared_callbacks[name]
     if shared then
@@ -1876,12 +2069,12 @@
 local function in_callback(name, description)
   if not name
     or name == ""
-    or not callbacklist[name]
+    or not realcallbacklist[name]
     or not callbacktypes[name]
     or not description then
       return false
   end
-  for _, i in pairs(callbacklist[name]) do
+  for _, i in pairs(realcallbacklist[name]) do
     if i.description == description then
       return true
     end
@@ -1898,7 +2091,7 @@
 %   this functionality.
 %    \begin{macrocode}
 local function disable_callback(name)
-  if(callbacklist[name] == nil) then
+  if(realcallbacklist[name] == nil) then
     callback_register(name, false)
   else
     luatexbase_error("Callback list for " .. name .. " not empty")
@@ -1912,12 +2105,13 @@
 % \changes{v1.0a}{2015/09/24}{Function added}
 % \changes{v1.0h}{2015/11/27}{Match test in in-callback latex/4445}
 %   List the descriptions of functions registered for the given callback.
+%   This will sort the list if necessary.
 %    \begin{macrocode}
 local function callback_descriptions (name)
   local d = {}
   if not name
     or name == ""
-    or not callbacklist[name]
+    or not realcallbacklist[name]
     or not callbacktypes[name]
     then
     return d

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltvers.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltvers.dtx	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltvers.dtx	2022-11-02 22:00:49 UTC (rev 64899)
@@ -112,10 +112,10 @@
 %</2ekernel>
 %<latexrelease>\edef\latexreleaseversion
 %<*2ekernel|latexrelease>
-   {2022-11-01}
+   {2023-05-01}
 %</2ekernel|latexrelease>
 %<*2ekernel>
-\def\patch at level{-2}
+\def\patch at level{-0}
 %    \end{macrocode}
 %
 % \begin{macro}{\development at branch@name}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx	2022-11-02 22:00:49 UTC (rev 64899)
@@ -152,9 +152,9 @@
 %    from \texttt{"C2} to \texttt{"DF} are defined to parse for a
 %    second octet following, the characters from \texttt{"E0} to
 %    \texttt{"EF} are defined to parse for two more octets and finally
-%    the characters from \texttt{"F0} to \texttt{"F3} are defined to
+%    the characters from \texttt{"F0} to \texttt{"F4} are defined to
 %    parse for three additional octets.  These additional octets are
-%    always in the range \texttt{"80} to \texttt{"B9}.
+%    always in the range \texttt{"80} to \texttt{"BF}.
 %
 %    Thus, when such a character is encountered in the document (so
 %    long as expansion is not prohibited) a defined number of

Modified: trunk/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx	2022-11-02 22:00:49 UTC (rev 64899)
@@ -111,8 +111,8 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\def\LaTeXFirstAidDate{2022/06/23}
-\def\LaTeXFirstAidVersion{v1.0s}
+\def\LaTeXFirstAidDate{2022/10/29}
+\def\LaTeXFirstAidVersion{v1.0u}
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -340,9 +340,7 @@
 %  }%
 %}
 %    \end{macrocode}
-%    
 %
-%
 % \subsection{The \pkg{dinbrief} class first aid}
 %
 %    Again a case of a no longer correct \cs{endgroup} in document.
@@ -406,8 +404,14 @@
 \ExplSyntaxOff
 %    \end{macrocode}
 %
+% \subsection{The \pkg{babel} package}
 %
+% Turn off the \pkg{babel} hack.
 %    \begin{macrocode}
+\AddToHook{file/babel.sty/before}[firstaid]{\def\BabelCaseHack{}}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 %</kernel>
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/graphics/mathcolor.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/graphics/mathcolor.dtx	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/source/latex-dev/graphics/mathcolor.dtx	2022-11-02 22:00:49 UTC (rev 64899)
@@ -14,8 +14,8 @@
 %%% From File: mathcolor.dtx
 %
 %    \begin{macrocode}
-\def\mathcolorversion{v1.0b}
-\def\mathcolordate{2022/01/28}
+\def\mathcolorversion{v1.0c}
+\def\mathcolordate{2022/07/25}
 %    \end{macrocode}
 %<*driver>
 \documentclass{l3doc}
@@ -39,9 +39,6 @@
 %</driver>
 %
 % \fi
-
-
-
 %
 % \title{Providing color in math\thanks{This file has version
 %    \mathcolorversion\ dated \mathcolordate, \copyright\ \LaTeX\
@@ -124,7 +121,6 @@
 %    and achieve the same effect:
 %     \[  \mathcolor{red}{\int}\limits_0^1 \textrm{ or }
 %         \mathcolor{red}{\int\limits}_0^1                \]
-
 %
 %
 % \MaybeStop{\setlength\IndexMin{200pt}  \PrintIndex  }
@@ -163,7 +159,8 @@
 %    second argument (like \cs{textcolor}, but without spacing
 %    problems in math).
 %    \begin{macrocode}
-\DeclareDocumentCommand \mathcolor { o m m } {
+\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.
@@ -173,13 +170,13 @@
 %    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} }
+    \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
+    \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
@@ -189,7 +186,7 @@
 %    \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
+    \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
@@ -197,11 +194,11 @@
 %    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} }
+    \IfValueTF {#1} { \color[#1]{#2} } { \color{#2} }
 %    \end{macrocode}
 %    Then comes the math material we want to see colored:
 %    \begin{macrocode}
-  #3
+    #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
@@ -209,8 +206,8 @@
 %    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
-}
+    \@@_scan_for_scripts:w
+  }
 %    \end{macrocode}
 %  \end{macro}
 %
@@ -223,30 +220,58 @@
 %    \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.
+%    And we need to watch out for an upcoming \verb=&= and avoid
+%    prematurely triggering the end of an alignment cell.
+% \changes{v1.0c}{2022/07/25}{Avoid ending an alignment cell
+%    prematurely when hitting an \texttt{\&} during
+%                             scanning (gh/901)}
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_scan_for_scripts:w {
+\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
+%    We need to look at what follows \cs{mathcolor}, and we need to do
+%    that ignoring (and dropping) any spaces and \cs{relax} as \TeX{}
+%    would do in normal math processing (for example before a subscript
+%    token). 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
+    \peek_remove_filler:n
+      {
 %    \end{macrocode}
-%    If we found that character we call a function that handles sub or
-%    superscripts.
+%    To avoid problems hitting on \verb=&= we start with a
+%    \cs{group_align_safe_begin:}. That has to be ended with
+%    \cs{group_align_safe_end:} when the
+%    danger (aka scanning) is over, which, due to the branching below, happens at
+%    four different points, i.e., when the \cs{mathcolor} is
+% \begin{enumerate}
+% \item
+%    followed by a \enquote{normal} token;
+% \item
+%    followed by a braced sub/superscript;
+% \item
+%    followed by an unbraced sub/superscript;
+% \item
+%    followed by one of the \cs{limits} primitives.
+% \end{enumerate}
+%    In each case we have to end the align safe group and we mark the
+%    points below in the code for easy reference.
 %    \begin{macrocode}
-    { \@@_handle_scripts:Nw }
+        \group_align_safe_begin:
 %    \end{macrocode}
-%    Otherwise check if this token we peeked at (which is now stored
-%    in \cs{l_peek_token} is a superscript token.
+%    We first parse for \cs{c_math_subscript_token} or
+%    \cs{c_math_superscript_token}.
+%    After \cs{peek_remove_filler:n} is done, it sets \cs{l_peek_token}
+%    equal to the next non-filler token, so we can avoid unnecessary
+%    work and just compare that.  If either of the tokens is found, call
+%    \cs{@@_handle_scripts:Nw}:
 %    \begin{macrocode}
-    { \token_if_math_superscript:NTF \l_peek_token
+        \token_case_catcode:NnTF \l_peek_token
+          {
+            \c_math_subscript_token { }
+            \c_math_superscript_token { }
+          }
+          { \@@_handle_scripts:Nw }
 %    \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
@@ -256,45 +281,59 @@
 %    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 }
-          }
+            \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.
+%    solution is to add \cs{use_none:n} in front of the peeked at
+%    token.
+%
+%    Here we end the align safe group and
+%    \cs{@@_scan_for_scripts:w} will start a new one.
 %    \begin{macrocode}
-          { \@@_scan_for_scripts:w \use_none:n }
+              {
+                \group_align_safe_end:                          % case 4
+                \@@_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
+%    If it was not 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 }
+              {
+                \token_if_eq_meaning:NNTF \l_peek_token '
+                  {
+                    \@@_handle_scripts:Nw ^
+                    \c_group_begin_token
+                      \exp_after:wN \prim at s \use_none:n
+                  }
 %    \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
-            }
+                  {
+                    \group_align_safe_end:                      % case 1
+                    \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
@@ -306,7 +345,8 @@
 %    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 {
+\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
@@ -329,7 +369,7 @@
 %\begin{verbatim}
 %      \reset at color } \@@_scan_for_scripts:w
 %\end{verbatim}
-%    The \cs{_@@_scan_for_scripts:w} then retakes control and initiates
+%    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
@@ -341,78 +381,30 @@
 %    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}
+%    to account for that: this is done in false branch by 
+%    \cs{use_ii_i:nn}.
 %
-%
-%
-% \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).
-%
-%
+%    After scanning for a brace all scanning is done, so here are the
+%    other two points where we have to end the align safe group (in
+%    the true and false case).
 %    \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
+    \peek_remove_filler:n
+      {
+        \token_if_eq_meaning:NNTF \l_peek_token \c_group_begin_token
+          {
+            \group_align_safe_end:                              % case 2
+            \peek_catcode_remove:NT \c_group_begin_token { }
+          }
+          {
+            \exp_after:wN \group_align_safe_end:                % case 3
+              \use_ii_i:nn \c_group_end_token
+          }
+      }
   }
 %    \end{macrocode}
+%  \end{macro}
 %
 %    \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}
 %
@@ -424,7 +416,6 @@
 % \Finale
 %
 %
-
 %%%%%%%%%%%%%%%%
 \endinput
 %%%%%%%%%%%%%%%%

Modified: trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-footnotes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-footnotes.dtx	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-footnotes.dtx	2022-11-02 22:00:49 UTC (rev 64899)
@@ -403,7 +403,7 @@
 % \subsection{File declaration}
 %    \begin{macrocode}
 \ProvidesFile{latex-lab-footnotes.ltx}
-        [2022-03-10 v0.6a changes to the footnote interfaces]
+        [2022-07-22 v0.6b changes to the footnote interfaces]
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -903,9 +903,11 @@
 %
 % \subsection{Document-level commands}
 %
+% \changes{v0.6b}{2022/07/22}{Make mandatory arguments of  \cs{footnote}
+%      and \cs{footnotetext} long (gh863)}
 %    \begin{macrocode}
 
-\DeclareDocumentCommand\footnotetext {om} {
+\DeclareDocumentCommand\footnotetext {o+m} {
   \fnote_set_fnmark:nn {#1} \@mpfn
   \@footnotetext {#2}
 }
@@ -914,7 +916,7 @@
 %-------------------------------------
 
 
-\DeclareDocumentCommand\footnote {om} {
+\DeclareDocumentCommand\footnote {o+m} {
   \fnote_step_fnmark:nn {#1} \@mpfn
   \cs_set_eq:NN \@@_footnotemark_finish: \prg_do_nothing:
   \@footnotemark

Deleted: trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-prototype.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-prototype.dtx	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-prototype.dtx	2022-11-02 22:00:49 UTC (rev 64899)
@@ -1,827 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: latex-lab-prototype.dtx
-%
-% Copyright (C) 1999 Frank Mittelbach, Chris Rowley, David Carlisle
-%           (C) 2004-2010 Frank Mittelbach, The LaTeX Project
-%           (C) 2011-2022 The LaTeX Project
-%
-% 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
-%
-% This file is part of the "latex-lab bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-%    https://github.com/latex3/latex2e
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full]{l3doc}
-\begin{document}
-  \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-%   The \textsf{latex-lab-prototype} package\\ Prototype document functions^^A
-% }
-%
-% \author{^^A
-%  The \LaTeX{} Project\thanks
-%    {^^A
-%      E-mail:
-%        \href{mailto:latex-team at latex-project.org}
-%          {latex-team at latex-project.org}^^A
-%    }^^A
-% }
-%
-% \date{Released 2022-03-09}
-%
-% \maketitle
-%
-% \tableofcontents
-%
-% \bigskip
-%
-% \begin{documentation}
-%
-% There are three broad \enquote{layers} between putting down ideas into
-% a source file and ending up with a typeset document. These layers of
-% document writing are
-% \begin{enumerate}
-%   \item authoring of the text with mark-up;
-%   \item document layout design;
-%   \item implementation (with \TeX{} programming) of the design.
-% \end{enumerate}
-% We write the text as an author, and we see the visual output of the design
-% after the document is generated; the \TeX{} implementation in the middle is
-% the glue between the two.
-%
-% \LaTeX{}'s greatest success has been to standardise a system of mark-up that
-% balances the trade-off between ease of reading and ease of writing to suit
-% almost all forms of technical writing. It's
-% other original strength was a good background in typographical design; while
-% the standard \LaTeXe{} classes look somewhat dated now in terms of their
-% visual design, their typography is generally sound. (Barring the occasional
-% minor faults.)
-%
-% However, \LaTeXe{} has always lacked a standard approach to customising
-% the visual design of a document. Changing the looks of the standard classes
-% involved either:
-% \begin{itemize}
-%   \item Creating a new version of the implementation code of the class and
-%     editing it.
-%   \item Loading one of the many packages to customise certain elements of
-%     the standard classes.
-%   \item Loading a completely different document class, such as
-%     \textsf{KOMA-Script} or \textsf{memoir}, that allows easy customisation.
-% \end{itemize}
-% All three of these approaches have their drawbacks and learning curves.
-%
-% The idea behind this module is to cleanly separate the three layers
-% introduced at the beginning of this section, so that document authors who
-% are not programmers can easily change the design of their documents.
-% The approach here also makes it easier for \LaTeX{} programmers to provide
-% their own customisations on top of a pre-existing class.
-%
-% \section{What is a document?}
-%
-% Besides the textual content of the words themselves, the source file
-% of a document contains mark-up elements that add structure to the
-% document. These elements include sectional divisions, figure/table
-% captions, lists of various sorts, theorems/proofs, and so on.
-% The list will be different for every document that can be written.
-%
-% Each element can be represented logically without worrying about the
-% formatting, with mark-up such as \cs{section}, \cs{caption},
-% |\begin{enumerate}| and so on. The output of each one of these
-% document elements will be a typeset representation of the information
-% marked up, and the visual arrangement and design of these elements
-% can vary widely in producing a variety of desired outcomes.
-%
-% For each type of document element, there may be design variations that
-% contain the same sort of information but present it in slightly
-% different ways. For example, the difference between a numbered and an
-% unnumbered section, \cs{section} and |\section*|, or the difference
-% between an itemised list or an enumerated list.
-%
-% There are three distinct layers in the definition of
-% \enquote{a document} at this level
-% \begin{enumerate}
-%   \item semantic elements such as the ideas of sections and lists;
-%   \item a set of design solutions for representing these elements
-%     visually;
-%   \item specific variations for these designs that represent the
-%     elements in the document.
-% \end{enumerate}
-% In the parlance of the template system, these are called object types,
-% templates, and instances, and they are discussed below in sections
-% \ref{sec:objects}, \ref{sec:templates}, and~\ref{sec:instances},
-% respectively.
-%
-% By formally declaring documents to be composed of mark-up elements
-% grouped into objects, which are interpreted and typeset with a set of
-% templates, each of which has one or more instances with which to
-% compose each and every semantic unit of the text, we can cleanly
-% separate the components of document construction.
-%
-% \section{Object types}
-% \label{sec:objects}
-%
-% An \emph{object type} (sometimes just \enquote{object}) is an
-% abstract idea of a document element that takes a fixed number of
-% arguments corresponding to the information from the document author
-% that it is representing. A sectioning object, for example, might take
-% three inputs: \enquote{title}, \enquote{short title}, and
-% \enquote{label}.
-%
-% Any given document class will define which object types are to be
-% used in the document, and any template of a given object type can be
-% used to generate an instance for the object. (Of course, different
-% templates will produce different typeset representations, but the
-% underlying content will be the same.)
-%
-% \begin{function}{\prototype_declare_object:nn}
-%   \begin{syntax}
-%     \cs{prototype_declare_object:nn} \Arg{object type} \Arg{no.~of args}
-%   \end{syntax}
-%  This function defines an \meta{object type} taking
-%  \meta{no.~of arguments}, where the \meta{object type} is an
-%  abstraction as discussed above. For example,
-%   \begin{verbatim}
-%     \prototype_declare_object:nn { sectioning } { 3 }
-%   \end{verbatim}
-%  creates an object type \enquote{sectioning}, where each use of that
-%  object type will need three arguments.
-%
-%  While not formally verified the semantics of all arguments are part
-%  of the object declaration and need to be carefully documented in
-%  order to make the use of different templates for the same object
-%  type meaningful.
-% \end{function}
-%
-% \section{Templates}
-% \label{sec:templates}
-%
-% A \emph{template} is a generalised design solution for representing
-% the information of a specified object type. Templates that do the same
-% thing, but in different ways, are grouped together by their object type
-% and given separate names. There are two important parts to a template:
-% \begin{itemize}
-%   \item the parameters it takes to vary the design it is producing;
-%   \item the implementation of the design.
-% \end{itemize}
-%
-% \begin{function}{\prototype_declare_template:nnnn}
-%   \begin{syntax}
-%     \cs{prototype_declare_template:nnnn}
-%     ~~\Arg{object type} \Arg{template}
-%     ~~\Arg{key definitions} \Arg{code}
-%   \end{syntax}
-%   A \meta{template} interface is declared for a particular
-%   \meta{object type}. The interface itself is
-%   defined by the \meta{key definitions}, which is itself a key--value list
-%   using the same interface as \cs{keys_define:nn}. (The keys created
-%   here \emph{are} managed \pkg{l3keys} in the tree
-%   \texttt{prototype/\meta{object}/\meta{template}}). As described below,
-%   the keys should be defined such that they can be set multiple times:
-%   first to a default value, then to a specific value for an instance
-%   and finally to a per-use override.
-%
-%   The \meta{code} argument of \cs{template_declare_template:nnnn} is used
-%   as the replacement text for the template when it is used, either
-%   directly or as an instance. This may therefore accept arguments
-%   |#1|, |#2|, \emph{etc}.~as detailed by the \meta{number of arguments}
-%   taken by the object type. The template and instance key values (see
-%   below) are assigned before the \meta{code} is inserted.
-% \end{function}
-%
-% \begin{function}{\prototype_declare_defaults:nnn}
-%   \begin{syntax}
-%     \cs{prototype_declare_template:nnnn}
-%     ~~\Arg{object type} \Arg{template} \Arg{defaults}
-%   \end{syntax}
-%   Sets the default values for each \meta{key} in a \meta{template}. When
-%   a template is used, these values are applied first \emph{before} those
-%   set by \cs{prototype_use_template:nnn} or
-%   \cs{prototype_declare_instance:nnnn}. If not default is given, the
-%   prevailing state when the template is used will apply.
-% \end{function}
-%
-% \section{Instances}
-% \label{sec:instances}
-%
-% After a template is defined it still needs to be put to use. The
-% parameters that it expects need to be defined before it can be used in
-% a document. Every time a template has parameters given to it, an
-% \emph{instance} is created, and this is the code that ends up in the
-% document to perform the typesetting of whatever pieces of information
-% are input into it.
-%
-% For example, a template might say \enquote{here is a section with or
-% without a number that might be centred or left aligned and print its
-% contents in a certain font of a certain size, with a bit of a gap
-% before and after it} whereas an instance declares \enquote{this is a
-% section with a number, which is centred and set in $12\,\text{pt}$
-% italic with a $10\,\text{pt}$ skip before and a
-% $12\,\text{pt}$ skip after it}. Therefore, an instance is just a
-% frozen version of a template with specific settings as chosen by the
-% designer.
-%
-% \begin{function}{\prototype_declare_instance:nnnn}
-%   \begin{syntax}
-%     \cs{prototype_declare_instance:nnnn}
-%     ~~\Arg{object type} \Arg{template} \Arg{instance} \Arg{parameters}
-%   \end{syntax}
-%   This function uses a \meta{template} for an \meta{object type}
-%   to create an \meta{instance}. The \meta{instance} will be set
-%   up using the \meta{parameters}, which will set some of the
-%   \meta{keys} in the \meta{template}.
-%
-%   As a practical example, consider an object type for document sections
-%   (which might include chapters, parts, sections, \emph{etc}.), which
-%   is called \texttt{sectioning}. One possible template for this
-%   object type might be called \texttt{basic}, and one instance of this
-%   template would be a numbered section. The instance declaration might
-%   read:
-%   \begin{verbatim}
-%     \prototype_declare_instance:nnnn { sectioning } { basic } { section-num }
-%       {
-%         numbered      = true ,
-%         justification = center ,
-%         font          = \normalsize\itshape ,
-%         before-skip   = 10pt ,
-%         after-skip    = 12pt ,
-%       }
-%   \end{verbatim}
-%   Of course, the key names here are entirely imaginary, but illustrate
-%   the general idea of fixing some settings.
-% \end{function}
-%
-% \section{Document interface}
-%
-% After the instances have been chosen, document commands must be
-% declared to use those instances in the document.
-% \cs{prototype_use_instance:nn}
-% calls instances directly, and this command should be used internally
-% in document-level mark-up.
-%
-% \begin{function}{\prototype_use_instance:nn, \prototype_use_instance:nnn}
-%   \begin{syntax}
-%     \cs{prototype_use_instance:nn}
-%     ~~\Arg{object type} \Arg{instance} \meta{arguments}
-%     \cs{prototype_use_instance:nn}n
-%     ~~\Arg{object type} \Arg{instance} \Arg{overrides} \meta{arguments}
-%   \end{syntax}
-%   Uses an \meta{instance} of the \meta{object type}, which will require
-%   \meta{arguments} as determined by the number specified for the
-%   \meta{object type}. The \meta{instance} must have been declared
-%   before it can be used, otherwise an error is raised. The \texttt{nnn}
-%   version allows for local overrides of the instance settings using the
-%   additional keyval argument.
-% \end{function}
-%
-% \begin{function}{\prototype_use_template:nnnn}
-%   \begin{syntax}
-%     \cs{prototype_use_template:nnnn} \Arg{object type} \Arg{template}
-%     ~~\Arg{settings} \meta{arguments}
-%   \end{syntax}
-%   Uses the \meta{template} of the specified \meta{object type},
-%   applying the \meta{settings} and absorbing \meta{arguments} as
-%   detailed by the \meta{object type} declaration. This in effect
-%   is the same as creating an instance using
-%   \cs{template_declare_instance:nnnn} and immediately using it with
-%   \cs{template_use_instance:nnn}, but without the instance having any
-%   further existence. It is therefore useful where a template needs to
-%   be used once.
-% \end{function}
-%
-% \section{Showing template information}
-%
-% \begin{function}
-%   {
-%     \prototype_show_template_code:nn     ,
-%     \prototype_show_template_defaults:nn ,
-%     \prototype_show_instance_values:nn
-%   }
-%   \begin{syntax}
-%     \cs{prototype_show_template_code:nn} \Arg{object type} \Arg{template}
-%     \cs{prototype_show_template_defaults:nn} \Arg{object type} \Arg{template}
-%     \cs{prototype_show_instance_values:nn} \Arg{object type} \Arg{instance}
-%   \end{syntax}
-%   Show information about a declare template or instance for
-%   debugging purposes.
-% \end{function}
-%
-% \section{Open questions and comparison with \pkg{xtemplate}}
-%
-% The approach here is modelled on that from \pkg{xtemplate}, but since it uses
-% \pkg{l3keys} rather than dedicated key handling, there are some differences.
-% There is also a simplification in that collections are not supported
-% (because we now think that they provided the wrong kind of abstraction).
-%
-% The various open questions, including those linked to \pkg{xtemplate}
-% concepts, are collected here.
-%
-% \subsection{Module name}
-%
-% This is currently open for ideas: traditionally \texttt{template} has
-% been used. This may link to the need for both templates and instances
-% (\emph{vide infra}).
-%
-% \subsection{Design-level names}
-%
-% These are currently not provided. That allows both this code and
-% \pkg{xtemplate} to be loaded in the same document. We will likely want
-% to decide on these names: they could for example include
-% \texttt{Prototype} or \texttt{Design}, or could use the existing
-% \pkg{xtemplate} if a compatibility approach can be designed.
-%
-% \subsection{Objects}
-%
-% Is this name clear? A possible alternative is `element'.
-%
-% \subsection{Efficiency and repetition of key setting}
-%
-% In the \pkg{xtemplate} implementation, keys values are stored in property
-% lists before being applied. This means that when creating an instance, the
-% template defaults can be replaced entirely by any instance values. In
-% contrast, the approach here simply precompiles all of the template defaults,
-% then appends the precompiled list from the instance. Some variables are
-% therefore set twice. More importantly, this means that arbitrary code
-% could be executed twice: authors need to be aware of this.
-%
-% \subsection{Key ordering}
-%
-% Linked to the previous idea, in \pkg{xtemplate} keys are set in the
-% order they are declared in the setup. In contrast, using \pkg{l3keys}
-% they are set in the order the keys are given in the input. Is this OK?
-%
-% \subsection{Setting defaults}
-%
-% The current approach requires setting the defaults separately from
-% the key creation. That means listing keys twice. However, it also
-% avoids further overloading of the keyval setup. Is this reasonable?
-%
-% \subsection{The need for templates and instances}
-%
-% In \pkg{xtemplate}, storing keys in a \texttt{prop} means that there
-% is a real efficiency when creating an instance. In contrast, using
-% precompiled keys here, creating a template and creating an instance
-% are almost identical. Could we drop the distinction? That would then
-% work well if we allowed instances to be derived from others: effectively
-% the same as instances from templates, but with a `flatter' approach.
-%
-% \subsection{Assignment of key values}
-%
-% The \pkg{xtemplate} approach uses \cs{AssignTemplateKeys} to
-% specify when keys are assigned. In contrast, here key assignment is
-% automatic. If you look over \TeX{} Live, the only places that
-% \cs{AssignTemplateKeys} is not the first thing in the code are in limited
-% use cases in \pkg{enotez} and \pkg{xgalley}. In both packages, that's because
-% they want to limit the scope of assignment. In \pkg{enotez} the key setting
-% is placed inside a group, whereas in \pkg{xgalley} there is a
-% save-and-restore approach as a group is not possible. Both of those use-cases
-% could be covered in other ways: it's a question of setting up the template
-% keys so they assign to an intermediate variable, then assigning those as
-% necessary to the live ones for these cases.
-%
-% The main reason for not using \cs{AssignTemplateKeys} is that the common
-% case doesn't need it. We could of course stick to an explicit-assignment
-% approach, or have two variants or template-creation, etc., where assignment
-% is manual in one of them. 
-%
-% \subsection{Values from other keys}
-%
-% The \pkg{xtemplate} approach offers \cs{KeyValue} to pass the value of
-% one key as the default for another. That relies on the fact that key
-% setting is ordered (\emph{vide supra}). It also means that there is
-% some code to check for this as part of key setting: it's non-trivial
-% to support. The current \pkg{l3keys}-based code doesn't offer this.
-% Instead one could use for example meta keys. That is a different
-% interface and might occasionally be awkward. We can add some
-% \texttt{.store-value:n} property to allow a \cs{keys_value:nn} approach,
-% but without key ordering it might still not work in the same way.
-%
-% \subsection{The nature of debugging data}
-%
-% Due to the differences in data storage, the \pkg{xtemplate} method offers
-% a richer ability to debug template internals than the one here. We can look
-% at \emph{e.g.}\ tracking all keys for a template to make this easier.
-% It is worth noting that much of this data is really something that
-% should be part of the documentation anyway. Also, it would be trivial
-% to save the raw defaults and do the `hard' processing only if asked
-% to show the values (\emph{i.e.}\ using code similar to that in
-% \pkg{xtemplate}).
-%
-% \subsection{Collections}
-%
-% These are not implemented at all: we likely want a new approach to
-% contexts.
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{latex-lab-prototype} Implementation}
-%
-% \subsection{File declaration}
-%    \begin{macrocode}
-%<*package>
-\ProvidesFile{latex-lab-prototype.sty}
-  [2022-03-09 v0.1b Experimental prototype document functions]
-%</package>
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-%<*2ekernel>
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-\ExplSyntaxOn
-%    \end{macrocode}
-%
-% \subsection{\cs{keys_precompile:nnN}}
-%
-%    \begin{macrocode}
-%<@@=keys>
-%    \end{macrocode}
-%
-% This may not yet be available in \pkg{expl3} so we ensure it is set up
-% here: all temporary. We just redefine those internals that need it.
-%    \begin{macrocode}
-\tl_if_exist:NF \l_@@_precompile_tl
-  {
-    \bool_new:N \l_@@_precompile_bool
-    \tl_new:N \l_@@_precompile_tl
-  }
-\cs_gset_protected:Npn \@@_precompile:n #1
-  {
-    \bool_if:NTF \l_@@_precompile_bool
-      { \tl_put_right:Nn \l_@@_precompile_tl }
-      { \use:n }
-        {#1}
-  }
-\cs_gset_protected:Npn \@@_bool_set:Nnnn #1#2#3#4
-  {
-    \bool_if_exist:NF #1 { \bool_new:N #1 }
-    \@@_choice_make:
-    \@@_cmd_set:nx { \l_keys_path_str / true }
-      { \exp_not:c { bool_ #2 set_ #3 :N } \exp_not:N #1 }
-    \@@_cmd_set:nx { \l_keys_path_str / false }
-      { \exp_not:c { bool_ #2 set_ #4 :N } \exp_not:N #1 }
-    \@@_cmd_set_direct:nn { \l_keys_path_str / unknown }
-      {
-        \msg_error:nnx { keys } { boolean-values-only }
-          \l_keys_key_str
-      }
-    \@@_default_set:n { true }
-  }
-\cs_gset_protected:Npn \@@_choice_make_aux:N #1
-  {
-    \cs_set_nopar:cpn { \c_@@_type_root_str \l_keys_path_str }
-      { choice }
-    \@@_cmd_set_direct:nn \l_keys_path_str { #1 {##1} }
-    \@@_cmd_set_direct:nn { \l_keys_path_str / unknown }
-      {
-        \msg_error:nnxx { keys } { choice-unknown }
-          \l_keys_path_str {##1}
-      }
-  }
-\cs_gset_protected:Npn \@@_cmd_set:nn #1#2
-  {  \@@_cmd_set_direct:nn {#1} { \@@_precompile:n {#2} } }
-\cs_gset_protected:Npn \@@_cmd_set_direct:nn #1#2
-  { \cs_set_protected:cpn { \c_@@_code_root_str #1 } ##1 {#2} }
-\cs_gset_protected:Npn \@@_cs_set:NNpn #1#2#3#
-  {
-    \cs_set_protected:cpx { \c_@@_code_root_str \l_keys_path_str } ##1
-      {
-        \@@_precompile:n
-          { #1 \exp_not:N #2 \exp_not:n {#3} {##1} }
-      }
-    \use_none:n
-  }
-\cs_gset_protected:Npn \@@_meta_make:n #1
-  {
-    \exp_args:NVo \@@_cmd_set_direct:nn \l_keys_path_str
-      {
-        \exp_after:wN \keys_set:nn \exp_after:wN 
-          { \l_@@_module_str } {#1}
-      }
-  }
-\cs_gset_protected:Npn \@@_meta_make:nn #1#2
-  {
-    \exp_args:NV \@@_cmd_set_direct:nn
-      \l_keys_path_str { \keys_set:nn {#1} {#2} }
-  }
-\cs_gset_protected:Npn \keys_precompile:nnN #1#2#3
-  {
-    \bool_set_true:N \l_@@_precompile_bool
-    \tl_clear:N \l_@@_precompile_tl
-    \keys_set:nn {#1} {#2}
-    \bool_set_false:N \l_@@_precompile_bool
-    \tl_set_eq:NN #3 \l_@@_precompile_tl
-  }
-\cs_gset_protected:Npn \@@_show:Nnn #1#2#3
-  {
-    #1 { keys } { show-key }
-      { \@@_trim_spaces:n { #2 / #3 } }
-      {
-        \keys_if_exist:nnT {#2} {#3}
-          {
-            \exp_args:Nnf \msg_show_item_unbraced:nn { code }
-              {
-                \exp_args:Ne \@@_show:n
-                  {
-                    \exp_args:Nc \cs_replacement_spec:N
-                    {
-                      \c_@@_code_root_str
-                      \@@_trim_spaces:n { #2 / #3 }
-                    }
-                  }
-              }
-          }
-      }
-      { } { }
-  }
-\cs_gset:Npx \@@_show:n #1
-  {
-    \exp_not:N \@@_show:w
-      #1
-      \tl_to_str:n { \@@_precompile:n }
-      #1
-      \tl_to_str:n { \@@_precompile:n }
-      \exp_not:N \s_@@_stop
-  }
-\use:x
-  {
-    \cs_gset:Npn \exp_not:N \@@_show:w
-      ##1 \tl_to_str:n { \@@_precompile:n }
-      ##2 \tl_to_str:n { \@@_precompile:n }
-      ##3 \exp_not:N \s_@@_stop
-  }
-  {
-    \tl_if_blank:nTF {#2}
-      {#1}
-      { \@@_show:Nw #2 \s_@@_stop }
-  }
-\use:x
-  {
-    \cs_gset:Npn \exp_not:N \@@_show:Nw ##1##2
-      \c_right_brace_str \exp_not:N \s_@@_stop
-  }
-  {#2}
-%    \end{macrocode}
-%
-% \subsection{Setup}
-%
-%    \begin{macrocode}
-%<@@=prototype>
-%    \end{macrocode}
-%
-% \begin{variable}{\l_@@_tmp_tl}
-%    \begin{macrocode}
-\tl_new:N \l_@@_tmp_tl
-%    \end{macrocode}
-% \end{variable}
-%
-% \subsection{Data structures}
-%
-% \begin{variable}{\l_@@_object_prop}
-%    \begin{macrocode}
-\prop_new:N \l_@@_object_prop
-%    \end{macrocode}
-% \end{variable}
-%
-% \subsection{Creating objects}
-%
-% \begin{macro}{\prototype_declare_object:nn, \@@_declare_object:nn}
-%   Although the object type is the \enquote{top level} of the template
-%   system, it is actually very easy to implement. All that happens is that
-%   the number of arguments required is recorded, indexed by the name of the
-%   object type.
-%    \begin{macrocode}
-\cs_new_protected:Npn \prototype_declare_object:nn #1#2
-  {
-    \exp_args:Nx \@@_declare_object:nn { \int_eval:n {#2} } {#1}
-  }
-\cs_new_protected:Npn \@@_declare_object:nn #1#2
-  {
-    \int_compare:nTF { 0 <= #1 <= 9 }
-      {
-        \msg_info:nnnn { prototype } { declare-object-type } {#2} {#1}
-        \prop_put:Nnn \l_@@_object_prop {#2} {#1}
-      }
-      { \msg_error:nnxx { prototype } { bad-number-of-arguments } {#2} {#1} }
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \subsection{Templates and instances}
-%
-% \begin{variable}{\l_@@_assignments_tl}
-%   Used to insert the set keys.
-%    \begin{macrocode}
-\tl_new:N \l_@@_assignments_tl
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\prototype_declare_template:nnnn}
-% \begin{macro}{\prototype_declare_defaults:nnn}
-%   Creating a template means defining the keys, storing the defaults and
-%   creating the function. The defaults are done separately from the other
-%   parts as that fits the \pkg{l3keys} pattern but also makes it easy to
-%   alter that aspect without changing the core implementation.
-%    \begin{macrocode}
-\cs_new_protected:Npn \prototype_declare_template:nnnn #1#2#3#4
-  {
-    \prop_get:NnNTF \l_@@_object_prop {#1} \l_@@_tmp_tl
-      {
-        \keys_define:nn { prototype / #1 / #2 } {#3}
-        \tl_clear_new:c { l_@@_defaults_ #1 _ #2 _tl }
-        \cs_generate_from_arg_count:cNnn
-          { @@_template_ #1 _ #2 :w }
-          \cs_set_protected:Npn
-          { \l_@@_tmp_tl }
-          {
-            \tl_use:N \l_@@_assignments_tl
-            #4
-          }
-      }
-      { \msg_error:nnn { prototype } { unknown-object-type } {#1} }
-  }
-\cs_new_protected:Npn \prototype_declare_defaults:nnn #1#2#3
-  {
-    \cs_if_exist:cTF { @@_template_ #1 _ #2 :w }
-      { \tl_set:cn { l_@@_defaults_ #1 _ #2 _tl } {#3} }
-      { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%    \begin{macrocode}
-\cs_generate_variant:Nn \keys_precompile:nnN { v , nv }
-%    \end{macrocode}
-%
-% \begin{macro}{\prototype_use_template:nnn}
-% \begin{macro}{\prototype_declare_instance:nnnn}
-% \begin{macro}{\@@_declare_aux:nnnn}
-%   Using a template and creating an instance are the same thing other
-%   than the final step: using the template or storing the key settings.
-%   We do not attempt to maximise efficiency in setting, rather we have
-%   a clear approach in which the final assignments may have multiple
-%   entries.
-%    \begin{macrocode}
-\cs_new_protected:Npn \prototype_use_template:nnn #1#2#3
-  {
-    \@@_declare_aux:nnnn {#1} {#2} {#3}
-      { \use:c { @@_template_ #1 _ #2 :w } }
-  }
-\cs_new_protected:Npn \prototype_declare_instance:nnnn #1#2#3#4
-  {
-    \@@_declare_aux:nnnn {#1} {#2} {#4}
-      {
-        \tl_clear_new:c { l_@@_instance_ #1 _ #3 _pars_tl }
-        \tl_set_eq:cN { l_@@_instance_ #1 _ #3 _pars_tl }
-          \l_@@_assignments_tl
-         \tl_clear_new:c { l_@@_instance_ #1 _ #3 _template_tl }
-         \tl_set:cn { l_@@_instance_ #1 _ #3 _template_tl } {#2}
-      }
-  }
-\cs_new_protected:Npn \@@_declare_aux:nnnn #1#2#3#4
-  {
-    \cs_if_exist:cTF { @@_template_ #1 _ #2 :w }
-      {
-        \keys_precompile:nvN
-          { prototype / #1 / #2 }
-          { l_@@_defaults_ #1 _ #2 _tl }
-          \l_@@_assignments_tl
-        \keys_precompile:nnN { prototype / #1 / #2 } {#3} \l_@@_tmp_tl
-        \tl_put_right:NV \l_@@_assignments_tl \l_@@_tmp_tl
-        #4
-      }
-      { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\prototype_use_instance:nn}
-% \begin{macro}{\prototype_use_instance:nnn}
-%   Recover the values and insert the code.
-%    \begin{macrocode}
-\cs_new_protected:Npn \prototype_use_instance:nn #1#2
-  { \prototype_use_instance:nnn {#1} {#2} { } }
-\cs_new_protected:Npn \prototype_use_instance:nnn #1#2#3
-  {
-    \tl_if_exist:cTF { l_@@_instance_ #1 _ #2 _template_tl }
-      {
-        \tl_set_eq:Nc \l_@@_assignments_tl
-          { l_@@_instance_ #1 _ #2 _pars_tl }
-        \tl_if_blank:nF {#3}
-          {
-            \keys_precompile:vnN
-              {
-                prototype / #1 /
-                \tl_use:c { l_@@_instance_ #1 _ #2 _template_tl }
-              }
-              {#3}
-              \l_@@_tmp_tl
-            \tl_put_right:NV \l_@@_assignments_tl
-              \l_@@_tmp_tl
-          }
-        \use:c
-          {
-            @@_template_ #1 _
-            \tl_use:c { l_@@_instance_ #1 _ #2 _template_tl }
-            :w
-          }
-      }
-      { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Showing information}
-%
-% \begin{macro}
-%   {
-%     \prototype_show_template_code:nn     ,
-%     \prototype_show_template_defaults:nn ,
-%     \prototype_show_instance_values:nn
-%   }
-%    \begin{macrocode}
-\cs_new_protected:Npn \prototype_show_template_code:nn #1#2
-  {
-    \prop_if_in:NnTF \l_@@_object_prop {#1}
-      { \cs_show:c { @@_template_ #1 _ #2 :w } }
-      { \msg_error:nnn { prototype } { unknown-object-type } {#1} }
-  }
-\cs_new_protected:Npn \prototype_show_template_defaults:nn #1#2
-  {
-    \cs_if_exist:cTF { @@_template_ #1 _ #2 :w }
-      { \tl_show:c { l_@@_defaults_ #1 _ #2 _tl } }
-      { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
-  }
-\cs_new_protected:Npn \prototype_show_instance_values:nn #1#2
-  {
-    \tl_if_exist:cTF { l_@@_instance_ #1 _ #2 _template_tl }
-      { \tl_show:c { l_@@_instance_ #1 _ #2 _pars_tl } }
-      { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} }
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \subsection{Messages}
-%
-%    \begin{macrocode}
-\msg_new:nnnn { prototype } { bad-number-of-arguments }
-  { Bad~number~of~arguments~for~object~type~'#1'. }
-  {
-    An~object~may~accept~between~0~and~9~arguments.\\
-    You~asked~to~use~#2~arguments:~this~is~not~supported.
-  }
-\msg_new:nnnn { prototype } { unknown-instance }
-  { The~instance~'#2'~of~type~'#1'~is~unknown. }
-  {
-    You~have~asked~to~use~an~instance~'#2',~
-    but~this~has~not~been~created.
-  }
-\msg_new:nnnn { prototype } { unknown-object-type }
-  { The~object~type~'#1'~is~unknown. }
-  { An~object~type~needs~to~be~declared~prior~to~using~it. }
-\msg_new:nnnn { prototype } { unknown-template }
-  { The~template~'#2'~of~type~'#1'~is~unknown. }
-  {
-    No~interface~has~been~declared~for~a~template~
-    '#2'~of~object~type~'#1'.
-  }
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-\msg_new:nnn { prototype } { declare-object-type }
-  { Declaring~object~type~'#1'~taking~#2~argument(s). }
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-\ExplSyntaxOff
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-%</2ekernel>
-%    \end{macrocode}
-%
-% \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab.ins	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab.ins	2022-11-02 22:00:49 UTC (rev 64899)
@@ -78,10 +78,5 @@
 \generate{\file{latex-lab-footmisc.ltx}{\from{latex-lab-footnotes.dtx}{footmisc}}}
 \generate{\file{latex-lab-footnotes.ltx}{\from{latex-lab-footnotes.dtx}{kernel}}}
 
-% for \DocumentMetadata trials
-\generate{\file{prototype-latex-lab-testphase.ltx}{\from{latex-lab-prototype.dtx}{2ekernel}}}
 
-% for standalone trials
-\generate{\file{latex-lab-prototype.sty}{\from{latex-lab-prototype.dtx}{2ekernel}}}
-
 \endbatchfile

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/latex.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/latex.ltx	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/latex.ltx	2022-11-02 22:00:49 UTC (rev 64899)
@@ -705,8 +705,8 @@
 %%% From File: ltvers.dtx
 \def\fmtname{LaTeX2e}
 \edef\fmtversion
-   {2022-11-01}
-\def\patch at level{-2}
+   {2023-05-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{%
@@ -1367,7 +1367,7 @@
 \let\@iden\@firstofone
 \long\def\@thirdofthree#1#2#3{#3}
 \def\@expandtwoargs#1#2#3{%
-\edef\reserved at a{\noexpand#1{#2}{#3}}\reserved at a}
+\protected at edef\reserved at a{\noexpand#1{#2}{#3}}\reserved at a}
 \edef\@backslashchar{\expandafter\@gobble\string\\}
 \def\@unexpandable at protect{\noexpand\protect\noexpand}
 \def\DeclareRobustCommand{\@star at or@long\declare at robustcommand}
@@ -14257,7 +14257,7 @@
     {\@expl@@@filehook at resolve@file at subst@@w #3.#1\@nil}%
       \reserved at a\reserved at b
   \@expl@@@filehook at clear@replacement at flag@@
-  \expandafter\xdef\csname opt@\reserved at a\endcsname{%
+  \expandafter\protected at xdef\csname opt@\reserved at a\endcsname{%
     \@ifundefined{opt@\reserved at a}\@empty
       {\csname opt@\reserved at a\endcsname,}%
     \zap at space#2 \@empty}%
@@ -14298,7 +14298,7 @@
 \@onlypreamble\OptionNotUsed
 \def\ProcessOptions{%
   \let\ds@\@empty
-  \edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
+  \protected at edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
   \@ifstar\@xprocess at ptions\@process at ptions}
 \@onlypreamble\ProcessOptions
 \def\@process at ptions{%
@@ -14319,7 +14319,7 @@
    \ifx\@classoptionslist\relax\else
     \@for\CurrentOption:=\@classoptionslist\do{%
       \ifx\CurrentOption\@empty\else
-        \@ifundefined{ds@\CurrentOption}{}{%
+        \@ifundefined{ds@\detokenize\expandafter{\CurrentOption}}{}{%
           \@use at ption
           \expandafter\let\csname ds@\CurrentOption\endcsname\@empty
         }%
@@ -14330,7 +14330,7 @@
 \@onlypreamble\@xprocess at ptions
 \def\@process at pti@ns{%
   \@for\CurrentOption:=\@curroptions\do{%
-    \@ifundefined{ds@\CurrentOption}%
+    \@ifundefined{ds@\detokenize\expandafter{\CurrentOption}}%
       {\@use at ption
        \default at ds}%
       \@use at ption}%
@@ -14348,7 +14348,7 @@
   \@expandtwoargs\@removeelement
      {\expandafter\@remove at eq@value\CurrentOption=\@nil}%
   \@unusedoptionlist\@unusedoptionlist
-  \csname ds@\CurrentOption\endcsname}
+  \csname ds@\detokenize\expandafter{\CurrentOption}\endcsname}
 \@onlypreamble\@use at ption
 \def\ExecuteOptions#1{%
   \edef\@fortmp{\zap at space#1 \@empty}%
@@ -14445,7 +14445,7 @@
 \def\@fileswith at pti@ns#1[#2]#3[#4]{%
   \ifx#1\@clsextension
     \ifx\@classoptionslist\relax
-      \xdef\@classoptionslist{\zap at space#2 \@empty}%
+      \protected at xdef\@classoptionslist{\zap at space#2 \@empty}%
       \gdef\@raw at classoptionslist{#2}%
       \def\reserved at a{%
         \@onefilewithoptions#3[{#2}][{#4}]#1%
@@ -14480,15 +14480,13 @@
   \global\let\@currext#4%
   \@ifl at aded\@currext\@currname
     {%
-      \@ifundefined{opt at fam@\@currname.\@currext}
+      \@ifundefined{opt at handler@\@currname.\@currext}
         {\@onefilewithoptions at clashchk{#2}}
         {%
-          \expandafter\edef\csname opt@\@currname.\@currext\endcsname
+          \expandafter\protected at edef\csname opt@\@currname.\@currext\endcsname
             {\zap at space#2 \@empty}%
           \@namedef{@raw at opt@\@currname.\@currext}{#2}%
-          \expandafter\expandafter\expandafter\ProcessKeyOptions
-            \expandafter\expandafter\expandafter
-              [\csname opt at fam@\@currname.\@currext\endcsname]%
+          \@nameuse{opt at handler@\@currname.\@currext}%
         }%
     }%
     {\makeatletter
@@ -14649,7 +14647,7 @@
 \@onlypreamble\@unknownoptionerror
 \def\@@unprocessedoptions{%
   \ifx\@currext\@pkgextension
-    \edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
+    \protected at edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
     \@for\CurrentOption:=\@curroptions\do{%
         \ifx\CurrentOption\@empty\else\@unknownoptionerror\fi}%
   \fi}
@@ -15031,7 +15029,8 @@
   { \__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_gset_protected:cpn { opt at handler@\@currname.\@currext }
+      { \ProcessKeyOptions [ #1 ] }
     \cs_set_protected:Npn \__keys_option_end: { }
     \clist_clear:N \l__keys_options_clist
     \__keys_options_global:n {#1}
@@ -15094,11 +15093,12 @@
 \cs_new_protected:Npn \__keys_options_class:nnn #1#2#3
   {
     \keys_if_exist:nnTF {#3} {#1}
-      { \clist_put_right:Nn \l__keys_options_clist {#2} }
       {
-        \str_if_eq:eeF
-          { \exp_not:v { @raw at opt@ \@currname . \@currext } }
-          { \exp_not:V \@raw at classoptionslist }
+        \clist_put_right:Nn \l__keys_options_clist {#2}
+        \clist_remove_all:Nn \@unusedoptionlist {#1}
+      }
+      {
+        \clist_if_in:NnF \@unusedoptionlist {#1}
           { \clist_put_right:Nn \@unusedoptionlist {#1} }
       }
   }
@@ -15173,11 +15173,9 @@
 \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_warning:nnnn { keys } { load-option-ignored } }
+      { \msg_error:nnnn { keys } { load-only } }
+        {#1} {#2}
   }
 \msg_new:nnn { keys } { load-option-ignored }
   {
@@ -17351,12 +17349,50 @@
 \lccode`\^^[=`\^^[   % oe in OT1
 \fi % End of reset block for 8-bit engines
 \ExplSyntaxOn
-\cs_new_protected_nopar:cpn{MakeUppercase~}{\text_uppercase:n}
-\cs_set_nopar:Npx\MakeUppercase#1{\use:c{MakeUppercase~}{#1}}
-\cs_new_protected_nopar:cpn{MakeLowercase~}{\text_lowercase:n}
-\cs_set_nopar:Npx\MakeLowercase#1{\use:c{MakeLowercase~}{#1}}
-\cs_new_protected_nopar:cpn{MakeTitlecase~}{\text_titlecase:n}
-\cs_set_nopar:Npx\MakeTitlecase#1{\use:c{MakeTitlecase~}{#1}}
+\keys_define:nn { __kernel }
+  {
+    lang   .str_set:N = \reserved at a ,
+    locale .str_set:N = \reserved at a
+  }
+\cs_new_protected:Npn \@@text at case@aux #1#2#3
+  {
+    \cs_set_nopar:Npn \reserved at a { }
+    \tl_if_blank:nTF {#2}
+      { \@@text at case@aux@ }
+      { \keys_set:nn { __kernel } {#2} }
+    \use:c { text_ #1 case:Vn } \reserved at a {#3}
+  }
+\cs_new_protected:Npn \@@text at case@aux@ { }
+\tl_gput_right:Nn \@kernel at after@begindocument
+  {
+    \@ifpackageloaded { babel }
+      {
+        \@ifpackagelater { babel } { 2020-01-15 }
+          {
+            \cs_gset_protected:Npn \@@text at case@aux@
+              {
+                \str_set:Nx \reserved at a
+                  { \localeinfo* { tag.bcp47 } }
+              }
+          }
+          { }
+      }
+      { }
+  }
+\exp_args_generate:n { cnx }
+\cs_set_protected:Npn \reserved at a #1
+  {
+    \cs_generate_variant:cn { text_ \str_lowercase:n {#1} case:nn } { V }
+    \cs_new_protected:cpx { Make#1case \c_space_tl \c_space_tl \c_space_tl } [##1] ##2
+      { \exp_not:N \@@text at case@aux { \str_lowercase:n {#1} } {##1} {##2} }
+     \ExpandArgs { cnx } \NewExpandableDocumentCommand
+       { Make#1case }
+       { O{} +m }
+       { \exp_not:c { Make#1case \c_space_tl \c_space_tl \c_space_tl } [####1] {####2} }
+  }
+\reserved at a { Upper }
+\reserved at a { Lower }
+\reserved at a { Title }
 \cs_new_protected_nopar:Npn\AddToNoCaseChangeList
          {\tl_put_right:Nn \l_text_case_exclude_arg_tl}
 \AddToNoCaseChangeList{ \NoCaseChange }

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty	2022-11-02 22:00:49 UTC (rev 64899)
@@ -290,7 +290,7 @@
 }
 %%% From File: ltvers.dtx
 \edef\latexreleaseversion
-   {2022-11-01}
+   {2023-05-01}
 \newif\if at includeinrelease
 \@includeinreleasefalse
 \def\IncludeInRelease#1{%
@@ -1430,6 +1430,16 @@
 \IncludeInRelease{0000/00/00}{\@carcube}{Undo: Make \@carcube long}%
 \def\@carcube#1#2#3#4\@nil{#1#2#3}
 \EndIncludeInRelease
+\IncludeInRelease{2022/11/01}%
+        {\@expandtwoargs}{protected edef}%
+\def\@expandtwoargs#1#2#3{%
+\protected at edef\reserved at a{\noexpand#1{#2}{#3}}\reserved at a}
+\EndIncludeInRelease
+\IncludeInRelease{00/00/00}%
+        {\@expandtwoargs}{protected edef}%
+\def\@expandtwoargs#1#2#3{%
+\edef\reserved at a{\noexpand#1{#2}{#3}}\reserved at a}
+\EndIncludeInRelease
 \IncludeInRelease{2020/10/01}{\MakeRobust}{\MakeRobust}%
 \def\MakeRobust#1{%
   \count@=\escapechar
@@ -14027,7 +14037,7 @@
     {\@expl@@@filehook at resolve@file at subst@@w #3.#1\@nil}%
       \reserved at a\reserved at b
   \@expl@@@filehook at clear@replacement at flag@@
-  \expandafter\xdef\csname opt@\reserved at a\endcsname{%
+  \expandafter\protected at xdef\csname opt@\reserved at a\endcsname{%
     \@ifundefined{opt@\reserved at a}\@empty
       {\csname opt@\reserved at a\endcsname,}%
     \zap at space#2 \@empty}%
@@ -14093,7 +14103,7 @@
    \ifx\@classoptionslist\relax\else
     \@for\CurrentOption:=\@classoptionslist\do{%
       \ifx\CurrentOption\@empty\else
-        \@ifundefined{ds@\CurrentOption}{}{%
+        \@ifundefined{ds@\detokenize\expandafter{\CurrentOption}}{}{%
           \@use at ption
           \expandafter\let\csname ds@\CurrentOption\endcsname\@empty
         }%
@@ -14122,7 +14132,7 @@
                  {\@process at pti@ns}{Unused options issue}%
 \def\@process at pti@ns{%
   \@for\CurrentOption:=\@curroptions\do{%
-    \@ifundefined{ds@\CurrentOption}%
+    \@ifundefined{ds@\detokenize\expandafter{\CurrentOption}}%
       {\@use at ption
        \default at ds}%
       \@use at ption}%
@@ -14156,7 +14166,7 @@
   \@expandtwoargs\@removeelement
      {\expandafter\@remove at eq@value\CurrentOption=\@nil}%
   \@unusedoptionlist\@unusedoptionlist
-  \csname ds@\CurrentOption\endcsname}
+  \csname ds@\detokenize\expandafter{\CurrentOption}\endcsname}
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
                  {\@use at ption}{filter unused option list}%
@@ -14221,7 +14231,7 @@
 \def\@fileswith at pti@ns#1[#2]#3[#4]{%
   \ifx#1\@clsextension
     \ifx\@classoptionslist\relax
-      \xdef\@classoptionslist{\zap at space#2 \@empty}%
+      \protected at xdef\@classoptionslist{\zap at space#2 \@empty}%
       \gdef\@raw at classoptionslist{#2}%
       \def\reserved at a{%
         \@onefilewithoptions#3[{#2}][{#4}]#1%
@@ -14313,15 +14323,13 @@
   \global\let\@currext#4%
   \@ifl at aded\@currext\@currname
     {%
-      \@ifundefined{opt at fam@\@currname.\@currext}
+      \@ifundefined{opt at handler@\@currname.\@currext}
         {\@onefilewithoptions at clashchk{#2}}
         {%
-          \expandafter\edef\csname opt@\@currname.\@currext\endcsname
+          \expandafter\protected at edef\csname opt@\@currname.\@currext\endcsname
             {\zap at space#2 \@empty}%
           \@namedef{@raw at opt@\@currname.\@currext}{#2}%
-          \expandafter\expandafter\expandafter\ProcessKeyOptions
-            \expandafter\expandafter\expandafter
-              [\csname opt at fam@\@currname.\@currext\endcsname]%
+          \@nameuse{opt at handler@\@currname.\@currext}%
         }%
     }%
     {\makeatletter

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua	2022-11-02 22:00:49 UTC (rev 64899)
@@ -240,7 +240,107 @@
   return tex_count[luafunction_count_name]
 end
 luatexbase.new_luafunction = new_luafunction
-local callbacklist = callbacklist or { }
+local realcallbacklist = {}
+local callbackrules = {}
+local callbacklist = setmetatable({}, {
+  __index = function(t, name)
+    local list = realcallbacklist[name]
+    local rules = callbackrules[name]
+    if list and rules then
+      local meta = {}
+      for i, entry in ipairs(list) do
+        local t = {value = entry, count = 0, pos = i}
+        meta[entry.description], list[i] = t, t
+      end
+      local count = #list
+      local pos = count
+      for i, rule in ipairs(rules) do
+        local rule = rules[i]
+        local pre, post = meta[rule[1]], meta[rule[2]]
+        if pre and post then
+          if rule.type then
+            if not rule.hidden then
+              assert(rule.type == 'incompatible-warning' and luatexbase_warning
+                or rule.type == 'incompatible-error' and luatexbase_error)(
+                  "Incompatible functions \"" .. rule[1] .. "\" and \"" .. rule[2]
+                  .. "\" specified for callback \"" .. name .. "\".")
+              rule.hidden = true
+            end
+          else
+            local post_count = post.count
+            post.count = post_count+1
+            if post_count == 0 then
+              local post_pos = post.pos
+              if post_pos ~= pos then
+                local new_post_pos = list[pos]
+                new_post_pos.pos = post_pos
+                list[post_pos] = new_post_pos
+              end
+              list[pos] = nil
+              pos = pos - 1
+            end
+            pre[#pre+1] = post
+          end
+        end
+      end
+      for i=1, count do -- The actual sort begins
+        local current = list[i]
+        if current then
+          meta[current.value.description] = nil
+          for j, cur in ipairs(current) do
+            local count = cur.count
+            if count == 1 then
+              pos = pos + 1
+              list[pos] = cur
+            else
+              cur.count = count - 1
+            end
+          end
+          list[i] = current.value
+        else
+          -- Cycle occured. TODO: Show cycle for debugging
+          -- list[i] = ...
+          local remaining = {}
+          for name, entry in next, meta do
+            local value = entry.value
+            list[#list + 1] = entry.value
+            remaining[#remaining + 1] = name
+          end
+          table.sort(remaining)
+          local first_name = remaining[1]
+          for j, name in ipairs(remaining) do
+            local entry = meta[name]
+            list[i + j - 1] = entry.value
+            for _, post_entry in ipairs(entry) do
+              local post_name = post_entry.value.description
+              if not remaining[post_name] then
+                remaining[post_name] = name
+              end
+            end
+          end
+          local cycle = {first_name}
+          local index = 1
+          local last_name = first_name
+          repeat
+            cycle[last_name] = index
+            last_name = remaining[last_name]
+            index = index + 1
+            cycle[index] = last_name
+          until cycle[last_name]
+          local length = index - cycle[last_name] + 1
+          table.move(cycle, cycle[last_name], index, 1)
+          for i=2, length//2 do
+            cycle[i], cycle[length + 1 - i] = cycle[length + 1 - i], cycle[i]
+          end
+          error('Cycle occured at ' .. table.concat(cycle, ' -> ', 1, length))
+        end
+      end
+    end
+    realcallbacklist[name] = list
+    t[name] = list
+    return list
+  end
+})
 local list, data, exclusive, simple, reverselist = 1, 2, 3, 4, 5
 local types   = {
   list        = list,
@@ -481,10 +581,10 @@
         .. "add_to_callback(<callback>, <function>, <description>)"
     )
   end
-  local l = callbacklist[name]
+  local l = realcallbacklist[name]
   if l == nil then
     l = { }
-    callbacklist[name] = l
+    realcallbacklist[name] = l
     local shared = shared_callbacks[name]
     if shared then
       shared.count = shared.count + 1
@@ -499,7 +599,6 @@
     func        = func,
     description = description,
   }
-  local priority = #l + 1
   if callbacktypes[name] == exclusive then
     if #l == 1 then
       luatexbase_error(
@@ -507,13 +606,56 @@
         name .. "'")
     end
   end
-  table.insert(l, priority, f)
+  table.insert(l, f)
+  callbacklist[name] = nil
   luatexbase_log(
-    "Inserting `" .. description .. "' at position "
-      .. priority .. " in `" .. name .. "'."
+    "Inserting `" .. description .. "' in `" .. name .. "'."
   )
 end
 luatexbase.add_to_callback = add_to_callback
+local function declare_callback_rule(name, desc1, relation, desc2)
+  if not callbacktypes[name] or
+    not desc1 or not desc2 or
+    desc1 == "" or desc2 == "" then
+    luatexbase_error(
+      "Unable to create ordering constraint. "
+        .. "Correct usage:\n"
+        .. "declare_callback_rule(<callback>, <description_a>, <description_b>)"
+    )
+  end
+  if relation == 'before' then
+    relation = nil
+  elseif relation == 'after' then
+    desc2, desc1 = desc1, desc2
+    relation = nil
+  elseif relation == 'incompatible-warning' or relation == 'incompatible-error' then
+  elseif relation == 'unrelated' then
+  else
+    luatexbase_error(
+      "Unknown relation type in declare_callback_rule"
+    )
+  end
+  callbacklist[name] = nil
+  local rules = callbackrules[name]
+  if rules then
+    for i, rule in ipairs(rules) do
+      if rule[1] == desc1 and rule[2] == desc2 or rule[1] == desc2 and rule[2] == desc1 then
+        if relation == 'unrelated' then
+          table.remove(rules, i)
+        else
+          rule[1], rule[2], rule.type = desc1, desc2, relation
+        end
+        return
+      end
+    end
+    if relation ~= 'unrelated' then
+      rules[#rules + 1] = {desc1, desc2, type = relation}
+    end
+  elseif relation ~= 'unrelated' then
+    callbackrules[name] = {{desc1, desc2, type = relation}}
+  end
+end
+luatexbase.declare_callback_rule = declare_callback_rule
 local function remove_from_callback(name, description)
   if not name or name == "" then
     luatexbase_error("Unable to remove function from callback:\n" ..
@@ -528,7 +670,7 @@
         .. "remove_from_callback(<callback>, <description>)"
     )
   end
-  local l = callbacklist[name]
+  local l = realcallbacklist[name]
   if not l then
     luatexbase_error(
       "No callback list for `" .. name .. "'\n")
@@ -551,6 +693,7 @@
     "Removing  `" .. description .. "' from `" .. name .. "'."
   )
   if #l == 0 then
+    realcallbacklist[name] = nil
     callbacklist[name] = nil
     local shared = shared_callbacks[name]
     if shared then
@@ -568,12 +711,12 @@
 local function in_callback(name, description)
   if not name
     or name == ""
-    or not callbacklist[name]
+    or not realcallbacklist[name]
     or not callbacktypes[name]
     or not description then
       return false
   end
-  for _, i in pairs(callbacklist[name]) do
+  for _, i in pairs(realcallbacklist[name]) do
     if i.description == description then
       return true
     end
@@ -582,7 +725,7 @@
 end
 luatexbase.in_callback = in_callback
 local function disable_callback(name)
-  if(callbacklist[name] == nil) then
+  if(realcallbacklist[name] == nil) then
     callback_register(name, false)
   else
     luatexbase_error("Callback list for " .. name .. " not empty")
@@ -593,7 +736,7 @@
   local d = {}
   if not name
     or name == ""
-    or not callbacklist[name]
+    or not realcallbacklist[name]
     or not callbacktypes[name]
     then
     return d

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex	2022-11-02 22:00:49 UTC (rev 64899)
@@ -47,7 +47,7 @@
   #1#2[#3]{\endgroup\immediate\write-1{File: #1 #3}}
 \fi
 \ProvidesFile{ltluatex.tex}%
-[2022/08/13 v1.1y
+[2022/10/03 v1.2a
   LuaTeX support for plain TeX (core)
 ]
 \edef\etatcatcode{\the\catcode`\@}

Modified: trunk/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx	2022-11-02 22:00:49 UTC (rev 64899)
@@ -34,8 +34,8 @@
 %%
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
-\def\LaTeXFirstAidDate{2022/06/23}
-\def\LaTeXFirstAidVersion{v1.0s}
+\def\LaTeXFirstAidDate{2022/10/29}
+\def\LaTeXFirstAidVersion{v1.0u}
 \ProvidesFile{latex2e-first-aid-for-external-files.ltx}
              [\LaTeXFirstAidDate\space \LaTeXFirstAidVersion\space
                LaTeX kernel fixes to external files and packages]
@@ -71,6 +71,7 @@
   }
 }
 \ExplSyntaxOff
+\AddToHook{file/babel.sty/before}[firstaid]{\def\BabelCaseHack{}}
 \AddToHook{file/bigfoot.sty/after}{%
    \ifnum\count10<\insc at unt
      \global\count10=\insc at unt

Modified: trunk/Master/texmf-dist/tex/latex-dev/graphics/mathcolor.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/graphics/mathcolor.ltx	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/tex/latex-dev/graphics/mathcolor.ltx	2022-11-02 22:00:49 UTC (rev 64899)
@@ -13,85 +13,79 @@
 %% 
 %% File: mathcolor.dtx (C) Copyright 2021-2022
 %%% From File: mathcolor.dtx
-\def\mathcolorversion{v1.0b}
-\def\mathcolordate{2022/01/28}
-
-
+\def\mathcolorversion{v1.0c}
+\def\mathcolordate{2022/07/25}
 \ifcsname mathcolor\endcsname \endinput \fi
 \ExplSyntaxOn
 \seq_new:N \g__mathcolor_seq
-\DeclareDocumentCommand \mathcolor { o m m } {
-  \mode_if_math:F { \non at alpherr {\mathcolor\space} }
-  \seq_gpush:No \g__mathcolor_seq \current at color
-  \group_insert_after:N \use_none:n
-  \IfValueTF{#1} { \color[#1]{#2} }{ \color{#2} }
-  #3
-  \__mathcolor_scan_for_scripts:w
-}
-\cs_new_protected:Npn \__mathcolor_scan_for_scripts:w {
-  \__mathcolor_peek_catcode_ignore_filler_expand:NTF \c_math_subscript_token
-    { \__mathcolor_handle_scripts:Nw }
-    { \token_if_math_superscript:NTF \l_peek_token
-      { \__mathcolor_handle_scripts:Nw }
-      { \token_case_meaning:NnTF \l_peek_token
+\DeclareDocumentCommand \mathcolor { o m m }
+  {
+    \mode_if_math:F { \non at alpherr {\mathcolor\space} }
+    \seq_gpush:No \g__mathcolor_seq \current at color
+    \group_insert_after:N \use_none:n
+    \IfValueTF {#1} { \color[#1]{#2} } { \color{#2} }
+    #3
+    \__mathcolor_scan_for_scripts:w
+  }
+\cs_new_protected:Npn \__mathcolor_scan_for_scripts:w
+  {
+    \peek_remove_filler:n
+      {
+        \group_align_safe_begin:
+        \token_case_catcode:NnTF \l_peek_token
           {
-            \limits   { \limits }
-            \nolimits { \nolimits }
-            \displaylimits { \displaylimits }
+            \c_math_subscript_token { }
+            \c_math_superscript_token { }
           }
-          { \__mathcolor_scan_for_scripts:w \use_none:n }
-          { \peek_meaning_remove:NTF '
-            { \__mathcolor_handle_scripts:Nw ^\c_group_begin_token \prim at s }
-            { \reset at color
-              \seq_gpop:NN \g__mathcolor_seq \current at color
-            }
+          { \__mathcolor_handle_scripts:Nw }
+          {
+            \token_case_meaning:NnTF \l_peek_token
+              {
+                \limits   { \limits }
+                \nolimits { \nolimits }
+                \displaylimits { \displaylimits }
+              }
+              {
+                \group_align_safe_end:                          % case 4
+                \__mathcolor_scan_for_scripts:w \use_none:n
+              }
+              {
+                \token_if_eq_meaning:NNTF \l_peek_token '
+                  {
+                    \__mathcolor_handle_scripts:Nw ^
+                    \c_group_begin_token
+                      \exp_after:wN \prim at s \use_none:n
+                  }
+                  {
+                    \group_align_safe_end:                      % case 1
+                    \reset at color
+                    \seq_gpop:NN \g__mathcolor_seq \current at color
+                  }
+              }
           }
       }
-    }
-}
-
-\cs_new_protected:Npn \__mathcolor_handle_scripts:Nw #1 {
+  }
+\cs_new_protected:Npn \__mathcolor_handle_scripts:Nw #1
+  {
     #1 \c_group_begin_token \c_group_begin_token
     \seq_get:NN \g__mathcolor_seq \current at color
     \set at color
     \group_insert_after:N \c_group_end_token
     \group_insert_after:N \__mathcolor_scan_for_scripts:w
-    \__mathcolor_peek_catcode_ignore_filler_expand:NTF \c_group_begin_token
-      { \peek_catcode_remove:NT \c_group_begin_token { } }
-      { \__mathcolor_handle_unbraced_script:N }
-  }%    \end{macrocode}
-
-\cs_new_protected:Npn \__mathcolor_handle_unbraced_script:N #1 {
-  #1 \c_group_end_token }
-\tl_new:N \l__mathcolor_peek_tmp_tl
-\cs_new_protected:Npn \__mathcolor_peek_catcode_ignore_filler_expand:NTF #1#2#3
-  {
-    \tl_set:Nn \l__mathcolor_peek_tmp_tl
-      { \token_if_eq_catcode:NNTF \l_peek_token #1 {#2} {#3} }
-    \__mathcolor_peek_expand:w
+    \peek_remove_filler:n
+      {
+        \token_if_eq_meaning:NNTF \l_peek_token \c_group_begin_token
+          {
+            \group_align_safe_end:                              % case 2
+            \peek_catcode_remove:NT \c_group_begin_token { }
+          }
+          {
+            \exp_after:wN \group_align_safe_end:                % case 3
+              \use_ii_i:nn \c_group_end_token
+          }
+      }
   }
-\cs_new_protected:Npn \__mathcolor_peek_expand:w
-  {
-    \exp_after:wN \peek_catcode_remove:NTF
-    \exp_after:wN \c_space_token
-    \exp_after:wN \__mathcolor_peek_test_expand:w
-    \exp_after:wN \__mathcolor_peek_test_relax:w
-    \exp:w \exp_end_continue_f:w
-  }
-\cs_new_protected:Npn \__mathcolor_peek_test_expand:w
-  {
-    \token_if_expandable:NTF \l_peek_token
-      { \__mathcolor_peek_expand:w }
-      { \l__mathcolor_peek_tmp_tl      }
-  }
-\cs_new_protected:Npn \__mathcolor_peek_test_relax:w
-   {
-    \peek_meaning_remove:NTF \scan_stop:
-      { \__mathcolor_peek_expand:w }
-      { \__mathcolor_peek_test_expand:w   }
-   }
 \ExplSyntaxOff
-
 %%%%%%%%%%%%%%%%
 \endinput
 %%

Modified: trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx	2022-11-02 22:00:49 UTC (rev 64899)
@@ -34,7 +34,7 @@
 %% 
 %% File: latex-lab-footnotes.dtx
 \ProvidesFile{latex-lab-footnotes.ltx}
-        [2022-03-10 v0.6a changes to the footnote interfaces]
+        [2022-07-22 v0.6b changes to the footnote interfaces]
 
 
         % not looked at yet
@@ -300,13 +300,13 @@
 }
 
 
-\DeclareDocumentCommand\footnotetext {om} {
+\DeclareDocumentCommand\footnotetext {o+m} {
   \fnote_set_fnmark:nn {#1} \@mpfn
   \@footnotetext {#2}
 }
 
 
-\DeclareDocumentCommand\footnote {om} {
+\DeclareDocumentCommand\footnote {o+m} {
   \fnote_step_fnmark:nn {#1} \@mpfn
   \cs_set_eq:NN \__fnote_footnotemark_finish: \prg_do_nothing:
   \@footnotemark

Deleted: trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-prototype.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-prototype.sty	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-prototype.sty	2022-11-02 22:00:49 UTC (rev 64899)
@@ -1,301 +0,0 @@
-%%
-%% This is file `latex-lab-prototype.sty',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% latex-lab-prototype.dtx  (with options: `2ekernel')
-%% 
-%% This is a generated file.
-%% 
-%% Copyright 2021,2022 LaTeX Project
-%% 
-%% This file was generated from file(s) of the  `LaTeX-lab Bundle'.
-%% ------------------------------------------------------------------------------------
-%% 
-%% 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 may only be distributed together with a copy of the LaTeX
-%% `LaTeX-lab Bundle'. You may however distribute the `LaTeX-lab Bundle'
-%% without such generated files.
-%% 
-%% The newest sources can be found below
-%% 
-%%    https://github.com/latex3/latex2e/required/latex-lab
-%% 
-%% where one can also log issues in case there are any.
-%% 
-%% 
-%% File: latex-lab-prototype.dtx
-\ExplSyntaxOn
-\tl_if_exist:NF \l__keys_precompile_tl
-  {
-    \bool_new:N \l__keys_precompile_bool
-    \tl_new:N \l__keys_precompile_tl
-  }
-\cs_gset_protected:Npn \__keys_precompile:n #1
-  {
-    \bool_if:NTF \l__keys_precompile_bool
-      { \tl_put_right:Nn \l__keys_precompile_tl }
-      { \use:n }
-        {#1}
-  }
-\cs_gset_protected:Npn \__keys_bool_set:Nnnn #1#2#3#4
-  {
-    \bool_if_exist:NF #1 { \bool_new:N #1 }
-    \__keys_choice_make:
-    \__keys_cmd_set:nx { \l_keys_path_str / true }
-      { \exp_not:c { bool_ #2 set_ #3 :N } \exp_not:N #1 }
-    \__keys_cmd_set:nx { \l_keys_path_str / false }
-      { \exp_not:c { bool_ #2 set_ #4 :N } \exp_not:N #1 }
-    \__keys_cmd_set_direct:nn { \l_keys_path_str / unknown }
-      {
-        \msg_error:nnx { keys } { boolean-values-only }
-          \l_keys_key_str
-      }
-    \__keys_default_set:n { true }
-  }
-\cs_gset_protected:Npn \__keys_choice_make_aux:N #1
-  {
-    \cs_set_nopar:cpn { \c__keys_type_root_str \l_keys_path_str }
-      { choice }
-    \__keys_cmd_set_direct:nn \l_keys_path_str { #1 {##1} }
-    \__keys_cmd_set_direct:nn { \l_keys_path_str / unknown }
-      {
-        \msg_error:nnxx { keys } { choice-unknown }
-          \l_keys_path_str {##1}
-      }
-  }
-\cs_gset_protected:Npn \__keys_cmd_set:nn #1#2
-  {  \__keys_cmd_set_direct:nn {#1} { \__keys_precompile:n {#2} } }
-\cs_gset_protected:Npn \__keys_cmd_set_direct:nn #1#2
-  { \cs_set_protected:cpn { \c__keys_code_root_str #1 } ##1 {#2} }
-\cs_gset_protected:Npn \__keys_cs_set:NNpn #1#2#3#
-  {
-    \cs_set_protected:cpx { \c__keys_code_root_str \l_keys_path_str } ##1
-      {
-        \__keys_precompile:n
-          { #1 \exp_not:N #2 \exp_not:n {#3} {##1} }
-      }
-    \use_none:n
-  }
-\cs_gset_protected:Npn \__keys_meta_make:n #1
-  {
-    \exp_args:NVo \__keys_cmd_set_direct:nn \l_keys_path_str
-      {
-        \exp_after:wN \keys_set:nn \exp_after:wN
-          { \l__keys_module_str } {#1}
-      }
-  }
-\cs_gset_protected:Npn \__keys_meta_make:nn #1#2
-  {
-    \exp_args:NV \__keys_cmd_set_direct:nn
-      \l_keys_path_str { \keys_set:nn {#1} {#2} }
-  }
-\cs_gset_protected:Npn \keys_precompile:nnN #1#2#3
-  {
-    \bool_set_true:N \l__keys_precompile_bool
-    \tl_clear:N \l__keys_precompile_tl
-    \keys_set:nn {#1} {#2}
-    \bool_set_false:N \l__keys_precompile_bool
-    \tl_set_eq:NN #3 \l__keys_precompile_tl
-  }
-\cs_gset_protected:Npn \__keys_show:Nnn #1#2#3
-  {
-    #1 { keys } { show-key }
-      { \__keys_trim_spaces:n { #2 / #3 } }
-      {
-        \keys_if_exist:nnT {#2} {#3}
-          {
-            \exp_args:Nnf \msg_show_item_unbraced:nn { code }
-              {
-                \exp_args:Ne \__keys_show:n
-                  {
-                    \exp_args:Nc \cs_replacement_spec:N
-                    {
-                      \c__keys_code_root_str
-                      \__keys_trim_spaces:n { #2 / #3 }
-                    }
-                  }
-              }
-          }
-      }
-      { } { }
-  }
-\cs_gset:Npx \__keys_show:n #1
-  {
-    \exp_not:N \__keys_show:w
-      #1
-      \tl_to_str:n { \__keys_precompile:n }
-      #1
-      \tl_to_str:n { \__keys_precompile:n }
-      \exp_not:N \s__keys_stop
-  }
-\use:x
-  {
-    \cs_gset:Npn \exp_not:N \__keys_show:w
-      ##1 \tl_to_str:n { \__keys_precompile:n }
-      ##2 \tl_to_str:n { \__keys_precompile:n }
-      ##3 \exp_not:N \s__keys_stop
-  }
-  {
-    \tl_if_blank:nTF {#2}
-      {#1}
-      { \__keys_show:Nw #2 \s__keys_stop }
-  }
-\use:x
-  {
-    \cs_gset:Npn \exp_not:N \__keys_show:Nw ##1##2
-      \c_right_brace_str \exp_not:N \s__keys_stop
-  }
-  {#2}
-\tl_new:N \l__prototype_tmp_tl
-\prop_new:N \l__prototype_object_prop
-\cs_new_protected:Npn \prototype_declare_object:nn #1#2
-  {
-    \exp_args:Nx \__prototype_declare_object:nn { \int_eval:n {#2} } {#1}
-  }
-\cs_new_protected:Npn \__prototype_declare_object:nn #1#2
-  {
-    \int_compare:nTF { 0 <= #1 <= 9 }
-      {
-        \msg_info:nnnn { prototype } { declare-object-type } {#2} {#1}
-        \prop_put:Nnn \l__prototype_object_prop {#2} {#1}
-      }
-      { \msg_error:nnxx { prototype } { bad-number-of-arguments } {#2} {#1} }
-  }
-\tl_new:N \l__prototype_assignments_tl
-\cs_new_protected:Npn \prototype_declare_template:nnnn #1#2#3#4
-  {
-    \prop_get:NnNTF \l__prototype_object_prop {#1} \l__prototype_tmp_tl
-      {
-        \keys_define:nn { prototype / #1 / #2 } {#3}
-        \tl_clear_new:c { l__prototype_defaults_ #1 _ #2 _tl }
-        \cs_generate_from_arg_count:cNnn
-          { __prototype_template_ #1 _ #2 :w }
-          \cs_set_protected:Npn
-          { \l__prototype_tmp_tl }
-          {
-            \tl_use:N \l__prototype_assignments_tl
-            #4
-          }
-      }
-      { \msg_error:nnn { prototype } { unknown-object-type } {#1} }
-  }
-\cs_new_protected:Npn \prototype_declare_defaults:nnn #1#2#3
-  {
-    \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w }
-      { \tl_set:cn { l__prototype_defaults_ #1 _ #2 _tl } {#3} }
-      { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
-  }
-\cs_generate_variant:Nn \keys_precompile:nnN { v , nv }
-\cs_new_protected:Npn \prototype_use_template:nnn #1#2#3
-  {
-    \__prototype_declare_aux:nnnn {#1} {#2} {#3}
-      { \use:c { __prototype_template_ #1 _ #2 :w } }
-  }
-\cs_new_protected:Npn \prototype_declare_instance:nnnn #1#2#3#4
-  {
-    \__prototype_declare_aux:nnnn {#1} {#2} {#4}
-      {
-        \tl_clear_new:c { l__prototype_instance_ #1 _ #3 _pars_tl }
-        \tl_set_eq:cN { l__prototype_instance_ #1 _ #3 _pars_tl }
-          \l__prototype_assignments_tl
-         \tl_clear_new:c { l__prototype_instance_ #1 _ #3 _template_tl }
-         \tl_set:cn { l__prototype_instance_ #1 _ #3 _template_tl } {#2}
-      }
-  }
-\cs_new_protected:Npn \__prototype_declare_aux:nnnn #1#2#3#4
-  {
-    \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w }
-      {
-        \keys_precompile:nvN
-          { prototype / #1 / #2 }
-          { l__prototype_defaults_ #1 _ #2 _tl }
-          \l__prototype_assignments_tl
-        \keys_precompile:nnN { prototype / #1 / #2 } {#3} \l__prototype_tmp_tl
-        \tl_put_right:NV \l__prototype_assignments_tl \l__prototype_tmp_tl
-        #4
-      }
-      { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
-  }
-\cs_new_protected:Npn \prototype_use_instance:nn #1#2
-  { \prototype_use_instance:nnn {#1} {#2} { } }
-\cs_new_protected:Npn \prototype_use_instance:nnn #1#2#3
-  {
-    \tl_if_exist:cTF { l__prototype_instance_ #1 _ #2 _template_tl }
-      {
-        \tl_set_eq:Nc \l__prototype_assignments_tl
-          { l__prototype_instance_ #1 _ #2 _pars_tl }
-        \tl_if_blank:nF {#3}
-          {
-            \keys_precompile:vnN
-              {
-                prototype / #1 /
-                \tl_use:c { l__prototype_instance_ #1 _ #2 _template_tl }
-              }
-              {#3}
-              \l__prototype_tmp_tl
-            \tl_put_right:NV \l__prototype_assignments_tl
-              \l__prototype_tmp_tl
-          }
-        \use:c
-          {
-            __prototype_template_ #1 _
-            \tl_use:c { l__prototype_instance_ #1 _ #2 _template_tl }
-            :w
-          }
-      }
-      { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} }
-  }
-\cs_new_protected:Npn \prototype_show_template_code:nn #1#2
-  {
-    \prop_if_in:NnTF \l__prototype_object_prop {#1}
-      { \cs_show:c { __prototype_template_ #1 _ #2 :w } }
-      { \msg_error:nnn { prototype } { unknown-object-type } {#1} }
-  }
-\cs_new_protected:Npn \prototype_show_template_defaults:nn #1#2
-  {
-    \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w }
-      { \tl_show:c { l__prototype_defaults_ #1 _ #2 _tl } }
-      { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
-  }
-\cs_new_protected:Npn \prototype_show_instance_values:nn #1#2
-  {
-    \tl_if_exist:cTF { l__prototype_instance_ #1 _ #2 _template_tl }
-      { \tl_show:c { l__prototype_instance_ #1 _ #2 _pars_tl } }
-      { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} }
-  }
-\msg_new:nnnn { prototype } { bad-number-of-arguments }
-  { Bad~number~of~arguments~for~object~type~'#1'. }
-  {
-    An~object~may~accept~between~0~and~9~arguments.\\
-    You~asked~to~use~#2~arguments:~this~is~not~supported.
-  }
-\msg_new:nnnn { prototype } { unknown-instance }
-  { The~instance~'#2'~of~type~'#1'~is~unknown. }
-  {
-    You~have~asked~to~use~an~instance~'#2',~
-    but~this~has~not~been~created.
-  }
-\msg_new:nnnn { prototype } { unknown-object-type }
-  { The~object~type~'#1'~is~unknown. }
-  { An~object~type~needs~to~be~declared~prior~to~using~it. }
-\msg_new:nnnn { prototype } { unknown-template }
-  { The~template~'#2'~of~type~'#1'~is~unknown. }
-  {
-    No~interface~has~been~declared~for~a~template~
-    '#2'~of~object~type~'#1'.
-  }
-\msg_new:nnn { prototype } { declare-object-type }
-  { Declaring~object~type~'#1'~taking~#2~argument(s). }
-\ExplSyntaxOff
-\endinput
-%%
-%% End of file `latex-lab-prototype.sty'.

Deleted: trunk/Master/texmf-dist/tex/latex-dev/latex-lab/prototype-latex-lab-testphase.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/latex-lab/prototype-latex-lab-testphase.ltx	2022-11-02 21:16:57 UTC (rev 64898)
+++ trunk/Master/texmf-dist/tex/latex-dev/latex-lab/prototype-latex-lab-testphase.ltx	2022-11-02 22:00:49 UTC (rev 64899)
@@ -1,301 +0,0 @@
-%%
-%% This is file `prototype-latex-lab-testphase.ltx',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% latex-lab-prototype.dtx  (with options: `2ekernel')
-%% 
-%% This is a generated file.
-%% 
-%% Copyright 2021,2022 LaTeX Project
-%% 
-%% This file was generated from file(s) of the  `LaTeX-lab Bundle'.
-%% ------------------------------------------------------------------------------------
-%% 
-%% 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 may only be distributed together with a copy of the LaTeX
-%% `LaTeX-lab Bundle'. You may however distribute the `LaTeX-lab Bundle'
-%% without such generated files.
-%% 
-%% The newest sources can be found below
-%% 
-%%    https://github.com/latex3/latex2e/required/latex-lab
-%% 
-%% where one can also log issues in case there are any.
-%% 
-%% 
-%% File: latex-lab-prototype.dtx
-\ExplSyntaxOn
-\tl_if_exist:NF \l__keys_precompile_tl
-  {
-    \bool_new:N \l__keys_precompile_bool
-    \tl_new:N \l__keys_precompile_tl
-  }
-\cs_gset_protected:Npn \__keys_precompile:n #1
-  {
-    \bool_if:NTF \l__keys_precompile_bool
-      { \tl_put_right:Nn \l__keys_precompile_tl }
-      { \use:n }
-        {#1}
-  }
-\cs_gset_protected:Npn \__keys_bool_set:Nnnn #1#2#3#4
-  {
-    \bool_if_exist:NF #1 { \bool_new:N #1 }
-    \__keys_choice_make:
-    \__keys_cmd_set:nx { \l_keys_path_str / true }
-      { \exp_not:c { bool_ #2 set_ #3 :N } \exp_not:N #1 }
-    \__keys_cmd_set:nx { \l_keys_path_str / false }
-      { \exp_not:c { bool_ #2 set_ #4 :N } \exp_not:N #1 }
-    \__keys_cmd_set_direct:nn { \l_keys_path_str / unknown }
-      {
-        \msg_error:nnx { keys } { boolean-values-only }
-          \l_keys_key_str
-      }
-    \__keys_default_set:n { true }
-  }
-\cs_gset_protected:Npn \__keys_choice_make_aux:N #1
-  {
-    \cs_set_nopar:cpn { \c__keys_type_root_str \l_keys_path_str }
-      { choice }
-    \__keys_cmd_set_direct:nn \l_keys_path_str { #1 {##1} }
-    \__keys_cmd_set_direct:nn { \l_keys_path_str / unknown }
-      {
-        \msg_error:nnxx { keys } { choice-unknown }
-          \l_keys_path_str {##1}
-      }
-  }
-\cs_gset_protected:Npn \__keys_cmd_set:nn #1#2
-  {  \__keys_cmd_set_direct:nn {#1} { \__keys_precompile:n {#2} } }
-\cs_gset_protected:Npn \__keys_cmd_set_direct:nn #1#2
-  { \cs_set_protected:cpn { \c__keys_code_root_str #1 } ##1 {#2} }
-\cs_gset_protected:Npn \__keys_cs_set:NNpn #1#2#3#
-  {
-    \cs_set_protected:cpx { \c__keys_code_root_str \l_keys_path_str } ##1
-      {
-        \__keys_precompile:n
-          { #1 \exp_not:N #2 \exp_not:n {#3} {##1} }
-      }
-    \use_none:n
-  }
-\cs_gset_protected:Npn \__keys_meta_make:n #1
-  {
-    \exp_args:NVo \__keys_cmd_set_direct:nn \l_keys_path_str
-      {
-        \exp_after:wN \keys_set:nn \exp_after:wN
-          { \l__keys_module_str } {#1}
-      }
-  }
-\cs_gset_protected:Npn \__keys_meta_make:nn #1#2
-  {
-    \exp_args:NV \__keys_cmd_set_direct:nn
-      \l_keys_path_str { \keys_set:nn {#1} {#2} }
-  }
-\cs_gset_protected:Npn \keys_precompile:nnN #1#2#3
-  {
-    \bool_set_true:N \l__keys_precompile_bool
-    \tl_clear:N \l__keys_precompile_tl
-    \keys_set:nn {#1} {#2}
-    \bool_set_false:N \l__keys_precompile_bool
-    \tl_set_eq:NN #3 \l__keys_precompile_tl
-  }
-\cs_gset_protected:Npn \__keys_show:Nnn #1#2#3
-  {
-    #1 { keys } { show-key }
-      { \__keys_trim_spaces:n { #2 / #3 } }
-      {
-        \keys_if_exist:nnT {#2} {#3}
-          {
-            \exp_args:Nnf \msg_show_item_unbraced:nn { code }
-              {
-                \exp_args:Ne \__keys_show:n
-                  {
-                    \exp_args:Nc \cs_replacement_spec:N
-                    {
-                      \c__keys_code_root_str
-                      \__keys_trim_spaces:n { #2 / #3 }
-                    }
-                  }
-              }
-          }
-      }
-      { } { }
-  }
-\cs_gset:Npx \__keys_show:n #1
-  {
-    \exp_not:N \__keys_show:w
-      #1
-      \tl_to_str:n { \__keys_precompile:n }
-      #1
-      \tl_to_str:n { \__keys_precompile:n }
-      \exp_not:N \s__keys_stop
-  }
-\use:x
-  {
-    \cs_gset:Npn \exp_not:N \__keys_show:w
-      ##1 \tl_to_str:n { \__keys_precompile:n }
-      ##2 \tl_to_str:n { \__keys_precompile:n }
-      ##3 \exp_not:N \s__keys_stop
-  }
-  {
-    \tl_if_blank:nTF {#2}
-      {#1}
-      { \__keys_show:Nw #2 \s__keys_stop }
-  }
-\use:x
-  {
-    \cs_gset:Npn \exp_not:N \__keys_show:Nw ##1##2
-      \c_right_brace_str \exp_not:N \s__keys_stop
-  }
-  {#2}
-\tl_new:N \l__prototype_tmp_tl
-\prop_new:N \l__prototype_object_prop
-\cs_new_protected:Npn \prototype_declare_object:nn #1#2
-  {
-    \exp_args:Nx \__prototype_declare_object:nn { \int_eval:n {#2} } {#1}
-  }
-\cs_new_protected:Npn \__prototype_declare_object:nn #1#2
-  {
-    \int_compare:nTF { 0 <= #1 <= 9 }
-      {
-        \msg_info:nnnn { prototype } { declare-object-type } {#2} {#1}
-        \prop_put:Nnn \l__prototype_object_prop {#2} {#1}
-      }
-      { \msg_error:nnxx { prototype } { bad-number-of-arguments } {#2} {#1} }
-  }
-\tl_new:N \l__prototype_assignments_tl
-\cs_new_protected:Npn \prototype_declare_template:nnnn #1#2#3#4
-  {
-    \prop_get:NnNTF \l__prototype_object_prop {#1} \l__prototype_tmp_tl
-      {
-        \keys_define:nn { prototype / #1 / #2 } {#3}
-        \tl_clear_new:c { l__prototype_defaults_ #1 _ #2 _tl }
-        \cs_generate_from_arg_count:cNnn
-          { __prototype_template_ #1 _ #2 :w }
-          \cs_set_protected:Npn
-          { \l__prototype_tmp_tl }
-          {
-            \tl_use:N \l__prototype_assignments_tl
-            #4
-          }
-      }
-      { \msg_error:nnn { prototype } { unknown-object-type } {#1} }
-  }
-\cs_new_protected:Npn \prototype_declare_defaults:nnn #1#2#3
-  {
-    \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w }
-      { \tl_set:cn { l__prototype_defaults_ #1 _ #2 _tl } {#3} }
-      { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
-  }
-\cs_generate_variant:Nn \keys_precompile:nnN { v , nv }
-\cs_new_protected:Npn \prototype_use_template:nnn #1#2#3
-  {
-    \__prototype_declare_aux:nnnn {#1} {#2} {#3}
-      { \use:c { __prototype_template_ #1 _ #2 :w } }
-  }
-\cs_new_protected:Npn \prototype_declare_instance:nnnn #1#2#3#4
-  {
-    \__prototype_declare_aux:nnnn {#1} {#2} {#4}
-      {
-        \tl_clear_new:c { l__prototype_instance_ #1 _ #3 _pars_tl }
-        \tl_set_eq:cN { l__prototype_instance_ #1 _ #3 _pars_tl }
-          \l__prototype_assignments_tl
-         \tl_clear_new:c { l__prototype_instance_ #1 _ #3 _template_tl }
-         \tl_set:cn { l__prototype_instance_ #1 _ #3 _template_tl } {#2}
-      }
-  }
-\cs_new_protected:Npn \__prototype_declare_aux:nnnn #1#2#3#4
-  {
-    \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w }
-      {
-        \keys_precompile:nvN
-          { prototype / #1 / #2 }
-          { l__prototype_defaults_ #1 _ #2 _tl }
-          \l__prototype_assignments_tl
-        \keys_precompile:nnN { prototype / #1 / #2 } {#3} \l__prototype_tmp_tl
-        \tl_put_right:NV \l__prototype_assignments_tl \l__prototype_tmp_tl
-        #4
-      }
-      { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
-  }
-\cs_new_protected:Npn \prototype_use_instance:nn #1#2
-  { \prototype_use_instance:nnn {#1} {#2} { } }
-\cs_new_protected:Npn \prototype_use_instance:nnn #1#2#3
-  {
-    \tl_if_exist:cTF { l__prototype_instance_ #1 _ #2 _template_tl }
-      {
-        \tl_set_eq:Nc \l__prototype_assignments_tl
-          { l__prototype_instance_ #1 _ #2 _pars_tl }
-        \tl_if_blank:nF {#3}
-          {
-            \keys_precompile:vnN
-              {
-                prototype / #1 /
-                \tl_use:c { l__prototype_instance_ #1 _ #2 _template_tl }
-              }
-              {#3}
-              \l__prototype_tmp_tl
-            \tl_put_right:NV \l__prototype_assignments_tl
-              \l__prototype_tmp_tl
-          }
-        \use:c
-          {
-            __prototype_template_ #1 _
-            \tl_use:c { l__prototype_instance_ #1 _ #2 _template_tl }
-            :w
-          }
-      }
-      { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} }
-  }
-\cs_new_protected:Npn \prototype_show_template_code:nn #1#2
-  {
-    \prop_if_in:NnTF \l__prototype_object_prop {#1}
-      { \cs_show:c { __prototype_template_ #1 _ #2 :w } }
-      { \msg_error:nnn { prototype } { unknown-object-type } {#1} }
-  }
-\cs_new_protected:Npn \prototype_show_template_defaults:nn #1#2
-  {
-    \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w }
-      { \tl_show:c { l__prototype_defaults_ #1 _ #2 _tl } }
-      { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
-  }
-\cs_new_protected:Npn \prototype_show_instance_values:nn #1#2
-  {
-    \tl_if_exist:cTF { l__prototype_instance_ #1 _ #2 _template_tl }
-      { \tl_show:c { l__prototype_instance_ #1 _ #2 _pars_tl } }
-      { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} }
-  }
-\msg_new:nnnn { prototype } { bad-number-of-arguments }
-  { Bad~number~of~arguments~for~object~type~'#1'. }
-  {
-    An~object~may~accept~between~0~and~9~arguments.\\
-    You~asked~to~use~#2~arguments:~this~is~not~supported.
-  }
-\msg_new:nnnn { prototype } { unknown-instance }
-  { The~instance~'#2'~of~type~'#1'~is~unknown. }
-  {
-    You~have~asked~to~use~an~instance~'#2',~
-    but~this~has~not~been~created.
-  }
-\msg_new:nnnn { prototype } { unknown-object-type }
-  { The~object~type~'#1'~is~unknown. }
-  { An~object~type~needs~to~be~declared~prior~to~using~it. }
-\msg_new:nnnn { prototype } { unknown-template }
-  { The~template~'#2'~of~type~'#1'~is~unknown. }
-  {
-    No~interface~has~been~declared~for~a~template~
-    '#2'~of~object~type~'#1'.
-  }
-\msg_new:nnn { prototype } { declare-object-type }
-  { Declaring~object~type~'#1'~taking~#2~argument(s). }
-\ExplSyntaxOff
-\endinput
-%%
-%% End of file `prototype-latex-lab-testphase.ltx'.



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