texlive[64892] Master/texmf-dist: latex2e 2022-11 (1nov22)

commits+karl at tug.org commits+karl at tug.org
Tue Nov 1 20:57:19 CET 2022


Revision: 64892
          http://tug.org/svn/texlive?view=revision&revision=64892
Author:   karl
Date:     2022-11-01 20:57:17 +0100 (Tue, 01 Nov 2022)
Log Message:
-----------
latex2e 2022-11 (1nov22)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/base/README.md
    trunk/Master/texmf-dist/doc/latex/base/alltt.pdf
    trunk/Master/texmf-dist/doc/latex/base/cfgguide.pdf
    trunk/Master/texmf-dist/doc/latex/base/cfgguide.tex
    trunk/Master/texmf-dist/doc/latex/base/changes.txt
    trunk/Master/texmf-dist/doc/latex/base/classes.pdf
    trunk/Master/texmf-dist/doc/latex/base/clsguide.pdf
    trunk/Master/texmf-dist/doc/latex/base/clsguide.tex
    trunk/Master/texmf-dist/doc/latex/base/cmfonts.pdf
    trunk/Master/texmf-dist/doc/latex/base/cyrguide.pdf
    trunk/Master/texmf-dist/doc/latex/base/cyrguide.tex
    trunk/Master/texmf-dist/doc/latex/base/doc-code.pdf
    trunk/Master/texmf-dist/doc/latex/base/doc.pdf
    trunk/Master/texmf-dist/doc/latex/base/docstrip.pdf
    trunk/Master/texmf-dist/doc/latex/base/encguide.pdf
    trunk/Master/texmf-dist/doc/latex/base/exscale.pdf
    trunk/Master/texmf-dist/doc/latex/base/fix-cm.pdf
    trunk/Master/texmf-dist/doc/latex/base/fntguide.pdf
    trunk/Master/texmf-dist/doc/latex/base/fntguide.tex
    trunk/Master/texmf-dist/doc/latex/base/graphpap.pdf
    trunk/Master/texmf-dist/doc/latex/base/ifthen.pdf
    trunk/Master/texmf-dist/doc/latex/base/inputenc.pdf
    trunk/Master/texmf-dist/doc/latex/base/lamport-manual.pdf
    trunk/Master/texmf-dist/doc/latex/base/latexrelease.pdf
    trunk/Master/texmf-dist/doc/latex/base/latexsym.pdf
    trunk/Master/texmf-dist/doc/latex/base/lb2.pdf
    trunk/Master/texmf-dist/doc/latex/base/letter.pdf
    trunk/Master/texmf-dist/doc/latex/base/lgc2.pdf
    trunk/Master/texmf-dist/doc/latex/base/lppl.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltcmdhooks-code.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltcmdhooks-doc.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltfilehook-code.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltfilehook-doc.pdf
    trunk/Master/texmf-dist/doc/latex/base/lthooks-code.pdf
    trunk/Master/texmf-dist/doc/latex/base/lthooks-doc.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltluatex.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltmarks-code.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltmarks-doc.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews.tex
    trunk/Master/texmf-dist/doc/latex/base/ltnews01.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews02.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews03.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews04.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews05.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews06.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews07.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews08.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews09.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews10.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews11.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews12.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews13.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews14.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews15.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews16.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews17.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews18.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews19.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews20.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews21.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews22.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews23.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews24.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews25.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews26.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews27.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews28.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews29.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews30.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews31.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews32.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews33.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews34.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews35.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews35.tex
    trunk/Master/texmf-dist/doc/latex/base/ltpara-code.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltpara-doc.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltshipout-code.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltshipout-doc.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltx3info.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltxdoc.pdf
    trunk/Master/texmf-dist/doc/latex/base/makeindx.pdf
    trunk/Master/texmf-dist/doc/latex/base/manifest.txt
    trunk/Master/texmf-dist/doc/latex/base/modguide.pdf
    trunk/Master/texmf-dist/doc/latex/base/modguide.tex
    trunk/Master/texmf-dist/doc/latex/base/nfssfont.pdf
    trunk/Master/texmf-dist/doc/latex/base/proc.pdf
    trunk/Master/texmf-dist/doc/latex/base/slides.pdf
    trunk/Master/texmf-dist/doc/latex/base/slifonts.pdf
    trunk/Master/texmf-dist/doc/latex/base/source2e.pdf
    trunk/Master/texmf-dist/doc/latex/base/syntonly.pdf
    trunk/Master/texmf-dist/doc/latex/base/tlc2.pdf
    trunk/Master/texmf-dist/doc/latex/base/tulm.pdf
    trunk/Master/texmf-dist/doc/latex/base/usrguide.pdf
    trunk/Master/texmf-dist/doc/latex/base/usrguide.tex
    trunk/Master/texmf-dist/doc/latex/base/utf8ienc.pdf
    trunk/Master/texmf-dist/doc/latex/base/webcomp.pdf
    trunk/Master/texmf-dist/doc/latex/firstaid/changes.txt
    trunk/Master/texmf-dist/doc/latex/firstaid/latex2e-first-aid-for-external-files.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/README.md
    trunk/Master/texmf-dist/doc/latex/graphics/changes.txt
    trunk/Master/texmf-dist/doc/latex/graphics/color.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/drivers.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/epsfig.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/graphics.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/graphicx.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/grfguide.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/keyval.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/lscape.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/mathcolor.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/rotating.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/rotex.pdf
    trunk/Master/texmf-dist/doc/latex/graphics/trig.pdf
    trunk/Master/texmf-dist/doc/latex/latex-lab/README.md
    trunk/Master/texmf-dist/doc/latex/latex-lab/changes.txt
    trunk/Master/texmf-dist/doc/latex/latex-lab/documentmetadata-support-code.pdf
    trunk/Master/texmf-dist/doc/latex/latex-lab/documentmetadata-support-doc.pdf
    trunk/Master/texmf-dist/doc/latex/latex-lab/latex-lab-footnotes.pdf
    trunk/Master/texmf-dist/doc/latex/latex-lab/latex-lab-new-or.pdf
    trunk/Master/texmf-dist/doc/latex/latex-lab/latex-lab-testphase.pdf
    trunk/Master/texmf-dist/doc/latex/tools/README.md
    trunk/Master/texmf-dist/doc/latex/tools/afterpage.pdf
    trunk/Master/texmf-dist/doc/latex/tools/array.pdf
    trunk/Master/texmf-dist/doc/latex/tools/bm.pdf
    trunk/Master/texmf-dist/doc/latex/tools/calc.pdf
    trunk/Master/texmf-dist/doc/latex/tools/changes.txt
    trunk/Master/texmf-dist/doc/latex/tools/dcolumn.pdf
    trunk/Master/texmf-dist/doc/latex/tools/delarray.pdf
    trunk/Master/texmf-dist/doc/latex/tools/enumerate.pdf
    trunk/Master/texmf-dist/doc/latex/tools/fileerr.pdf
    trunk/Master/texmf-dist/doc/latex/tools/fontsmpl.pdf
    trunk/Master/texmf-dist/doc/latex/tools/ftnright.pdf
    trunk/Master/texmf-dist/doc/latex/tools/hhline.pdf
    trunk/Master/texmf-dist/doc/latex/tools/indentfirst.pdf
    trunk/Master/texmf-dist/doc/latex/tools/layout.pdf
    trunk/Master/texmf-dist/doc/latex/tools/longtable.pdf
    trunk/Master/texmf-dist/doc/latex/tools/multicol.pdf
    trunk/Master/texmf-dist/doc/latex/tools/rawfonts.pdf
    trunk/Master/texmf-dist/doc/latex/tools/shellesc.pdf
    trunk/Master/texmf-dist/doc/latex/tools/showkeys.pdf
    trunk/Master/texmf-dist/doc/latex/tools/somedefs.pdf
    trunk/Master/texmf-dist/doc/latex/tools/tabularx.pdf
    trunk/Master/texmf-dist/doc/latex/tools/theorem.pdf
    trunk/Master/texmf-dist/doc/latex/tools/tools-overview.pdf
    trunk/Master/texmf-dist/doc/latex/tools/trace.pdf
    trunk/Master/texmf-dist/doc/latex/tools/varioref.pdf
    trunk/Master/texmf-dist/doc/latex/tools/verbatim.pdf
    trunk/Master/texmf-dist/doc/latex/tools/xr.pdf
    trunk/Master/texmf-dist/doc/latex/tools/xspace.pdf
    trunk/Master/texmf-dist/source/latex/base/classes.dtx
    trunk/Master/texmf-dist/source/latex/base/cmfonts.fdd
    trunk/Master/texmf-dist/source/latex/base/doc.dtx
    trunk/Master/texmf-dist/source/latex/base/docstrip.dtx
    trunk/Master/texmf-dist/source/latex/base/ltboxes.dtx
    trunk/Master/texmf-dist/source/latex/base/ltclass.dtx
    trunk/Master/texmf-dist/source/latex/base/ltcmd.dtx
    trunk/Master/texmf-dist/source/latex/base/ltdefns.dtx
    trunk/Master/texmf-dist/source/latex/base/ltfilehook.dtx
    trunk/Master/texmf-dist/source/latex/base/ltfinal.dtx
    trunk/Master/texmf-dist/source/latex/base/ltfssdcl.dtx
    trunk/Master/texmf-dist/source/latex/base/ltkeys.dtx
    trunk/Master/texmf-dist/source/latex/base/ltluatex.dtx
    trunk/Master/texmf-dist/source/latex/base/ltmath.dtx
    trunk/Master/texmf-dist/source/latex/base/ltoutput.dtx
    trunk/Master/texmf-dist/source/latex/base/ltshipout.dtx
    trunk/Master/texmf-dist/source/latex/base/lttextcomp.dtx
    trunk/Master/texmf-dist/source/latex/base/ltvers.dtx
    trunk/Master/texmf-dist/source/latex/base/utf8ienc.dtx
    trunk/Master/texmf-dist/source/latex/firstaid/latex2e-first-aid-for-external-files.dtx
    trunk/Master/texmf-dist/source/latex/graphics/mathcolor.dtx
    trunk/Master/texmf-dist/source/latex/latex-lab/latex-lab-footnotes.dtx
    trunk/Master/texmf-dist/source/latex/tools/array.dtx
    trunk/Master/texmf-dist/source/latex/tools/verbatim.dtx
    trunk/Master/texmf-dist/tex/latex/base/article.cls
    trunk/Master/texmf-dist/tex/latex/base/atbegshi-ltx.sty
    trunk/Master/texmf-dist/tex/latex/base/atveryend-ltx.sty
    trunk/Master/texmf-dist/tex/latex/base/bk10.clo
    trunk/Master/texmf-dist/tex/latex/base/bk11.clo
    trunk/Master/texmf-dist/tex/latex/base/bk12.clo
    trunk/Master/texmf-dist/tex/latex/base/book.cls
    trunk/Master/texmf-dist/tex/latex/base/doc.sty
    trunk/Master/texmf-dist/tex/latex/base/docstrip.tex
    trunk/Master/texmf-dist/tex/latex/base/latex.ltx
    trunk/Master/texmf-dist/tex/latex/base/latexrelease.sty
    trunk/Master/texmf-dist/tex/latex/base/ltluatex.lua
    trunk/Master/texmf-dist/tex/latex/base/ltluatex.tex
    trunk/Master/texmf-dist/tex/latex/base/omlcmm.fd
    trunk/Master/texmf-dist/tex/latex/base/omlcmr.fd
    trunk/Master/texmf-dist/tex/latex/base/omscmr.fd
    trunk/Master/texmf-dist/tex/latex/base/omscmsy.fd
    trunk/Master/texmf-dist/tex/latex/base/omxcmex.fd
    trunk/Master/texmf-dist/tex/latex/base/ot1cmdh.fd
    trunk/Master/texmf-dist/tex/latex/base/ot1cmfib.fd
    trunk/Master/texmf-dist/tex/latex/base/ot1cmfr.fd
    trunk/Master/texmf-dist/tex/latex/base/ot1cmr.fd
    trunk/Master/texmf-dist/tex/latex/base/ot1cmss.fd
    trunk/Master/texmf-dist/tex/latex/base/ot1cmtt.fd
    trunk/Master/texmf-dist/tex/latex/base/ot1cmvtt.fd
    trunk/Master/texmf-dist/tex/latex/base/report.cls
    trunk/Master/texmf-dist/tex/latex/base/shortvrb.sty
    trunk/Master/texmf-dist/tex/latex/base/size10.clo
    trunk/Master/texmf-dist/tex/latex/base/size11.clo
    trunk/Master/texmf-dist/tex/latex/base/size12.clo
    trunk/Master/texmf-dist/tex/latex/base/structuredlog.sty
    trunk/Master/texmf-dist/tex/latex/base/t1cmdh.fd
    trunk/Master/texmf-dist/tex/latex/base/t1cmfib.fd
    trunk/Master/texmf-dist/tex/latex/base/t1cmfr.fd
    trunk/Master/texmf-dist/tex/latex/base/t1cmr.fd
    trunk/Master/texmf-dist/tex/latex/base/t1cmss.fd
    trunk/Master/texmf-dist/tex/latex/base/t1cmtt.fd
    trunk/Master/texmf-dist/tex/latex/base/t1cmvtt.fd
    trunk/Master/texmf-dist/tex/latex/base/ts1cmr.fd
    trunk/Master/texmf-dist/tex/latex/base/ts1cmss.fd
    trunk/Master/texmf-dist/tex/latex/base/ts1cmtt.fd
    trunk/Master/texmf-dist/tex/latex/base/ts1cmvtt.fd
    trunk/Master/texmf-dist/tex/latex/base/ucmr.fd
    trunk/Master/texmf-dist/tex/latex/base/ucmss.fd
    trunk/Master/texmf-dist/tex/latex/base/ucmtt.fd
    trunk/Master/texmf-dist/tex/latex/firstaid/latex2e-first-aid-for-external-files.ltx
    trunk/Master/texmf-dist/tex/latex/graphics/mathcolor.ltx
    trunk/Master/texmf-dist/tex/latex/latex-lab/latex-lab-footnotes.ltx
    trunk/Master/texmf-dist/tex/latex/tools/array.sty
    trunk/Master/texmf-dist/tex/latex/tools/verbatim.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/base/ltnews36.pdf
    trunk/Master/texmf-dist/doc/latex/base/ltnews36.tex
    trunk/Master/texmf-dist/doc/latex/base/usrguide-historic.pdf
    trunk/Master/texmf-dist/doc/latex/base/usrguide-historic.tex

Removed Paths:
-------------
    trunk/Master/texmf-dist/doc/latex/base/usrguide3.pdf
    trunk/Master/texmf-dist/doc/latex/base/usrguide3.tex

Modified: trunk/Master/texmf-dist/doc/latex/base/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/README.md	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/base/README.md	2022-11-01 19:57:17 UTC (rev 64892)
@@ -1,7 +1,7 @@
 The LaTeX kernel
 ================
 
-Release 2022-06-01 patch level 5
+Release 2022-11-01
 
 Overview
 --------
@@ -9,7 +9,7 @@
 This bundle provides the core LaTeX kernel. In addition to this bundle,
 a minimal LaTeX system also needs the files contained in the
 
-- LaTeX team documentation (`doc`)
+
 - L3 programming layer (`l3kernel`)
 - L3 backend interfaces (`l3backend`)
 - L3 unicode support (`unicode-data`)
@@ -55,18 +55,12 @@
 
 - `ltx3info.tex` gives you some historical information about the LaTeX3
    project
-- `manual.err` lists errata in _LaTeX: A Document Preparation System_ (Lamport)
+- `lamport-manual.err` lists errata in _LaTeX: A Document Preparation System_ (Lamport)
 - `tlc2.err` lists errata in _The LaTeX Companion_ (Mittelbach et al.)
 
 The files `ltnews*.tex` (part of the `doc` bundle) contain the LaTeX
 newsletters, the highest number being the most recent.
 
-For historical reasons, the base distribution and the core documentation
-are bundled separately. Documentation is found in the `doc` bundle. In an
-installed TeX system, `base` and `doc` should be placed within the same
-location; the distinction is therefore primarily of importance when looking
-at the development code.
-
 Installation
 ------------
 
@@ -80,10 +74,9 @@
 ------------
 
 The LaTeX kernel requires the e-TeX extensions to TeX, which were finalised
-in the late 1990s and are available in modern TeX-derived engines. Some new
-features require `\ifincsname`, which is currently available in release
-versions of pdfTeX, XeTeX and LuaTeX, and is being introduced shortly in
-e-pTeX and e-upTeX.
+in the late 1990s and are available in modern TeX-derived engines. It also
+requires a set of common post-e-TeX extensions, generally known as the
+pdfTeX additions. These are available in all modern TeX engines.
 
 License
 -------

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

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

Modified: trunk/Master/texmf-dist/doc/latex/base/cfgguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/cfgguide.tex	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/base/cfgguide.tex	2022-11-01 19:57:17 UTC (rev 64892)
@@ -40,7 +40,12 @@
 \title{Configuration options for \LaTeXe}
 
 \author{\copyright~Copyright 1998, 2001, 2003 \LaTeX\ Project Team.\\
-   All rights reserved.}
+   All rights reserved.%
+   \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{cfgguide.tex} for full details.}%
+}
 
 \date{14 February 2003}
 

Modified: trunk/Master/texmf-dist/doc/latex/base/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/changes.txt	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/base/changes.txt	2022-11-01 19:57:17 UTC (rev 64892)
@@ -8,9 +8,131 @@
 
 ================================================================================
 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}):
+	Drop any surplus 'm' in series argument of \DeclareSymbolFont and
+	\SetSymbolFont (gh/918)
+
+2022-09-17  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltfssdcl.dtx:
+	New logic for freezing math versions to avoid issues with \mathchoice (gh/921)
+
+2022-09-07  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltboxes.dtx (section{\LaTeX\ Box commands}):
+	Check for nested minipages and warn if the outer one contains footnotes (gh/168)
+
+2022-09-03  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltmath.dtx (subsubsection{The UNSORTED Rest}):
+	Guard \smash against reboxing (gh/517)
+
+2022-09-03  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* docstrip.dtx (subsection{The handling of options}):
+	Complete the handling of @@-modules from l3docstrip.dtx (gh/337)
+	for +/- lines it was not done (gh/903)
+
+2022-08-21  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltkeys.dtx (subsection{Option usage scope}):
+	Correct error message text for load-only keys.
+
+2022-08-18  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+
+	* ltfilehook.dtx (subsection{Preventing a package from loading}):
+	Inhibit checking the loaded version when package is load-disabled,
+	and write to the .log (gh/888).
+
+2022-08-13  Marcel Krüger  <Marcel.Krueger at latex-project.org>
+
+	* ltluatex.dtx:
+	Unregister mlist_to_hlist callback when no related callbacks are registered
+
+2022-08-10  Joseph Wright <Joseph.Wright at latex-project.org>
+
+	* ltcmd.dtx:
+	Add support for keyval detection using "={...}" syntax
+
+2022-08-07  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* lttextcomp.dtx: Make \DeclareEncodingSubset act globally so that
+	it can be used in fd files (gh/905)
+
+2022-07-23  Joseph Wright <Joseph.Wright at latex-project.org>
+
+	* ltkeys.dtx: Output 'friendly' package names in messages
+
+2022-07-10  David Carlisle  <David.Carlisle at latex-project.org>
+
+	* cmfonts.fdd: avoid EC sans serif fonts at small design sizes.
+	The medium weight is bolder and wider than the bold extended.
+	Scale the 8pt font for sizes 5,6,7. gh/879
+
+2022-06-23  Joseph Wright <Joseph.Wright at latex-project.org>
+
+	* ltoutput.dtx
+	Add registers \stockheight and \stockwidth
+
+2022-06-22  David Carlisle  <David.Carlisle at latex-project.org>
+
+	* ltkeys.dtx:
+	add .ifnot property (.legacy_if_set_inverse:n)
+
+	* doc.dtx
+	recast Package Option declarations using \DeclareKeys
+ 
+2022-06-10  Ulrike Fischer <Ulrike.Fischer at latex-project.org>
+
+	* cmfonts.fdd
+	Add font definitions for slanted small caps (gh/782)
+
+2022-06-10  Ulrike Fischer <Ulrike.Fischer at latex-project.org>
+
+	* cmfonts.fdd
+	Add font definitions for slanted small caps (gh/782)
+
+#########################
 # 2022-06-01 PL5 Release
 #########################
 
@@ -38,7 +160,7 @@
 
 2022-06-30  David Carlisle  <David.Carlisle at latex-project.org>
 
-	* ltfinal.dtx: update MakeUppercase and \MakeLowercase fo gh/881
+	* ltfinal.dtx: update MakeUppercase and \MakeLowercase for gh/881
 	\protectd at edef no longer needed with latest l3 code.
 	added \AddToNoCaseChangeList
 
@@ -101,7 +223,7 @@
 2022-06-02  David Carlisle  <David.Carlisle at latex-project.org>
 
 	* ltfinal.dtx: add \NoCaseChange (previously available in the
-          textcase package)
+	textcase package)
 
 2022-06-01  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -143,7 +265,7 @@
 
 2022-05-08  Marcel Krüger  <Marcel.Krueger at latex-project.org>
 
-  * utf8ienc.dtx:
+	* utf8ienc.dtx:
 	Declare Unicode codepoints U+3008 and U+3009 to be equivalent
 	to their canonical equivalent codepoints 2329/232A (corresponding
 	to \textlangle/\textrangle)
@@ -233,7 +355,7 @@
 
 2022-02-21  Joseph Wright  <Joseph.Wright at latex-project.org>
 
-        * ltkeys.dtx:
+	* ltkeys.dtx:
 	More efficient module expansion
 
 2022-02-19  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
@@ -249,15 +371,15 @@
 
 2022-02-16  Joseph Wright  <Joseph.Wright at latex-project.org>
 
-        * ltkeys.dtx:
+	* ltkeys.dtx:
 	Allow for active characters in module argument
 	\DeclareUnknownKeyHandler better than with the "s"
 
 2022-02-15  Joseph Wright  <Joseph.Wright at latex-project.org>
 
-        * ltkeys.dtx:
-        Expand optional module argument in design-level commands
-        Add \DeclareUnknownKeysHandler
+	* ltkeys.dtx:
+	Expand optional module argument in design-level commands
+	Add \DeclareUnknownKeysHandler
 
 2022-02-07  Joseph Wright  <Joseph.Wright at latex-project.org>
 
@@ -274,7 +396,7 @@
 
 	* ltplain.dtx (section{Plain \TeX}):
 	Alter \obeyspaces and \obeylines to use a redirection for special
-	use cases (gh/367)}
+	use cases (gh/367)
 
 2022-01-20  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -284,7 +406,7 @@
 2022-01-15  Joseph Wright  <Joseph.Wright-project.org>
 
 	* ltkeys.dtx:
-        Clear option data in \AtEndOfPackage hook
+	Clear option data in \AtEndOfPackage hook
 
 2022-01-06  Joseph Wright  <Joseph.Wright-project.org>
 
@@ -367,12 +489,12 @@
 
 2021-11-30 Joseph Wright <joseph.wright at latex-project.org>
 
-  * ltclasses.dtx
+	* ltclasses.dtx
 	New option handling routine using ltkeys
 
 2021-11-26 Joseph Wright <joseph.wright at latex-project.org>
 
-  * ltkeys.dtx
+	* ltkeys.dtx
 	New file to integrate keyval option processing into the kernel
 
 2021-11-17  Marcel Krüger  <Marcel.Krueger at latex-project.org>
@@ -397,7 +519,7 @@
 	* doc.dtx: Replaced doc.dtx with V3 version.
 	The old doc can be reactivated with \usepackage{doc}[=v2].
 	Hyperref usage (on by default) can be turned off with
-        \usepackage[hyperref=false]{doc}.
+	\usepackage[hyperref=false]{doc}.
 	New options etc are documented: use texdoc doc
 	(code documentation only partly done).
 
@@ -413,9 +535,9 @@
 
 2021-12-02 Joseph Wright <Joseph.Wright at latex-project.org>
 
-  * ltcmd.dtx
-  Insert correct default values for optional arguments into the end
-  of environments
+	* ltcmd.dtx
+	Insert correct default values for optional arguments into the end
+	of environments
 
 #########################
 # 2021-11-15 Release
@@ -519,11 +641,11 @@
 	Use \msg_... instead of \__kernel_msg... commands for normalized
 	error and warning commands.
 
-  * ltfilehooks.dtx, lthooks.dtx, ltpara.dtx:
-  Internal changes to message names
+	* ltfilehook.dtx, lthooks.dtx, ltpara.dtx:
+	Internal changes to message names
 
 	* ltcmd.dtx:
-  Check for end-of-enviroment commands
+	Check for end-of-enviroment commands
 
 2021-08-25  Phelype Oleinik  <phelype.oleinik at latex-project.org>
 
@@ -815,7 +937,7 @@
 
 	* ltplain.dtx (section{Plain \TeX}):
 	Allocate \@inputcheck and \@unused early
-        so that they are before expl3 allocates more streams.
+	so that they are before expl3 allocates more streams.
 	In the past this was done in ltfiles  (gh/538).
 
 2021-03-18  Phelype Oleinik  <phelype.oleinik at latex-project.org>
@@ -948,7 +1070,7 @@
 2021-01-31  David Carlisle  <David.Carlisle at latex-project.org>
 
 	* ltfilehook.dtx: set \protect to \string to avoid bad
-          expansion and possible non termination. github/481
+	expansion and possible non termination. github/481
 
 2021-01-27  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -1216,13 +1338,13 @@
 
 	* ltxdoc.dtx (section{DocInclude}):
 	Quotes around the aux file name removed,
-        they are not needed and upset BibTeX (gh/400)
+	they are not needed and upset BibTeX (gh/400)
 
 2020-10-04  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* ltfiles.dtx (section{File Handling}):
 	Quotes around the aux file name removed,
-        they are not needed and upset BibTeX (gh/400)
+	they are not needed and upset BibTeX (gh/400)
 
 2020-10-04  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -1243,7 +1365,7 @@
 	* ltfssini.dtx (section{Custom series settings for main document families}):
 	\bfdefault at previous was called \bfseries at previous by mistake
 	\mddefault at previous was called \mdseries at previous by mistake
-        (gh/395)
+	(gh/395)
 
 2020-09-26  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -1693,7 +1815,7 @@
 	* ltfssini.dtx:
 	Added some debugging code, but not extracted at the moment.
 	Make the \ifx selection  in \bfseries outside
-        of \fontseries argument so that it is not done several times.
+	of \fontseries argument so that it is not done several times.
 	When \fontseriesforce is used do not auto-update the series if the
 	family changes (gh/277)
 	Recognize current family if it is not a ``meta'' family and
@@ -1728,8 +1850,8 @@
 
 2020-03-07  Marcel Krüger    <Marcel.Krueger at latex-project.org>
 
-  * ltluatex.dtx: Fix remove_from_callback for mlist_to_hlist
-  and other engine callbacks hidden by user-defined ones
+	* ltluatex.dtx: Fix remove_from_callback for mlist_to_hlist
+	and other engine callbacks hidden by user-defined ones
 
 #########################
 # 2020-02-02 PL 1 Release
@@ -1798,11 +1920,11 @@
 2020-01-05  David Carlisle  <David.Carlisle at latex-project.org>
 
 	* base/ltclass.dtx: Support more write streams for
-          filecontents in LuaTeX (gh/238)
+	filecontents in LuaTeX (gh/238)
 
 
 2020-01-05 Marcel Fabian Krüger <Marcel at latex-project.org>
-        * base/ltluatex.dtx: New reverselist callback type.
+	* base/ltluatex.dtx: New reverselist callback type.
 
 
 2019-12-24  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
@@ -1884,13 +2006,13 @@
 
 2019-11-14 Joseph Wright <joseph.wright at morningstar2.co.uk>
 
-    * ltfinal.dtx: Add loader for ltexpl
-    * ltexpl.dtx: New file for pre-loading expl3
+	* ltfinal.dtx: Add loader for ltexpl
+	* ltexpl.dtx: New file for pre-loading expl3
 
 2019-11-11  David Carlisle  <David.Carlisle at latex-project.org>
 
 	* ltfiles.dtx: use \quote at name again for \@filef at und in
-          \@iffileonpath
+	\@iffileonpath
 
 2019-11-02  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -1918,7 +2040,7 @@
 2019-11-09  David Carlisle  <David.Carlisle at latex-project.org>
 
 	* ltfiles.dtx: More filename normalisation: expand before
-          removing quotes.
+	removing quotes.
 
 #########################
 # 2019-10-01 PL 3 Release
@@ -1936,7 +2058,7 @@
 2019-11-09  David Carlisle  <David.Carlisle at latex-project.org>
 
 	* ltfiles.dtx: More filename normalisation: expand before
-          removing quotes.
+	removing quotes.
 
 #########################
 # 2019-10-01 PL 2 Release
@@ -2148,7 +2270,7 @@
 
 2018-11-18 Enrico Gregorio <Enrico.Gregorio at latex-project.org>
 
-        * ltoutenc.dtx
+	* ltoutenc.dtx
 	Added \Hwithstroke and \hwithstroke
 
 2018-11-09  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
@@ -2250,7 +2372,7 @@
 
 	* ltfinal.dtx: Make \UTFviii at undefined@err and \UTFviii at invalid@err
 	also safe for initial file name for invalid UTF-8 and non-UTF-8 filesystems.
-        issue #48
+	issue #48
 
 2018-05-08  David Carlisle  <David.Carlisle at latex-project.org>
 
@@ -2257,10 +2379,10 @@
 	* ltclass.dtx:
 	Update to suspicious rollback code for issue #43
 
-        Make the suspicious rollback message a warning not error.
+	Make the suspicious rollback message a warning not error.
 
 	Make the current and latest options to latexrelease set the
-        default rollback request to 0 so package rollback is disabled.
+	default rollback request to 0 so package rollback is disabled.
 
 #########################
 # 2018-04-01 PL 4 Release
@@ -2322,7 +2444,7 @@
 2018-03-30  David Carlisle  <David.Carlisle at latex-project.org>
 
 	* ltfinal.dtx: add \UseRawInputEncoding and further
-          adjustments to the input encoding setup.
+	adjustments to the input encoding setup.
 
 
 2018-03-27  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
@@ -2336,7 +2458,7 @@
 	* utf8ienc.dtx: Add \UTFviii at invalid
 
 	* inputenc.dtx: Make \inputencoding{..} do nothing if it
-          specified the current encoding.
+	specified the current encoding.
 
 	* ltfinal.dtx: Default to UTF-8 input encoding
 
@@ -2360,7 +2482,7 @@
 
 2018-02-01  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 	* doc.dtx: Only use\DocStyleParms if defined
-        (previously the test defined it but this will change in the kernel)
+	(previously the test defined it but this will change in the kernel)
 
 2018-01-08  David Carlisle  <latex-bugs at latex-project.org>
 
@@ -2373,12 +2495,12 @@
 	* ltvers.dtx: possible 2018-02-01 release
 
 	* ltdefns.dtx: new \@ifundefined definitions to avoid setting
-          csname to \relax
+	csname to \relax
 
 2017-12-17  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	 * latexrelease.dtx: Add \latexreleaseversion info
-         to \ProvidesPackage output so that different versions announce
+	to \ProvidesPackage output so that different versions announce
 	 themselves properly
 
 2017-04-20  David Carlisle  <latex-bugs at latex-project.org>
@@ -2483,7 +2605,7 @@
 2017-02-18  Joseph Wright  <latex-bugs at latex-project.org>
 
 	* ltluatex.dtx: parametrise Lua access to register
-          allocation count data
+	allocation count data
 
 2017-02-12  David Carlisle  <latex-bugs at latex-project.org>
 
@@ -2493,7 +2615,7 @@
 2017-01-28  David Carlisle  <latex-bugs at latex-project.org>
 
 	* build.lua bugs.txt, manifest.txt: drop latexbug.tex from the
-          distribution
+	distribution
 
 	* ltoutenc.dtx, utf8ienc.dtx: add \= for YyGg
 	U+0232, U+0233, U+1E20, U+1E21
@@ -2592,12 +2714,12 @@
 
 2016-10-15  Joseph Wright   <latex-bugs at latex-project.org>
 
-        * ltdirchk.dtx: Require e-TeX
+	* ltdirchk.dtx: Require e-TeX
 
 2016-10-04  David Carlisle  <latex-bugs at latex-project.org>
 
 	* ltoutput.dtx: Avoid deadcycles error building float pages
-          with negative sized floats
+	with negative sized floats
 
 2016-10-02  David Carlisle  <latex-bugs at latex-project.org>
 
@@ -2716,8 +2838,8 @@
 
 2016-01-04  Joseph Wright  <latex-bugs at latex-project.org>
 
-   * ltfinal.dtx: Drop loading XeTeX character class data,
-   adjust \newXeTeXintercharclass to allocate from 1 not 4.
+	* ltfinal.dtx: Drop loading XeTeX character class data,
+	adjust \newXeTeXintercharclass to allocate from 1 not 4.
 
 2015-12-30  David Carlisle  <latex-bugs at latex-project.org>
 
@@ -2729,8 +2851,8 @@
 
 2015-12-10  Joseph Wright  <latex-bugs at latex-project.org>
 
-   * ltfinal.dtx: Load Unicode settings via new common system
-     (generic package "unicode-data").
+	* ltfinal.dtx: Load Unicode settings via new common system
+	(generic package "unicode-data").
 
 2015-12-02  David Carlisle  <latex-bugs at latex-project.org>
 
@@ -2780,10 +2902,10 @@
 
 2015-10-02  Joseph Wright  <latex-bugs at latex-project.org>
 
-        * ltvers.dtx: PL1
+	* ltvers.dtx: PL1
 
-        * ltdirchk.dtx: Allow for full reversal of LuaTeX support
-        * ltluatex.dtx
+	* ltdirchk.dtx: Allow for full reversal of LuaTeX support
+	* ltluatex.dtx
 
 #########################
 # 2015/10/01 Release
@@ -2833,12 +2955,12 @@
 
 2015-08-06  Joseph Wright  <latex-bugs at latex-project.org>
 
-        * Store Unicode data more efficiently
+	* Store Unicode data more efficiently
 
 2015-07-30  Joseph Wright  <latex-bugs at latex-project.org>
 
 	* README.txt: Retain extension when releasing
-          (CTAN policy change)
+	(CTAN policy change)
 
 
 #########################
@@ -2864,18 +2986,18 @@
 
 	* ltfinal.dtx: set version to 2015/01/01 PL 1, and remove ltpatch.ltx system.
 
-        * ltfsscmp.dtx: use 0000/00/00 date for old version.
+	* ltfsscmp.dtx: use 0000/00/00 date for old version.
 
 2015-06-20 Joseph Wright <latex-bugs at latex-project.org>
 
-        * ltunicode.dtx: Include first token in a range in
-          catcode settings.
+	* ltunicode.dtx: Include first token in a range in
+	catcode settings.
 
 2015-06-19  David Carlisle  <latex-bugs at latex-project.org>
 
 	* ltvers.dtx: date
 
-        * ltplain.dtx: remove duplicated (old) definition of \newtoks and
+	* ltplain.dtx: remove duplicated (old) definition of \newtoks and
 	use -1 for the first upper bound on register types that need a
 	contiguous range so that the allocation is never restarted at 256.
 
@@ -2889,7 +3011,7 @@
 
 2015-05-11 Joseph Wright <joseph.wright at morningstar2.co.uk>
 
-       * ltunicode.dtx: Apply East Asian catcode settings to LuaTeX
+	* ltunicode.dtx: Apply East Asian catcode settings to LuaTeX
 
 2015-05-10    <Frank.Mittelbach at latex-project.org>
 
@@ -2955,7 +3077,7 @@
 2015-02-22    <Frank.Mittelbach at latex-project.org>
 
 	* latex209.dtx: Dropped \@no at font@optfalse in various places
-        - no longer provided by ltfsscmp.dtx.
+	- no longer provided by ltfsscmp.dtx.
 
 2015-02-22    <Frank.Mittelbach at latex-project.org>
 
@@ -3013,7 +3135,7 @@
 2015-01-14  David Carlisle  <latex-bugs at latex-project.org>
 
 	* ltspace.dtx: Modify \addpenalty so it doesn't add redundant
-          skips (+ and - the same value)
+	skips (+ and - the same value)
 
 	* fixltx2e.dtx: remove code from fixltx2e, add a stub package warning.
 
@@ -3056,7 +3178,7 @@
 	* latexversion.dtx: New option handling
 
 	* ltvers.dtx: define \IncludeInRelease and latexvesrsion date
-          docstrip guards
+	docstrip guards
 
 2015-01-03  Joseph Wright  <latex-bugs at latex-project.org>
 
@@ -3096,8 +3218,8 @@
 
 2014-11-07 Joseph Wright <latex-bugs at latex-project.org>
 
-       * Rename 00readme.txt to README (named README.txt in the development
-         repository)
+	* Rename 00readme.txt to README (named README.txt in the development
+	repository)
 
 ######################
 # 2014/05/01 Release
@@ -3141,7 +3263,7 @@
 2014-04-30    David Carlisle <latex-bugs at latex-project.org>
 
 	* inputenc.dtx: Allow (x-)ascii and utf8x aliases for utf8 in
-          xetex/luatex
+	xetex/luatex
 
 2014-04-27    <Frank.Mittelbach at latex-project.org>
 
@@ -3200,7 +3322,7 @@
 2011-02-24  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* lppl.tex: removed spurious \null from the source that generates
-           	an empty line.
+	an empty line.
 
 2010-08-17  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -3221,7 +3343,7 @@
 
 2009-10-20  Will Robertson  <will.robertson at latex-project.org>
 
-  * ltfssdcl.dtx: Improve the definition of \in@ thanks to Heiko
+	* ltfssdcl.dtx: Improve the definition of \in@ thanks to Heiko
 
 ######################
 # 2009/09/24 Release
@@ -3251,12 +3373,12 @@
 2007-10-29 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* exscale.dtx: Use box 0 within group to avoid changing this
-                       scratch register (some bug reported on ctt)
+	scratch register (some bug reported on ctt)
 
 2007-10-19 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* classes.dtx: Explain why \@mkboth is insde the heading
-        arg for \tableofcontents (pr/3285 and pr/3984)
+	arg for \tableofcontents (pr/3285 and pr/3984)
 
 2007-08-31 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -3424,7 +3546,7 @@
 2004-07-23 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* doc.dtx: environment names incorrectly sorted in
-          index (pr/3615)
+	index (pr/3615)
 
 2004-05-08 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -3472,13 +3594,13 @@
 2004-02-16 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* classes.dtx (section*{\indexname}]): Moved setting of \columnsep and
-        \columnseprule later to avoid affecting the wrong page (pr/3616)
+	\columnseprule later to avoid affecting the wrong page (pr/3616)
 
 2004-02-15 Chris Rowley <latex-bugs at latex-project.org>
 
 	* ltspace.dtx
 
-        Added better \nobreakdashes
+	Added better \nobreakdashes
 
 2004-02-13 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -3498,7 +3620,7 @@
 	* utf8ienc.dtx:   no newlines in error messages allowed
 	  (due to inputenc)
 	space in the wrong place "\count @64"
-        added commands already defined in the kernel (found by BG)
+	added commands already defined in the kernel (found by BG)
 	added test file pr/3480
 
 2004-02-04 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
@@ -3512,31 +3634,31 @@
 
 	* ltoutput.dtx
 
-        Small fix for \enlargethispage, pr/3528
+	Small fix for \enlargethispage, pr/3528
 
 2004-02-02 Chris Rowley <latex-bugs at latex-project.org>
 
 	* inputenc.dtx
 
-        Tidied up a bit more of the code
+	Tidied up a bit more of the code
 
 2004-02-02 Chris Rowley <latex-bugs at latex-project.org>
 
 	* fontdef.dtx
 
-        Many math things made robust
+	Many math things made robust
 
-        Added two `bigtriangle synonyms' for compatibility with the
-        stmaryrd symbols package
+	Added two `bigtriangle synonyms' for compatibility with the
+	stmaryrd symbols package
 
 2004-02-02 Chris Rowley <latex-bugs at latex-project.org>
 
 	* ltoutenc.dtx
 
-        Added \textbigcircle to OMS
+	Added \textbigcircle to OMS
 
-        Fixed bad bug in \DeclareTextSymbol as per Heiko
-        in pr/3563
+	Fixed bad bug in \DeclareTextSymbol as per Heiko
+	in pr/3563
 
 2004-02-02 Chris Rowley <latex-bugs at latex-project.org>
 
@@ -3590,7 +3712,7 @@
 2003-12-16 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* ltoutput.dtx: Ensure that \@elt has a defined
-        state in \@makecol (pr/3586)
+	state in \@makecol (pr/3586)
 
 2003-12-11 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -3716,9 +3838,9 @@
 	being too old (though in fact it is 30 months)
 
 	* ltoutenc.dtx: Corrected \cs{c} for T1 (pr/3442)
-          Added \cs{textbardbl} (pr/3400)
+	Added \cs{textbardbl} (pr/3400)
 	  Definition of \textexclamdown changed (pr/3368)
-          Definition of \textquestiondown changed (pr/3368)
+	Definition of \textquestiondown changed (pr/3368)
 	  Changed def for \textregistered to avoid small caps (pr/3420)
 
 2002-06-16 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
@@ -3742,9 +3864,9 @@
 
 2001-07-12 Chris Rowley <latex-bugs at latex-project.org>
 
-        * inputenc.dtx:
+	* inputenc.dtx:
 
-        Added latin9.def (from Karsten Tinnefeld)
+	Added latin9.def (from Karsten Tinnefeld)
 
 2001-07-12 Chris Rowley <latex-bugs at latex-project.org>
 
@@ -3782,20 +3904,20 @@
 
 	* ltoutenc.dtx
 
-        Added \NeedsTeXFormat{LaTeX2e}[2000/06/01] to .def
-        files, pr/3255
+	Added \NeedsTeXFormat{LaTeX2e}[2000/06/01] to .def
+	files, pr/3255
 
-        Made compatible T1 and OT1 accents (on i and \i), pr/3295
+	Made compatible T1 and OT1 accents (on i and \i), pr/3295
 
 2001-05-28 Chris Rowley <latex-bugs at latex-project.org>
 
 	* usrguide.tex
 
-        Described short-form for guillemets in T1 encoding, pr/3192
+	Described short-form for guillemets in T1 encoding, pr/3192
 
 2001-05-28 Chris Rowley <latex-bugs at latex-project.org>
 
-        * ltxguide.cls:
+	* ltxguide.cls:
 
 	Added some definitions
 
@@ -3889,9 +4011,9 @@
 
 2000-07-31 Chris Rowley <latex-bugs at latex-project.org>
 
-        * ltoutput.dtx:
+	* ltoutput.dtx:
 
-        Changed handling of space above footnotes.
+	Changed handling of space above footnotes.
 
 2000-07-29 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -3937,13 +4059,13 @@
 
 2000-06-01 Chris Rowley <latex-bugs at latex-project.org>
 
-        * ltpage.dtx:
+	* ltpage.dtx:
 
-        Changed grouping method in \markboth and \markright
-        (see also pr/3203)
+	Changed grouping method in \markboth and \markright
+	(see also pr/3203)
 
-        Less expansion by using token register in \markboth
-        and \markright
+	Less expansion by using token register in \markboth
+	and \markright
 
 2000-05-26 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -3953,14 +4075,14 @@
 
 2000-05-22 Chris Rowley <latex-bugs at latex-project.org>
 
-        * doc.dtx:
+	* doc.dtx:
 
-        Less obscure wording at start of index?  (pr/3202)
+	Less obscure wording at start of index?  (pr/3202)
 
-        * inputenc.dtx:
+	* inputenc.dtx:
 
-        Added latin2 option for textdegree    (pr/3207)
-        Updated documantaion
+	Added latin2 option for textdegree    (pr/3207)
+	Updated documantaion
 
 	* ltpage.dtx: reimplementation of \markboth and \markright to
 	avoid problem with expanion at wrong point in time in some cases
@@ -4008,7 +4130,7 @@
 2000-01-07 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* ltmiscen.dtx: Disable hyphenation in verbatim even if the font
- 	allows it.
+	allows it.
 
 1999-12-19 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -4048,7 +4170,7 @@
 1999-10-28 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* ltoutenc.dtx (subsubsection{Declaration commands}):
-        Give \accent at spacefactor a default definition to prevent horrible
+	Give \accent at spacefactor a default definition to prevent horrible
 	death in case or incorrect input (pr/3084)
 
 1999-10-26 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
@@ -4175,7 +4297,7 @@
 1999-05-09 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* cmfonts.fdd: docstrip `nowarn' guard was the wrong way around
-        for font OT1/cmr/bx/ui (pr/3036)
+	for font OT1/cmr/bx/ui (pr/3036)
 
 1999-04-04 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -4183,21 +4305,21 @@
 
 1999-04-02 Chris Rowley <latex-bugs at latex-project.org>
 
-        * inputenc.dtx
+	* inputenc.dtx
 
-        Corrected cp852 for pr/2992
+	Corrected cp852 for pr/2992
 
-        * ltboxex.dtx
+	* ltboxex.dtx
 
-        Made robust the flag in \@iiiparbox: pr/2975}
+	Made robust the flag in \@iiiparbox: pr/2975}
 
-        * ltdefns.dtx
+	* ltdefns.dtx
 
-        Fixed new version of \@yargdef: pr/3013
+	Fixed new version of \@yargdef: pr/3013
 
-        * usrguide.tex
+	* usrguide.tex
 
-        Added to documentation of uc/lc list
+	Added to documentation of uc/lc list
 
 1999-03-22 Rainer Schoepf <latex-bugs at latex-project.org>
 
@@ -4205,11 +4327,11 @@
 
 1999-03-12 Chris Rowley <latex-bugs at latex-project.org>
 
-        * clsguide.tex
+	* clsguide.tex
 
 	Added to documentation of options
 
-        * cyrguide.tex:
+	* cyrguide.tex:
 
 	Further editing
 
@@ -4231,7 +4353,7 @@
 
 1999-03-03 Chris Rowley <latex-bugs at latex-project.org>
 
-        * ltxguide.cls:
+	* ltxguide.cls:
 
 	Added some definitions
 
@@ -4247,7 +4369,7 @@
 	* handbuch.err: Added.
 
 	* install.txt: Add link to truetex.txt and vtex.txt. Remove
- 	timings for slow computers.
+	timings for slow computers.
 
 1999-02-27 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -4282,7 +4404,7 @@
 
 1999-02-10 Rainer Schoepf <latex-bugs at latex-project.org>
 
-        * letter.dtx: Reset footnote counter for every new letter (PR
+	* letter.dtx: Reset footnote counter for every new letter (PR
 	2957).
 
 1999-02-09 Chris Rowley <latex-bugs at latex-project.org>
@@ -4351,10 +4473,10 @@
 	* bugs.txt: Added description how to follow up a problem report.
 
 	* latexbugs.tex: Added description how to follow up a problem
- 	report.
+	report.
 
 	* classes.dtx: Added check of @noskipsec switch in \part for
- 	article class.
+	article class.
 
 1999-01-07 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -4367,7 +4489,7 @@
 1999-01-06 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* emtextds.txt: Added to distribution. Installation procedure for
- 	Walter Schmidt's emTeX/TDS for OS/2.
+	Walter Schmidt's emTeX/TDS for OS/2.
 
 	* ltoutenc.dtx: Minor documentation fix (PR 2939).
 
@@ -4387,24 +4509,24 @@
 1999-01-05 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* fontdef.dtx: Need special protection for character
- 	\texttt{\char62} in \cs{changes} entry, as this is the makeindex
- 	actualchar.
+	\texttt{\char62} in \cs{changes} entry, as this is the makeindex
+	actualchar.
 
 1998-12-28 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* doc.dtx: The case-changing trick in the definition of
- 	\short at macro didn't work, as the category code was changed inside
- 	the macro replacement text, not during the definition.
+	\short at macro didn't work, as the category code was changed inside
+	the macro replacement text, not during the definition.
 
 1998-12-27 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* doc.dtx (subsection{Macros for generating index entries}): Use
- 	\string, not \protect in argument of \special at index.
+	\string, not \protect in argument of \special at index.
 
 1998-12-20 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* doc.dtx (subsection{Macros for generating index entries}):
-        Correctly handle second index entry for \SpecialMainEnvIndex
+	Correctly handle second index entry for \SpecialMainEnvIndex
 	by using \special at index not \index (pr/2928)
 
 1998-12-01 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
@@ -4431,7 +4553,7 @@
 1998-09-17 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* cfgguide.tex (section Configuration files for
-                                standard packages and classes]):
+	standard packages and classes]):
 	added info about ltnews.cfg (pr/2875)
 
 	* ltoutenc.dtx: Explicitly set \spacefactor after \accent in
@@ -4446,10 +4568,10 @@
 1998-08-17 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* (Various source files): Replaced old form `commandname by
- 	\cs{commandname} in changes entries.
+	\cs{commandname} in changes entries.
 
 	* (Various source files): Replaced \cmd{\commandname} by
- 	\cs{commandname} in changes entries.
+	\cs{commandname} in changes entries.
 
 	* ltfssdcl.dtx: Corrected documentation glitch in changes entry.
 
@@ -4496,7 +4618,7 @@
 	Fixed wrong code in \t
 	Added masc/fem ords defaults
 	Swapped acutedbl and gravedbl in TS1
-        Renamed macron in TS1
+	Renamed macron in TS1
 
 	* pict2e.dtx:
 
@@ -4556,8 +4678,8 @@
 1998-05-13 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* lttab.dtx Use \setlength to set size of p-column and for
- 	argument of tabular* environment, so that the benefits of the
- 	calc package apply.
+	argument of tabular* environment, so that the benefits of the
+	calc package apply.
 
 1998-05-10 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -4636,8 +4758,8 @@
 1998-03-27 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* cmfonts.fdd: added substiution for cmss/bx/sc to produce
-        cmr/m/sc; much better would be to have the real thing ---
-        anybody cares to contribute those to the ec fonts? (pr2586)
+	cmr/m/sc; much better would be to have the real thing ---
+	anybody cares to contribute those to the ec fonts? (pr2586)
 
 1998-03-20 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -4668,7 +4790,7 @@
 1998-02-06 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* inputenc.dtx: fixed typo iso-8859-5 should have been iso-8859-9
-        (pr/2748)
+	(pr/2748)
 
 1998-01-31 Chris Rowley <latex-bugs at latex-project.org>
 
@@ -4687,8 +4809,8 @@
 	anything to the stripped file (pr/2726)
 
 	* ltclass.dtx: make \& locally safe in \ProvidesFile /2702
-        fix up pkgindoc.sty which probably hasn't worked since
-        {v1.0p}{1995/05/25}{Delete \cs{filec at ntents} after preamble}
+	fix up pkgindoc.sty which probably hasn't worked since
+	{v1.0p}{1995/05/25}{Delete \cs{filec at ntents} after preamble}
 
 1998-01-16 David Carlisle <latex-bugs at latex-project.org>
 
@@ -4695,8 +4817,8 @@
 	* ltoutenc.dtx: Fix \t for latex/2734.
 
 	* ltclass.dtx: make \& locally safe in \ProvidesFile /2702
-        fix up pkgindoc.sty which probably hasn't worked since
-        {v1.0p}{1995/05/25}{Delete \cs{filec at ntents} after preamble}
+	fix up pkgindoc.sty which probably hasn't worked since
+	{v1.0p}{1995/05/25}{Delete \cs{filec at ntents} after preamble}
 
 1998-01-16 David Carlisle <latex-bugs at latex-project.org>
 
@@ -4768,7 +4890,7 @@
 	Changed \mathdegree to \textdegree
 	\inputencoding now works only in vmode
 	Temporarily fixed \IeC
-        Merged latin1 code with ansinew/cp1252
+	Merged latin1 code with ansinew/cp1252
 	Changed `\k{}' to `\k\ '
 	Added textcomp package
 	Corrections and additions to documentation
@@ -4786,7 +4908,7 @@
 	* doc.dtx: Fix small documentation glitch.
 
 	* ltpatch.ltx: Replace reference to ,,June'' release by ,,last''
- 	release.
+	release.
 
 1997-12-17 David Carlisle <latex-bugs at latex-project.org>
 
@@ -4801,13 +4923,13 @@
 1997-12-15 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* clsguide.tex (section{Upgrading \LaTeX~2.09 classes and
- 	packages}): Added documentation for \if at compatibility switch
- 	(supplied by Barbara Beeton).
+	packages}): Added documentation for \if at compatibility switch
+	(supplied by Barbara Beeton).
 
 1997-12-11 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* usrguide.tex (subsection{\LaTeXe---The new \LaTeX~release}):
- 	Improved the sentence about formerly separate formats.
+	Improved the sentence about formerly separate formats.
 
 	* ltoutput.dtx: Documentation fixes.
 
@@ -4821,11 +4943,11 @@
 
 	* ltnews08.tex:
 
-        Revised text
+	Revised text
 
 	* ltnews.cls:
 
-        Added definition environment
+	Added definition environment
 
 1997-11-23 David Carlisle <latex-bugs at latex-project.org>
 
@@ -4883,23 +5005,23 @@
 1997-10-21 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* ltfssbas.dtx: Added \makeatletter to \nfss at catcodes (and removed
- 	it from \try at load@font at shape).
+	it from \try at load@font at shape).
 
 	* ltdefns.dtx: Change \renew at command to use \begingroup/\endgroup
- 	for grouping, to avoid generation of empty math atoms.
+	for grouping, to avoid generation of empty math atoms.
 
 1997-10-20 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* ltfinal.dtx: Removed \aa and \AA from \@uclclist as these are
- 	macros.
+	macros.
 
 	* slifonts.fdd(ullasy.fd): Removed superfluous pair of braces at
- 	end of \DeclareFontFamily command.
+	end of \DeclareFontFamily command.
 
 1997-10-17 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* ltfntcmd.dtx: Moved check for vertical mode from
- 	\DeclareTextFontCommand to \check at nocorr@.
+	\DeclareTextFontCommand to \check at nocorr@.
 
 1997-10-14 David Carlisle <latex-bugs at latex-project.org>
 
@@ -4912,7 +5034,7 @@
 	* patches.txt: --release--date--goes--here--
 
 	* Makefile: install.txt patches.txt ltpatch.ltx
- 	--release--date--goes--here--
+	--release--date--goes--here--
 
 1997-10-11 David Carlisle <latex-bugs at latex-project.org>
 
@@ -4940,13 +5062,13 @@
 1997-10-08 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* ltlogos.dtx: Simplified macro \LaTeX: use only \check at mathfonts
- 	to force loading of fonts suitable for the letter `A'.
+	to force loading of fonts suitable for the letter `A'.
 
 1997-10-06 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* ltcounts.dtx: Replaced \@Roman by a new version that is fully
- 	expandable, so that the correct sequence of letters is written to
- 	files.
+	expandable, so that the correct sequence of letters is written to
+	files.
 
 1997-09-30 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -4966,7 +5088,7 @@
 1997-09-09 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* ltdefns.dtx: Use \begingroup \endgroup instead of { ... }
-        to avoid generating math ords if used in math mode. (pr/2573)
+	to avoid generating math ords if used in math mode. (pr/2573)
 
 1997-09-08 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -4976,28 +5098,28 @@
 1997-08-19 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* inputenc.dtx(latin2.def,cp852.def): Replaced \dh and \DH by \dj
- 	and \DJ.
+	and \DJ.
 
 	* inputenc.dtx(ansinew.def): Exchanged codes for \textendash and
- 	\textemdash.
+	\textemdash.
 
 	* inputenc.dtx: Enclosed all encoding definition files by
- 	\makeatletter/\makeatother.
+	\makeatletter/\makeatother.
 
 1997-08-15 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* slides.dtx: Added initialization of \leftmargin to \@listi
- 	(obviously forgotten and never noticed before).
+	(obviously forgotten and never noticed before).
 
 1997-08-05 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* ltoutenc.dtx: Corrected order of arguments in \UseTextSymbol
- 	example (PR latex/2572).
+	example (PR latex/2572).
 
 1997-07-31 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* cfgguide.tex: Put braces around argument of \sffamily,
-        to keep latex2html happy.
+	to keep latex2html happy.
 
 1997-07-20 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -5021,7 +5143,7 @@
 	* slides.ins: Replaced slides.fdd by slifonts.fdd.
 
 	* slides.fdd: Renamed to slifonts.fdd, there is a name clash with
- 	slides.dtx when run through LaTeX.
+	slides.dtx when run through LaTeX.
 
 	* truetex.txt: New version by Richard Kinch.
 
@@ -5186,7 +5308,7 @@
 	internal/2513
 
 	* latexbug.tex: Fix save stack problem, internal/2514, and
- 	other minor improvements.
+	other minor improvements.
 
 1997-06-02 David Carlisle <latex-bugs at latex-project.org>
 
@@ -5195,10 +5317,10 @@
 1997-05-26 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* slides.fdd: Removed spaces in and around arguments to
- 	\DeclareFontShape.
+	\DeclareFontShape.
 
 	* cmfonts.fdd: Removed spaces in and around arguments to
- 	\DeclareFontShape and \EC at family.
+	\DeclareFontShape and \EC at family.
 
 1997-05-22 Rainer Schoepf <latex-bugs at latex-project.org>
 
@@ -5206,7 +5328,7 @@
 	the logo works with non-zero values of \mathsurround.
 
 	* ltfsstrc.dtx (section{Handling Options}): Replaced \\ by
- 	\MessageBreak in Option `pausing' (suggested by Donald Arseneau).
+	\MessageBreak in Option `pausing' (suggested by Donald Arseneau).
 
 1997-05-10 Chris Rowley <latex-bugs at latex-project.org>
 
@@ -5226,11 +5348,11 @@
 
 	Added latin3.def
 	Some rearrangments
-        Removed long lines
+	Removed long lines
 
 	* ltspace.dtx
 
-        Made \newline robust
+	Made \newline robust
 
 	* ltoutenc.dtx
 
@@ -5443,9 +5565,9 @@
 
 	* inputenc.dtx: resend patch from Sept 11
 
-        Added ts1enc.def (but it is not unpacked)
+	Added ts1enc.def (but it is not unpacked)
 	Changed copyright, underscore (\_) and registered
-        Added \leavevmode to compwordmark
+	Added \leavevmode to compwordmark
 	Added hex index tabs (experimental)
 
 1996-11-05 Chris Rowley <latex-bugs at latex-project.org>
@@ -5463,13 +5585,13 @@
 
 	* ltplain.dtx:
 
-        Use \hbox to in \dotfill
+	Use \hbox to in \dotfill
 
 
 1996-11-04 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* lterror.dtx (autoload version): Move \@nodocument into kernel,
- 	so that it can be \let to \relax in \begin{document}.
+	so that it can be \let to \relax in \begin{document}.
 
 1996-11-01 David Carlisle <latex-bugs at latex-project.org>
 
@@ -5503,22 +5625,22 @@
 
 	* ltoutenc.dtx
 
-        Removed defs of \aa \AA
-        Removed \@strip at args (no longer used)
-        Corrected documentation
+	Removed defs of \aa \AA
+	Removed \@strip at args (no longer used)
+	Corrected documentation
 
 	* inputenc.dtx
 
-        Added cp865.def
-        Added \textasteriskcentered
-        Removed \aa \AA as internal forms
-        Other minor additions and corrections to .def files
+	Added cp865.def
+	Added \textasteriskcentered
+	Removed \aa \AA as internal forms
+	Other minor additions and corrections to .def files
 
 	* ltplain.dtx
 
 	Removed math from \dotfill
-        Added \aa and \AA
-        Updated and corrected documention
+	Added \aa and \AA
+	Updated and corrected documention
 
 1996-10-25 Chris Rowley <latex-bugs at latex-project.org>
 
@@ -5536,7 +5658,7 @@
 
 	Added local settings of flags in
 	  \@arrayparboxrestore: dangerous!
-        Used \@setminipage in minipages
+	Used \@setminipage in minipages
 
 	* ltfloat.dtx:
 
@@ -5560,7 +5682,7 @@
 
 	* ltlists.dtx
 
-        Use \setboz\z@ to remove parindent in \@item
+	Use \setboz\z@ to remove parindent in \@item
 	Set \clubpenalty correctly in \@item
 	Do not reset \@nobreak unconditionally
 	Added documentation
@@ -5567,7 +5689,7 @@
 
 	* ltsect.dtx
 
-        Use \setboz\z@ to remove parindent in \@xsect
+	Use \setboz\z@ to remove parindent in \@xsect
 	Added documentation
 
 1996-10-23 David Carlisle <latex-bugs at latex-project.org>
@@ -5611,7 +5733,7 @@
 1996-10-11 David Carlisle <latex-bugs at latex-project.org>
 
 	* ds/docstrip.dtx: Add initex support, and
- 	auto setting of \batchfile from \jobname to the new
+	auto setting of \batchfile from \jobname to the new
 	`TDS' version from Marcin.
 
 1996-10-09 David Carlisle <latex-bugs at latex-project.org>
@@ -5671,21 +5793,21 @@
 
 	* ltspace.dtx
 
-        Added \@xobeysp linked to \nobreakspace
+	Added \@xobeysp linked to \nobreakspace
 
 1996-09-26 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* cmfonts.ins: Added guard `nowarn' to generation of OT1cmtt.fd
- 	file, to avoid annoying substitution messages if a bold typewriter
- 	font is selected (as, for example, in section headings).
+	file, to avoid annoying substitution messages if a bold typewriter
+	font is selected (as, for example, in section headings).
 
 	* newdc.ins: Added guard `nowarn' to generation of T1cmtt.fd file,
- 	to avoid annoying substitution messages if a bold typewriter font
- 	is selected (as, for example, in section headings).
+	to avoid annoying substitution messages if a bold typewriter font
+	is selected (as, for example, in section headings).
 
 	* cmfonts.fdd (subsubsection{Computer Modern Typewriter}), Added
- 	silent substitutions for T1 bold extended typewriter fonts (new
- 	version).
+	silent substitutions for T1 bold extended typewriter fonts (new
+	version).
 
 1996-09-21 Chris Rowley <latex-bugs at latex-project.org>
 
@@ -5858,8 +5980,8 @@
 
 	* clsguide.tex:
 
-        Updated for new release
-        General minor edits
+	Updated for new release
+	General minor edits
 
 1996-06-13 David Carlisle <latex-bugs at latex-project.org>
 
@@ -5900,18 +6022,18 @@
 
 	* ltnews05.tex:
 
-        Revised text
+	Revised text
 
 	* ltnews.cls:
 
-        Changed fonts for lw35 option, for logical and aesthetic
-        reasons
-        Added support for T1 encoding with lw35 option
-        Corrected grammar in footer
+	Changed fonts for lw35 option, for logical and aesthetic
+	reasons
+	Added support for T1 encoding with lw35 option
+	Corrected grammar in footer
 
 	* fntguide.tex:
 
-        Updated for new release
+	Updated for new release
 
 1996-06-06 David Carlisle <latex-bugs at latex-project.org>
 
@@ -5930,7 +6052,7 @@
 1996-06-04 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* ltmiscen.dtx: \verbatim at noligs@list now processed after
- 	\dospecials (PR 2138).
+	\dospecials (PR 2138).
 
 1996-06-03 Chris Rowley <latex-bugs at latex-project.org>
 
@@ -5959,14 +6081,14 @@
 
 1996-05-23 Chris Rowley <latex-bugs at latex-project.org>
 
-        * ltoutenc.dtx
+	* ltoutenc.dtx
 
-        Extra documentation
+	Extra documentation
 
-        * ltoutput.dtx
+	* ltoutput.dtx
 
-        Changed test for a text page full of floats
-        Tidied documentation
+	Changed test for a text page full of floats
+	Tidied documentation
 
 1996-05-23 David Carlisle <latex-bugs at latex-project.org>
 
@@ -6001,23 +6123,23 @@
 
 1996-05-17 Chris Rowley <latex-bugs at latex-project.org>
 
-        * fontdef.dtx
+	* fontdef.dtx
 
-        Removed \@@sqrt
+	Removed \@@sqrt
 
-        * slides.dtx
+	* slides.dtx
 
-        Removed \@@sqrt
+	Removed \@@sqrt
 
 1996-05-17 David Carlisle <latex-bugs at latex-project.org>
 
 	* slides.fdd: Force \hyphenchar of OT1 fonts to 45, in case
-        \defaulthyphenchar has changed.
-        Remove some spurious extra empty arguments to \DeclareFontFamily
+	\defaulthyphenchar has changed.
+	Remove some spurious extra empty arguments to \DeclareFontFamily
 
 	* cmfonts.fdd: Force \hyphenchar of OT1 fonts to 45, in case
-        \defaulthyphenchar has changed.
-        Remove some spurious extra empty arguments to \DeclareFontFamily
+	\defaulthyphenchar has changed.
+	Remove some spurious extra empty arguments to \DeclareFontFamily
 
 	* ltfiles.dtx: Add \write\m at ne{} to \nofiles so that
 	\label (and other things) don't change the vertical spacing when
@@ -6025,13 +6147,13 @@
 
 1996-05-09 Chris Rowley <latex-bugs at latex-project.org>
 
-        * ltfntcmd.dtx
+	* ltfntcmd.dtx
 
-        Made more robust to errors
+	Made more robust to errors
 
-        * slides.dtx
+	* slides.dtx
 
-        Made \include mechanism work
+	Made \include mechanism work
 
 1996-05-09 David Carlisle <latex-bugs at latex-project.org>
 
@@ -6134,7 +6256,7 @@
 	problems with combinations of \PageIndex \makeindex etc. pr/2048
 
 	* letter.dtx:
-        Made redefinition of \vspace robust. pr/2049
+	Made redefinition of \vspace robust. pr/2049
 	Nevertheless, they syntax used in the pr is considered
 	incorrect!
 
@@ -6153,7 +6275,7 @@
 1996-01-10 David Carlisle <latex-bugs at latex-project.org>
 
 	* ltfiles.dtx: latex/2024 ensure setting \input at path does not
- 	change behaviour of ##1 in \IfFileExists.
+	change behaviour of ##1 in \IfFileExists.
 
 1996-01-03 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -6191,130 +6313,130 @@
 
 1995-12-13 Chris Rowley <latex-bugs at latex-project.org>
 
-        * copypre.txt
+	* copypre.txt
 
-        New version, removing long lines
+	New version, removing long lines
 
-        * copyins.txt
+	* copyins.txt
 
-        New version, removing long lines
+	New version, removing long lines
 
-        * copyhead.txt
+	* copyhead.txt
 
-        New version, removing long lines
+	New version, removing long lines
 
-        * bugs.txt
+	* bugs.txt
 
-        Additions, updates and corrections
+	Additions, updates and corrections
 
-        * autoload.txt
+	* autoload.txt
 
-        Additions, updates and corrections
+	Additions, updates and corrections
 
-        * texpert.txt
+	* texpert.txt
 
-        Additions, updates and corrections
+	Additions, updates and corrections
 
-        * ltnews.cls
+	* ltnews.cls
 
-        Removed long lines
-        Changed capitalisation
+	Removed long lines
+	Changed capitalisation
 
-        * cmfonts.fdd
+	* cmfonts.fdd
 
-        Removed long lines
+	Removed long lines
 
-        * slides.fdd
+	* slides.fdd
 
-        Removed long lines
+	Removed long lines
 
-        * olddc.dst
+	* olddc.dst
 
-        New preambles
+	New preambles
 
-        * newdc.dst
+	* newdc.dst
 
-        New preambles
+	New preambles
 
-        * cmextra.dst
+	* cmextra.dst
 
-        New preambles
+	New preambles
 
-        * cmfonts.dst
+	* cmfonts.dst
 
-        New preambles
+	New preambles
 
-        * latexsym.dst
+	* latexsym.dst
 
-        New preambles
+	New preambles
 
-        * autoload.dst
+	* autoload.dst
 
-        New preambles
+	New preambles
 
-        * unpack2e.ins
+	* unpack2e.ins
 
-        New preambles
+	New preambles
 
-        * slides.dst
+	* slides.dst
 
-        New preambles
+	New preambles
 
-        * legal.txt
+	* legal.txt
 
-        New version
+	New version
 
-        * readme.txt
+	* readme.txt
 
-        New version
+	New version
 
-        * ltclass.dtx
+	* ltclass.dtx
 
-        Documentation added
+	Documentation added
 
-        * fontdef.dtx
+	* fontdef.dtx
 
-        Documentation added
+	Documentation added
 
-        * latex209.dst
+	* latex209.dst
 
-        Smaller batches for old emtex
+	Smaller batches for old emtex
 
-        * modguide.tex
+	* modguide.tex
 
-        Additions, updates and corrections
+	Additions, updates and corrections
 
-        * cfgguide.tex
+	* cfgguide.tex
 
-        Additions, updates and corrections
+	Additions, updates and corrections
 
-        * clsguide.tex
+	* clsguide.tex
 
-        Additions, updates and corrections
+	Additions, updates and corrections
 
-        * fntguide.tex
+	* fntguide.tex
 
-        Additions, updates and corrections
+	Additions, updates and corrections
 
-        * ltx3info.tex
+	* ltx3info.tex
 
-        Additions, updates and corrections
+	Additions, updates and corrections
 
-        * usrguide.tex
+	* usrguide.tex
 
-        Additions, updates and corrections
+	Additions, updates and corrections
 
-        * ltxguide.cls
+	* ltxguide.cls
 
-        Corrected cfg loading
+	Corrected cfg loading
 
-        * inputenc.dtx
+	* inputenc.dtx
 
-        Detailed corrections
+	Detailed corrections
 
-        * ltdefns.dtx
+	* ltdefns.dtx
 
-        Added documentation
+	Added documentation
 
 ######################
 # 1995/12/01 Release
@@ -6340,7 +6462,7 @@
 
 1995-12-08 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * latex209.dtx: Switched off \@inmathwarn.
+	* latex209.dtx: Switched off \@inmathwarn.
 
 1995-12-07 David Carlisle <latex-bugs at latex-project.org>
 
@@ -6360,9 +6482,9 @@
 
 1995-12-06 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * encguide.tex: Added examples of new \text* commands.
+	* encguide.tex: Added examples of new \text* commands.
 
-        * usrguide.tex: Added documentation for new \text* commands.
+	* usrguide.tex: Added documentation for new \text* commands.
 
 1995-12-05 David Carlisle <latex-bugs at latex-project.org>
 
@@ -6378,7 +6500,7 @@
 
 1995-12-05 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltoutenc.dtx: Changed text of \TextSymbolUnavailable.
+	* ltoutenc.dtx: Changed text of \TextSymbolUnavailable.
 
 1995-12-04 David Carlisle <latex-bugs at latex-project.org>
 
@@ -6394,15 +6516,15 @@
 
 1995-12-04 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * inputenc.dst: Added cp437de.def.
+	* inputenc.dst: Added cp437de.def.
 
-        * inputenc.dtx: Added \@tabacckludge commands to the Next encoding.
-        Replaced ~ by \nobreakspace.
-        Added a `test version' to the \ProvidesFile.
-        Made <pounds> and <uumlaut> text char in cp437.
-        Made <fraction> a math char in Next.
-        Made <cdot> and <bullet> text chars in all encodings.
-        Added cp437de (cp437 but with ss rather than beta).
+	* inputenc.dtx: Added \@tabacckludge commands to the Next encoding.
+	Replaced ~ by \nobreakspace.
+	Added a `test version' to the \ProvidesFile.
+	Made <pounds> and <uumlaut> text char in cp437.
+	Made <fraction> a math char in Next.
+	Made <cdot> and <bullet> text chars in all encodings.
+	Added cp437de (cp437 but with ss rather than beta).
 
 1995-12-01 David Carlisle <latex-bugs at latex-project.org>
 
@@ -6412,10 +6534,10 @@
 
 1995-12-01 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * inputenc.dtx: Removed extraneous {} from the <superior> glyphs.
+	* inputenc.dtx: Removed extraneous {} from the <superior> glyphs.
 
-        * ltoutenc.dtx: Made \SS a default command rather than making the
-        OT1 definition the default.
+	* ltoutenc.dtx: Made \SS a default command rather than making the
+	OT1 definition the default.
 
 1995-11-30 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -6446,12 +6568,12 @@
 
 1995-11-29 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltoutenc.dtx: Added \textless, \textgreater, et al.
+	* ltoutenc.dtx: Added \textless, \textgreater, et al.
 
-        * inputenc.dtx: Replaced \textsterling with \pounds.
-          Added default error-message definitions for \textyen et al.
-          Added a \NeedsTeXFormat line.
-          Tidied up the Next encoding.
+	* inputenc.dtx: Replaced \textsterling with \pounds.
+	Added default error-message definitions for \textyen et al.
+	Added a \NeedsTeXFormat line.
+	Tidied up the Next encoding.
 
 1995-11-28 David Carlisle <latex-bugs at latex-project.org>
 
@@ -6489,8 +6611,8 @@
 
 1995-11-28 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltoutenc.dtx: Added test for math mode to text commands.
-        Renamed \@changed at x@err to \TextSymbolUnavailable.
+	* ltoutenc.dtx: Added test for math mode to text commands.
+	Renamed \@changed at x@err to \TextSymbolUnavailable.
 
 1995-11-27 David Carlisle <latex-bugs at latex-project.org>
 
@@ -6500,9 +6622,9 @@
 
 1995-11-24 Chris Rowley <latex-bugs at latex-project.org>
 
-        * ltspace.dtx
+	* ltspace.dtx
 
-        \nobreakspace added
+	\nobreakspace added
 
 1995-11-22 David Carlisle <latex-bugs at latex-project.org>
 
@@ -6519,7 +6641,7 @@
 	* ltnews04.tex: New TUG Address, \LoadClassWithOptions
 
 	* doc.dtx: Make \MakeShortVerb use an \PackageInfo rather
-          than \tyepout. internal/1938
+	than \tyepout. internal/1938
 
 1995-11-18 David Carlisle <latex-bugs at latex-project.org>
 
@@ -6530,21 +6652,21 @@
 1995-11-17 David Carlisle <latex-bugs at latex-project.org>
 
 	* docstrip.dtx: Merge in Marcin's new code restoring
-          \inFileName functionality.
-          Remove generation date/version number from generated files
-          Add \AddGenerationDate batchfile command to put them back.
-          Force whole file through ispell!!
+	\inFileName functionality.
+	Remove generation date/version number from generated files
+	Add \AddGenerationDate batchfile command to put them back.
+	Force whole file through ispell!!
 
 	* ltoutenc.dtx: Use \@wrong at font@char in \UseTextSymbol. /1676
 
 	* ltfssbas.dtx: Make missing fd file \typeout a Font Info
-          and add \@wrong at font@char for use in \UseTextSymbol. /1676
-          Clean up many \changes entries.
+	and add \@wrong at font@char for use in \UseTextSymbol. /1676
+	Clean up many \changes entries.
 
 1995-11-15 David Carlisle <latex-bugs at latex-project.org>
 
 	* source2e.tex: Exchange order of ltdefns and ltalloc
-         (Matches code change of 24th May.)
+	(Matches code change of 24th May.)
 	 Modify \changes def to match doc.sty 1.9u
 
 1995-11-14 David Carlisle <latex-bugs at latex-project.org>
@@ -6553,9 +6675,9 @@
 	  dc fonts are installed.
 
 	* ltclass.dtx: Add \LoadClassWithOptions for latex/1556
-        Add \RequirePackageWithOptions to match.
-        Stop \@unprocessedoptions complaining about empty options
-        noticed whilest debugging the above change...
+	Add \RequirePackageWithOptions to match.
+	Stop \@unprocessedoptions complaining about empty options
+	noticed whilest debugging the above change...
 
 	* inputenc.dtx: remove rogue \endinput. Wrap long lines.
 
@@ -6578,20 +6700,20 @@
 1995-11-07 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* ltoutenc.dtx (subsection{Definitions for the OT1 encoding}):
- 	Changed \char32 to \@xxxii (two tokens less). Replaced octal
- 	number 27 by decimal number 23 to protect against the quote
- 	character being active. Added \leavevmode at start of \c,
- 	otherwise the output routine might be invoked within the macro
- 	(suggested by Donald Arseneau). Replaced some 0's by \z@
- 	(faster).
+	Changed \char32 to \@xxxii (two tokens less). Replaced octal
+	number 27 by decimal number 23 to protect against the quote
+	character being active. Added \leavevmode at start of \c,
+	otherwise the output routine might be invoked within the macro
+	(suggested by Donald Arseneau). Replaced some 0's by \z@
+	(faster).
 
 	* ltlists.dtx (\@doendpe): Enclosed \setbox0 assignment by a
- 	group so that it leaves the contents of box $0$ intact.
- 	Discovered by Donald Arseneau.
+	group so that it leaves the contents of box $0$ intact.
+	Discovered by Donald Arseneau.
 
 	* cmfonts.fdd: Use decimal rather than octal character
- 	specification for \hyphenchar and \skewchar so that there is
- 	no problem with an active quote character.
+	specification for \hyphenchar and \skewchar so that there is
+	no problem with an active quote character.
 
 1995-11-03 Rainer Schoepf <latex-bugs at latex-project.org>
 
@@ -6627,14 +6749,14 @@
 
 1995-11-02 Chris Rowley <latex-bugs at latex-project.org>
 
-        * classes.dtx
+	* classes.dtx
 
-        Made \footnote always work in frontmatter
+	Made \footnote always work in frontmatter
 
 1995-11-02 David Carlisle <latex-bugs at latex-project.org>
 
 	* ltfssbas.dtx: Remove spurious space from NFSS font warning
-          latex/1676
+	latex/1676
 
 	* ltxdoc.dtx: Add silent font substitutions.
 
@@ -6641,17 +6763,17 @@
 1995-11-02 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* latex209.dtx: Added code for fleqn.sty, leqno.sty,
- 	openbib.sty.
+	openbib.sty.
 
 	* latex209.dst: Added generation of files fleqn.sty, leqno.sty,
- 	openbib.sty for compatibility mode.
+	openbib.sty for compatibility mode.
 
 	* inputenc.dtx: Changed internal name \a to \@tabacckludge to
- 	protect against redefinition by malicicous users. Wrapped long
- 	lines.
+	protect against redefinition by malicicous users. Wrapped long
+	lines.
 
 	* ltoutenc.dtx: Changed internal name \a to \@tabacckludge to
- 	protect against redefinition by malicicous users.
+	protect against redefinition by malicicous users.
 
 1995-11-01 David Carlisle <latex-bugs at latex-project.org>
 
@@ -6658,13 +6780,13 @@
 	* latexbug.tex: Only list `configuration' input files.
 
 	* ltfinal.dtx: Modify \@addtofilelist during initex so only
-          non-standard (cfg) inputs listed.
+	non-standard (cfg) inputs listed.
 
 	* ltfssini.dtx: Modify \@addtofilelist during initex so only
-          non-standard (cfg) inputs listed.
+	non-standard (cfg) inputs listed.
 
 	* ltdirchk.dtx: Modify \@addtofilelist during initex so only
-          non-standard (cfg) inputs listed.
+	non-standard (cfg) inputs listed.
 
 	* Makefile: Add newdc/olddc
 
@@ -6675,7 +6797,7 @@
 	* cmfonts.dst: remove dc font generation.
 
 	* olddc.dst: NEW: Generate fd files for obsolete dcfonts 1.1
- 	and earlier.
+	and earlier.
 
 	* newdc.dst: NEW: Generate fd files for dcfonts 1.2
 
@@ -6687,7 +6809,7 @@
 
 	* ltboxes.dtx: CHANGE: Add \nobreak to \@finalstrut to allow
 	  hyphenation of the last word of a p-column (and footnotes).
-          internal/1931
+	internal/1931
 
 	* ltdirchk.dtx: more robust checking of dc fonts.
 
@@ -6717,7 +6839,7 @@
 1995-10-27 David Carlisle <latex-bugs at latex-project.org>
 
 	* ltpictur.dtx: Initialise \@wholewidth in autoload kernel.
-        General doc cleanup.
+	General doc cleanup.
 
 	* usrguide.tex: Describe minimal.cls
 
@@ -6729,14 +6851,14 @@
 
 1995-10-25 Chris Rowley <latex-bugs at latex-project.org>
 
-        * ltfloat.dtx
+	* ltfloat.dtx
 
-        Corrected bug in \end at dblfloat, made code more robust
+	Corrected bug in \end at dblfloat, made code more robust
 
 1995-10-25 David Carlisle <latex-bugs at latex-project.org>
 
 	* ltmath.dtx: modify docstrip guards so
-          \ProvidesFile{ltmath.dtx} seen by source2e.tex.
+	\ProvidesFile{ltmath.dtx} seen by source2e.tex.
 
 	* ltidxglo.dtx: General doc cleanup.
 
@@ -6746,27 +6868,27 @@
 
 1995-10-24 Chris Rowley <latex-bugs at latex-project.org>
 
-        * ltfiles.dtx
+	* ltfiles.dtx
 
-        Removed one-way switches from \endocument
+	Removed one-way switches from \endocument
 
-        * ltxref.dtx
+	* ltxref.dtx
 
-        Removed one-way switches from \endocument
-        Tidying.
+	Removed one-way switches from \endocument
+	Tidying.
 
-        * ltfssbas.dtx
+	* ltfssbas.dtx
 
-        Removed one-way switches from \endocument
+	Removed one-way switches from \endocument
 
-        * ltbibl.dtx
+	* ltbibl.dtx
 
-        Removed one-way switches from \endocument
+	Removed one-way switches from \endocument
 
-        * ltmiscen.dtx
+	* ltmiscen.dtx
 
-        Removed one-way switches from \endocument
-        Tidying.
+	Removed one-way switches from \endocument
+	Tidying.
 
 1995-10-24 David Carlisle <latex-bugs at latex-project.org>
 
@@ -6773,30 +6895,30 @@
 	* ltdefns.dtx: Make \@autoload files ignore EOL.
 
 	* lterror.dtx: modify autoload \@preamerr.
-          Add % to some lines as \@autoload files now ignore line ends.
+	Add % to some lines as \@autoload files now ignore line ends.
 
 1995-10-23 Chris Rowley <latex-bugs at latex-project.org>
 
-        * lttab.dtx
+	* lttab.dtx
 
-        Made poptabs more robust
-        Tidied up documentation
+	Made poptabs more robust
+	Tidied up documentation
 
 1995-10-23 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* classes.dtx (subsubsection{Abstract}): Added setting of
- 	\cs{beginparpenalty} to discourage page break before abstract
- 	heading.
+	\cs{beginparpenalty} to discourage page break before abstract
+	heading.
 
 1995-10-22 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* cmfonts.fdd: Added support for new (version 1.2) DC fonts and
- 	text companion fonts in encoding TS1.
+	text companion fonts in encoding TS1.
 
 	* inputenc.dst: Added generation of ansinew.def file.
 
 	* inputenc.dtx: Added ansinew encoding (Windows 3.1 ANSI), as
- 	contributed by Berthold K.P. Horn (bkph at ai.mit.edu).
+	contributed by Berthold K.P. Horn (bkph at ai.mit.edu).
 
 1995-10-20 David Carlisle <latex-bugs at latex-project.org>
 
@@ -6809,7 +6931,7 @@
 
 	* ltfssbas.dtx: Keep autofss2 code in kernel until
 	  \begin{document}.
-          use \@undefined not \undefined
+	use \@undefined not \undefined
 
 	* ltfinal.dtx: \@filelist zapped too early.
 
@@ -6816,12 +6938,12 @@
 1995-10-19 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* inputenc.dtx: Replaced \' \` \= by \a' \a` \a in order to get
- 	correct accents in a tabbing environment.
+	correct accents in a tabbing environment.
 
 1995-10-18 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* ltspace.dtx (subsection{Horizontal space}): Moved \changes
- 	from \@ to \hspace where it belongs.
+	from \@ to \hspace where it belongs.
 
 1995-10-17 David Carlisle <latex-bugs at latex-project.org>
 
@@ -6829,7 +6951,7 @@
 	  \reserved at a
 
 	* ltclass.dtx: Remove \ProvidesFile redefinition to ltfinal.
-          Reset \CurrentOption in \ProcessOptions for graphics/1873
+	Reset \CurrentOption in \ProcessOptions for graphics/1873
 
 	* ltdirchk.dtx: Modify \ProvidesFile during initex to save
 	  debugging info and not waste \ver at ... csnames.
@@ -6849,30 +6971,30 @@
 	* ltbibl.dtx: make \cite robust /1808
 
 	* ltmath.dtx: Make \sqrt robust /1808
-          Use \@testopt in eqnarray's \\ /1911.
+	Use \@testopt in eqnarray's \\ /1911.
 
 	* ltspace.dtx: Use \@testopt in \[no]{line|page}preak (/1911)
 
 	* ltdefns.dtx: new \@ifstar CHANGE: require ##1 in both arguments
-          not ####1 in one and ##1 in the other. (internal/1910)
-          Use \@testopt in \newcommand and \newenvironment (/1911)
+	not ####1 in one and ##1 in the other. (internal/1910)
+	Use \@testopt in \newcommand and \newenvironment (/1911)
 
 	* ltboxes.dtx: Clarify \makebox(,)[b] description.
 
 	* ltthm.dtx: Allow \newtheorem after \begin{document} again.
-          (LaTeX Book, page 57)
+	(LaTeX Book, page 57)
 
 1995-10-16 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* ltfssini.dtx: Added \relax at the end of the definition of
- 	\normalfont to prevent it and \textnormal from eating up leading
- 	spaces.
+	\normalfont to prevent it and \textnormal from eating up leading
+	spaces.
 
 1995-10-11 Chris Rowley <latex-bugs at latex-project.org>
 
-        * ltoutput.dtx
+	* ltoutput.dtx
 
-        New check in \clearpage.
+	New check in \clearpage.
 
 1995-10-10 David Carlisle <latex-bugs at latex-project.org>
 
@@ -6879,7 +7001,7 @@
 	* ltfssdcl.dtx: autoload error message
 
 	* ltthm.dtx: Make \newtheorem and its internals `only preamble'
-        to save memory.
+	to save memory.
 
 	* ltplain.dtx: autoload tracing code
 
@@ -6888,7 +7010,7 @@
 1995-10-10 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* slides.dtx (subsection{The title}): In \maketitle, move \par
- 	inside the scope of \Large, to get even line spacing.
+	inside the scope of \Large, to get even line spacing.
 
 1995-10-09 David Carlisle <latex-bugs at latex-project.org>
 
@@ -6937,11 +7059,11 @@
 1995-10-02 David Carlisle <latex-bugs at latex-project.org>
 
 	* ltplain.dtx: Move \newif to ltdefns.dtx.
-        Use \sbox in \underbar (saves tokens, and works with colour)
+	Use \sbox in \underbar (saves tokens, and works with colour)
 
 	* ltdefns.dtx: \futurelet with \@let at token for internal/924
 	New implementation of \@xargdef in terms of the new
-        \@protected at testopt. Saves tokens and makes user defined
+	\@protected at testopt. Saves tokens and makes user defined
 	commands with optional arguments robust. internal/1733
 	Move \newif here from ltplain.
 	Autoload support. Add \aut at global and \@autoload. internal/1617.
@@ -6949,14 +7071,14 @@
 1995-09-27 David Carlisle <latex-bugs at latex-project.org>
 
 	* ltdirchk.dtx: Check \filename parser in ltxcheck.tex
-          for latex/1624 latex/1754  and graphics/1336
+	for latex/1624 latex/1754  and graphics/1336
 	  Check for dc fonts in ltxcheck.tex
 
 1995-09-27 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* slides.dtx, slides.fdd: Globally replaced scale factor 19.91
- 	by 19.907 in \DeclareFontShape, as this gives better rounded
- 	font sizes at 600dpi (suggested by Denis Roegel).
+	by 19.907 in \DeclareFontShape, as this gives better rounded
+	font sizes at 600dpi (suggested by Denis Roegel).
 
 	* docstrip.dtx: Changed address of Johannes Braams.
 
@@ -6963,12 +7085,12 @@
 1995-09-25 David Carlisle <latex-bugs at latex-project.org>
 
 	* latex209.dtx: Declare 2 count registers previously used
-          in \cline. /1723
+	in \cline. /1723
 
 1995-09-25 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* web2ctex.txt: Added some comments about using non-csh, index
- 	style files and some other missing files.
+	style files and some other missing files.
 
 1995-09-21 David Carlisle <latex-bugs at latex-project.org>
 
@@ -6981,8 +7103,8 @@
 	* inputenc.dst: Added generation of next.def file.
 
 	* inputenc.dtx: Added next encoding, as contributed by
- 	Stefan Ried <stef at theo-phys.uni-essen.de> and Holger Uhr
- 	<huhr at uni-paderborn.de>.
+	Stefan Ried <stef at theo-phys.uni-essen.de> and Holger Uhr
+	<huhr at uni-paderborn.de>.
 
 1995-09-20 David Carlisle <latex-bugs at latex-project.org>
 
@@ -6991,19 +7113,19 @@
 1995-09-20 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* cmextra.dst: Added generation of OMLccm.fd file, which had
- 	previsouly been removed from cmfonts.dst.
+	previsouly been removed from cmfonts.dst.
 
 	* slides.dtx: Replace \@tempa by \reserved at a. Wrap some long
- 	lines and use \null instead of \hbox{} (by DPC).
+	lines and use \null instead of \hbox{} (by DPC).
 
 1995-09-19 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* slides.fdd: Corrected names of .fd file names in argument to
- 	\ProvidesFile commands.
+	\ProvidesFile commands.
 
 	* ltmiscen.dtx: Moved call to \@noligs macro after call to
- 	\verbatim at font in \verb command, just as it is already in the
- 	verbatim environment.
+	\verbatim at font in \verb command, just as it is already in the
+	verbatim environment.
 
 1995-09-15 David Carlisle <latex-bugs at latex-project.org>
 
@@ -7029,9 +7151,9 @@
 
 1995-08-31 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * inputenc.dtx: Added 0 to the beginning of every number.
-          Changed the definition of "AD in latin1 and latin2 to be \-.
-          Swapped ordfeminine and ordmasculine around in latin1.
+	* inputenc.dtx: Added 0 to the beginning of every number.
+	Changed the definition of "AD in latin1 and latin2 to be \-.
+	Swapped ordfeminine and ordmasculine around in latin1.
 
 1995-08-27 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -7081,15 +7203,15 @@
 
 1995-08-16 Chris Rowley <latex-bugs at latex-project.org>
 
-        * tex2.txt:
+	* tex2.txt:
 
-        Clearer wordings
+	Clearer wordings
 
-        * ltcntrl.dtx:
+	* ltcntrl.dtx:
 
-        Made most loop macros \long
-        Removed unnecessary \...noop macros
-        Tidied up documentation
+	Made most loop macros \long
+	Removed unnecessary \...noop macros
+	Tidied up documentation
 
 1995-08-16 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -7155,25 +7277,25 @@
 
 1995-07-23 Chris Rowley <latex-bugs at latex-project.org>
 
-        * clsguide.tex:
+	* clsguide.tex:
 
-        Added notices concerning use of `Standard LaTeX'
+	Added notices concerning use of `Standard LaTeX'
 
-        * cfgguide.tex:
+	* cfgguide.tex:
 
-        Started major expansion and rewrite
+	Started major expansion and rewrite
 
-        * modguide.tex:
+	* modguide.tex:
 
-        Rewrite adding section on modfying LaTeX
+	Rewrite adding section on modfying LaTeX
 
-        * legal.txt:
+	* legal.txt:
 
-        Further expansion and changes
+	Further expansion and changes
 
-        * ltxguide.cls:
+	* ltxguide.cls:
 
-        Changed configuration file messages
+	Changed configuration file messages
 
 1995-07-20 David Carlisle <latex-bugs at latex-project.org>
 
@@ -7211,9 +7333,9 @@
 
 1995-07-16 Chris Rowley <latex-bugs at latex-project.org>
 
-        * ltoutput.dtx:
+	* ltoutput.dtx:
 
-        New version of \@outputpage
+	New version of \@outputpage
 
 1995-07-14 David Carlisle <latex-bugs at latex-project.org>
 
@@ -7229,7 +7351,7 @@
 	* ltfssbas.dtx:
 	Updates to documentation
 	Use macro rather than switch to flag default font
-        substitutions pr/1236
+	substitutions pr/1236
 
 	* ltfiles.dtx:
 	Updates to documentation
@@ -7360,67 +7482,67 @@
 1995-06-19 David Carlisle <latex-bugs at latex-project.org>
 
 	* ltbibl.dtx: Modify \bibcite so a repeated key produces
-            LaTeX Warning: Label `aaa' multiply defined.
-            ...
-            LaTeX Warning: There were multiply-defined labels.
-          instead of
-             LaTeX Warning: Label(s) may have changed.
-                              Rerun to get cross-references right.
+	LaTeX Warning: Label `aaa' multiply defined.
+	...
+	LaTeX Warning: There were multiply-defined labels.
+	instead of
+	LaTeX Warning: Label(s) may have changed.
+	Rerun to get cross-references right.
 
 	* ltxref.dtx: Modify \newlabel so \bibcite can share code.
 
 	* ltclass.dtx: Stop \documentstyle re-enabling \usepackage
-        After it has been disabled by latex209.def (latex/1634)
+	After it has been disabled by latex209.def (latex/1634)
 
 1995-06-18 Chris Rowley <latex-bugs at latex-project.org>
 
-        *  Makefile:
+	*  Makefile:
 
-        Changed to use copypre.txt and copyhead.txt
+	Changed to use copypre.txt and copyhead.txt
 
-        * cfgguide.tex:
+	* cfgguide.tex:
 
-        Configuration stuff transferred from texpert.txt
+	Configuration stuff transferred from texpert.txt
 
-        * autoload.txt:
+	* autoload.txt:
 
-        Tidying, removed long lines
+	Tidying, removed long lines
 
-        * cm*.dst, docstrip.dst,latex*.dst,exscale.dst
+	* cm*.dst, docstrip.dst,latex*.dst,exscale.dst
 
-        New preambles
+	New preambles
 
-        * inputenc.dst,ltoutenc.dst,slides.dst:
+	* inputenc.dst,ltoutenc.dst,slides.dst:
 
-        New preambles
+	New preambles
 
-        * unpack2e.ins:
+	* unpack2e.ins:
 
-        New preambles
+	New preambles
 
-        * copyright.txt:
+	* copyright.txt:
 
-        No longer used
+	No longer used
 
-        * copyins.txt:
+	* copyins.txt:
 
-        New text
+	New text
 
-        * copypre.txt:
+	* copypre.txt:
 
-         New file
+	New file
 
-        * copyhead.txt:
+	* copyhead.txt:
 
-        New file
+	New file
 
-        * copydisf.txt:
+	* copydisf.txt:
 
-        New file
+	New file
 
-        * copydisg.tex:
+	* copydisg.tex:
 
-        New file
+	New file
 
 1995-06-15 David Carlisle <latex-bugs at latex-project.org>
 
@@ -7431,12 +7553,12 @@
 	* ltfssbas.dtx: Minor documentation edits.
 
 	* ltfsstrc.dtx: Take \ProvidesFile out of \iffalse clause
-         so it shows up in \listfiles in source2e.tex.
-         Wrap some long lines to 72.
+	so it shows up in \listfiles in source2e.tex.
+	Wrap some long lines to 72.
 
 1995-06-15 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltnews03.tex: Added pointer to autoload.txt.
+	* ltnews03.tex: Added pointer to autoload.txt.
 
 1995-06-14 David Carlisle <latex-bugs at latex-project.org>
 
@@ -7454,11 +7576,11 @@
 
 1995-06-14 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * inputenc.dst: Fixed typo cp850 -> cp437
+	* inputenc.dst: Fixed typo cp850 -> cp437
 
 1995-06-14 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * inputenc.dst: Fixed typo cp850 -> cp437
+	* inputenc.dst: Fixed typo cp850 -> cp437
 
 1995-06-13 David Carlisle <latex-bugs at latex-project.org>
 
@@ -7465,114 +7587,114 @@
 	* ltpictur.dtx: Add \ProvidesFile to autoload file.
 
 	* ltfinal.dtx: Moddify method of adding patchlevel banner
-        Force format to be in errorstopmode, even if an installer
-        scrolled past an error during initex run.
+	Force format to be in errorstopmode, even if an installer
+	scrolled past an error during initex run.
 
 1995-06-12 David Carlisle <latex-bugs at latex-project.org>
 
 	* ltvers.dtx: Add Auotoload banner
-        Check for old source files (older than a year).
+	Check for old source files (older than a year).
 
 1995-06-11 Chris Rowley <latex-bugs at latex-project.org>
 
-        * legal.txt:
+	* legal.txt:
 
-        Major changes
+	Major changes
 
-        * usrguide.tex:
+	* usrguide.tex:
 
-        Added ltx3info.tex info
+	Added ltx3info.tex info
 
-        * fntguide.tex:
+	* fntguide.tex:
 
-        Added note re using non-cmr fonts in T1
+	Added note re using non-cmr fonts in T1
 
-        * clsguide.tex:
+	* clsguide.tex:
 
-        Hash marks in option declarations OK
-        Added Case cHANGING commands
+	Hash marks in option declarations OK
+	Added Case cHANGING commands
 
-        * cfgguide.tex:
+	* cfgguide.tex:
 
-        Configuration stuff transferred from texpert.txt
+	Configuration stuff transferred from texpert.txt
 
-        * lablst.tex:
+	* lablst.tex:
 
-        Improved version: lists all bibitems separately
-        Changed internal commands
+	Improved version: lists all bibitems separately
+	Changed internal commands
 
-        *  Makefile:
+	*  Makefile:
 
-        Added modguide.tex
+	Added modguide.tex
 
-        * manifest.txt:
+	* manifest.txt:
 
-        Added ltnews03.tex and modguide.tex
+	Added ltnews03.tex and modguide.tex
 
-        * install.txt:
+	* install.txt:
 
-        File name corrected
-        Added ltx3info.tex info
+	File name corrected
+	Added ltx3info.tex info
 
-        * emtex.txt:
+	* emtex.txt:
 
-        Added info re batch file
+	Added info re batch file
 
-        * texpert.txt:
+	* texpert.txt:
 
-        Configuration details transferred to cfgguide.tex
+	Configuration details transferred to cfgguide.tex
 
-        * readme.txt:
+	* readme.txt:
 
-        Added pointers to various other info files
+	Added pointers to various other info files
 
-        * ltspace.dtx:
+	* ltspace.dtx:
 
-        Added \relax to \obeycr
+	Added \relax to \obeycr
 
 1995-06-09 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltoutenc.dtx: Made composites declared with DeclareTextComposite
-        use no-argument macros rather than one-argument macros.
+	* ltoutenc.dtx: Made composites declared with DeclareTextComposite
+	use no-argument macros rather than one-argument macros.
 
-        * ltnews03.tex: Changed modify.tex to modguide.tex, updated
-        figures for space savings.
+	* ltnews03.tex: Changed modify.tex to modguide.tex, updated
+	figures for space savings.
 
 1995-06-08 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltnews03.tex: New issue of LaTeX News.
+	* ltnews03.tex: New issue of LaTeX News.
 
 1995-06-06 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltfinal.dtx: Made \MakeUppercase and \MakeLowercase grab their
-        argument and brace it.
+	* ltfinal.dtx: Made \MakeUppercase and \MakeLowercase grab their
+	argument and brace it.
 
 1995-06-05 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltpatch.ltx: Removed patch for latex/1240 (now in ltoutenc.dtx).
-        Removed patch for tools/1296 (now in ltoutenc.dtx).
-        Removed patch for latex/1322 (now in ltoutenc.dtx).
-        We now have an empty patch file again!
+	* ltpatch.ltx: Removed patch for latex/1240 (now in ltoutenc.dtx).
+	Removed patch for tools/1296 (now in ltoutenc.dtx).
+	Removed patch for latex/1322 (now in ltoutenc.dtx).
+	We now have an empty patch file again!
 
-        * fontdef.dtx: Moved math commands from ltoutenc.dtx.
+	* fontdef.dtx: Moved math commands from ltoutenc.dtx.
 
-        * ltoutenc.dtx: Redid protection in DeclareTextCommand so that it
-        uses \noexpand rather than \protect.  This should stop the
-        problems with \'\i putting the acute on a \protect rather than
-        on the \i.  Commented out the defaults for textless and
-        textgreater.  Allow \ProvideTextCommandDefault after
-        \begin{document} so it can be used in inputenc.def files.
-        Save some tokens in \textvisiblespace and \textunderscore.
-        Moved math commands to fontdef.dtx.
+	* ltoutenc.dtx: Redid protection in DeclareTextCommand so that it
+	uses \noexpand rather than \protect.  This should stop the
+	problems with \'\i putting the acute on a \protect rather than
+	on the \i.  Commented out the defaults for textless and
+	textgreater.  Allow \ProvideTextCommandDefault after
+	\begin{document} so it can be used in inputenc.def files.
+	Save some tokens in \textvisiblespace and \textunderscore.
+	Moved math commands to fontdef.dtx.
 
-        * classes.dtx: Replaced \uppercase with \MakeUppercase
+	* classes.dtx: Replaced \uppercase with \MakeUppercase
 
-        * ltfinal.dtx: Added \MakeUppercase and \MakeLowercase.
+	* ltfinal.dtx: Added \MakeUppercase and \MakeLowercase.
 
 1995-05-30 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * inputenc.dtx: Made hex numbers safe against active ".  Added
-        docstrip commands to applemac.def.
+	* inputenc.dtx: Made hex numbers safe against active ".  Added
+	docstrip commands to applemac.def.
 
 1995-05-27 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -7587,12 +7709,12 @@
 
 	* ltplain.dtx (section{Plain \TeX}):
 
-        Made \loop long
-        Made \underbar use \box \tw@
+	Made \loop long
+	Made \underbar use \box \tw@
 
 	* ltdefns.dtx (subsection{Command definitions}):
 
-        Made \@gobble commands \long
+	Made \@gobble commands \long
 
 1995-05-26 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -7637,27 +7759,27 @@
 
 	* latex209.dtx:
 
-        Changed float reset hooks to empty
+	Changed float reset hooks to empty
 
 	* ltfloat.dtx:
 
-        Moved new resettings into hooks so that they can be removed in
-        latex209.dtx
+	Moved new resettings into hooks so that they can be removed in
+	latex209.dtx
 
 	* ltspace.dtx/ltlists.dtx
 
-        Moved \endtrivlist and friends to ltlists.dtx
+	Moved \endtrivlist and friends to ltlists.dtx
 
 	* ltfiles.dtx (section{File Handling}):
 
-        Added check for zero \topskip to \begin{document}
-        Added some \longs
+	Added check for zero \topskip to \begin{document}
+	Added some \longs
 
-        * ltspace.dtx
+	* ltspace.dtx
 
-        Made \vspace and \vspace* more efficient and more robust
+	Made \vspace and \vspace* more efficient and more robust
 
-        Commented out unused code
+	Commented out unused code
 
 1995-05-25 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -7676,14 +7798,14 @@
 1995-05-24 David Carlisle <latex-bugs at latex-project.org>
 
 	* unpack2e.ins: Exchange order of ltdefns and ltalloc
-          as latter now needs \@gobbletwo from former.
+	as latter now needs \@gobbletwo from former.
 
 	* usrguide.tex (subsection{Setting text susperscripts}):
-          \textsuperscript now access the current font (except for size
+	\textsuperscript now access the current font (except for size
 	  attribute)
 
 	* ltfloat.dtx: redefine \textsuperscript in terms of
-          \@textsuperscript
+	\@textsuperscript
 
 	* ltdefns.dtx: new \typein implementation
 
@@ -7691,24 +7813,24 @@
 
 1995-05-23 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * inputenc.dst: Added applemac.def.
+	* inputenc.dst: Added applemac.def.
 
-        * inputenc.dtx: Added applemac.def.
-        Added test for whether definition of a text character ends in a
-        macro.
-        Corrected \mathordfeminine and \mathordmasculine.
+	* inputenc.dtx: Added applemac.def.
+	Added test for whether definition of a text character ends in a
+	macro.
+	Corrected \mathordfeminine and \mathordmasculine.
 
-        * inputenc.dst: Added applemac.def.
+	* inputenc.dst: Added applemac.def.
 
 1995-05-22 David Carlisle <latex-bugs at latex-project.org>
 
 	* lttab.dtx: Add code and docstrip modules to support
-        autoloading of tabbing.
+	autoloading of tabbing.
 
 1995-05-22 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* ltplain.dtx/ltfloat.dtx: Moved definitions of \footins and
-        \footnoterule from ltplain to ltfloat.
+	\footnoterule from ltplain to ltfloat.
 
 1995-05-21 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -7748,7 +7870,7 @@
 1995-05-19 David Carlisle <latex-bugs at latex-project.org>
 
 	* ltpictur.dtx: Add code and docstrip modules to support
-          autoloading feature.
+	autoloading feature.
 
 1995-05-19 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -7802,7 +7924,7 @@
 	* ltboxes.dtx: Removed surplus { } in \@irsbox
 
 	* ltlists.dtx: Start of documented version from Tobi.
-          Removed surplus { } and used `\thr@@' not `3 ' to save tokens.
+	Removed surplus { } and used `\thr@@' not `3 ' to save tokens.
 
 1995-05-17 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -7863,18 +7985,18 @@
 1995-05-12 David Carlisle <latex-bugs at latex-project.org>
 
 	* ltclass.dtx: Use a token register in \DeclareOption(*)
-          So that # need not be written as ##
-          INCOMPATIBLE CHANGE: see latex/1557
+	So that # need not be written as ##
+	INCOMPATIBLE CHANGE: see latex/1557
 
 	* ltpictur.dtx: Modify \picture so a missing ( in the first
 	  argument generates an error. latex/1355
-          Add a few more macro environments.
+	Add a few more macro environments.
 
 	* latex209.dtx: Restore old definition of \@footnotemark
 
 	* ltfloat.dtx: Add \nobreak to allow hyphenation before a
 	  footnotemark.
-         Add loads of macro environments to the docs.
+	Add loads of macro environments to the docs.
 
 1995-05-11 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -7930,7 +8052,7 @@
 1995-05-06 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* ltsect.dtx (paragraph{...}):
-        Use \quad instead of \hskip 1em in \@seccntformat. pr/1596
+	Use \quad instead of \hskip 1em in \@seccntformat. pr/1596
 	Add \relax to prevent `plus/minus' problem with improper redefinition
 	of \@seccntformat. pr/1596
 
@@ -7946,7 +8068,7 @@
 
 	* ltsect.dtx:
 	Surround the . in \@dottedcontextline by \hbox to typeset it in the text
-        font. pr/1503
+	font. pr/1503
 	Don't reset to \rmfamily just to \normalfont in case the document font is
 	not the roman one. pr/1578
 
@@ -7953,7 +8075,7 @@
 1995-05-01 David Carlisle <latex-bugs at latex-project.org>
 
 	* ltpar.dtx: Documentation reworked by Tobias Oetiker.
-          (Thanks to Tobi for volunteering.)
+	(Thanks to Tobi for volunteering.)
 
 1995-04-29 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -7975,7 +8097,7 @@
 	* latex209.dtx: Add  \hang and \textindent
 
 	* ltplain.dtx: Move \hang and \textindent to latex209.dtx
-        Remove some commands which are (re)defined later.
+	Remove some commands which are (re)defined later.
 
 1995-04-27 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -7987,7 +8109,7 @@
 
 	* ltmiscen.dtx (subsection{Environments}):
 	Limited support for \AtBeginDocument{\begin{foo}}
-        \AtEndDocument{\end{foo}}.
+	\AtEndDocument{\end{foo}}.
 	Be careful to get the order right if you do it more than once. pr/1121
 
 	* unpacked.txt:
@@ -7996,18 +8118,18 @@
 1995-04-25 David Carlisle <latex-bugs at latex-project.org>
 
 	* ltfiles.dtx: remove \the\every at math@size from \document
-            for latex/1407 + 1420 (from patch file)
+	for latex/1407 + 1420 (from patch file)
 
 	* ltdefns.dtx: From patch file: make \@check at c \long
-          (latex/1346) \newenvironment argument handling /1507.
+	(latex/1346) \newenvironment argument handling /1507.
 
 	* ifthen.dtx: Fix `driver' docstrip guard. Reported by
-          Martin Schr"oder.
+	Martin Schr"oder.
 
 1995-04-24 David Carlisle <latex-bugs at latex-project.org>
 
 	* ltpage.dtx: Reset \emergencystretch in \fussy latex /1344
-         (fom patch file). Clean up documentation slightly.
+	(fom patch file). Clean up documentation slightly.
 
 	* ltcntrl.dtx: fix for /1317 (internal) \@for expanding its
 	  argument incorectly
@@ -8016,18 +8138,18 @@
 
 	* ltbibl.dtx: Add \mbox to \cite for latex/1239 from patch file.
 	Make \@onlypreamble\bibcite /1388 (from patch file)
-        Add some macro envs to documentation.
+	Add some macro envs to documentation.
 
 	* ltoutput.dtx: Modify docstrip guards to keep trace code out of
 	  the kernel, unless `trace' specified.
-          2 more fixes from patch file
-           latex/1451: newline command \\ in eqnarray and output routine
-           %%% latex/1392: AtBeginDvi broken
+	2 more fixes from patch file
+	latex/1451: newline command \\ in eqnarray and output routine
+	%%% latex/1392: AtBeginDvi broken
 
 	* latex209.dtx: Add \proclaim and \ttraggedright
 
 	* ltplain.dtx: Make \new... non outer: /1405 (from patch file)
-          Move \proclaim and \ttragedright to latex209.dtx
+	Move \proclaim and \ttragedright to latex209.dtx
 
 1995-04-23 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -8041,9 +8163,9 @@
 	* inputenc.dtx (section{The ISO Latin-1 encoding}):
 	\textonequarter and friends incorrectly declared as math chars.
 	(section{Default definitions for characters}):
-        Default values moved to own section.
+	Default values moved to own section.
 	(section{The ISO Latin-2 encoding}):
-        latin2 added. pr/1447.
+	latin2 added. pr/1447.
 	(section{The IBM code page 850}):
 	cp850 added. pr/1330.
 
@@ -8069,10 +8191,10 @@
 	* Makefile (cleanupsrc): set date to June 1995
 
 	* ltclass.dtx: Fix filecontents and \DeclareOption
-          pr's 1487 and 1498 . (moved from patch file.)
+	pr's 1487 and 1498 . (moved from patch file.)
 
 	* ltfinal.dtx: Modify to allow ltpatch.ltx (patch level 0)
-        For a full release. To solve problems of initial install picking
+	For a full release. To solve problems of initial install picking
 	up old patch files.
 
 1995-04-19 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
@@ -8123,7 +8245,7 @@
 
 	* latex209.dtx: Fixes for latex/1460 (infinite looping on 2nd
 	  \documentstyle command) and latex/1424 (\newcommand{\r}{})
-          Also wrap some long lines to 72.
+	Also wrap some long lines to 72.
 
 1995-03-20 David Carlisle <latex-bugs at latex-project.org>
 
@@ -8142,7 +8264,7 @@
 1995-03-17 David Carlisle <latex-bugs at latex-project.org>
 
 	* latexbug.el (report-latex-bug): Support transient mark mode
-        Also use shell-command so that shell variables are initialised.
+	Also use shell-command so that shell variables are initialised.
 
 1995-03-14 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -8176,8 +8298,8 @@
 
 1994-12-17 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltnews02.tex: Edited description of AMS-LaTeX to get everything
-        to fit onto one page.
+	* ltnews02.tex: Edited description of AMS-LaTeX to get everything
+	to fit onto one page.
 
 1994-12-16 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -8191,21 +8313,21 @@
 1994-12-15 David Carlisle <latex-bugs at latex-project.org>
 
 	* latexbug.el: (Matt Swift) Support old emacs (tested with 18.57
-        in addition to 19.28)
+	in addition to 19.28)
 
 1994-12-14 Chris Rowley <latex-bugs at latex-project.org>
 
-        * ltoutenc.dtx
+	* ltoutenc.dtx
 
-        Corrected typo
+	Corrected typo
 
-        * usrguide.tex
+	* usrguide.tex
 
-        Removed some commands
+	Removed some commands
 
-        * cfgguide.tex
+	* cfgguide.tex
 
-        Tidying
+	Tidying
 
 1994-12-14 David Carlisle <latex-bugs at latex-project.org>
 
@@ -8213,14 +8335,14 @@
 
 1994-12-14 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltoutenc.dtx: Added braces to \copyright so it works unbraced in
-        subscripts.
-        Added \ifmmode check to \@changed at cmd so that redefinitions aren't
-        made in math mode (which can also foul up unbraced subscripts).
-        Commented out  \textasciicircum,
-        \textasciitilde, \textbackslash, \textbar,
-        \textgreater, \texthyphenchar, \texthyphen and
-        \textless to save memory.
+	* ltoutenc.dtx: Added braces to \copyright so it works unbraced in
+	subscripts.
+	Added \ifmmode check to \@changed at cmd so that redefinitions aren't
+	made in math mode (which can also foul up unbraced subscripts).
+	Commented out  \textasciicircum,
+	\textasciitilde, \textbackslash, \textbar,
+	\textgreater, \texthyphenchar, \texthyphen and
+	\textless to save memory.
 
 1994-12-13 David Carlisle <latex-bugs at latex-project.org>
 
@@ -8248,7 +8370,7 @@
 1994-12-12 David Carlisle <latex-bugs at latex-project.org>
 
 	* latexbug.el: Add missing (defvar ltxbug-mail-headers
-        (Matt Swift: latex/1255)
+	(Matt Swift: latex/1255)
 
 	* ltxguide.cls: Stop \small in verbatim affecting previous para.
 
@@ -8258,15 +8380,15 @@
 
 1994-12-12 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltoutenc.dtx: Tidied up documentation.
+	* ltoutenc.dtx: Tidied up documentation.
 
 1994-12-11 Chris Rowley <latex-bugs at latex-project.org>
 
-        * ltfloat.dtx
+	* ltfloat.dtx
 
-        * cfgguide.tex
+	* cfgguide.tex
 
-        Major editing
+	Major editing
 
 1994-12-11 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -8293,13 +8415,13 @@
 
 1994-12-10 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * inputenc.dtx: Removed useless catcode setting of ~.
-        Made letters active and undefined by default, rather than illegal.
-        Added `beta test' message.
+	* inputenc.dtx: Removed useless catcode setting of ~.
+	Made letters active and undefined by default, rather than illegal.
+	Added `beta test' message.
 
-        * ltoutenc.dtx: Added documentation for the OML encoding, after
-        the last lot got lost by the server...
-        Replaced width with \@width in vrules.
+	* ltoutenc.dtx: Added documentation for the OML encoding, after
+	the last lot got lost by the server...
+	Replaced width with \@width in vrules.
 
 1994-12-09 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -8319,22 +8441,22 @@
 	* usrguide.tex: \arraynewline RIP.
 
 	* lttab.dtx: Make \tabularnewline work in array.
-          \arraynewline deleted.
+	\arraynewline deleted.
 
 	* latexbug.el: mention public database.
 
 	* latexbug.tex: Call category 0 LaTeX not base
-        Add >Confidential no field to all messages by default.
-        Add message about public database to final typeout.
-        Compress messages to fit on 25-line screen.
+	Add >Confidential no field to all messages by default.
+	Add message about public database to final typeout.
+	Compress messages to fit on 25-line screen.
 
 	* usrguide.tex: mention list of packages in LaTeXBook.
 
 1994-12-08 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * bugs.txt: Added pointer to ltxbugs2html.
+	* bugs.txt: Added pointer to ltxbugs2html.
 
-        * ltoutenc.dtx: Added \null and \sh at ft to \b and \d.
+	* ltoutenc.dtx: Added \null and \sh at ft to \b and \d.
 
 1994-12-07 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -8343,15 +8465,15 @@
 1994-12-07 David Carlisle <latex-bugs at latex-project.org>
 
 	* usrguide.tex: Document ltx3pub papers on ctan.
-        Other small corrections.
+	Other small corrections.
 
 1994-12-07 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * tlb1042.lvt: Rewrote test file to avoid printing out internal
-        details of how \ENC-cmd is implemented.
+	* tlb1042.lvt: Rewrote test file to avoid printing out internal
+	details of how \ENC-cmd is implemented.
 
-        * tlb0552.lvt: Rewrote test file to do a showbox on $\_$ rather
-        than a \tracingall.
+	* tlb0552.lvt: Rewrote test file to do a showbox on $\_$ rather
+	than a \tracingall.
 
 1994-12-06 David Carlisle <latex-bugs at latex-project.org>
 
@@ -8369,7 +8491,7 @@
 	(subsection{Macros for loading fonts}):
 	set \nfss at catcodes locally to \relax in \try at load@fontshape
 	so that it isn't executed several times when an .fd file is
-        read in.
+	read in.
 
 	* updated various test files.
 
@@ -8376,30 +8498,30 @@
 1994-12-05 David Carlisle <latex-bugs at latex-project.org>
 
 	* latexbug.tex: Add \pause so messages do not scroll off screen.
-        Suggested by Rosemary Bailey.
+	Suggested by Rosemary Bailey.
 
 	* lablst.tex: Print labels verbatim, and input packages.
-        Fixing problems reported via c.t.t.
+	Fixing problems reported via c.t.t.
 
 1994-12-05 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltoutenc.dtx: Added braces round the \ooalign in \textcircled.
+	* ltoutenc.dtx: Added braces round the \ooalign in \textcircled.
 
-        * tlb1233.lvt: Added test file for unbraced \ooalign's.
+	* tlb1233.lvt: Added test file for unbraced \ooalign's.
 
 1994-12-02 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * fontdef.dtx: Commented out \ldots.
+	* fontdef.dtx: Commented out \ldots.
 
-        * lfonts.dtx: Commented out \copyright.
+	* lfonts.dtx: Commented out \copyright.
 
-        * tlb1214.lvt: Test file for symbols like \pounds.
+	* tlb1214.lvt: Test file for symbols like \pounds.
 
-        * tlb1217.lvt: Test file for \a.
+	* tlb1217.lvt: Test file for \a.
 
-        * ltoutenc.dtx: Fixed a bug with \a.
+	* ltoutenc.dtx: Fixed a bug with \a.
 
-        * cmfonts.fdd: Added font substitutions for \pounds.
+	* cmfonts.fdd: Added font substitutions for \pounds.
 
 1994-12-01 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -8424,7 +8546,7 @@
 	* lthyphen.dtx: lthyphen.ltx|cfg now hyphen.ltx|cfg
 
 	* texpert.txt: Document ltxcheck font checks.
-        lthyphen.cfg now (or soon will be) hyphen.cfg
+	lthyphen.cfg now (or soon will be) hyphen.cfg
 
 	* ltplain.dtx: remove some {oldcomments} and other tidying up.
 
@@ -8440,7 +8562,7 @@
 	* ltfiles.dtx: Use new \@dofilelist.
 
 	* ltmiscen.dtx: Add new \@dofilelist to \enddocument
-        Move some of the warnings in \enddocument out of \if at filesw.
+	Move some of the warnings in \enddocument out of \if at filesw.
 
 	* Makefile (TEXTS): add latexbug.el
 
@@ -8448,11 +8570,11 @@
 
 1994-11-30 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * fam.dtx: Set \FOO-cmd to \@current at cmd rather than \relax when
-        entering encoding FOO.
+	* fam.dtx: Set \FOO-cmd to \@current at cmd rather than \relax when
+	entering encoding FOO.
 
-        * ltoutenc.dtx: Made text commands expand (almost) entirely in the
-        mouth.
+	* ltoutenc.dtx: Made text commands expand (almost) entirely in the
+	mouth.
 
 1994-11-28 David Carlisle <latex-bugs at latex-project.org>
 
@@ -8460,30 +8582,30 @@
 
 1994-11-28 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltdefns.dtx: Corrected \changes entries.
+	* ltdefns.dtx: Corrected \changes entries.
 
-        * ltfiles.dtx: Corrected \changes entries.
+	* ltfiles.dtx: Corrected \changes entries.
 
-        * lterror.dtx: Corrected \changes entries.
+	* lterror.dtx: Corrected \changes entries.
 
-        * ltxref.dtx: Corrected \changes entries.
+	* ltxref.dtx: Corrected \changes entries.
 
-        * ltsect.dtx: Corrected \changes entries.
+	* ltsect.dtx: Corrected \changes entries.
 
-        * ltidxglo.dtx: Corrected \changes entries.
+	* ltidxglo.dtx: Corrected \changes entries.
 
-        * lttab.dtx: Corrected \changes entries (wrong format).
+	* lttab.dtx: Corrected \changes entries (wrong format).
 
-        * ltoutenc.dtx: Added new definitions of \b, \c and \d.
-        Fixed bug with accents on commands which aren't allowed in
-        \csname.
+	* ltoutenc.dtx: Added new definitions of \b, \c and \d.
+	Fixed bug with accents on commands which aren't allowed in
+	\csname.
 
-        * inputenc.dtx: Moved a docstrip option to it's correct home.
+	* inputenc.dtx: Moved a docstrip option to it's correct home.
 
-        * latex209.dtx: Added hacks for space around floats.
+	* latex209.dtx: Added hacks for space around floats.
 
-        * tlb1184.lvt: Added check file for default accent and symbol
-        definitions.
+	* tlb1184.lvt: Added check file for default accent and symbol
+	definitions.
 
 1994-11-25 David Carlisle <latex-bugs at latex-project.org>
 
@@ -8496,8 +8618,8 @@
 	* unpack2e.dst: Correct the preamble written to generated files.
 
 	* ltdefns.dtx: modify \newenvironment so that a graf environment
-        is not allowed (Piet van Oostrum latex/1037). Previous attemt
-        to do this removed...
+	is not allowed (Piet van Oostrum latex/1037). Previous attemt
+	to do this removed...
 
 1994-11-23 David Carlisle <latex-bugs at latex-project.org>
 
@@ -8516,68 +8638,68 @@
 	* latint.dtx: wrap long lines.
 
 	* source2e.tex: Make frontmatter \pagenumbering{roman}
-          So can be processed with only 2 latex runs. (Ulrik Vieth)
-          Add lthyphen.dtx.
+	So can be processed with only 2 latex runs. (Ulrik Vieth)
+	Add lthyphen.dtx.
 
 1994-11-22 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * tlb0574.lvt: Added check file for empyt accents and accents in
-        tocs.
+	* tlb0574.lvt: Added check file for empyt accents and accents in
+	tocs.
 
-        * ltoutenc.dtx: Fixed `empty accent' bug.
+	* ltoutenc.dtx: Fixed `empty accent' bug.
 
-        * inputenc.dtx: Fixed typo A1 -> A0.
+	* inputenc.dtx: Fixed typo A1 -> A0.
 
 1994-11-21 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltoutenc.dtx: Fixed \dots so that it has no extra space in a
-        monowidth font.
-        Corrected typo in the definition of \mathunderscore.
+	* ltoutenc.dtx: Fixed \dots so that it has no extra space in a
+	monowidth font.
+	Corrected typo in the definition of \mathunderscore.
 
-        * inputenc.dtx: Added \textregistered.
-        Added "A0 (nbs) to Latin-1.
+	* inputenc.dtx: Added \textregistered.
+	Added "A0 (nbs) to Latin-1.
 
 1994-11-20 Chris Rowley <latex-bugs at latex-project.org>
 
-        * ltfloat.dtx
+	* ltfloat.dtx
 
-        * ltoutput.dtx
+	* ltoutput.dtx
 
-        * ltxguide.cls
+	* ltxguide.cls
 
-        Tidied formatting
+	Tidied formatting
 
-        * patches.txt
+	* patches.txt
 
-        Updated
+	Updated
 
-        * bugs.txt
+	* bugs.txt
 
-        Updated
+	Updated
 
-        * install.txt
+	* install.txt
 
-        Updated
+	Updated
 
-        * template.txt
+	* template.txt
 
-        Updated
+	Updated
 
-        * texpert.txt
+	* texpert.txt
 
-        Updated
+	Updated
 
-        * usrguide.tex
+	* usrguide.tex
 
-        Major update
+	Major update
 
-        * clsguide.tex
+	* clsguide.tex
 
-        Major update
+	Major update
 
-        * fntguide.tex
+	* fntguide.tex
 
-        Major update
+	Major update
 
 1994-11-18 David Carlisle <latex-bugs at latex-project.org>
 
@@ -8590,12 +8712,12 @@
 	* fam.dtx: \next renamed to \reserved at f
 
 	* latint.dtx: use \expandafter instead of \next in
-          \DeclareMathDelimiter.
+	\DeclareMathDelimiter.
 
 	* ltplain.dtx: Remove \pt, now defined elsewhere.
 
 	* ltmath.dtx Use \expandafter trick instead of \next
-        in a' \phantom and \smash. Colour support to \phantom and \smash
+	in a' \phantom and \smash. Colour support to \phantom and \smash
 
 1994-11-17 David Carlisle <latex-bugs at latex-project.org>
 
@@ -8645,9 +8767,9 @@
 
 1994-11-16 Chris Rowley <latex-bugs at latex-project.org>
 
-        * latex209.dtx
+	* latex209.dtx
 
-        Restored 2e logo
+	Restored 2e logo
 
 1994-11-16 David Carlisle <latex-bugs at latex-project.org>
 
@@ -8656,7 +8778,7 @@
 1994-11-15 David Carlisle <latex-bugs at latex-project.org>
 
 	* ifthen.dtx: Use \@unexpandable at protect and modify
-          \@setref to fix bug /946 (/1023) \pageref breaking tests.
+	\@setref to fix bug /946 (/1023) \pageref breaking tests.
 
 1994-11-14 David Carlisle <latex-bugs at latex-project.org>
 
@@ -8666,21 +8788,21 @@
 
 1994-11-12 Chris Rowley <latex-bugs at latex-project.org>
 
-        * ltmiscen.dtx
+	* ltmiscen.dtx
 
-        Tidied \endtrivlists
+	Tidied \endtrivlists
 
-        * ltspace.dtx
+	* ltspace.dtx
 
-        Attempted to improve error messages
+	Attempted to improve error messages
 
-        * ltfntcmd.dtx
+	* ltfntcmd.dtx
 
-        Added line-break to error message
+	Added line-break to error message
 
-        * lablst.tex
+	* lablst.tex
 
-        Simpler with better layout
+	Simpler with better layout
 
 1994-11-12 David Carlisle <latex-bugs at latex-project.org>
 
@@ -8692,11 +8814,11 @@
 
 1994-11-10 Chris Rowley <latex-bugs at latex-project.org>
 
-        * ltbibl.dtx
+	* ltbibl.dtx
 
-        Patched \nocite{*}
+	Patched \nocite{*}
 
-        * ltplain.dtx
+	* ltplain.dtx
 
 1994-11-10 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -8731,7 +8853,7 @@
 	* fontdef.dtx: Add \DeclareMathSizes (from setsize.dtx).
 
 	* Makefile: Generate new release date 1994/12/01
-          Remove setfile.dtx from generation of ltfss.dtx
+	Remove setfile.dtx from generation of ltfss.dtx
 
 	* ltpatch.ltx: Change to patch 1994/12/01 release.
 
@@ -8788,81 +8910,81 @@
 	Fix bug that produced extra "No math setup"  message if
 	  tracefont was loaded with default options.
 
-        Patched \loop
+	Patched \loop
 
 1994-11-05 Chris Rowley <latex-bugs at latex-project.org>
 
-        * ltfloat.dtx (subsection{Floating Environments}):
+	* ltfloat.dtx (subsection{Floating Environments}):
 
-        Introduced \color at hbox
-        Changed colour resetting for footnotes (again)
-        Introduced a simulacrum of compatibility to old \@xfloat
-        Changed float setup
+	Introduced \color at hbox
+	Changed colour resetting for footnotes (again)
+	Introduced a simulacrum of compatibility to old \@xfloat
+	Changed float setup
 
-        * ltboxes.dtx (section{\LaTeX\ Box commands}):
+	* ltboxes.dtx (section{\LaTeX\ Box commands}):
 
-        Introduced \color at hbox
-        Changed colour resetting for minipage footnotes
-        Added to documentation
+	Introduced \color at hbox
+	Changed colour resetting for minipage footnotes
+	Added to documentation
 
-        * ltoutput.dtx (subsection{Floats}):
+	* ltoutput.dtx (subsection{Floats}):
 
-        Introduced \color at hbox
-        New style protect settings in shipout
-        Tidied shipout and added to documentation
-        Added begindvi stuff
+	Introduced \color at hbox
+	New style protect settings in shipout
+	Tidied shipout and added to documentation
+	Added begindvi stuff
 
 1994-11-05 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltoutenc.dtx: Added setting of \@typeset at protect to \patterns
-        and \hyphenation.
+	* ltoutenc.dtx: Added setting of \@typeset at protect to \patterns
+	and \hyphenation.
 
-        * ltnews02.tex: First draft.
+	* ltnews02.tex: First draft.
 
 1994-11-04 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltfloat.dtx: Added \protected at xdef to \footnote, \@footnotetext,
-        and \footnotemark.
+	* ltfloat.dtx: Added \protected at xdef to \footnote, \@footnotetext,
+	and \footnotemark.
 
-        * ltoutenc.dtx: Added \_.
+	* ltoutenc.dtx: Added \_.
 
-        * ltpage.dtx: Added \@unexpandable at protect to \markboth and
-        \markright.
+	* ltpage.dtx: Added \@unexpandable at protect to \markboth and
+	\markright.
 
-        * lttab.dtx: Added \set at typeset@protect to \@array and
-        \multicolumn.
-        Added \@unexpandable at protect to \@mkpream.
+	* lttab.dtx: Added \set at typeset@protect to \@array and
+	\multicolumn.
+	Added \@unexpandable at protect to \@mkpream.
 
-        * ltboxes.dtx: Added \protected at edef to \@mpfootnotetext.
+	* ltboxes.dtx: Added \protected at edef to \@mpfootnotetext.
 
-        * ltidxglo.dtx: Added \protected at write to \index and \glossary.
-        Removed \if at filesw from \makeindex and \makeglossary.
+	* ltidxglo.dtx: Added \protected at write to \index and \glossary.
+	Removed \if at filesw from \makeindex and \makeglossary.
 
-        * ltsect.dtx: Added \protected at write to \addtocontents and
-        \addcontentsline.
-        Added \protected at edef to \@sect.
-        Added \protected at xdef to \thanks.
+	* ltsect.dtx: Added \protected at write to \addtocontents and
+	\addcontentsline.
+	Added \protected at edef to \@sect.
+	Added \protected at xdef to \thanks.
 
-        * ltxref.dtx: Added \protected at write to \label.
-        Added \protected at edef to \refstepcounter.
+	* ltxref.dtx: Added \protected at write to \label.
+	Added \protected at edef to \refstepcounter.
 
-        * ltmiscen.dtx: Removed setting of \protect from \@writefile.
+	* ltmiscen.dtx: Removed setting of \protect from \@writefile.
 
-        * lterror.dtx: Added \set at display@protect to messages.
+	* lterror.dtx: Added \set at display@protect to messages.
 
-        * ltfiles.dtx: Added \protected at write and a new definition of
-        \nofiles.
+	* ltfiles.dtx: Added \protected at write and a new definition of
+	\nofiles.
 
-        * ltdefns.dtx: Added \x at protect and a new mechanism for protecting
-        short commands.
-        Added commands for safely performing edefs.
-        Added \set at display@protect to \typeout
+	* ltdefns.dtx: Added \x at protect and a new mechanism for protecting
+	short commands.
+	Added commands for safely performing edefs.
+	Added \set at display@protect to \typeout
 
 1994-11-03 David Carlisle <latex-bugs at latex-project.org>
 
 	* ltdirchk.dtx: Check that latex.ltx is used with an initex with
-          no format preloaded. (VMS initex defaults to loading
-          plain.fmt)
+	no format preloaded. (VMS initex defaults to loading
+	plain.fmt)
 
 	* ltdefns.dtx: rename \long at def to \l at ngrel@x
 
@@ -8878,7 +9000,7 @@
 
 1994-11-02 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltoutenc.dtx: Wrapped long lines.
+	* ltoutenc.dtx: Wrapped long lines.
 
 1994-10-31 David Carlisle <latex-bugs at latex-project.org>
 
@@ -8886,63 +9008,63 @@
 
 1994-10-31 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * Makefile: Added inputenc.dst and ltoutenc.dst, and inputenc.dtx.
+	* Makefile: Added inputenc.dst and ltoutenc.dst, and inputenc.dtx.
 
-        * fontdef.dtx: Added OMLenc.def.
+	* fontdef.dtx: Added OMLenc.def.
 
-        * unpack2e.ins: Added inputenc.ins.
+	* unpack2e.ins: Added inputenc.ins.
 
-        * unpacked.txt: Added inputenc.sty, font encoding and input
-        encoding files.
+	* unpacked.txt: Added inputenc.sty, font encoding and input
+	encoding files.
 
-        * fntguide.tex: Added documentation on the new text declaration
-        commands.
+	* fntguide.tex: Added documentation on the new text declaration
+	commands.
 
-        * usrguide.tex: Added documentation on the new text commands.
+	* usrguide.tex: Added documentation on the new text commands.
 
 1994-10-30 Chris Rowley <latex-bugs at latex-project.org>
 
-        * ltfloat.dtx (subsection{Floating Environments}):
+	* ltfloat.dtx (subsection{Floating Environments}):
 
-        In float handling:
-          major changes to parameter parsing, setting of local
-          variables, etc;
-          two-column and one-column cases merged; space hacks moved;
-          colour support improved and corrected, including extra boxes.
-        In marginpars:
-          colour support improved and corrected, including extra boxes.
-        In footnotes:
-          colour support improved.
+	In float handling:
+	major changes to parameter parsing, setting of local
+	variables, etc;
+	two-column and one-column cases merged; space hacks moved;
+	colour support improved and corrected, including extra boxes.
+	In marginpars:
+	colour support improved and corrected, including extra boxes.
+	In footnotes:
+	colour support improved.
 
-        * ltoutput.dtx (subsection{Floats}):
+	* ltoutput.dtx (subsection{Floats}):
 
-        Small changes to documentation
-        Added colour support to \@topnewpage
-        Added colour support for footnotes to \@makecol
-        Added warning to \@fpsadddefault
+	Small changes to documentation
+	Added colour support to \@topnewpage
+	Added colour support for footnotes to \@makecol
+	Added warning to \@fpsadddefault
 
-        * ltdefns.dtx (subsection{Internal defining commands}):
+	* ltdefns.dtx (subsection{Internal defining commands}):
 
-        Added \@onelevel at sanitize
+	Added \@onelevel at sanitize
 
 1994-10-30 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * cmfonts.dst: Added OMScmnr and OMLcmr.
+	* cmfonts.dst: Added OMScmnr and OMLcmr.
 
-        * cmfonts.fdd: Added OMScmr and OMLcmr.
+	* cmfonts.fdd: Added OMScmr and OMLcmr.
 
-        * ltxguide.cls: Added \NEWdescription, \NEWfeature and the
-        optional argument to desc.
+	* ltxguide.cls: Added \NEWdescription, \NEWfeature and the
+	optional argument to desc.
 
-        * ltoutenc.dst: Added OMLenc.def.
+	* ltoutenc.dst: Added OMLenc.def.
 
-        * ltoutenc.dtx:  added encoding-specific commands from ltmath.
-          Added OML encoding.
-          Added \textcircled and removed \textregistered.
-          Added \DeclareTextCompositeCommand.
-          Added \t.
+	* ltoutenc.dtx:  added encoding-specific commands from ltmath.
+	Added OML encoding.
+	Added \textcircled and removed \textregistered.
+	Added \DeclareTextCompositeCommand.
+	Added \t.
 
-        * ltmath.dtx: Removed encoding-specific commands to ltoutenc.
+	* ltmath.dtx: Removed encoding-specific commands to ltoutenc.
 
 1994-10-29 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -8964,17 +9086,17 @@
 
 1994-10-29 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * fontsmpl.dtx: Added tests for \copyright, \dots and
-        \textregistered.
+	* fontsmpl.dtx: Added tests for \copyright, \dots and
+	\textregistered.
 
-        * ltmath.dtx: Added \mathellipsis, \mathparagraph, etc.
-        Removed all of the oldcomments and generally tidied up.
-        Added \DeclareMathOperator.
+	* ltmath.dtx: Added \mathellipsis, \mathparagraph, etc.
+	Removed all of the oldcomments and generally tidied up.
+	Added \DeclareMathOperator.
 
-        * ltoutenc.dtx: Added copyright and textregistered.
-        Renamed the text versions of \P, \S, etc. to \textparagraph,
-        \textsection, etc.
-        Added the definitions of \dots etc. which work in math and text.
+	* ltoutenc.dtx: Added copyright and textregistered.
+	Renamed the text versions of \P, \S, etc. to \textparagraph,
+	\textsection, etc.
+	Added the definitions of \dots etc. which work in math and text.
 
 1994-10-28 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -8983,17 +9105,17 @@
 
 1994-10-28 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * unpack2e.ins: Added OMSenc.def.
+	* unpack2e.ins: Added OMSenc.def.
 
-        * fontsmpl.dtx: Added the text commands defined in ltoutenc.dtx.
+	* fontsmpl.dtx: Added the text commands defined in ltoutenc.dtx.
 
-        * asajtest.ins: An installation file for asajtest.dtx.
+	* asajtest.ins: An installation file for asajtest.dtx.
 
-        * asajtest.tex: A test file for ltoutenc.dtx.  This should become
-        part of the test suite eventually.
+	* asajtest.tex: A test file for ltoutenc.dtx.  This should become
+	part of the test suite eventually.
 
-        * asajtest.dtx: This is a scratch version of ltoutenc.dtx.
-        Rewrote the enc.def files to use the new default settings.
+	* asajtest.dtx: This is a scratch version of ltoutenc.dtx.
+	Rewrote the enc.def files to use the new default settings.
 
 1994-10-27 David Carlisle <latex-bugs at latex-project.org>
 
@@ -9001,11 +9123,11 @@
 
 1994-10-27 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltoutenc.dtx: Removed loading of enc.def files.
+	* ltoutenc.dtx: Removed loading of enc.def files.
 
-        * fontdef.dtx: Added OMSenc.def.
+	* fontdef.dtx: Added OMSenc.def.
 
-        * ltoutenc.dst: Added OMSenc.def.
+	* ltoutenc.dst: Added OMSenc.def.
 
 1994-10-26 David Carlisle <latex-bugs at latex-project.org>
 
@@ -9014,22 +9136,22 @@
 1994-10-25 David Carlisle <latex-bugs at latex-project.org>
 
 	* ltdefns.dtx: Add documentation of star form of \newcommand.
-        Remove all `oldcomments' environments.
-        Add lots of `macro' environments.
+	Remove all `oldcomments' environments.
+	Add lots of `macro' environments.
 
 	* ltboxes.dtx: missing % in \@isavepicbox (was in ltpatch.ltx)
 
 1994-10-25 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltoutenc.dtx: Added default encodings.
-        Added \ProvideTextCommand and \ProvideTextCommandDefault.
-        Added the OMS encoding.
+	* ltoutenc.dtx: Added default encodings.
+	Added \ProvideTextCommand and \ProvideTextCommandDefault.
+	Added the OMS encoding.
 
 1994-10-24 Chris Rowley <latex-bugs at latex-project.org>
 
 	* ltmath.dtx:
 
-        Removed a TAB
+	Removed a TAB
 
 1994-10-24 David Carlisle <latex-bugs at latex-project.org>
 
@@ -9040,8 +9162,8 @@
 
 	* ltmath.dtx:
 
-        Added \normalcolor to \@eqnnum
-        Removed braces from \ensuremath
+	Added \normalcolor to \@eqnnum
+	Removed braces from \ensuremath
 
 1994-10-20 David Carlisle <latex-bugs at latex-project.org>
 
@@ -9054,11 +9176,11 @@
 
 1994-10-20 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * inputenc.dtx: Split characters into text-only and math-only.
-        Reded some of the \providecommand's in latin1.def.
+	* inputenc.dtx: Split characters into text-only and math-only.
+	Reded some of the \providecommand's in latin1.def.
 
-        * latex209.dtx: Corrected a typo---\mark{}{} should have been
-        \mark{{}{}}.
+	* latex209.dtx: Corrected a typo---\mark{}{} should have been
+	\mark{{}{}}.
 
 1994-10-19 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -9069,8 +9191,8 @@
 1994-10-18 David Carlisle <latex-bugs at latex-project.org>
 
 	* ltdefns.dtx: Add *-forms to define non-long variants of
-          commands.
-          Add extra check so \newenvironment{graf} generates an error.
+	commands.
+	Add extra check so \newenvironment{graf} generates an error.
 
 	* ltfiles.dtx: move \listfiles and \@addtofilelist here.
 
@@ -9078,29 +9200,29 @@
 
 1994-10-17 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * latex209.dtx: Added empty initial mark.
-        New method of switching off 2e commands.
-        Allow \newcommand on 2e commands.
+	* latex209.dtx: Added empty initial mark.
+	New method of switching off 2e commands.
+	Allow \newcommand on 2e commands.
 
 1994-10-16 Chris Rowley <latex-bugs at latex-project.org>
 
 	* ltsect.dtx:
 
-        Added \normalcolor to page-numbers in toc
+	Added \normalcolor to page-numbers in toc
 
 	* ltfntcmd.dtx:
 
-        Tidying, and typos fixed in documentation
-        Added check for empty text
-        Removed space from \nfss at text
-        Renamed \check at nocorr to \text at command:
-          to improve error messages
+	Tidying, and typos fixed in documentation
+	Added check for empty text
+	Removed space from \nfss at text
+	Renamed \check at nocorr to \text at command:
+	to improve error messages
 
 	* ltboxes.dtx (section{\LaTeX\ Box commands}):
 
 	Added \long to \fbox, \mbox, \sbox (from ltpatch)
 	\leavevmode corrected for frame boxes (from ltpatch)
-        \@parboxto macro added to \@iiiparbox,
+	\@parboxto macro added to \@iiiparbox,
 	  to remove misuse of \@empty
 
 1994-10-16 David Carlisle <latex-bugs at latex-project.org>
@@ -9130,7 +9252,7 @@
 1994-10-14 David Carlisle <latex-bugs at latex-project.org>
 
 	* latexbug.tex: Add latexbug.cfg system, so that personal
-          details do not need to be entered every time.
+	details do not need to be entered every time.
 
 1994-10-14 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -9173,16 +9295,16 @@
 1994-10-11 David Carlisle <latex-bugs at latex-project.org>
 
 	* ltdirchk.dtx: Redo ltxcheck: more friendly messages, check
-          for TeX3.14, and missing fonts.
-          Add automatic detection of TeX3.14 (previously in ltpatch.ltx)
+	for TeX3.14, and missing fonts.
+	Add automatic detection of TeX3.14 (previously in ltpatch.ltx)
 
 	* latexbug.tex: Modify to prompt for synopsis information.
 
 1994-10-07 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * pastex.txt: Installation guide for PasTeX on the Amiga.
+	* pastex.txt: Installation guide for PasTeX on the Amiga.
 
-        * ltoutenc.dtx: Moved ogonek accent.
+	* ltoutenc.dtx: Moved ogonek accent.
 
 1994-09-26 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -9212,10 +9334,10 @@
 
 1994-09-23 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * latex209.dtx: Added spaces to \@halfmag and friends.
+	* latex209.dtx: Added spaces to \@halfmag and friends.
 
-        * ltxguide.cls: Replaced \PassOptionsToPackage{article} by
-          \PassOptionsToClass{article}.
+	* ltxguide.cls: Replaced \PassOptionsToPackage{article} by
+	\PassOptionsToClass{article}.
 
 1994-09-21 David Carlisle <latex-bugs at latex-project.org>
 
@@ -9237,17 +9359,17 @@
 
 1994-09-04 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * inputenc.dtx: Added \cs{DeclareInputComposite} and the
-          \cs{ProvidesCommand}s to the encoding files.
-          Removed the definition of the accent slots in Latin-1.
+	* inputenc.dtx: Added \cs{DeclareInputComposite} and the
+	\cs{ProvidesCommand}s to the encoding files.
+	Removed the definition of the accent slots in Latin-1.
 
 1994-08-31 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * oztex.txt: Checked in revised version from Andrew.
+	* oztex.txt: Checked in revised version from Andrew.
 
 1994-08-30 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * yandytex.txt: Checked in revised version from Berthold.
+	* yandytex.txt: Checked in revised version from Berthold.
 
 1994-08-26 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -9261,8 +9383,8 @@
 
 1994-08-24 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * tlb0143.lvt, tlb0162.lvt, tlb0380.lvt, tlb0498.lvt, tlb0642.lvt,
-        tlb0830.lvt: Checked in.
+	* tlb0143.lvt, tlb0162.lvt, tlb0380.lvt, tlb0498.lvt, tlb0642.lvt,
+	tlb0830.lvt: Checked in.
 
 1994-08-09 David Carlisle <latex-bugs at latex-project.org>
 
@@ -9280,11 +9402,11 @@
 
 1994-07-27 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltnews.cls: Replaced \PassOptionToClass by \PassOptionsToClass.
+	* ltnews.cls: Replaced \PassOptionToClass by \PassOptionsToClass.
 
 1994-07-25 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * microtex.txt: Removed extraneous \dump.
+	* microtex.txt: Removed extraneous \dump.
 
 1994-07-18 David Carlisle <latex-bugs at latex-project.org>
 
@@ -9293,13 +9415,13 @@
 
 1994-07-18 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * microtex.txt: Added installation guide for MicroTeX.
+	* microtex.txt: Added installation guide for MicroTeX.
 
 1994-07-14 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * inputenc.dtx: Replaced \Dh by \DH and \Th by \TH.
-        Added \ensuremath to the math commands.
-        Added \inputencoding.
+	* inputenc.dtx: Replaced \Dh by \DH and \Th by \TH.
+	Added \ensuremath to the math commands.
+	Added \inputencoding.
 
 1994-07-13 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -9331,7 +9453,7 @@
 
 1994-07-13 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * fontsmpl.dtx: Added an \upshape.
+	* fontsmpl.dtx: Added an \upshape.
 
 1994-07-11 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -9364,9 +9486,9 @@
 
 	* ltpatch.ltx:
 	Added patches for:
-           \mathit in text mode
-           \loop could do one iteration too much in certain situations
-           T1 breaks german 2.4a (this is a german.sty problem actually)
+	\mathit in text mode
+	\loop could do one iteration too much in certain situations
+	T1 breaks german 2.4a (this is a german.sty problem actually)
 
 	* patches.txt:
 	Added descritions of further patch level 3 patches.
@@ -9374,33 +9496,33 @@
 
 1994-06-30 Chris Rowley <latex-bugs at latex-project.org>
 
-        * fntguide.tex
+	* fntguide.tex
 
 	Warning about enc.def commands added
 	Stuff on font definition files and encoding definition files
 	changed
-        <cdp> removed, for consistency, use <encoding> throughout
-        Small edits
+	<cdp> removed, for consistency, use <encoding> throughout
+	Small edits
 
-        * clsguide.tex
+	* clsguide.tex
 
 	Michael's amendments added
 
 1994-06-26 Chris Rowley <latex-bugs at latex-project.org>
 
-        * usrguide.tex
+	* usrguide.tex
 
 	Minor edits
 
-        * clsguide.tex
+	* clsguide.tex
 
 	Added stuff
 	Changed usage of <>
 	Reordered update stuff
 	Added Summary sheet
-        Removed draft status
+	Removed draft status
 
-        * ltxguide.cls
+	* ltxguide.cls
 
 1994-06-23 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -9423,7 +9545,7 @@
 	   \test..{} problem
 
 	Changed usage of <>
-        Changed definition of verbatim
+	Changed definition of verbatim
 
 1994-06-22 Chris Rowley <latex-bugs at latex-project.org>
 
@@ -9432,17 +9554,17 @@
 	Removed space from \DeclareTextCommand
 	Improved error messages from \DeclareTextCommand
 
-        * usrguide.tex
+	* usrguide.tex
 
 	Changed usage of <>
 
-        * clsguide.tex
+	* clsguide.tex
 
 	Added stuff
 	Changed usage of <>
 	Rationalised encoding stuff
 
-        * fntguide.tex
+	* fntguide.tex
 
 	Rationalised usage of cdp, ENC, encoding
 	Changed usage of <>
@@ -9460,18 +9582,18 @@
 
 	* usrguide.tex
 
-        Added stuff on project, money etc.
+	Added stuff on project, money etc.
 
 	* fntguide.tex
 
-        Corrcted largesymbols stuff.
+	Corrcted largesymbols stuff.
 
-        * clsguide.tex
+	* clsguide.tex
 
 	Major revision and additons.
-        Spell checked.
-        Removed \typeouts.
-        Removed overfull boxes.
+	Spell checked.
+	Removed \typeouts.
+	Removed overfull boxes.
 
 	* ltfntcmd.dtx:
 
@@ -9491,15 +9613,15 @@
 
 	* template.txt
 
-        Changed 2e to new.
+	Changed 2e to new.
 
 	* fntguide.tex
 
-        Tidying.
+	Tidying.
 
-        * directex.txt
+	* directex.txt
 
-        Corrected layout.
+	Corrected layout.
 
 1994-06-12 Rainer Schoepf <latex-bugs at latex-project.org>
 
@@ -9507,7 +9629,7 @@
 	distrib/unpacked.
 
 	* ltpatch.dtx: Don't set catcodes of upper 128 characters in
- 	TeX2.
+	TeX2.
 
 	* manifest.txt: Added directex.txt.
 
@@ -9523,42 +9645,42 @@
 	Removed these typeouts:
 	  \typeout{CONTENTS OF THE TOOLS BUNDLE: needs checking}
 	  \typeout{Marion said: Perhaps the different uses of
-            `newcommand and `providecommand can be shown a bit clearer}
+	`newcommand and `providecommand can be shown a bit clearer}
 	  \typeout{List of stuff in mfnfss, psnfss, babel not done}
 
 	* fntguide.tex
 
-        Editorial changes.
-        Removed duplicated text.
-        Removed unwanted blank lines.
+	Editorial changes.
+	Removed duplicated text.
+	Removed unwanted blank lines.
 
 	* emtex.txt
 
-        Added section on memory problems.
+	Added section on memory problems.
 
-        * directex.txt
+	* directex.txt
 
-        New file added.
+	New file added.
 
-        * install.txt
+	* install.txt
 
-        Added new file to list.
+	Added new file to list.
 
-        * readme.txt
+	* readme.txt
 
-        Editorial changes.
-        Added patches.txt, etc.
+	Editorial changes.
+	Added patches.txt, etc.
 
 	* patches.txt
 
-        Editorial changes.
-        Removed references to lists.
+	Editorial changes.
+	Removed references to lists.
 	Documented lack of lists.
 
 	* ltfntcmd.dtx
 
-        Corrected documentation, title etc.
-        Corrected dates in changes entries.
+	Corrected documentation, title etc.
+	Corrected dates in changes entries.
 
 1994-06-11 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -9613,13 +9735,13 @@
 1994-06-06 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* Makefile.dist: Changed mv to cp, added installation of *.ist
-        files, added target `clean'.
+	files, added target `clean'.
 
 	* manifest.txt: Changed name of distributed Makefile from
- 	Makefile to Makefile.unx.
+	Makefile to Makefile.unx.
 
 	* Makefile: Changed name of distributed Makefile from Makefile
- 	to Makefile.unx.
+	to Makefile.unx.
 
 1994-06-03 Chris Rowley <latex-bugs at latex-project.org>
 
@@ -9688,7 +9810,7 @@
 
 1994-06-01 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltnews01.tex: Corrected grammar.
+	* ltnews01.tex: Corrected grammar.
 
 1994-05-31 Chris Rowley <latex-bugs at latex-project.org>
 
@@ -9718,15 +9840,15 @@
 
 1994-05-31 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * latex209.dtx: Added SLiTeX logo again.
+	* latex209.dtx: Added SLiTeX logo again.
 
-        * ltnews01.tex: Finished off.
+	* ltnews01.tex: Finished off.
 
-        * ltnews.cls:  Added downloaded PS fonts options.
-        Removed angle brackets from <...> since these were the last
-        remaining bitmaps!
-        Added variants of the LaTeX logo.
-        Added the ltnews.cfg file.
+	* ltnews.cls:  Added downloaded PS fonts options.
+	Removed angle brackets from <...> since these were the last
+	remaining bitmaps!
+	Added variants of the LaTeX logo.
+	Added the ltnews.cfg file.
 
 1994-05-30 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -9746,8 +9868,8 @@
 	eufrak from main distribution to extra package directory..
 
 	* manifest.txt: Moved pandora, oldgerm, amsfonts, euscript,
- 	eufrak from main distribution to extra package directory.
- 	Removed features.tex from distribution.
+	eufrak from main distribution to extra package directory.
+	Removed features.tex from distribution.
 
 1994-05-30 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -9756,21 +9878,21 @@
 
 1994-05-30 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * usrguide.tex: Removed the description of mfnfss and tools
-           packages.
-        Removed sections that were commented out.
-        Removed typeouts.
-        Wrapped long lines.
-        Rewrote to remove overfull hboxes.
-        Moved the stuff on \newmathalphabet to the section on LaTeX
-           errors.
-        Rewrote the stuff on latex209.cfg, and replaced
-           \PassOptionsToClass (which requires you to list all the
-           known classes) with \ds at oldlfont.
-        Added the `LaTeX2e command in LaTeX 2.09 document' error.
-        Added the SLiTeX logo to the list of unsupported commands.
-        Added the full list of \text..., \...family, \...series, \...shape
-           and \math... commands.
+	* usrguide.tex: Removed the description of mfnfss and tools
+	packages.
+	Removed sections that were commented out.
+	Removed typeouts.
+	Wrapped long lines.
+	Rewrote to remove overfull hboxes.
+	Moved the stuff on \newmathalphabet to the section on LaTeX
+	errors.
+	Rewrote the stuff on latex209.cfg, and replaced
+	\PassOptionsToClass (which requires you to list all the
+	known classes) with \ds at oldlfont.
+	Added the `LaTeX2e command in LaTeX 2.09 document' error.
+	Added the SLiTeX logo to the list of unsupported commands.
+	Added the full list of \text..., \...family, \...series, \...shape
+	and \math... commands.
 
 1994-05-29 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -9799,40 +9921,40 @@
 
 1994-05-29 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltxguide.cls: Added italic correction to <...>.
-        Added \sourcecode.
+	* ltxguide.cls: Added italic correction to <...>.
+	Added \sourcecode.
 
-        * fntguide.tex: Corrected typos spotted by FMi.
-        Added the `math selection commands' section.
-        Replaced the notion of math font attributes with a description
-           closer to that in the Companion.
-        Moved stuff on declaring encodings into its own section
-        Moved stuff on font installation into its own section.
-        Moved stuff on initialization into its own section.
-        Moved stuff on naming conventions into its own section.
-        Moved DeclareFixedFont into text font selection.
-        Added text to the introduction.
-        Moved all of the enc.def file commands into one subsection.
-        Moved everything that's left without a home into the `miscellania'
-           section.
-        Generally tidied up.
+	* fntguide.tex: Corrected typos spotted by FMi.
+	Added the `math selection commands' section.
+	Replaced the notion of math font attributes with a description
+	closer to that in the Companion.
+	Moved stuff on declaring encodings into its own section
+	Moved stuff on font installation into its own section.
+	Moved stuff on initialization into its own section.
+	Moved stuff on naming conventions into its own section.
+	Moved DeclareFixedFont into text font selection.
+	Added text to the introduction.
+	Moved all of the enc.def file commands into one subsection.
+	Moved everything that's left without a home into the `miscellania'
+	section.
+	Generally tidied up.
 
 1994-05-28 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltxguide.cls: Made << and >> produce < and > inside verbatim.
-        Added ltxguide.cfg.
+	* ltxguide.cls: Made << and >> produce < and > inside verbatim.
+	Added ltxguide.cfg.
 
-        * fntguide.tex: Created file out of features.tex.
-        Redid document structure to fit with usrguide and clsguide.
-        Removed stuff on old style digits.
-        Moved text font stuff before math font stuff.
-        Removed `utilities' section.
-        Removed the author font commands (covered by usrguide).
-        Added description of the text font attributes.
-        Redid the description of the \f at ... commands.
-        Redid the description of the \...default commands.
-        Added the section on the \DeclareTextWidget commands.
-        Added the section on math attributes.
+	* fntguide.tex: Created file out of features.tex.
+	Redid document structure to fit with usrguide and clsguide.
+	Removed stuff on old style digits.
+	Moved text font stuff before math font stuff.
+	Removed `utilities' section.
+	Removed the author font commands (covered by usrguide).
+	Added description of the text font attributes.
+	Redid the description of the \f at ... commands.
+	Redid the description of the \...default commands.
+	Added the section on the \DeclareTextWidget commands.
+	Added the section on math attributes.
 
 1994-05-27 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -9864,17 +9986,17 @@
 	* tlb0438.tlg: Line number change in exscale package.
 
 	* Makefile: Renamed unpack2e.ins to unpack.ins and latex2e.ltx
- 	to latex.ltx, renamed format file to latex.fmt. Added test
- 	tlb0483.
+	to latex.ltx, renamed format file to latex.fmt. Added test
+	tlb0483.
 
 	* manifest.txt: Renamed unpack2e.ins to unpack.ins and
- 	latex2e.ltx to latex.ltx, rearranged a few lines.
+	latex2e.ltx to latex.ltx, rearranged a few lines.
 
 	* unpack2e.ins: Renamed unpack2e.ins to unpack.ins and
- 	latex2e.ltx to latex.ltx.
+	latex2e.ltx to latex.ltx.
 
 	* unpacked.txt: Renamed unpack2e.ins to unpack.ins and
- 	latex2e.ltx to latex.ltx.
+	latex2e.ltx to latex.ltx.
 
 	* tracefnt.dtx: Changed copyright line.
 
@@ -9905,15 +10027,15 @@
 
 1994-05-27 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltnews01.tex: Corrected filenames of usrguie and clsguide.
-        Removed ltnews.cls from filecontents.
+	* ltnews01.tex: Corrected filenames of usrguie and clsguide.
+	Removed ltnews.cls from filecontents.
 
-        * ltnews.cls: Checked this in.  Added angle brackets to <...>.
-        Added AMS and SliTeX logos.
+	* ltnews.cls: Checked this in.  Added angle brackets to <...>.
+	Added AMS and SliTeX logos.
 
-        * latex209.dtx: Added SliTeX logo.
+	* latex209.dtx: Added SliTeX logo.
 
-        * ltxguide.cls: Added SliTeX logo.
+	* ltxguide.cls: Added SliTeX logo.
 
 1994-05-26 Johannes Braams <latex-bugs at latex-project.org>
 
@@ -9963,7 +10085,7 @@
 	* ltxdoc.dtx: Add silent substitution for bold tt.
 
 	* ltdirchk.dtx: Fix bug in Mac parser. typo " should have been :
-           (reported by Andrew Trevorrow)
+	(reported by Andrew Trevorrow)
 
 	* ltbibl.dtx:  Add initial documentation section.
 
@@ -10072,12 +10194,12 @@
 	* manifest.txt: Added changes.txt.
 
 	* ltsect.dtx (\@dottedtocline): Put braces around argument 4
- 	(the actual toc entry) to avoid font (and possibly other)
- 	changes leaking out to the leaders.
+	(the actual toc entry) to avoid font (and possibly other)
+	changes leaking out to the leaders.
 
 	* vlatex01.tlg: Updated for extra lines around warning
- 	messages, removed trailing space in error help messages.
- 	Change in strut for footnotes causes blank line to disappear.
+	messages, removed trailing space in error help messages.
+	Change in strut for footnotes causes blank line to disappear.
 
 	* tnfss7.tlg: Update for new \protect handling, updated for new
 	values of \sfcode and correct \hbar accent.
@@ -10110,12 +10232,12 @@
 
 1994-05-25 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * clsguide.tex: Added introduction.
-        Added section on command naming.
-        Added section on docstrip.
-        Added details of option processing.
-        Added example of DeclareRobustCommand.
-        Checked the document in with the server.
+	* clsguide.tex: Added introduction.
+	Added section on command naming.
+	Added section on docstrip.
+	Added details of option processing.
+	Added example of DeclareRobustCommand.
+	Checked the document in with the server.
 
 1994-05-24 Chris Rowley <latex-bugs at latex-project.org>
 
@@ -10173,19 +10295,19 @@
 
 1994-05-24 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltxguide.tex: Checked in document class.
+	* ltxguide.tex: Checked in document class.
 
-        * clsguide.tex: Added sections on 2e font commands, defining \rm
-        etc., and obsolete commands.
-        Added stuff about \normalsize, \textheight and \textwidth being the
-        only mandatory commands.
-        Implemented Frank's suggestions for additions to the `loading other
-        files' section (which is now a subsection of `upgrading').
-        Added stuff on why primitive \input is a bad idea.
-        Added stuff on boxes and colour.
-        Moved general style stuff to overview section rather than 2.09
-        section.
-        Added newsletter example.
+	* clsguide.tex: Added sections on 2e font commands, defining \rm
+	etc., and obsolete commands.
+	Added stuff about \normalsize, \textheight and \textwidth being the
+	only mandatory commands.
+	Implemented Frank's suggestions for additions to the `loading other
+	files' section (which is now a subsection of `upgrading').
+	Added stuff on why primitive \input is a bad idea.
+	Added stuff on boxes and colour.
+	Moved general style stuff to overview section rather than 2.09
+	section.
+	Added newsletter example.
 
 1994-05-23 David Carlisle <latex-bugs at latex-project.org>
 
@@ -10323,10 +10445,10 @@
 
 1994-05-23 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * clsguide.tex: Redid document structure to be more like
-        usrguide.
-        Added section on class/package structure.
-        Restructured the commands list.
+	* clsguide.tex: Redid document structure to be more like
+	usrguide.
+	Added section on class/package structure.
+	Restructured the commands list.
 
 1994-05-22 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -10383,27 +10505,27 @@
 
 1994-05-22 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * usrguide.tex: Rewrote description of the new argument to
-        \newcommand.
-        Added section on classes and packages, on package options, and on
-        standard classes and packages.
-        Added some examples.
-        Added filecontents* and paragraph on what files can be sent.
-        Added section on latexsym in `old commands'.
-        Rewrote some stuff on 2.09 documents.
-        Added section on \frontmatter, \mainmatter and \backmatter.
-        Wrote `problems' section, including new error messages, stuff on
-        \tenrm and friends, old versions of files, and submitting a bug
-        report.
-        Added overview.
+	* usrguide.tex: Rewrote description of the new argument to
+	\newcommand.
+	Added section on classes and packages, on package options, and on
+	standard classes and packages.
+	Added some examples.
+	Added filecontents* and paragraph on what files can be sent.
+	Added section on latexsym in `old commands'.
+	Rewrote some stuff on 2.09 documents.
+	Added section on \frontmatter, \mainmatter and \backmatter.
+	Wrote `problems' section, including new error messages, stuff on
+	\tenrm and friends, old versions of files, and submitting a bug
+	report.
+	Added overview.
 
-        * lterror.dtx: Replaced braces with begingroup, to stop mathords
-        from sneaking into math mode.
-        Replaced \@generic at message and \@generic at error by \GenericError,
-        \GenericWarning and \GenericInfo.
-        Made \GenericError, \GenericWarning and \GenericInfor robust.
-        Replaced \\ and ~ by \MessageBreak and \space.
-        Replaced \string by \protect in some messages.
+	* lterror.dtx: Replaced braces with begingroup, to stop mathords
+	from sneaking into math mode.
+	Replaced \@generic at message and \@generic at error by \GenericError,
+	\GenericWarning and \GenericInfo.
+	Made \GenericError, \GenericWarning and \GenericInfor robust.
+	Replaced \\ and ~ by \MessageBreak and \space.
+	Replaced \string by \protect in some messages.
 
 1994-05-21 David Carlisle <latex-bugs at latex-project.org>
 
@@ -10455,20 +10577,20 @@
 
 1994-05-21 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltnews01.tex: Wrote 1st draft of LaTeX News #1.
+	* ltnews01.tex: Wrote 1st draft of LaTeX News #1.
 
-        * lterror.dtx: Made \@generic at message robust.
+	* lterror.dtx: Made \@generic at message robust.
 
 1994-05-20 Rainer Schoepf <latex-bugs at latex-project.org>
 
 	* vtl2e06.tlg: Update for new \protect handling, change in
- 	format of error messages, change in glue for framed boxes.
+	format of error messages, change in glue for framed boxes.
 
 	* vlatex06.tlg: Update for new \protect handling, change in
- 	format of error messages, change in glue for framed boxes.
+	format of error messages, change in glue for framed boxes.
 
 	* ltpage.dtx (\marboth, \markright): Changed setting for
- 	\protect.
+	\protect.
 
 	* tl2e7.tlg: Update for new \protect handling.
 
@@ -10507,7 +10629,7 @@
 	* ltmiscen.dtx (\@writefile): Added correct setting of \protect.
 
 	* ltfloat.dtx (\@xfloat): Restore @nobreak switch inside float
- 	to default value false.
+	to default value false.
 
 	* ltoutput.dtx (\@outputpage): Added setting of \protect during
 	\shipout.
@@ -10549,19 +10671,19 @@
 
 1994-05-20 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * lterror.dtx: Fixed a bug with \@inmatherr.
+	* lterror.dtx: Fixed a bug with \@inmatherr.
 
-        * ltfinal.dtx: Corrected checksum.
+	* ltfinal.dtx: Corrected checksum.
 
-        * lterror.dtx: Added \@latex at info@no at line.
-        Added missing full stops.
+	* lterror.dtx: Added \@latex at info@no at line.
+	Added missing full stops.
 
-        * ltdefns.dtx: Renamed @checkcommand to CheckCommand.
+	* ltdefns.dtx: Renamed @checkcommand to CheckCommand.
 
-        * latex209.dst: Added t1enc.sty.
+	* latex209.dst: Added t1enc.sty.
 
-        * latex209.dtx: Changed \@finalstrut.
-        Added t1enc.sty.
+	* latex209.dtx: Changed \@finalstrut.
+	Added t1enc.sty.
 
 1994-05-19 David Carlisle <latex-bugs at latex-project.org>
 
@@ -10659,8 +10781,8 @@
 	reappear.
 
 	* tltc001.tlg: Change in test2e setup causes box printout to
- 	reappear, strut in footnotes back to old version for
- 	compatibility mode.
+	reappear, strut in footnotes back to old version for
+	compatibility mode.
 
 1994-05-18 Rainer Schoepf <latex-bugs at latex-project.org>
 
@@ -10689,18 +10811,18 @@
 
 1994-05-18 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * latex209.dtx: Added \@finalstrut.
+	* latex209.dtx: Added \@finalstrut.
 
-        * ltlogos.dtx: Added the TeX logo.
-        Made the LaTeX2e logo use the text font 2 rather than the math
-        font 2.
+	* ltlogos.dtx: Added the TeX logo.
+	Made the LaTeX2e logo use the text font 2 rather than the math
+	font 2.
 
-        * ltoutenc.dtx: Fixed a typo with fontenc.sty... it's
-        \encodingdefault, not \defaultencoding!
+	* ltoutenc.dtx: Fixed a typo with fontenc.sty... it's
+	\encodingdefault, not \defaultencoding!
 
-        * ltfinal.dtx: Corrected the lccode for d-bar.
+	* ltfinal.dtx: Corrected the lccode for d-bar.
 
-        * ltoutenc.dtx: Made \.i produce i.
+	* ltoutenc.dtx: Made \.i produce i.
 
 1994-05-17 David Carlisle <latex-bugs at latex-project.org>
 
@@ -10766,19 +10888,19 @@
 
 1994-05-17 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * lterror.dtx: Moved error commands from ltdefns.dtx.
+	* lterror.dtx: Moved error commands from ltdefns.dtx.
 
-        * ltdefns.dtx: Added section on \protect.  Moved error commands to
-        lterror.dtx.
+	* ltdefns.dtx: Added section on \protect.  Moved error commands to
+	lterror.dtx.
 
-        * ltoutenc.dtx: Removed braces from \$ since they're now in
-        nfss at text.
+	* ltoutenc.dtx: Removed braces from \$ since they're now in
+	nfss at text.
 
-        * latex209.dtx: Fixed a bug with \ds at newlfont.
-        Removed extra spaces from the missing file error.
-        Commented out bezier with \iffalse...\fi rather than %% to avoid
-        bezier turning up in every file.
-        Corrected some documentation.
+	* latex209.dtx: Fixed a bug with \ds at newlfont.
+	Removed extra spaces from the missing file error.
+	Commented out bezier with \iffalse...\fi rather than %% to avoid
+	bezier turning up in every file.
+	Corrected some documentation.
 
 1994-05-16 David Carlisle <latex-bugs at latex-project.org>
 
@@ -10786,7 +10908,7 @@
 	and add extra braces so a_\ensuremath{foo} works.
 
 	* ltoutput.dtx: Add \color at begingroup to protect \normalcolor.
-          move \normalcolor out of the inner box.
+	move \normalcolor out of the inner box.
 
 1994-05-16 Rainer Schoepf <latex-bugs at latex-project.org>
 
@@ -10828,33 +10950,33 @@
 
 1994-05-16 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltcntrl.dtx: Split file from ltinit.dtx.
+	* ltcntrl.dtx: Split file from ltinit.dtx.
 
-        * ltcounts.dtx: Split file from ltinit.dtx.
+	* ltcounts.dtx: Split file from ltinit.dtx.
 
-        * ltdefns.dtx: Split file from ltinit.dtx.
+	* ltdefns.dtx: Split file from ltinit.dtx.
 
-        * lterror.dtx: Split file from ltinit.dtx.
+	* lterror.dtx: Split file from ltinit.dtx.
 
-        * ltlogos.dtx: Split file from ltinit.dtx.
+	* ltlogos.dtx: Split file from ltinit.dtx.
 
-        * ltpar.dtx: Split file from ltinit.dtx.
+	* ltpar.dtx: Split file from ltinit.dtx.
 
-        * ltspace.dtx: Split file from ltinit.dtx.
+	* ltspace.dtx: Split file from ltinit.dtx.
 
-        * ltoutenc.dtx: Removed \P, since it's not in the T1 encoding.
-        Added \r and \k accents.
-        Added \NG, \ng, \TH, \th, \DH, \dh, \DJ and \dj.
+	* ltoutenc.dtx: Removed \P, since it's not in the T1 encoding.
+	Added \r and \k accents.
+	Added \NG, \ng, \TH, \th, \DH, \dh, \DJ and \dj.
 
-        * latex209.dtx: Fixed a bug with \mediumseries.
+	* latex209.dtx: Fixed a bug with \mediumseries.
 
-        * ltoutenc.dtx: Redid fontenc.sty to use the new mixed-case
-        encoding files.
-        Fixed a bug with \pounds.
+	* ltoutenc.dtx: Redid fontenc.sty to use the new mixed-case
+	encoding files.
+	Fixed a bug with \pounds.
 
-        * latex209.dtx: Fixed a bug with the margid option.
+	* latex209.dtx: Fixed a bug with the margid option.
 
-        * ltfinal.dtx: Removed ot1enc.sty.
+	* ltfinal.dtx: Removed ot1enc.sty.
 
 1994-05-15 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -10867,7 +10989,7 @@
 
 1994-05-15 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * latex209.dtx: Added the nomargid and margid options.
+	* latex209.dtx: Added the nomargid and margid options.
 
 1994-05-14 David Carlisle <latex-bugs at latex-project.org>
 
@@ -10898,7 +11020,7 @@
 	code.
 
 	* tracefnt.dtx (section{Macros common to \texttt{fam.tex} and
-          \texttt{tracefnt.sty}}): Added \enc at update to selectfont.
+	\texttt{tracefnt.sty}}): Added \enc at update to selectfont.
 
 	* fam.dtx (section{Macros for setting up the tables}):
 	Initialise \<enc>@cmd in \DeclareFontEncoding.
@@ -10910,25 +11032,25 @@
 
 1994-05-14 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltoutenc.dtx: Renamed \ENC at cmd to \ENC-cmd, to avoid collisions
-        with commands like \U at cmd.
+	* ltoutenc.dtx: Renamed \ENC at cmd to \ENC-cmd, to avoid collisions
+	with commands like \U at cmd.
 
-        * ltoutenc.dst: Updated the dst file to match ltoutenc.dtx.
+	* ltoutenc.dst: Updated the dst file to match ltoutenc.dtx.
 
-        * latex209.dtx: Redid the oldlfont and newlfont options to set the
-        \@no at font@optfalse flag.
+	* latex209.dtx: Redid the oldlfont and newlfont options to set the
+	\@no at font@optfalse flag.
 
-        * fontsmpl.dtx: Split font sample document and package out of
-        ltoutenc.
+	* fontsmpl.dtx: Split font sample document and package out of
+	ltoutenc.
 
-        * ltoutenc.dtx: Stopped commands declared with DeclareTextWidget
-        from going into an infinite loop if f at encoding isn't the current
-        encoding.
-        Added fontenc package.
-        Made ot1enc.def and t1enc.def files rather than packages.
+	* ltoutenc.dtx: Stopped commands declared with DeclareTextWidget
+	from going into an infinite loop if f at encoding isn't the current
+	encoding.
+	Added fontenc package.
+	Made ot1enc.def and t1enc.def files rather than packages.
 
-        * latex209.dtx: Changed how 2e commands are switched off.
-        Removed the date from the announcement of 2.09 mode.
+	* latex209.dtx: Changed how 2e commands are switched off.
+	Removed the date from the announcement of 2.09 mode.
 
 1994-05-13 David Carlisle <latex-bugs at latex-project.org>
 
@@ -10948,10 +11070,10 @@
 	* ltboxes.dtx: New accent handling in parboxrestore.
 
 	* newlfont.dtx: \DeclareProtectedCommand now
-                        \DeclareRobustCommand
+	\DeclareRobustCommand
 
 	* oldlfont.dtx: \DeclareProtectedCommand now
-                        \DeclareRobustCommand
+	\DeclareRobustCommand
 
 	* ltpictur.dtx: Removed unnecessary braces from \@ifnextchar and
 	  \@ifstar constructions.
@@ -11018,35 +11140,35 @@
 
 1994-05-13 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltinit.dtx: Added \@backslashchar.
-        Improved coding of \@ifdefinable.
+	* ltinit.dtx: Added \@backslashchar.
+	Improved coding of \@ifdefinable.
 
-        * testdist.dtx: Improved documentation.
+	* testdist.dtx: Improved documentation.
 
-        * emtex.l2e: Created this file.
+	* emtex.l2e: Created this file.
 
-        * ltfinal.dtx: Loaded package ot1enc, and defined \@acci and
-        friends.
+	* ltfinal.dtx: Loaded package ot1enc, and defined \@acci and
+	friends.
 
-        * ltinit.dtx: Added logging to DeclareProtectedCommand.
+	* ltinit.dtx: Added logging to DeclareProtectedCommand.
 
-        * ltoutenc.dtx: Renamed accents.dtx to ltoutenc.dtx.
-        After all these months It's now a real bit of kernel! :-)
+	* ltoutenc.dtx: Renamed accents.dtx to ltoutenc.dtx.
+	After all these months It's now a real bit of kernel! :-)
 
-        * accents.dtx: Replaces \space by ` ' in csname.
+	* accents.dtx: Replaces \space by ` ' in csname.
 
-        * ltinit.dtx: Replaced \space by ` ' in \csname
+	* ltinit.dtx: Replaced \space by ` ' in \csname
 
-        * accents.dtx: Added \{, \} and \$.
+	* accents.dtx: Added \{, \} and \$.
 
-        * ltinit.dtx: Renamed DeclareProtectedCommand to
-        DeclareRobustCommand.
-        Moved DeclareRobustCommand after @gobble.
-        Removed @if at short@command.
-        Removed \{ and \}.
+	* ltinit.dtx: Renamed DeclareProtectedCommand to
+	DeclareRobustCommand.
+	Moved DeclareRobustCommand after @gobble.
+	Removed @if at short@command.
+	Removed \{ and \}.
 
-        * accents.dtx: Redid all the kernel commands.  Made t1.def and
-        ot1.def into t1enc.sty and ot1enc.sty.
+	* accents.dtx: Redid all the kernel commands.  Made t1.def and
+	ot1.def into t1enc.sty and ot1enc.sty.
 
 1994-05-12 Braams J.L. <latex-bugs at latex-project.org>
 
@@ -11129,7 +11251,7 @@
 
 1994-05-12 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltinit.dtx: Fixed a bug with DeclareProtectedCommand.
+	* ltinit.dtx: Fixed a bug with DeclareProtectedCommand.
 
 1994-05-11 Braams J.L. <latex-bugs at latex-project.org>
 
@@ -11148,18 +11270,18 @@
 
 1994-05-11 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltinit.dtx: Moved the logos to after \DeclareProtectedCommand.
-        Defined them using \DeclareProtectedCommand.
-        Made the SLiTeX logo use the TeX logo.
-        Made \, and \hspace use \DeclareProtectedCommand.
+	* ltinit.dtx: Moved the logos to after \DeclareProtectedCommand.
+	Defined them using \DeclareProtectedCommand.
+	Made the SLiTeX logo use the TeX logo.
+	Made \, and \hspace use \DeclareProtectedCommand.
 
-        * ltfinal.dtx: Added %%% ltfinal.dtx line.
+	* ltfinal.dtx: Added %%% ltfinal.dtx line.
 
-        * ltinit.dtx: Added %%% ltinit.dtx line.
+	* ltinit.dtx: Added %%% ltinit.dtx line.
 
-        * latex209.dst: Added dummy bezier.sty.
+	* latex209.dst: Added dummy bezier.sty.
 
-        * latex209.dtx: Added dummy bezier.sty.
+	* latex209.dtx: Added dummy bezier.sty.
 
 1994-05-10 Rainer Schoepf <latex-bugs at latex-project.org>
 
@@ -11168,10 +11290,10 @@
 
 1994-05-10 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltinit.dtx: Added documentation sent by DPC.
-        Moved \makeatletter and \maketother into ltinit.
-        Added extra ^^Js to \@latexerr.
-        Removed a couple of spurious braces.
+	* ltinit.dtx: Added documentation sent by DPC.
+	Moved \makeatletter and \maketother into ltinit.
+	Added extra ^^Js to \@latexerr.
+	Removed a couple of spurious braces.
 
 1994-05-09 Rainer Schoepf <latex-bugs at latex-project.org>
 
@@ -11230,9 +11352,9 @@
 
 1994-05-08 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * somedefs.dtx: Produced v0.01.
+	* somedefs.dtx: Produced v0.01.
 
-        * rawfonts.dtx: Produced v0.01, using somedefs.dtx.
+	* rawfonts.dtx: Produced v0.01, using somedefs.dtx.
 
 1994-05-07 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -11282,7 +11404,7 @@
 
 1994-05-05 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltfinal.dtx: Added empty \errhelp.
+	* ltfinal.dtx: Added empty \errhelp.
 
 1994-05-04 David Carlisle <latex-bugs at latex-project.org>
 
@@ -11334,7 +11456,7 @@
 
 1994-05-03 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * ltfinal.dtx: Set the catcode of ^^J to other.
+	* ltfinal.dtx: Set the catcode of ^^J to other.
 
 	Removed \@undefinedfonterror.
 
@@ -11350,16 +11472,16 @@
 
 1994-05-02 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * latex209.dtx: Redid the method of switching off 2e commands.
+	* latex209.dtx: Redid the method of switching off 2e commands.
 
-        * ltfinal.dtx: Set all the catcodes before dumping.  Made 127
-          illegal.
+	* ltfinal.dtx: Set all the catcodes before dumping.  Made 127
+	illegal.
 
-        * install.l2e: Added yandytex.l2e
+	* install.l2e: Added yandytex.l2e
 
-        * accents.dtx: Rewrote almost everything from scratch.
+	* accents.dtx: Rewrote almost everything from scratch.
 
-        * yandytex.l2e: Installed a file from Berthold
+	* yandytex.l2e: Installed a file from Berthold
 
 	Corrected \@fontswitch.
 
@@ -11367,9 +11489,9 @@
 
 	* ltfloat.dtx (subsection{Floating Environments}):
 
-        Added \@largefloatcheck.
+	Added \@largefloatcheck.
 
-        Removed unnecessary braces from arguments of \@ifnextchar.
+	Removed unnecessary braces from arguments of \@ifnextchar.
 
 1994-05-01 Braams J.L. <latex-bugs at latex-project.org>
 
@@ -11394,7 +11516,7 @@
 
 1994-04-30 Chris Rowley <latex-bugs at latex-project.org>
 
-        * ltinit.dtx:
+	* ltinit.dtx:
 
 	Added latexinfo commands.
 
@@ -11407,11 +11529,11 @@
 
 	Changed to, eg, v1.0l.
 
-        * ltoutput.dtx:
+	* ltoutput.dtx:
 
-        Rogue space removed.
+	Rogue space removed.
 
-        Cut-off points for adding \@emptycol changed.
+	Cut-off points for adding \@emptycol changed.
 
 	Empty column action added: \@emptycol.
 
@@ -11577,10 +11699,10 @@
 
 1994-04-21 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * install.l2e: Corrected the wording of the bug report.
+	* install.l2e: Corrected the wording of the bug report.
 
-        * ltfinal.dtx: Added some documentation, incorporated ltcodes.dtx.
-        This now includes setting the catcodes of 128--255 to `illegal'.
+	* ltfinal.dtx: Added some documentation, incorporated ltcodes.dtx.
+	This now includes setting the catcodes of 128--255 to `illegal'.
 
 1994-04-20 David Carlisle <latex-bugs at latex-project.org>
 
@@ -11606,7 +11728,7 @@
 
 1994-04-20 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * latex209.dtx: Redefined \verbatim at noligs@list.
+	* latex209.dtx: Redefined \verbatim at noligs@list.
 
 1994-04-19 David Carlisle <latex-bugs at latex-project.org>
 
@@ -11639,7 +11761,7 @@
 	\no at alphabet@help removed.
 
 	* tracefnt.dtx:
-        Changed line breaks and wording in some messages.
+	Changed line breaks and wording in some messages.
 	Removed surplus "." from some warning messages.
 	All warning/error messages changed to start "LaTeX Font Warning" etc.
 	Continuation lines are changed to "(Font)".
@@ -11650,15 +11772,15 @@
 
 1994-04-18 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * web2ctex.l2e: Changed name from unixtex.l2e.  Changed the
-        example shell script to look for a LATEX209INPUTS environment
-        variable.
+	* web2ctex.l2e: Changed name from unixtex.l2e.  Changed the
+	example shell script to look for a LATEX209INPUTS environment
+	variable.
 
-        * install.l2e: Changed name of unixtex.l2e to
-        web2ctex.l2e.
+	* install.l2e: Changed name of unixtex.l2e to
+	web2ctex.l2e.
 
-        * latint.dtx: Changed \font at warning to \font at log for redefining
-        math alphabets and symbol fonts.
+	* latint.dtx: Changed \font at warning to \font at log for redefining
+	math alphabets and symbol fonts.
 
 1994-04-17 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -11713,10 +11835,10 @@
 
 1994-04-14 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * latexbug.tex: Changed the prompt for `a list of files' to a
-        prompt for a single filename.  Made latexbug look to see if it
-        could find the file, and if it can, it includes the file and the
-        logfile in the latexbug.msg.
+	* latexbug.tex: Changed the prompt for `a list of files' to a
+	prompt for a single filename.  Made latexbug look to see if it
+	could find the file, and if it can, it includes the file and the
+	logfile in the latexbug.msg.
 
 1994-04-12 David Carlisle <latex-bugs at latex-project.org>
 
@@ -11740,7 +11862,7 @@
 
 1994-04-12 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * oztex.l2e: Added warning that lines are > 80 chars
+	* oztex.l2e: Added warning that lines are > 80 chars
 
 1994-04-11 Braams J.L. <latex-bugs at latex-project.org>
 
@@ -11772,18 +11894,18 @@
 
 1994-04-11 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * fam.dtx: Added `defaultscriptratio and
-        `defaultscriptscriptratio.
+	* fam.dtx: Added `defaultscriptratio and
+	`defaultscriptscriptratio.
 
-        * latex209.dtx: Switched off `enlargethispage and the `!' float
-        option.
+	* latex209.dtx: Switched off `enlargethispage and the `!' float
+	option.
 
 1994-04-10 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * install.l2e: Split the installation guide into install.l2e,
-        texpert.l2e, and system-specific oztex.l2e and unixtex.l2e files.
+	* install.l2e: Split the installation guide into install.l2e,
+	texpert.l2e, and system-specific oztex.l2e and unixtex.l2e files.
 
-        * template.l2e: Created a template for system.l2e files.
+	* template.l2e: Created a template for system.l2e files.
 
 1994-04-09 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -11800,15 +11922,15 @@
 
 1994-04-05 Alan Jeffrey <latex-bugs at latex-project.org>
 
-        * latex209.dtx: Switched off `lrbox, `width, `height and `depth in
-        2.09 mode.
+	* latex209.dtx: Switched off `lrbox, `width, `height and `depth in
+	2.09 mode.
 
-        Removed optional arguments to `parbox, `minipage and `newcommand.
+	Removed optional arguments to `parbox, `minipage and `newcommand.
 
-        Made `ProvidesPackage and `ProvidesClass produce log entries
-        rather than warnings.
+	Made `ProvidesPackage and `ProvidesClass produce log entries
+	rather than warnings.
 
-        Removed `filedate.
+	Removed `filedate.
 
 1994-03-31 David Carlisle <latex-bugs at latex-project.org>
 
@@ -12015,13 +12137,13 @@
 	Corrected unpacking for ltxdoc.cls (change of docstrip module).
 
 	* classes.dtx
-        (subsubsection{The dimension of text}):
+	(subsubsection{The dimension of text}):
 	Use same default values for native mode as in old styles.
 
 	(section{Identification}):
 	Added file versions to the \Provides... commands
 
-        (subsection{Footnotes}):
+	(subsection{Footnotes}):
 	Use \@makefnmark rather than its expansion in the definition
 	of \@makefntext.
 
@@ -12058,7 +12180,7 @@
 1994-03-12 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
 	* classes.dtx
-        (section{Identification}):
+	(section{Identification}):
 	Removed \typeout statements since this is now handled by
 	\Provide...
 
@@ -12337,7 +12459,7 @@
 
 	* ltxdoc.dtx:
 	Added driver code in front so that the documentation can be
-        processed by simply running the file through LaTeX2e.
+	processed by simply running the file through LaTeX2e.
 	Set counter StandardModuleDepth to 1, since all ltx documentation
 	needs that setting anyway.
 
@@ -12408,7 +12530,7 @@
 
 	* oldgerm.dtx:
 	Moved the driver code in front so that the documentation can be
-        processed by simply running the file through LaTeX2e.
+	processed by simply running the file through LaTeX2e.
 	Removed extra pair of braces after \DeclareFontFamily which has
 	only three arguments not four.
 
@@ -12422,7 +12544,7 @@
 
 	* varioref.dtx:
 	Moved the driver code in front so that the documentation can be
-        processed by simply running the file through LaTeX2e.
+	processed by simply running the file through LaTeX2e.
 
 1994-02-27 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
@@ -12436,67 +12558,67 @@
 	* eufrak.dtx:
 	Changed driver code slightly.
 	Moved the driver code in front so that the documentation can be
-        processed by simply running the file through LaTeX2e.
+	processed by simply running the file through LaTeX2e.
 
 	* euscript.dtx:
 	Changed driver code slightly.
 	Moved the driver code in front so that the documentation can be
-        processed by simply running the file through LaTeX2e.
+	processed by simply running the file through LaTeX2e.
 
 	* exscale.dtx:
 	Moved the driver code in front so that the documentation can be
-        processed by simply running the file through LaTeX2e.
+	processed by simply running the file through LaTeX2e.
 
 	* nfssfont.dtx:
 	Added to the distribution.
 	Moved the driver code in front so that the documentation can be
-        processed by simply running the file through LaTeX2e.
+	processed by simply running the file through LaTeX2e.
 
 	* docstrip.dtx (section{Producing the documentation}):
 	Moved the driver code in front so that the documentation can be
-        processed by simply running the file through LaTeX2e.
+	processed by simply running the file through LaTeX2e.
 
 	* oldlfont.dtx:
 	Moved the driver code in front so that the documentation can be
-        processed by simply running the file through LaTeX2e.
+	processed by simply running the file through LaTeX2e.
 
 	* latexsym.dtx:
 	Moved the driver code in front so that the documentation can be
-        processed by simply running the file through LaTeX2e.
+	processed by simply running the file through LaTeX2e.
 
 	* newlfont.dtx:
 	Moved the driver code in front so that the documentation can be
-        processed by simply running the file through LaTeX2e.
+	processed by simply running the file through LaTeX2e.
 
 	* pandora.dtx:
 	Moved the driver code in front so that the documentation can be
-        processed by simply running the file through LaTeX2e.
+	processed by simply running the file through LaTeX2e.
 
 	* preload.dtx:
 	Moved the driver code in front so that the documentation can be
-        processed by simply running the file through LaTeX2e.
+	processed by simply running the file through LaTeX2e.
 
 	* lhyphen.dtx:
 	Moved the driver code in front so that the documentation can be
-        processed by simply running the file through LaTeX2e.
+	processed by simply running the file through LaTeX2e.
 
 	* fontdef.dtx:
 	Moved the driver code in front so that the documentation can be
-        processed by simply running the file through LaTeX2e.
+	processed by simply running the file through LaTeX2e.
 
 	* fontcmds.dtx:
 	Moved the driver code in front so that the documentation can be
-        processed by simply running the file through LaTeX2e.
+	processed by simply running the file through LaTeX2e.
 
 1994-02-24 Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
 
-       * ltdirchk.dtx: 0.2j "General" \noboundaryis \relax not undef in
-         TeX2 (initialised in 2e format)
+	* ltdirchk.dtx: 0.2j "General" \noboundaryis \relax not undef in
+	TeX2 (initialised in 2e format)
 
-       * ltdirchk.dtx: 0.2j "General" Remove need for drv file
+	* ltdirchk.dtx: 0.2j "General" Remove need for drv file
 
 	* fam.dtx (subsection{Macros for loading fonts}):
-        Removed catcode settings from \try at load@fontshape and
+	Removed catcode settings from \try at load@fontshape and
 	\DeclareFontShape and placed them into a separate macro called
 	\nfss at catcodes so that it is easier to maintain special
 	requirements for packages that make certain characters active.
@@ -12503,927 +12625,927 @@
 
 1994-02-10 Alan Jeffrey <latex-bugs at latex-project.org>
 
-       * ltclass.dtx: 0.2z \@fileswithoptions Renamed \@compatibility to
-         \@documentclasshook. ASAJ.
+	* ltclass.dtx: 0.2z \@fileswithoptions Renamed \@compatibility to
+	\@documentclasshook. ASAJ.
 
-       * ltclass.dtx: 0.2z \@documentclasshook Changed the name from
-         \@compatibility to \@documentclasshook, and added the check
-         for whether \@normalsize has been defined. ASAJ.
+	* ltclass.dtx: 0.2z \@documentclasshook Changed the name from
+	\@compatibility to \@documentclasshook, and added the check
+	for whether \@normalsize has been defined. ASAJ.
 
 1994-02-07 Alan Jeffrey <latex-bugs at latex-project.org>
 
-       * ltclass.dtx: 0.2y \ProcessOptions* Add extra ,s so `two' is not
-         matched with `twocolumn'
+	* ltclass.dtx: 0.2y \ProcessOptions* Add extra ,s so `two' is not
+	matched with `twocolumn'
 
-       * ltclass.dtx: 0.2y \ProcessOptions* Add extra ,s so `two' is not
-         matched with `twocolumn'
+	* ltclass.dtx: 0.2y \ProcessOptions* Add extra ,s so `two' is not
+	matched with `twocolumn'
 
-       * ltclass.dtx: 0.2y \@ifclasswith Add extra ,s so `two' is not
-         matched with `twocolumn'
+	* ltclass.dtx: 0.2y \@ifclasswith Add extra ,s so `two' is not
+	matched with `twocolumn'
 
-       * ltclass.dtx: 0.2y \@fileswithoptions Run \@compatibility on the
-         first class to start (not the first to finish)
+	* ltclass.dtx: 0.2y \@fileswithoptions Run \@compatibility on the
+	first class to start (not the first to finish)
 
 1994-02-03 N.N. <latex-bugs at latex-project.org>
 
-       * ltinit.dtx: LaTeX2e "General" correct mistakes in the
-         documentation
+	* ltinit.dtx: LaTeX2e "General" correct mistakes in the
+	documentation
 
 1994-02-02 N.N. <latex-bugs at latex-project.org>
 
-       * ltclass.dtx: 0.2x \@fileswithoptions Only run the hook and
-         options check if the file was loaded.
+	* ltclass.dtx: 0.2x \@fileswithoptions Only run the hook and
+	options check if the file was loaded.
 
 1994-02-01 David Carlisle <latex-bugs at latex-project.org>
 
-       * ltherest.dtx: LaTeX2e \thispagestyle (DPC) Modify to get nicer
-         error message
+	* ltherest.dtx: LaTeX2e \thispagestyle (DPC) Modify to get nicer
+	error message
 
-       * ltherest.dtx: LaTeX2e \pagestyle (DPC) Modify to get nicer
-         error message
+	* ltherest.dtx: LaTeX2e \pagestyle (DPC) Modify to get nicer
+	error message
 
 1994-01-31 N.N. <latex-bugs at latex-project.org>
 
-       * ltinit.dtx: LaTeX2e "General" use \@normalsize instead of
-         \normalsizeinternally
+	* ltinit.dtx: LaTeX2e "General" use \@normalsize instead of
+	\normalsizeinternally
 
-       * ltfiles.dtx: v0.9t \document set `@normalsize or `normalsize if
-         necessary
+	* ltfiles.dtx: v0.9t \document set `@normalsize or `normalsize if
+	necessary
 
-       * ltclass.dtx: 0.2w \g at addto@macro Use toks register to avoid
-         `hash' problems
+	* ltclass.dtx: 0.2w \g at addto@macro Use toks register to avoid
+	`hash' problems
 
-       * fontcmds.dtx: v3.1b "General" `@normalsize no longer defined
+	* fontcmds.dtx: v3.1b "General" `@normalsize no longer defined
 
 1994-01-29 N.N. <latex-bugs at latex-project.org>
 
-       * ltclass.dtx: 0.2v \@fileswithoptions All options raise error if
-         no \ProcessOptions\ appears
+	* ltclass.dtx: 0.2v \@fileswithoptions All options raise error if
+	no \ProcessOptions\ appears
 
-       * ltclass.dtx: 0.2v \@@unprocessedoptions Macro added.
+	* ltclass.dtx: 0.2v \@@unprocessedoptions Macro added.
 
 1994-01-28 N.N. <latex-bugs at latex-project.org>
 
-       * ltinit.dtx: LaTeX2e "General" Let \fmtversion point to current
-         file date.
+	* ltinit.dtx: LaTeX2e "General" Let \fmtversion point to current
+	file date.
 
 1994-01-27 N.N. <latex-bugs at latex-project.org>
 
-       * fontcmds.dtx: v3.1a \nocorrlist Only ., used as default for cm
-         fonts
+	* fontcmds.dtx: v3.1a \nocorrlist Only ., used as default for cm
+	fonts
 
 1994-01-25 David Carlisle <latex-bugs at latex-project.org>
 
-       * ltplain.dtx: LaTeX2e \bordermatrix Removed \p at renwd.
+	* ltplain.dtx: LaTeX2e \bordermatrix Removed \p at renwd.
 
-       * ltdirchk.dtx: 0.2i "General" Protect against looping on
-         \@@input and \@@end
+	* ltdirchk.dtx: 0.2i "General" Protect against looping on
+	\@@input and \@@end
 
 1994-01-24 David Carlisle <latex-bugs at latex-project.org>
 
-       * ltherest.dtx: LaTeX2e \pagestyle (DPC) Complain if pagestyle is
-         undefined.
+	* ltherest.dtx: LaTeX2e \pagestyle (DPC) Complain if pagestyle is
+	undefined.
 
-       * ltdirchk.dtx: 0.2h \IfFileExists Stop testing once texsys.aux
-         has been found
+	* ltdirchk.dtx: 0.2h \IfFileExists Stop testing once texsys.aux
+	has been found
 
 1994-01-21 David Carlisle <latex-bugs at latex-project.org>
 
-       * ltmiscen.dtx: v0.9s \verbatim at font Removed unnecessary category
-         code hackery.
+	* ltmiscen.dtx: v0.9s \verbatim at font Removed unnecessary category
+	code hackery.
 
-       * ltherest.dtx: LaTeX2e \@xfloat Added missing percent
-         characters.
+	* ltherest.dtx: LaTeX2e \@xfloat Added missing percent
+	characters.
 
-       * ltdirchk.dtx: 0.2g \today Name changeed from \stamp, to save
-         memory
+	* ltdirchk.dtx: 0.2g \today Name changeed from \stamp, to save
+	memory
 
-       * ltdirchk.dtx: 0.2g \filename at parse Minor changes, and add Mac
-         version (:)
+	* ltdirchk.dtx: 0.2g \filename at parse Minor changes, and add Mac
+	version (:)
 
-       * ltdirchk.dtx: 0.2g "General" Improve documentation, reorganise
-         docstrip module
+	* ltdirchk.dtx: 0.2g "General" Improve documentation, reorganise
+	docstrip module
 
-       * ltclass.dtx: 0.2u \documentstyle compatibility file now
-         latex209.def.
+	* ltclass.dtx: 0.2u \documentstyle compatibility file now
+	latex209.def.
 
 1994-01-20 David Carlisle <latex-bugs at latex-project.org>
 
-       * ltdirchk.dtx: 0.2f \IfFileExists \@copytexsys removed
+	* ltdirchk.dtx: 0.2f \IfFileExists \@copytexsys removed
 
-       * ltdirchk.dtx: 0.2f "General" \@copytexsys and the texsys.new
-         file removed
+	* ltdirchk.dtx: 0.2f "General" \@copytexsys and the texsys.new
+	file removed
 
-       * ltdirchk.dtx: 0.2f "General" Modify all of ltxcheck
+	* ltdirchk.dtx: 0.2f "General" Modify all of ltxcheck
 
 1994-01-19 David Carlisle <latex-bugs at latex-project.org>
 
-       * ltdirchk.dtx: 0.2e \strip at prefix name changed from
-         \strip at meaning, to match NFSS
+	* ltdirchk.dtx: 0.2e \strip at prefix name changed from
+	\strip at meaning, to match NFSS
 
-       * ltdirchk.dtx: 0.2e \input at path No longer check that an empty
-         group is in the path
+	* ltdirchk.dtx: 0.2e \input at path No longer check that an empty
+	group is in the path
 
-       * ltdirchk.dtx: 0.2e \IfFileExists name changed from \test
+	* ltdirchk.dtx: 0.2e \IfFileExists name changed from \test
 
 1994-01-18 N.N. <latex-bugs at latex-project.org>
 
-       * ltmiscen.dtx: v0.9p \@verbatim Only add \penaltyif in hmode
+	* ltmiscen.dtx: v0.9p \@verbatim Only add \penaltyif in hmode
 
-       * ltherest.dtx: LaTeX2e \bibliography Use \@input@ so include
-         files are listed.
+	* ltherest.dtx: LaTeX2e \bibliography Use \@input@ so include
+	files are listed.
 
-       * ltfiles.dtx: v0.9p \include Use \@input@ so include files are
-         listed.
+	* ltfiles.dtx: v0.9p \include Use \@input@ so include files are
+	listed.
 
-       * ltfiles.dtx: v0.9p \InputIfFileExists New Definition
+	* ltfiles.dtx: v0.9p \InputIfFileExists New Definition
 
-       * ltfiles.dtx: v0.9p \IfFileExists New Definition
+	* ltfiles.dtx: v0.9p \IfFileExists New Definition
 
-       * ltfiles.dtx: v0.9p \@input@ Macro added
+	* ltfiles.dtx: v0.9p \@input@ Macro added
 
-       * ltfiles.dtx: v0.9p \@input do not use a different definition
-         for \input at path
+	* ltfiles.dtx: v0.9p \@input do not use a different definition
+	for \input at path
 
-       * ltfiles.dtx: v0.9p \@iffileonpath Macro added
+	* ltfiles.dtx: v0.9p \@iffileonpath Macro added
 
-       * ltfiles.dtx: v0.9p \@break at loop Macro added
+	* ltfiles.dtx: v0.9p \@break at loop Macro added
 
-       * ltclass.dtx: 0.2t \@ifclassloaded Fix typo \@pkgetension
+	* ltclass.dtx: 0.2t \@ifclassloaded Fix typo \@pkgetension
 
 1994-01-17 N.N. <latex-bugs at latex-project.org>
 
-       * ltclass.dtx: 0.2s \listfiles New Version, adds `.tex' if
-         needed, and lines up columns
+	* ltclass.dtx: 0.2s \listfiles New Version, adds `.tex' if
+	needed, and lines up columns
 
-       * ltclass.dtx: 0.2s "General" Wrapped long lines to column 72
+	* ltclass.dtx: 0.2s "General" Wrapped long lines to column 72
 
-       * ltclass.dtx: 0.2s "General" Added many more \@onlypreamble
-         commands
+	* ltclass.dtx: 0.2s "General" Added many more \@onlypreamble
+	commands
 
-       * ltclass.dtx: 0.2s \@fileswithoptions Modify to reduce parameter
-         stack usage
+	* ltclass.dtx: 0.2s \@fileswithoptions Modify to reduce parameter
+	stack usage
 
-       * ltclass.dtx: 0.2s \@fileswithoptions Modify to reduce parameter
-         stack usage
+	* ltclass.dtx: 0.2s \@fileswithoptions Modify to reduce parameter
+	stack usage
 
 1994-01-15 N.N. <latex-bugs at latex-project.org>
 
-       * ltfiles.dtx: v0.9o \document move `@preamblecmds after document
-         hook
+	* ltfiles.dtx: v0.9o \document move `@preamblecmds after document
+	hook
 
 1994-01-14 David Carlisle <latex-bugs at latex-project.org>
 
-       * ltdirchk.dtx: 0.2d \IfFileExists Close the texsys.aux output
-         stream
+	* ltdirchk.dtx: 0.2d \IfFileExists Close the texsys.aux output
+	stream
 
 1993-12-20 N.N. <latex-bugs at latex-project.org>
 
-       * ltinit.dtx: LaTeX2e \@reargdef Kept old version of \@reargdef,
-         for array.sty
+	* ltinit.dtx: LaTeX2e \@reargdef Kept old version of \@reargdef,
+	for array.sty
 
-       * ltfiles.dtx: 0.9m \@obsoletefile Added this command, removed
-         @oldfilewarning
+	* ltfiles.dtx: 0.9m \@obsoletefile Added this command, removed
+	@oldfilewarning
 
 1993-12-19 Alan Jeffrey <latex-bugs at latex-project.org>
 
-       * ltinit.dtx: LaTeX2e \@esphack There seem to be problems with
-         selfmade birthday presents
+	* ltinit.dtx: LaTeX2e \@esphack There seem to be problems with
+	selfmade birthday presents
 
-       * ltclass.dtx: 0.2r \endfilecontents Different message when
-         ignoring a file
+	* ltclass.dtx: 0.2r \endfilecontents Different message when
+	ignoring a file
 
-       * fontcmds.dtx: v3.0b "General" Untidying added, so this is now a
-         TEMPORARY version.
+	* fontcmds.dtx: v3.0b "General" Untidying added, so this is now a
+	TEMPORARY version.
 
-       * fontcmds.dtx: v3.0b "General" Some more tidying done.
+	* fontcmds.dtx: v3.0b "General" Some more tidying done.
 
-       * fontcmds.dtx: v3.0b "General" Other tidying
+	* fontcmds.dtx: v3.0b "General" Other tidying
 
-       * fontcmds.dtx: v3.0b "General" @pdef comand added
+	* fontcmds.dtx: v3.0b "General" @pdef comand added
 
-       * fontcmds.dtx: v3.0b \@protecteddef Command added
+	* fontcmds.dtx: v3.0b \@protecteddef Command added
 
-       * fontcmds.dtx: v3.0b \@newtextcmd Corrected and tidied
+	* fontcmds.dtx: v3.0b \@newtextcmd Corrected and tidied
 
-       * fontcmds.dtx: v3.0b \@newfontswitch Corrected and tidied
+	* fontcmds.dtx: v3.0b \@newfontswitch Corrected and tidied
 
-       * fontcmds.dtx: 3.0b "General" Wording changes by CAR.
+	* fontcmds.dtx: 3.0b "General" Wording changes by CAR.
 
-       * fontcmds.dtx: 3.0b "General" Made \@newfontswitch produce an
-         error if the command already exists, and added
-         \@renewfontswitch. ASAJ.
+	* fontcmds.dtx: 3.0b "General" Made \@newfontswitch produce an
+	error if the command already exists, and added
+	\@renewfontswitch. ASAJ.
 
-       * fontcmds.dtx: 3.0b "General" Added by ASAJ.
+	* fontcmds.dtx: 3.0b "General" Added by ASAJ.
 
 1993-12-17 N.N. <latex-bugs at latex-project.org>
 
-       * ltoutput.dtx: v1.0j \@tracemessage tracefloatvals made a
-         document command
+	* ltoutput.dtx: v1.0j \@tracemessage tracefloatvals made a
+	document command
 
-       * ltoutput.dtx: v1.0j \@topnewpage check for vsize too small
-         added
+	* ltoutput.dtx: v1.0j \@topnewpage check for vsize too small
+	added
 
-       * ltoutput.dtx: v1.0j \@startpagehook Hook removed
+	* ltoutput.dtx: v1.0j \@startpagehook Hook removed
 
-       * ltoutput.dtx: v1.0j \@opcol Hook removed
+	* ltoutput.dtx: v1.0j \@opcol Hook removed
 
-       * ltoutput.dtx: 1.0j \@topnewpage Page room test added
+	* ltoutput.dtx: 1.0j \@topnewpage Page room test added
 
-       * ltoutput.dtx: 1.0j \@specialoutput Page room test added
+	* ltoutput.dtx: 1.0j \@specialoutput Page room test added
 
-       * ltoutput.dtx: 1.0j \@addtocurcol Extra space test added
+	* ltoutput.dtx: 1.0j \@addtocurcol Extra space test added
 
-       * ltherest.dtx: LaTeX2e \mark Removed init \mark at begin
-         document, since it doesn't work.
+	* ltherest.dtx: LaTeX2e \mark Removed init \mark at begin
+	document, since it doesn't work.
 
-       * ltclass.dtx: 0.2q \documentstyle Match Alan's new code.
+	* ltclass.dtx: 0.2q \documentstyle Match Alan's new code.
 
-       * ltclass.dtx: 0.2q \@fileswithoptions Add \ompatibility hook
+	* ltclass.dtx: 0.2q \@fileswithoptions Add \ompatibility hook
 
-       * ltclass.dtx: 0.2q \@documentclasshook Macro added
+	* ltclass.dtx: 0.2q \@documentclasshook Macro added
 
-       * ltmiscen.dtx: v0.9i \literal Macro added
+	* ltmiscen.dtx: v0.9i \literal Macro added
 
 1993-12-16 N.N. <latex-bugs at latex-project.org>
 
-       * ltinit.dtx: LaTeX2e \LaTeXe Extended logo by DPC
+	* ltinit.dtx: LaTeX2e \LaTeXe Extended logo by DPC
 
-       * ltinit.dtx: LaTeX2e \@esphack Corrected optimisation :-)
+	* ltinit.dtx: LaTeX2e \@esphack Corrected optimisation :-)
 
-       * ltherest.dtx: LaTeX2e \mark Init \mark at begin document
+	* ltherest.dtx: LaTeX2e \mark Init \mark at begin document
 
 1993-12-15 N.N. <latex-bugs at latex-project.org>
 
-       * ltclass.dtx: 0.2p "General" Removed extra \.'s from \@@warnings
+	* ltclass.dtx: 0.2p "General" Removed extra \.'s from \@@warnings
 
-       * ltboxes.dtx: 0.1d \parbox Changed default from `c' to `s'
+	* ltboxes.dtx: 0.1d \parbox Changed default from `c' to `s'
 
-       * ltboxes.dtx: 0.1d \minipage extra space removed.
+	* ltboxes.dtx: 0.1d \minipage extra space removed.
 
-       * ltboxes.dtx: 0.1d \minipage Changed default from `c' to `s'
+	* ltboxes.dtx: 0.1d \minipage Changed default from `c' to `s'
 
-       * ltboxes.dtx: 0.1d \@iparbox Changed default from `c' to `s'
+	* ltboxes.dtx: 0.1d \@iparbox Changed default from `c' to `s'
 
-       * ltboxes.dtx: 0.1d \@iminipage Changed default from `c' to `s'
+	* ltboxes.dtx: 0.1d \@iminipage Changed default from `c' to `s'
 
 1993-12-14 N.N. <latex-bugs at latex-project.org>
 
-       * ltoutput.dtx: v1.0i "General" Section added to declare all
-         parameters
+	* ltoutput.dtx: v1.0i "General" Section added to declare all
+	parameters
 
 1993-12-13 David Carlisle <latex-bugs at latex-project.org>
 
-       * ltlists.dtx: LaTeX2e Initialised \@itemlabel
+	* ltlists.dtx: LaTeX2e Initialised \@itemlabel
 
-       * ltmiscen.dtx: v0.9h \@verbatim Removed optional argument of
-         \item
+	* ltmiscen.dtx: v0.9h \@verbatim Removed optional argument of
+	\item
 
-       * ltmiscen.dtx: v0.9h \@verbatim Readded \@noligs
+	* ltmiscen.dtx: v0.9h \@verbatim Readded \@noligs
 
-       * ltmiscen.dtx: v0.9h \@noligs Readded \@noligs
+	* ltmiscen.dtx: v0.9h \@noligs Readded \@noligs
 
-       * ltdirchk.dtx: 0.2a \strip at prefix modified, name changed from
-         \stripmeaning
+	* ltdirchk.dtx: 0.2a \strip at prefix modified, name changed from
+	\stripmeaning
 
-       * ltdirchk.dtx: 0.2a \IfFileExists Removed interactive prompting
-         for current directory syntax
+	* ltdirchk.dtx: 0.2a \IfFileExists Removed interactive prompting
+	for current directory syntax
 
-       * ltdirchk.dtx: 0.2a "General" on the `docstrip' pass, do not
-         check openin path
+	* ltdirchk.dtx: 0.2a "General" on the `docstrip' pass, do not
+	check openin path
 
-       * ltclass.dtx: 0.2o \usepackage Fixed error handling
+	* ltclass.dtx: 0.2o \usepackage Fixed error handling
 
-       * ltclass.dtx: 0.2o \documentstyle compatibility file now
-         latex209.sty.
+	* ltclass.dtx: 0.2o \documentstyle compatibility file now
+	latex209.sty.
 
-       * ltclass.dtx: 0.2o "General" Removed setting \errcontextlines\
-         (now in latex.tex)
+	* ltclass.dtx: 0.2o "General" Removed setting \errcontextlines\
+	(now in latex.tex)
 
 1993-12-12 N.N. <latex-bugs at latex-project.org>
 
-       * ltoutput.dtx: v1.0h \@tracemessage Commands changed
+	* ltoutput.dtx: v1.0h \@tracemessage Commands changed
 
-       * ltoutput.dtx: v1.0h \@testfp defs changed to lets
+	* ltoutput.dtx: v1.0h \@testfp defs changed to lets
 
-       * ltoutput.dtx: v1.0h \@startdblcolumn defs changed to lets
+	* ltoutput.dtx: v1.0h \@startdblcolumn defs changed to lets
 
-       * ltoutput.dtx: v1.0h \@startcolumn defs changed to lets
+	* ltoutput.dtx: v1.0h \@startcolumn defs changed to lets
 
-       * ltoutput.dtx: v1.0h \@resethfps Warnings added: minimal
+	* ltoutput.dtx: v1.0h \@resethfps Warnings added: minimal
 
-       * ltoutput.dtx: v1.0h \@makecol defs changed to lets
+	* ltoutput.dtx: v1.0h \@makecol defs changed to lets
 
-       * ltoutput.dtx: v1.0h \@doclearpage defs changed to lets
+	* ltoutput.dtx: v1.0h \@doclearpage defs changed to lets
 
-       * ltoutput.dtx: v1.0h \@doclearpage defs changed to lets
+	* ltoutput.dtx: v1.0h \@doclearpage defs changed to lets
 
-       * ltoutput.dtx: v1.0h \@doclearpage defs changed to lets
+	* ltoutput.dtx: v1.0h \@doclearpage defs changed to lets
 
-       * ltoutput.dtx: v1.0h \@cflt name changed
+	* ltoutput.dtx: v1.0h \@cflt name changed
 
-       * ltoutput.dtx: v1.0h \@ccflb defs changed to lets
+	* ltoutput.dtx: v1.0h \@ccflb defs changed to lets
 
-       * ltoutput.dtx: v1.0h \@ccflb boxmaxdepth setting moved
+	* ltoutput.dtx: v1.0h \@ccflb boxmaxdepth setting moved
 
 1993-12-11 N.N. <latex-bugs at latex-project.org>
 
-       * ltmiscen.dtx: v0.9g \ref Macro reimplemented
+	* ltmiscen.dtx: v0.9g \ref Macro reimplemented
 
-       * ltmiscen.dtx: v0.9g \pageref Macro reimplemented
+	* ltmiscen.dtx: v0.9g \pageref Macro reimplemented
 
-       * ltmiscen.dtx: v0.9g \frac Added group around first arg
+	* ltmiscen.dtx: v0.9g \frac Added group around first arg
 
-       * ltmiscen.dtx: v0.9g \@setref Macro added
+	* ltmiscen.dtx: v0.9g \@setref Macro added
 
-       * ltherest.dtx: LaTeX2e \@title Added default
+	* ltherest.dtx: LaTeX2e \@title Added default
 
-       * ltherest.dtx: LaTeX2e \@author Added default
+	* ltherest.dtx: LaTeX2e \@author Added default
 
-       * fontcmds.dtx: v3.0a \textup Macros changed
+	* fontcmds.dtx: v3.0a \textup Macros changed
 
-       * fontcmds.dtx: v3.0a \sw at slant Macro changed
+	* fontcmds.dtx: v3.0a \sw at slant Macro changed
 
-       * fontcmds.dtx: v3.0a \maybe at ic@ Macro and name changed
+	* fontcmds.dtx: v3.0a \maybe at ic@ Macro and name changed
 
-       * fontcmds.dtx: v3.0a \maybe at ic Macro name changed
+	* fontcmds.dtx: v3.0a \maybe at ic Macro name changed
 
-       * fontcmds.dtx: v3.0a \fix at penalty Macro added
+	* fontcmds.dtx: v3.0a \fix at penalty Macro added
 
-       * fontcmds.dtx: v3.0a \emph Macro changed
+	* fontcmds.dtx: v3.0a \emph Macro changed
 
-       * fontcmds.dtx: v3.0a "General" newfontswitch command corrected
-         and changed
+	* fontcmds.dtx: v3.0a "General" newfontswitch command corrected
+	and changed
 
-       * fontcmds.dtx: v3.0a "General" newcommands replaced by defs
+	* fontcmds.dtx: v3.0a "General" newcommands replaced by defs
 
-       * fontcmds.dtx: v3.0a "General" italic correction now put in
-         front of penalty before glue
+	* fontcmds.dtx: v3.0a "General" italic correction now put in
+	front of penalty before glue
 
-       * fontcmds.dtx: v3.0a "General" Complete reworking of all text
-         commands, using just one creator function
+	* fontcmds.dtx: v3.0a "General" Complete reworking of all text
+	commands, using just one creator function
 
-       * fontcmds.dtx: v3.0a \@newtextcmd Macro changed
+	* fontcmds.dtx: v3.0a \@newtextcmd Macro changed
 
 1993-12-09 N.N. <latex-bugs at latex-project.org>
 
-       * ltmiscen.dtx: v0.9e \enddocument Hook added
+	* ltmiscen.dtx: v0.9e \enddocument Hook added
 
-       * ltfiles.dtx: v0.9e \document Hook added
+	* ltfiles.dtx: v0.9e \document Hook added
 
-       * ltclass.dtx: 0.2n \documentstyle input 209 compatibility file.
+	* ltclass.dtx: 0.2n \documentstyle input 209 compatibility file.
 
-       * ltboxes.dtx: 0.1c \@irsbox fix another typo
+	* ltboxes.dtx: 0.1c \@irsbox fix another typo
 
 1993-12-08 N.N. <latex-bugs at latex-project.org>
 
-       * ltlists.dtx: LaTeX2e \@item use \sboxto support colour
+	* ltlists.dtx: LaTeX2e \@item use \sboxto support colour
 
-       * ltinit.dtx: LaTeX2e \@vbsphack Command added
+	* ltinit.dtx: LaTeX2e \@vbsphack Command added
 
-       * ltinit.dtx: LaTeX2e \@esphack Command reimplemented
+	* ltinit.dtx: LaTeX2e \@esphack Command reimplemented
 
-       * ltinit.dtx: LaTeX2e \@bsphack Command reimplemented; late
-         birthday present for Chris
+	* ltinit.dtx: LaTeX2e \@bsphack Command reimplemented; late
+	birthday present for Chris
 
-       * ltboxes.dtx: 0.1b \lrbox move \@endpefalse out of the inner
-         group
+	* ltboxes.dtx: 0.1b \lrbox move \@endpefalse out of the inner
+	group
 
-       * ltboxes.dtx: 0.1b \@irsbox fix typo
+	* ltboxes.dtx: 0.1b \@irsbox fix typo
 
-       * ltboxes.dtx: 0.1b \@iiiparbox \endgraf added due to extra group
-         in \@begin at tempboxa
+	* ltboxes.dtx: 0.1b \@iiiparbox \endgraf added due to extra group
+	in \@begin at tempboxa
 
-       * ltboxes.dtx: 0.1b \@begin at tempboxa Extra braces for color
-         support (braces removed from other macros)
+	* ltboxes.dtx: 0.1b \@begin at tempboxa Extra braces for color
+	support (braces removed from other macros)
 
-       * fontcmds.dtx: 2.1b "General" Macros \rm, \bf and \sf moved to
-         classes.dtx:
+	* fontcmds.dtx: 2.1b "General" Macros \rm, \bf and \sf moved to
+	classes.dtx:
 
 1993-12-07 N.N. <latex-bugs at latex-project.org>
 
-       * ltclass.dtx: 0.2m \@fileswithoptions Reset \CurrentOption
+	* ltclass.dtx: 0.2m \@fileswithoptions Reset \CurrentOption
 
-       * ltclass.dtx: 0.2l \ProvidesFile Macro added
+	* ltclass.dtx: 0.2l \ProvidesFile Macro added
 
 1993-12-06 N.N. <latex-bugs at latex-project.org>
 
-       * ltoutput.dtx: v1.0g \@topnewpage \@floatplacement placement bug
-         fixed
+	* ltoutput.dtx: v1.0g \@topnewpage \@floatplacement placement bug
+	fixed
 
-       * ltoutput.dtx: v1.0f \@specialoutput Unboxing of 255 added to
-         rescue writes
+	* ltoutput.dtx: v1.0f \@specialoutput Unboxing of 255 added to
+	rescue writes
 
-       * ltclass.dtx: 0.2k \ExecuteOptions Preserve \CurrentOption
+	* ltclass.dtx: 0.2k \ExecuteOptions Preserve \CurrentOption
 
 1993-12-05 N.N. <latex-bugs at latex-project.org>
 
-       * ltoutput.dtx: v1.0f \output Command changed
+	* ltoutput.dtx: v1.0f \output Command changed
 
-       * ltoutput.dtx: v1.0f @\getfpsbit Command added
+	* ltoutput.dtx: v1.0f @\getfpsbit Command added
 
-       * ltoutput.dtx: v1.0f @\boxfpsbit Command added
+	* ltoutput.dtx: v1.0f @\boxfpsbit Command added
 
-       * ltoutput.dtx: v1.0f \@topnewpage Commands changed
+	* ltoutput.dtx: v1.0f \@topnewpage Commands changed
 
-       * ltoutput.dtx: v1.0f \@textfloatsheight Commands added
+	* ltoutput.dtx: v1.0f \@textfloatsheight Commands added
 
-       * ltoutput.dtx: v1.0f \@testfp Command changed
+	* ltoutput.dtx: v1.0f \@testfp Command changed
 
-       * ltoutput.dtx: v1.0f \@testfp Command added
+	* ltoutput.dtx: v1.0f \@testfp Command added
 
-       * ltoutput.dtx: v1.0f \@startpagehook Hook added
+	* ltoutput.dtx: v1.0f \@startpagehook Hook added
 
-       * ltoutput.dtx: v1.0f \@startdblcolumn Command changed
+	* ltoutput.dtx: v1.0f \@startdblcolumn Command changed
 
-       * ltoutput.dtx: v1.0f \@startcolumn Command changed
+	* ltoutput.dtx: v1.0f \@startcolumn Command changed
 
-       * ltoutput.dtx: v1.0f \@shipoutsetup Command added
+	* ltoutput.dtx: v1.0f \@shipoutsetup Command added
 
-       * ltoutput.dtx: v1.0f \@setfpsbit Command added
+	* ltoutput.dtx: v1.0f \@setfpsbit Command added
 
-       * ltoutput.dtx: v1.0f \@setfloattypecounts Command added
+	* ltoutput.dtx: v1.0f \@setfloattypecounts Command added
 
-       * ltoutput.dtx: v1.0f \@resethfps Command added
+	* ltoutput.dtx: v1.0f \@resethfps Command added
 
-       * ltoutput.dtx: v1.0f \@outputpage Command changed
+	* ltoutput.dtx: v1.0f \@outputpage Command changed
 
-       * ltoutput.dtx: v1.0f \@opcol Hook added
+	* ltoutput.dtx: v1.0f \@opcol Hook added
 
-       * ltoutput.dtx: v1.0f \@opcol Command changed
+	* ltoutput.dtx: v1.0f \@opcol Command changed
 
-       * ltoutput.dtx: v1.0f \@fpsadddefault Command added
+	* ltoutput.dtx: v1.0f \@fpsadddefault Command added
 
-       * ltoutput.dtx: v1.0f \@flupdates Command added
+	* ltoutput.dtx: v1.0f \@flupdates Command added
 
-       * ltoutput.dtx: v1.0f \@flstop Commands added
+	* ltoutput.dtx: v1.0f \@flstop Commands added
 
-       * ltoutput.dtx: v1.0f \@flsettextmin Command added
+	* ltoutput.dtx: v1.0f \@flsettextmin Command added
 
-       * ltoutput.dtx: v1.0f \@flsetnum Command added
+	* ltoutput.dtx: v1.0f \@flsetnum Command added
 
-       * ltoutput.dtx: v1.0f \@flcheckspace Command added
+	* ltoutput.dtx: v1.0f \@flcheckspace Command added
 
-       * ltoutput.dtx: v1.0f \@addtotoporbot Command changed
+	* ltoutput.dtx: v1.0f \@addtotoporbot Command changed
 
-       * ltoutput.dtx: v1.0f \@addtonextcol Command changed
+	* ltoutput.dtx: v1.0f \@addtonextcol Command changed
 
-       * ltoutput.dtx: v1.0f \@addtodblcol Command changed
+	* ltoutput.dtx: v1.0f \@addtodblcol Command changed
 
-       * ltoutput.dtx: v1.0f \@addtocurcol Command changed
+	* ltoutput.dtx: v1.0f \@addtocurcol Command changed
 
-       * ltoutput.dtx: v1.0f \@addtobot Command changed
+	* ltoutput.dtx: v1.0f \@addtobot Command changed
 
-       * ltherest.dtx: LaTeX2e \@xfloat Command changed
+	* ltherest.dtx: LaTeX2e \@xfloat Command changed
 
-       * ltherest.dtx: LaTeX2e \@dblfloatplacement Command changed
+	* ltherest.dtx: LaTeX2e \@dblfloatplacement Command changed
 
 1993-12-04 N.N. <latex-bugs at latex-project.org>
 
-       * ltfiles.dtx: v0.9b \input Macro reimplemented
+	* ltfiles.dtx: v0.9b \input Macro reimplemented
 
-       * ltfiles.dtx: v0.9b \InputIfFileExists Macro added
+	* ltfiles.dtx: v0.9b \InputIfFileExists Macro added
 
-       * ltfiles.dtx: v0.9b \IfFileExists Macro added
+	* ltfiles.dtx: v0.9b \IfFileExists Macro added
 
-       * ltfiles.dtx: v0.9b \@input Macro reimplemented
+	* ltfiles.dtx: v0.9b \@input Macro reimplemented
 
-       * ltfiles.dtx: v0.9b \@iinput Macro reimplemented
+	* ltfiles.dtx: v0.9b \@iinput Macro reimplemented
 
 1993-12-03 N.N. <latex-bugs at latex-project.org>
 
-       * ltinit.dtx: v0.9b \@latexerr Set \c at errorcontextlines to -1
+	* ltinit.dtx: v0.9b \@latexerr Set \c at errorcontextlines to -1
 
-       * ltclass.dtx: 0.2i "General" \@onlypreamble: Many commands
-         declared.
+	* ltclass.dtx: 0.2i "General" \@onlypreamble: Many commands
+	declared.
 
-       * ltclass.dtx: 0.2i "General" Removed obsolete \@documentclass
+	* ltclass.dtx: 0.2i "General" Removed obsolete \@documentclass
 
-       * ltclass.dtx: 0.2i \@cls at pkg Name changed to avoid clash with
-         output routine.
+	* ltclass.dtx: 0.2i \@cls at pkg Name changed to avoid clash with
+	output routine.
 
-       * ltboxes.dtx: 0.1a \set at color macro added
+	* ltboxes.dtx: 0.1a \set at color macro added
 
-       * ltboxes.dtx: 0.1a \set at color color support
+	* ltboxes.dtx: 0.1a \set at color color support
 
-       * ltboxes.dtx: 0.1a \sbox extra group
+	* ltboxes.dtx: 0.1a \sbox extra group
 
-       * ltboxes.dtx: 0.1a \sbox color support
+	* ltboxes.dtx: 0.1a \sbox color support
 
-       * ltboxes.dtx: 0.1a \raisebox redefined to support \height
+	* ltboxes.dtx: 0.1a \raisebox redefined to support \height
 
-       * ltboxes.dtx: 0.1a \parbox Redefined to support extra optional
-         arguments
+	* ltboxes.dtx: 0.1a \parbox Redefined to support extra optional
+	arguments
 
-       * ltboxes.dtx: 0.1a \newsavebox Pass the whole of arg 1 to
-         \@ifdefinable
+	* ltboxes.dtx: 0.1a \newsavebox Pass the whole of arg 1 to
+	\@ifdefinable
 
-       * ltboxes.dtx: 0.1a \minipage Redefined to support extra optional
-         arguments
+	* ltboxes.dtx: 0.1a \minipage Redefined to support extra optional
+	arguments
 
-       * ltboxes.dtx: 0.1a \mbox extra group
+	* ltboxes.dtx: 0.1a \mbox extra group
 
-       * ltboxes.dtx: 0.1a \makebox modified
+	* ltboxes.dtx: 0.1a \makebox modified
 
-       * ltboxes.dtx: 0.1a \lrbox macro added
+	* ltboxes.dtx: 0.1a \lrbox macro added
 
-       * ltboxes.dtx: 0.1a \lrbox color support
+	* ltboxes.dtx: 0.1a \lrbox color support
 
-       * ltboxes.dtx: 0.1a \fbox extra group
+	* ltboxes.dtx: 0.1a \fbox extra group
 
-       * ltboxes.dtx: 0.1a \endlrbox macro added
+	* ltboxes.dtx: 0.1a \endlrbox macro added
 
-       * ltboxes.dtx: 0.1a \bm at b macros added
+	* ltboxes.dtx: 0.1a \bm at b macros added
 
-       * ltboxes.dtx: 0.1a \@savebox default c not x
+	* ltboxes.dtx: 0.1a \@savebox default c not x
 
-       * ltboxes.dtx: 0.1a \@makepicbox macro modified
+	* ltboxes.dtx: 0.1a \@makepicbox macro modified
 
-       * ltboxes.dtx: 0.1a \@makebox default changed from x to c
+	* ltboxes.dtx: 0.1a \@makebox default changed from x to c
 
-       * ltboxes.dtx: 0.1a \@isavepicbox extra group
+	* ltboxes.dtx: 0.1a \@isavepicbox extra group
 
-       * ltboxes.dtx: 0.1a \@isavebox extra group
+	* ltboxes.dtx: 0.1a \@isavebox extra group
 
-       * ltboxes.dtx: 0.1a \@isavebox color support
+	* ltboxes.dtx: 0.1a \@isavebox color support
 
-       * ltboxes.dtx: 0.1a \@irsbox redefined to support \height
+	* ltboxes.dtx: 0.1a \@irsbox redefined to support \height
 
-       * ltboxes.dtx: 0.1a \@imakebox macro modified
+	* ltboxes.dtx: 0.1a \@imakebox macro modified
 
-       * ltboxes.dtx: 0.1a \@iirsbox redefined to support \height
+	* ltboxes.dtx: 0.1a \@iirsbox redefined to support \height
 
-       * ltboxes.dtx: 0.1a \@end at tempboxa macro added
+	* ltboxes.dtx: 0.1a \@end at tempboxa macro added
 
-       * ltboxes.dtx: 0.1a \@begin at tempboxa macro added
+	* ltboxes.dtx: 0.1a \@begin at tempboxa macro added
 
-       * ltboxes.dtx: 0.1a \@argrsbox macro removed
+	* ltboxes.dtx: 0.1a \@argrsbox macro removed
 
 1993-12-01 N.N. <latex-bugs at latex-project.org>
 
-       * ltoutput.dtx: v1.0e \@reinserts Command added
+	* ltoutput.dtx: v1.0e \@reinserts Command added
 
 1993-11-30 N.N. <latex-bugs at latex-project.org>
 
-       * ltoutput.dtx: v1.0c \@tracemessage Commands added
+	* ltoutput.dtx: v1.0c \@tracemessage Commands added
 
-       * ltmiscen.dtx: LaTeX2e \eqnarray initialised everycr to {}
+	* ltmiscen.dtx: LaTeX2e \eqnarray initialised everycr to {}
 
 1993-11-29 N.N. <latex-bugs at latex-project.org>
 
-       * ltplain.dtx: ??? "General" All accents in decimals; suggested
-         by Paul Taylor
+	* ltplain.dtx: ??? "General" All accents in decimals; suggested
+	by Paul Taylor
 
-       * ltoutput.dtx: v1.0b \@makespecialcolbox Command added
+	* ltoutput.dtx: v1.0b \@makespecialcolbox Command added
 
-       * ltoutput.dtx: v1.0b \@makecol \@makespecialcolbox added
+	* ltoutput.dtx: v1.0b \@makecol \@makespecialcolbox added
 
 1993-11-28 N.N. <latex-bugs at latex-project.org>
 
-       * ltclass.dtx: 0.2h \endfilecontents Don't globally allocate a
-         write stream (always use 15)
+	* ltclass.dtx: 0.2h \endfilecontents Don't globally allocate a
+	write stream (always use 15)
 
-       * ltclass.dtx: 0.2h "General" Primitive filenames now terminated
-         by space not \relax.
+	* ltclass.dtx: 0.2h "General" Primitive filenames now terminated
+	by space not \relax.
 
-       * ltclass.dtx: 0.2h "General" Directory syntax checing moved to
-         dircheck.dtx:
+	* ltclass.dtx: 0.2h "General" Directory syntax checing moved to
+	dircheck.dtx:
 
-       * ltclass.dtx: 0.2h "General" Assorted commands now in the kernel
-         removed.
+	* ltclass.dtx: 0.2h "General" Assorted commands now in the kernel
+	removed.
 
-       * ltclass.dtx: 0.2h \@twoclasseserror Macro added
+	* ltclass.dtx: 0.2h \@twoclasseserror Macro added
 
-       * ltclass.dtx: 0.2h \@missingfileerror Use filename parser from
-         dircheck
+	* ltclass.dtx: 0.2h \@missingfileerror Use filename parser from
+	dircheck
 
 1993-11-24 N.N. <latex-bugs at latex-project.org>
 
-       * ltinit.dtx: LaTeX2e \P at LaTeX Macro changed
+	* ltinit.dtx: LaTeX2e \P at LaTeX Macro changed
 
-       * fontcmds.dtx: v2.1a \test at next Macro added
+	* fontcmds.dtx: v2.1a \test at next Macro added
 
-       * fontcmds.dtx: v2.1a \maybe at ic@ Use \test at next
+	* fontcmds.dtx: v2.1a \maybe at ic@ Use \test at next
 
 1993-11-23 N.N. <latex-bugs at latex-project.org>
 
-       * ltoutput.dtx: v0.1c \enlargethispage* Commands added
+	* ltoutput.dtx: v0.1c \enlargethispage* Commands added
 
-       * ltoutput.dtx: v0.1c \@specialoutput Command changed
+	* ltoutput.dtx: v0.1c \@specialoutput Command changed
 
-       * ltoutput.dtx: v0.1c \@makecol Command changed
+	* ltoutput.dtx: v0.1c \@makecol Command changed
 
-       * ltoutput.dtx: v0.1c \@kludgeins Insert added
+	* ltoutput.dtx: v0.1c \@kludgeins Insert added
 
-       * ltoutput.dtx: v0.1c \@enlargepage Command added
+	* ltoutput.dtx: v0.1c \@enlargepage Command added
 
-       * ltoutput.dtx: v0.1a \paperwidth Register added
+	* ltoutput.dtx: v0.1a \paperwidth Register added
 
-       * ltoutput.dtx: v0.1a \paperheight Register added
+	* ltoutput.dtx: v0.1a \paperheight Register added
 
-       * ltinit.dtx: LaTeX2e \two at digits Macro added
+	* ltinit.dtx: LaTeX2e \two at digits Macro added
 
-       * ltinit.dtx: LaTeX2e \renewenvironment Macro reimplemented and
-         extended
+	* ltinit.dtx: LaTeX2e \renewenvironment Macro reimplemented and
+	extended
 
-       * ltinit.dtx: LaTeX2e \renewcommand Macro reimplemented and
-         extended
+	* ltinit.dtx: LaTeX2e \renewcommand Macro reimplemented and
+	extended
 
-       * ltinit.dtx: LaTeX2e \newcommand Macro reimplemented and
-         extended
+	* ltinit.dtx: LaTeX2e \newcommand Macro reimplemented and
+	extended
 
-       * ltinit.dtx: LaTeX2e "General" replaced plus by \@plus if
-         appropriate
+	* ltinit.dtx: LaTeX2e "General" replaced plus by \@plus if
+	appropriate
 
-       * ltinit.dtx: LaTeX2e \@yargdef Macro interface changed
+	* ltinit.dtx: LaTeX2e \@yargdef Macro interface changed
 
-       * ltinit.dtx: LaTeX2e \@yargdef Avoid \@?@? token
+	* ltinit.dtx: LaTeX2e \@yargdef Avoid \@?@? token
 
-       * ltinit.dtx: LaTeX2e \@xargdef Macro interface changed
+	* ltinit.dtx: LaTeX2e \@xargdef Macro interface changed
 
-       * ltinit.dtx: LaTeX2e \@xargdef Macro added
+	* ltinit.dtx: LaTeX2e \@xargdef Macro added
 
-       * ltinit.dtx: LaTeX2e \@newenv Macro interface changed
+	* ltinit.dtx: LaTeX2e \@newenv Macro interface changed
 
-       * ltinit.dtx: LaTeX2e \@newcommand Macro added
+	* ltinit.dtx: LaTeX2e \@newcommand Macro added
 
-       * ltinit.dtx: LaTeX2e \@ifundefined Redefined to remove a
-         trailing \fi
+	* ltinit.dtx: LaTeX2e \@ifundefined Redefined to remove a
+	trailing \fi
 
-       * ltclass.dtx: 0.2g "General" Warnings and errors now directly
-         coded.
+	* ltclass.dtx: 0.2g "General" Warnings and errors now directly
+	coded.
 
-       * ltclass.dtx: 0.2g "General" Various macros now moved to
-         latex.tex.
+	* ltclass.dtx: 0.2g "General" Various macros now moved to
+	latex.tex.
 
-       * ltclass.dtx: 0.2g \@use at ption Name changed from \@executeoption
+	* ltclass.dtx: 0.2g \@use at ption Name changed from \@executeoption
 
 1993-11-22 N.N. <latex-bugs at latex-project.org>
 
-       * ltinit.dtx: LaTeX2e \providecommand Macro added
+	* ltinit.dtx: LaTeX2e \providecommand Macro added
 
-       * ltinit.dtx: LaTeX2e \c at errorcontextlines Macro added
+	* ltinit.dtx: LaTeX2e \c at errorcontextlines Macro added
 
-       * ltinit.dtx: LaTeX2e \LaTeXe Macro added
+	* ltinit.dtx: LaTeX2e \LaTeXe Macro added
 
-       * ltinit.dtx: LaTeX2e \@plus Macro added
+	* ltinit.dtx: LaTeX2e \@plus Macro added
 
-       * ltinit.dtx: LaTeX2e \@minus Macro added
+	* ltinit.dtx: LaTeX2e \@minus Macro added
 
-       * ltinit.dtx: LaTeX2e \@checkcommand Macro added
+	* ltinit.dtx: LaTeX2e \@checkcommand Macro added
 
-       * ltherest.dtx: LaTeX2e \settoheight Macro added
+	* ltherest.dtx: LaTeX2e \settoheight Macro added
 
-       * ltherest.dtx: LaTeX2e \settodepth Macro added
+	* ltherest.dtx: LaTeX2e \settodepth Macro added
 
-       * ltherest.dtx: LaTeX2e \@settopoint Macro added
+	* ltherest.dtx: LaTeX2e \@settopoint Macro added
 
-       * ltherest.dtx: LaTeX2e \@settodim Macro added
+	* ltherest.dtx: LaTeX2e \@settodim Macro added
 
-       * ltclass.dtx: 0.2f \listfiles Removed checking for
-         \@unknownversion
+	* ltclass.dtx: 0.2f \listfiles Removed checking for
+	\@unknownversion
 
-       * ltclass.dtx: 0.2f \@unknownversion Macro removed
+	* ltclass.dtx: 0.2f \@unknownversion Macro removed
 
-       * ltclass.dtx: 0.2f \@ifclasslater Added //00 so parsing never
-         produces a runaway argument.
+	* ltclass.dtx: 0.2f \@ifclasslater Added //00 so parsing never
+	produces a runaway argument.
 
-       * ltclass.dtx: 0.2f \@fileswithoptions Made the initial version
-         [] not [\@unknownversion]
+	* ltclass.dtx: 0.2f \@fileswithoptions Made the initial version
+	[] not [\@unknownversion]
 
-       * ltclass.dtx: 0.2f \@fileswithoptions Made the default [] not
-         [\@unknownversion]
+	* ltclass.dtx: 0.2f \@fileswithoptions Made the default [] not
+	[\@unknownversion]
 
 1993-11-21 N.N. <latex-bugs at latex-project.org>
 
-       * ltmiscen.dtx: v0.9a \verbatim at font Macro added
+	* ltmiscen.dtx: v0.9a \verbatim at font Macro added
 
-       * ltmiscen.dtx: v0.9a \verb use \verbatim at font instead of \tt
+	* ltmiscen.dtx: v0.9a \verb use \verbatim at font instead of \tt
 
 1993-11-21 N.N. <latex-bugs at latex-project.org>
 
-       * ltmiscen.dtx: v0.9a \@verbatim use \verbatim at font instead of
-         \tt
+	* ltmiscen.dtx: v0.9a \@verbatim use \verbatim at font instead of
+	\tt
 
-       * ltinit.dtx: LaTeX2e "General" replaced \tt by \ttfamily if
-         appropriate
+	* ltinit.dtx: LaTeX2e "General" replaced \tt by \ttfamily if
+	appropriate
 
-       * ltinit.dtx: LaTeX2e "General" replaced \sf by \sffamily if
-         appropriate
+	* ltinit.dtx: LaTeX2e "General" replaced \sf by \sffamily if
+	appropriate
 
-       * ltinit.dtx: LaTeX2e "General" replaced \sc by \scshape if
-         appropriate
+	* ltinit.dtx: LaTeX2e "General" replaced \sc by \scshape if
+	appropriate
 
-       * ltinit.dtx: LaTeX2e "General" replaced \rm by \rmfamily if
-         appropriate
+	* ltinit.dtx: LaTeX2e "General" replaced \rm by \rmfamily if
+	appropriate
 
-       * ltinit.dtx: LaTeX2e "General" replaced \it by \itshape if
-         appropriate
+	* ltinit.dtx: LaTeX2e "General" replaced \it by \itshape if
+	appropriate
 
-       * ltinit.dtx: LaTeX2e "General" replaced \bf by \bfseries if
-         appropriate
+	* ltinit.dtx: LaTeX2e "General" replaced \bf by \bfseries if
+	appropriate
 
-       * ltclass.dtx: 0.2e \@missingfileerror Stop infinite looping on
-         \@er at ext
+	* ltclass.dtx: 0.2e \@missingfileerror Stop infinite looping on
+	\@er at ext
 
 1993-11-18 N.N. <latex-bugs at latex-project.org>
 
-       * ltclass.dtx: 0.2d \documentstyle Modified \RequirePackage stuff.
+	* ltclass.dtx: 0.2d \documentstyle Modified \RequirePackage stuff.
 
-       * ltclass.dtx: 0.2d \NeedsTeXFormat \fmtname \fmtversion not
-         \@\pldots
+	* ltclass.dtx: 0.2d \NeedsTeXFormat \fmtname \fmtversion not
+	\@\pldots
 
-       * ltclass.dtx: 0.2d \ExecuteOptions Use \CurrentOption not \@tempa
+	* ltclass.dtx: 0.2d \ExecuteOptions Use \CurrentOption not \@tempa
 
 1993-11-17 N.N. <latex-bugs at latex-project.org>
 
-       * ltclass.dtx: 0.2c \ProcessOptions* restoring \@fileswith at pti@ns
-         added.
+	* ltclass.dtx: 0.2c \ProcessOptions* restoring \@fileswith at pti@ns
+	added.
 
-       * ltclass.dtx: 0.2c \NeedsTeXFormat Name changed from
-         \NeedsFormat
+	* ltclass.dtx: 0.2c \NeedsTeXFormat Name changed from
+	\NeedsFormat
 
-       * ltclass.dtx: 0.2c \DeclareOption* Error checking added
+	* ltclass.dtx: 0.2c \DeclareOption* Error checking added
 
-       * ltclass.dtx: 0.2c \CurrentOption Name changed from \@curroption
+	* ltclass.dtx: 0.2c \CurrentOption Name changed from \@curroption
 
-       * ltclass.dtx: 0.2c \@twoloadclasserror Macro added
+	* ltclass.dtx: 0.2c \@twoloadclasserror Macro added
 
-       * ltclass.dtx: 0.2c \@fileswithoptions Added trap for two
-         \LoadClass commands.
+	* ltclass.dtx: 0.2c \@fileswithoptions Added trap for two
+	\LoadClass commands.
 
-       * ltclass.dtx: 0.2c \@badrequireerror Macro added
+	* ltclass.dtx: 0.2c \@badrequireerror Macro added
 
-       * ltclass.dtx: 0.2c \@@fileswith at pti@ns Macro added
+	* ltclass.dtx: 0.2c \@@fileswith at pti@ns Macro added
 
 1993-11-15 N.N. <latex-bugs at latex-project.org>
 
-       * ltclass.dtx: 0.2b \documentstyle Modified to match
-         \ProcessOption*
+	* ltclass.dtx: 0.2b \documentstyle Modified to match
+	\ProcessOption*
 
-       * ltclass.dtx: 0.2b \ProcessOptions* Star form added.
+	* ltclass.dtx: 0.2b \ProcessOptions* Star form added.
 
 1993-11-14 N.N. <latex-bugs at latex-project.org>
 
-       * ltclass.dtx: 0.2a \g at addto@macro Made global
+	* ltclass.dtx: 0.2a \g at addto@macro Made global
 
-       * ltclass.dtx: 0.2a \documentstyle Added \RequirePackage
-         \@unusedoptionlist stuff.
+	* ltclass.dtx: 0.2a \documentstyle Added \RequirePackage
+	\@unusedoptionlist stuff.
 
-       * ltclass.dtx: 0.2a \ProcessOptions* Stop adding the global
-         option list inside class files.
+	* ltclass.dtx: 0.2a \ProcessOptions* Stop adding the global
+	option list inside class files.
 
-       * ltclass.dtx: 0.2a \ProcessOptions* Optimise `empty option'
-         code.
+	* ltclass.dtx: 0.2a \ProcessOptions* Optimise `empty option'
+	code.
 
-       * ltclass.dtx: 0.2a \NeedsTeXFormat made more robust for
-         alternative syntax for other formats.
+	* ltclass.dtx: 0.2a \NeedsTeXFormat made more robust for
+	alternative syntax for other formats.
 
-       * ltclass.dtx: 0.2a \AtEndDocument Included extension in the
-         generated macro name for package and class hooks.
+	* ltclass.dtx: 0.2a \AtEndDocument Included extension in the
+	generated macro name for package and class hooks.
 
-       * ltclass.dtx: 0.2a \@reset at ptions macro added
+	* ltclass.dtx: 0.2a \@reset at ptions macro added
 
-       * ltclass.dtx: 0.2a \@fileswithoptions Moved reseting of
-         \default at ds, \ds@ and \@declaredoptions here, from the end of
-         \ProcessOptions.
+	* ltclass.dtx: 0.2a \@fileswithoptions Moved reseting of
+	\default at ds, \ds@ and \@declaredoptions here, from the end of
+	\ProcessOptions.
 
-       * ltclass.dtx: 0.2a \@currext Name changed from \@currextension
+	* ltclass.dtx: 0.2a \@currext Name changed from \@currextension
 
 1993-11-03 Rainer Schoepf <latex-bugs at latex-project.org>
 
-       * ltpictur.dtx: LaTeX2.09 "General" (RmS) changed \halign to
-         \ialignto initialize \tabskip  and \everycr
+	* ltpictur.dtx: LaTeX2.09 "General" (RmS) changed \halign to
+	\ialignto initialize \tabskip  and \everycr
 
 1993-09-08 N.N. <latex-bugs at latex-project.org>
 
-       * ltmiscen.dtx: LaTeX2.09 \enddocument Added warning in case of
-         undefined references.
+	* ltmiscen.dtx: LaTeX2.09 \enddocument Added warning in case of
+	undefined references.
 
 1993-09-07 N.N. <latex-bugs at latex-project.org>
 
-       * ltmiscen.dtx: LaTeX2.09 Changed definition of \verb so that
-         it detects a missing second delimiter.
+	* ltmiscen.dtx: LaTeX2.09 Changed definition of \verb so that
+	it detects a missing second delimiter.
 
 1993-09-03 N.N. <latex-bugs at latex-project.org>
 
-       * ltmiscen.dtx: LaTeX2.09 \verbatim at nolig@list Replaced \@noligs
-         by extensible list
+	* ltmiscen.dtx: LaTeX2.09 \verbatim at nolig@list Replaced \@noligs
+	by extensible list
 
 1993-08-05 Rainer Schoepf <latex-bugs at latex-project.org>
 
-       * ltherest.dtx: LaTeX2.09 \@sect (RmS) Made sure that
-         \protectworks correctly in expansion of \the<counter>
+	* ltherest.dtx: LaTeX2.09 \@sect (RmS) Made sure that
+	\protectworks correctly in expansion of \the<counter>
 
 1993-08-03 N.N. <latex-bugs at latex-project.org>
 
-       * ltmiscen.dtx: LaTeX2.09 \enddocument Changed redefinition of
-         \global to redefinition of \@setckpt.
+	* ltmiscen.dtx: LaTeX2.09 \enddocument Changed redefinition of
+	\global to redefinition of \@setckpt.
 
 1993-05-05 N.N. <latex-bugs at latex-project.org>
 
-       * fontcmds.dtx: v2.0b "General" Removed all LaTeX related cmds
+	* fontcmds.dtx: v2.0b "General" Removed all LaTeX related cmds
 
 1992-11-26 Rainer Schoepf <latex-bugs at latex-project.org>
 
-       * ltherest.dtx: LaTeX2.09 \footnote (RmS) Changed all to
-         \def\protect{\noexpand\protect\noexpand}
+	* ltherest.dtx: LaTeX2.09 \footnote (RmS) Changed all to
+	\def\protect{\noexpand\protect\noexpand}
 
-       * ltherest.dtx: LaTeX2.09 \@footnotetext (RmS) added protection
-         for \edef
+	* ltherest.dtx: LaTeX2.09 \@footnotetext (RmS) added protection
+	for \edef
 
-       * ltboxes.dtx: LaTeX2.09 \@mpfootnotetext (RmS) added protection
-         for \edef
+	* ltboxes.dtx: LaTeX2.09 \@mpfootnotetext (RmS) added protection
+	for \edef
 
 1992-08-25 Frank Mittelbach <latex-bugs at latex-project.org>
 
-       * ltherest.dtx: LaTeX2.09 \@sect (FMi) replaced explicit setting
-         of \@svsec by call to \@seccntformat
+	* ltherest.dtx: LaTeX2.09 \@sect (FMi) replaced explicit setting
+	of \@svsec by call to \@seccntformat
 
 1992-08-24 N.N. <latex-bugs at latex-project.org>
 
-       * ltmiscen.dtx: LaTeX2.09 \verb Changed \verband \@sverb to work
-         correctly in math mode
+	* ltmiscen.dtx: LaTeX2.09 \verb Changed \verband \@sverb to work
+	correctly in math mode
 
-       * ltinit.dtx: LaTeX2.09 \@ifnextchar Changed so first argument
-         can be `='.
+	* ltinit.dtx: LaTeX2.09 \@ifnextchar Changed so first argument
+	can be `='.
 
 1992-08-19 Rainer Schoepf <latex-bugs at latex-project.org>
 
-       * ltherest.dtx: LaTeX2.09 \@othm (RmS) Changed error message to
-         complain about undefined counter
+	* ltherest.dtx: LaTeX2.09 \@othm (RmS) Changed error message to
+	complain about undefined counter
 
 1992-03-18 Rainer Schoepf <latex-bugs at latex-project.org>
 
-       * ltherest.dtx: LaTeX2.09 \end at float (RmS) changed \@esphack to
-         \@Esphack
+	* ltherest.dtx: LaTeX2.09 \end at float (RmS) changed \@esphack to
+	\@Esphack
 
-       * ltherest.dtx: LaTeX2.09 \@xympar (RmS) added
-         \global\@ignorefalse
+	* ltherest.dtx: LaTeX2.09 \@xympar (RmS) added
+	\global\@ignorefalse
 
 1992-01-10 Rainer Schoepf <latex-bugs at latex-project.org>
 
-       * ltherest.dtx: LaTeX2.09 \@othm (RmS) Check for existence of
-         theorem environment
+	* ltherest.dtx: LaTeX2.09 \@othm (RmS) Check for existence of
+	theorem environment
 
 1991-11-22 Rainer Schoepf <latex-bugs at latex-project.org>
 
-       * ltlists.dtx: LaTeX2.09 \@item (RmS) Changed second call to
-         \makelabelto \unhbox\@tempboxa. Avoids problems with side
-         effects in \makelabeland is more efficient.
+	* ltlists.dtx: LaTeX2.09 \@item (RmS) Changed second call to
+	\makelabelto \unhbox\@tempboxa. Avoids problems with side
+	effects in \makelabeland is more efficient.
 
-       * ltherest.dtx: LaTeX2.09 \footnote (RmS) Added
-         \let\protect\noexpandin \@xfootnote, \@xfootnotemark, and
-         \@xfootnotetext
+	* ltherest.dtx: LaTeX2.09 \footnote (RmS) Added
+	\let\protect\noexpandin \@xfootnote, \@xfootnotemark, and
+	\@xfootnotetext
 
 1991-11-06 Rainer Schoepf <latex-bugs at latex-project.org>
 
-       * ltherest.dtx: LaTeX2.09 \end at float (RmS) added warning message
-         perhaps we should use an error message
+	* ltherest.dtx: LaTeX2.09 \end at float (RmS) added warning message
+	perhaps we should use an error message
 
 1991-11-04 Rainer Schoepf <latex-bugs at latex-project.org>
 
-       * ltlists.dtx: LaTeX2.09 \makelabel (RmS) added default
-         definition for \makelabel, to produce an error message.
+	* ltlists.dtx: LaTeX2.09 \makelabel (RmS) added default
+	definition for \makelabel, to produce an error message.
 
 1991-11-01 Rainer Schoepf <latex-bugs at latex-project.org>
 
-       * ltherest.dtx: LaTeX2.09 \footnote (RmS) Added
-         \let\protect\noexpandin \footnote, \footnotemark, and
-         \footnotetext, since \xdef is used
+	* ltherest.dtx: LaTeX2.09 \footnote (RmS) Added
+	\let\protect\noexpandin \footnote, \footnotemark, and
+	\footnotetext, since \xdef is used
 
 1991-10-17 Rainer Schoepf <latex-bugs at latex-project.org>
 
-       * ltinit.dtx: LaTeX209 \@tfor (Rms) \xdef replaced by \def (See
-         FMi's array.doc)
+	* ltinit.dtx: LaTeX209 \@tfor (Rms) \xdef replaced by \def (See
+	FMi's array.doc)
 
 1991-09-29 Rainer Schoepf <latex-bugs at latex-project.org>
 
-       * ltherest.dtx: LaTeX2.09 \@footnotetext (RmS) added \reset at font
+	* ltherest.dtx: LaTeX2.09 \@footnotetext (RmS) added \reset at font
 
-       * ltherest.dtx: LaTeX2.09 \@dottedtocline (RmS) added
-         \reset at font for page number
+	* ltherest.dtx: LaTeX2.09 \@dottedtocline (RmS) added
+	\reset at font for page number
 
-       * ltboxes.dtx: LaTeX2.09 \@mpfootnotetext (RmS) added
-         \reset at font
+	* ltboxes.dtx: LaTeX2.09 \@mpfootnotetext (RmS) added
+	\reset at font
 
 1991-08-26 N.N. <latex-bugs at latex-project.org>
 
-       * ltmiscen.dtx: LaTeX2.09 \@verbatim \@@par added
+	* ltmiscen.dtx: LaTeX2.09 \@verbatim \@@par added
 
 1991-08-14 Rainer Schoepf <latex-bugs at latex-project.org>
 
-       * ltplain.dtx: LaTeX2.09 \cases (RmS) inserted extra braces
-         around entry for NFSS
+	* ltplain.dtx: LaTeX2.09 \cases (RmS) inserted extra braces
+	around entry for NFSS
 
-       * ltpictur.dtx: LaTeX2.09 "General" (RmS) inserted extra braces
-         around entry for NFSS
+	* ltpictur.dtx: LaTeX2.09 "General" (RmS) inserted extra braces
+	around entry for NFSS
 
-       * ltherest.dtx: LaTeX2.09 \@endtheorem Moved \itshapeafter \item
-         to make it work with NFSS
+	* ltherest.dtx: LaTeX2.09 \@endtheorem Moved \itshapeafter \item
+	to make it work with NFSS
 
 1991-07-24 N.N. <latex-bugs at latex-project.org>
 
-       * ltmiscen.dtx: LaTeX2.09 \@verbatim Added
-         \penalty\interlinepenalty to definition of \par so that
-         \samepage works
+	* ltmiscen.dtx: LaTeX2.09 \@verbatim Added
+	\penalty\interlinepenalty to definition of \par so that
+	\samepage works

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

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

Modified: trunk/Master/texmf-dist/doc/latex/base/clsguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/clsguide.tex	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/base/clsguide.tex	2022-11-01 19:57:17 UTC (rev 64892)
@@ -35,7 +35,12 @@
 \title{\LaTeXe~for class and package writers}
 
 \author{Copyright \copyright~1995--2006 The \LaTeX\ Project\\
-   All rights reserved}
+   All rights reserved.%
+   \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{clsguide.tex} for full details.}%
+}
 
 \date{15 February 2006}
 

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

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

Modified: trunk/Master/texmf-dist/doc/latex/base/cyrguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/cyrguide.tex	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/base/cyrguide.tex	2022-11-01 19:57:17 UTC (rev 64892)
@@ -33,7 +33,12 @@
 \title{Cyrillic languages support in \LaTeX}
 
 \author{\copyright~Copyright 1998--1999,\\ Vladimir Volovich,
-        Werner Lemberg and \LaTeX\ Project Team.\\ All rights reserved.}
+        Werner Lemberg and \LaTeX\ Project Team.\\ All rights reserved.%
+        \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{cyrguide.tex} for full details.}%
+}
 
 \date{12 March 1999}
 

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

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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex/base/fntguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/fntguide.tex	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/base/fntguide.tex	2022-11-01 19:57:17 UTC (rev 64892)
@@ -42,12 +42,17 @@
 
 \title{\LaTeXe{} font selection}
 
-\author{\copyright~Copyright 1995--2021, \LaTeX\ Project
+\author{\copyright~Copyright 1995--2022, \LaTeX\ Project
   Team.\thanks{Thanks to Arash Esbati for documenting the
     newer NFSS features of 2020}\\
-  All rights reserved.}
+  All rights reserved.%
+  \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{fntguide.tex} for full details.}%
+}
 
-\date{December 2021}
+\date{August 2022}
 
 \begin{document}
 
@@ -1431,6 +1436,20 @@
    \DeclareFontEncoding{OT1}{}{}
 \end{verbatim}
 
+\NEWfeature{2021/06/01}
+Fonts in encoding \texttt{TS1} are usually not implementing the full encoding but only a subset.
+This subset should be declared  with a |\DeclareEncodingSubset|
+declaration:
+
+\begin{decl}
+  |\DeclareEncodingSubset| \arg{encoding}
+                           \arg{font family}
+                           \arg{subset number}
+\end{decl}
+This should even be done if the font is implementing the full
+\texttt{TS1} encoding; see page~\pageref{page:declareencodingsubset} for
+further details.
+
 Some author commands need to change their definition depending on which
 encoding is currently in use.  For example, in the |OT1| encoding, the
 letter `\AE' is in slot |"1D|, whereas in the |T1| encoding it is in
@@ -2048,7 +2067,7 @@
 they always keep the same shape and do not nicely blend in with the text
 font).
 
-\newpage
+%\newpage
 
 The following tables show the macros available.  The next commands are
 `constructed' accents and are built via \TeX{} macros:
@@ -2234,7 +2253,8 @@
 which font?''
 
 \NEWfeature{2021/06/01}
-Fonts can be ordered in sub-encodings with the |\DeclareEncodingSubset|
+Fonts\label{page:declareencodingsubset}
+can be ordered in sub-encodings with the |\DeclareEncodingSubset|
 macro:
 \begin{decl}
   |\DeclareEncodingSubset| \arg{encoding}
@@ -2577,9 +2597,16 @@
 If only some are needed then one can define them individually but in
 many cases all four are wanted, hence the shortcut.
 
+Maintainers of font bundles that include \texttt{TS1} encoded font files
+should add an appropriate declaration into the corresponding
+\texttt{ts1}\textit{family}\texttt{.fd} file, because otherwise the
+default subencoding is assumed, which is probably disabling too many
+glyphs that are actually available in the font.\footnote{The \LaTeX{}
+  format contains declarations for many font families already, but this
+  is really the wrong place for the declarations. Thus for new fonts
+  they should be placed into the corresponding \texttt{.fd} file.}
 
 
-
 \section{If you need to know more \ldots}
 
 \NEWdescription{1996/06/01}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews.tex	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews.tex	2022-11-01 19:57:17 UTC (rev 64892)
@@ -1,7 +1,7 @@
 % \iffalse meta-comment
 %
 % Copyright (C) 2006, 2009, 2011, 2014 Heiko Oberdiek
-% Copyright (C) 2014-2021 
+% Copyright (C) 2014-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -38,9 +38,9 @@
 
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesFile{ltnews.tex}%
-  [2021/11/12 v1.4d Master file for ltnews*.tex (LaTeX Project)]
+  [2022/06/10 v1.4e Master file for ltnews*.tex (LaTeX Project)]
 
-\providecommand*{\lastissue}{35}
+\providecommand*{\lastissue}{36}
 
 \InputIfFileExists{ltnews-lastissue.cfg}{}{}
 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex/base/ltnews35.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews35.tex	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews35.tex	2022-11-01 19:57:17 UTC (rev 64892)
@@ -208,7 +208,7 @@
 is carried out and is in a wider alpha or beta test phase.
 
 Documentation about the new command and
-already existing keys are in \file{l3meta.pdf} and \file{documentmetadata-support.pdf}
+already existing keys are in \file{ltmeta} (part of \file{source2e.pdf})  and \file{documentmetadata-support.pdf}
 and also in the documentation of the \pkg{pdfmanagement-testphase} package.
 
 Package and class authors can test if a user has used \cs{DocumentMetadata}
@@ -443,11 +443,7 @@
 branch leads to some action.  Further details and examples are given
 in \file{usrguide3.pdf}.
 
-This test can also be useful if you set up key/value options and want
-to test if a key was specified without giving a value, vs.\ 
-specifying \enquote{\textit{key}\texttt{ = ,}}.
 
-
 \subsection{Better allocator for Lua command ids}
 
 In \LuaTeX\ we already had the \cs{newluafunction} macro which allocates

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

Index: trunk/Master/texmf-dist/doc/latex/base/ltnews36.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews36.pdf	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews36.pdf	2022-11-01 19:57:17 UTC (rev 64892)

Property changes on: trunk/Master/texmf-dist/doc/latex/base/ltnews36.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/base/ltnews36.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/ltnews36.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/base/ltnews36.tex	2022-11-01 19:57:17 UTC (rev 64892)
@@ -0,0 +1,541 @@
+% \iffalse meta-comment
+%
+% Copyright 2021-2022
+% The LaTeX Project and any individual authors listed elsewhere
+% in this file.
+%
+% This file is part of the LaTeX base system.
+% -——————————————
+%
+% It may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+%    https://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008 or later.
+%
+% This file has the LPPL maintenance status "maintained".
+%
+% The list of all files belonging to the LaTeX base distribution is
+% given in the file `manifest.txt'. See also `legal.txt' for additional
+% information.
+%
+% The list of derived (unpacked) files belonging to the distribution
+% and covered by LPPL is defined by the unpacking scripts (with
+% extension .ins) which are part of the distribution.
+%
+% \fi
+% Filename: ltnews36.tex
+%
+% This is issue 36 of LaTeX News.
+
+\NeedsTeXFormat{LaTeX2e}[2020-02-02]
+
+\documentclass{ltnews}
+
+%%  Maybe needed only for Chris' inadequate system:
+\providecommand\Dash {\unskip \textemdash}
+
+%% NOTE:  Chris' preferred hyphens!
+%%\showhyphens{parameters}
+%%  \hyphenation{because parameters parameter}
+
+\usepackage[T1]{fontenc}
+
+\usepackage{lmodern,url,hologo}
+
+\usepackage{csquotes}
+\usepackage{multicol}
+\usepackage{color}
+
+\providecommand\hook[1]{\texttt{#1}}
+
+\providecommand\meta[1]{$\langle$\textrm{\itshape#1}$\rangle$}
+\providecommand\option[1]{\texttt{#1}}
+\providecommand\env[1]{\texttt{#1}}
+\providecommand\Arg[1]{\texttt\{\meta{#1}\texttt\}}
+
+
+\providecommand\eTeX{\hologo{eTeX}}
+\providecommand\XeTeX{\hologo{XeTeX}}
+\providecommand\LuaTeX{\hologo{LuaTeX}}
+\providecommand\pdfTeX{\hologo{pdfTeX}}
+\providecommand\MiKTeX{\hologo{MiKTeX}}
+\providecommand\CTAN{\textsc{ctan}}
+\providecommand\TL{\TeX\,Live}
+\providecommand\githubissue[2][]{\ifhmode\unskip\fi
+     \quad\penalty500\strut\nobreak\hfill
+     \mbox{\small\slshape(%
+       \href{https://github.com/latex3/latex2e/issues/\getfirstgithubissue#2 \relax}%
+          	    {github issue#1 #2}%
+           )}%
+     \par\smallskip}
+%% But Chris has to mostly disable \href for his TEXPAD app:
+%%  \def\href #1{}  % Only For Chris' deficient TeX engine
+
+% simple solution right now (just link to the first issue if there are more)
+\def\getfirstgithubissue#1 #2\relax{#1}
+
+\providecommand\sxissue[1]{\ifhmode\unskip
+     \else
+       % githubissue preceding
+       \vskip-\smallskipamount
+       \vskip-\parskip
+     \fi
+     \quad\penalty500\strut\nobreak\hfill
+     \mbox{\small\slshape(\url{https://tex.stackexchange.com/#1})}\par}
+
+\providecommand\gnatsissue[2]{\ifhmode\unskip\fi
+     \quad\penalty500\strut\nobreak\hfill
+     \mbox{\small\slshape(%
+       \href{https://www.latex-project.org/cgi-bin/ltxbugs2html?pr=#1\%2F\getfirstgithubissue#2 \relax}%
+          	    {gnats issue #1/#2}%
+           )}%
+     \par}
+
+\let\cls\pkg
+\providecommand\env[1]{\texttt{#1}}
+\providecommand\acro[1]{\textsc{#1}}
+
+\vbadness=1400  % accept slightly empty columns
+
+
+\makeatletter
+% maybe not the greatest design but normally we wouldn't have subsubsections
+\renewcommand{\subsubsection}{%
+   \@startsection      {subsubsection}{2}{0pt}{1.5ex \@plus 1ex \@minus .2ex}%
+      {-1em}{\@subheadingfont\colonize}%
+}
+\providecommand\colonize[1]{#1:}
+\makeatother
+
+\let\finalvspace\vspace          % for document layout fixes
+
+% Undo ltnews's \verbatim at font with active < and >
+\makeatletter
+\def\verbatim at font{%
+  \normalsize\ttfamily}
+\makeatletter
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\providecommand\tubcommand[1]{}
+\tubcommand{\input{tubltmac}}
+
+\publicationmonth{November}
+\publicationyear{2022} %  --- DRAFT version for upcoming release}
+
+\publicationissue{36}
+
+\begin{document}
+
+\tubcommand{\addtolength\textheight{4.2pc}}   % only for TUB
+
+\maketitle
+{\hyphenpenalty=10000 \exhyphenpenalty=10000 \spaceskip=3.33pt \hbadness=10000
+\tableofcontents}
+
+\setlength\rightskip{0pt plus 3em}
+
+
+\medskip
+
+
+\section{Introduction}
+
+The 2022-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.
+
+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
+\LaTeX{} that the argument should be passed to the underlying code as
+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}
+  \DeclareDocumentCommand\caption
+         {s ={short-text}+O{#3} +m}
+         {...}
+\end{verbatim}
+which would mean that if the optional argument does \emph{not}
+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
+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 key/value material.
+
+In case the argument contains a \enquote{textual} \texttt{=} sign that
+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 \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
+faithfully supported in fonts that are not close cousins to the
+Computer Modern fonts. It was therefore necessary to provide the
+notion of \enquote{sub-encodings} on a per font basis. These
+sub-encodings are declared for a font family with the help of a
+\cs{DeclareEncodingSubset} declaration, see \cite{36:fntguide} for
+details.
+
+Maintainers of font bundles that include \texttt{TS1} encoded font
+files should add an appropriate declaration into the corresponding
+\texttt{ts1}\textit{family}\texttt{.fd} file, because otherwise the
+default subencoding is assumed, which is probably disabling too many
+glyphs that are actually available in the font.\footnote{The \LaTeX{}
+  format contains declarations for many font families already.  This
+  was done in 2020 to quickstart the use of the symbols in the kernel,
+  but it is really the wrong place for such declarations. Thus, for
+  new fonts the declarations should be placed into the corresponding
+  \texttt{.fd} files.}
+%
+\githubissue{905}
+
+\section{New or improved commands}
+
+\subsection{Better language handling for case-changing 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}
+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}
+\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}}.
+\end{verbatim}
+will give the expected result: {\fontfamily{cmr}
+\textsc{\textsl{Slanted Small Caps}}; \textsc{\textit{Italic Small Caps}};
+\bfseries
+\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}
+
+
+\subsection{EC sans serif at small sizes}
+
+The EC (T1 encoded Computer Modern) sans serif fonts have errors at
+small sizes: the medium weight is bolder and wider than the bold
+extended. This makes them unusable at these small sizes. The default
+\texttt{.fd} file has therefore been adjusted to use a scaled down 8pt
+font instead.
+%
+\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
+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 happened.  This has been changed and the environment now
+warns if you nest it in another \texttt{minipage} environment that
+already contains footnotes.
+%
+\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{Improve \pkg{l3docstrip} integration into \pkg{docstrip}}
+
+In 2020 we merged \pkg{l3docstrip.tex} into \pkg{docstrip.tex} to
+support the \texttt{\%\string<@@=\meta{module}\string>} syntax of
+\pkg{expl3}; see~\cite{36:ltnews32}.  However, this support was
+incomplete, because it didn't cover \pkg{docstrip} lines of the form
+\texttt{\%<+...>} or \texttt{\%<-...>}.  This was never noticed until
+now, because usually \texttt{\%<*...>} blocks are used. Now all lines
+in a \texttt{.dtx} file are subject to the \texttt{@@} replacement
+approach.
+%
+\githubissue{903}
+
+
+
+\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{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 losing a \cs{smash}}
+
+When \TeX{} is typesetting a fraction, it will rebox the material in
+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,
+which now got undone). For example, in the line
+\begin{verbatim}
+\frac{1}{2} = \frac{1}{\smash{2^X}} 
+            \neq \frac{100}{\smash{2^X}} 
+\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
+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}
+
+
+\subsection{Resolve an issue with \cs{mathchoice} and \texttt{localalphabets}}
+
+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
+got low-level errors if the freezing happened in such a place.  The
+implementation was therefore revised to avoid the \cs{aftergroup}
+approach altogether.
+%
+\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}
+
+
+%\newpage   TUB?
+
+\section{Changes to packages in the \pkg{graphics} category}
+
+\subsection{Fix a \cs{mathcolor} bug}
+
+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
+is now properly guarded for.
+%
+\githubissue{901}
+
+
+
+\section{Changes to packages in the \pkg{tools} category}
+
+\subsection{\pkg{array}: Correctly identify single-line m-cells}
+
+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
+strut depends on the setting of \cs{arraystretch} and if you made this
+negative (or very large) the test came out wrong.  Therefore, we now
+test against the height of a normal strut to ensure that single-line
+cells are correctly identified as such (unless their content is truly very
+tall, in which case aligning is pointless anyway).
+%
+\githubissue{766}
+
+
+%\medskip
+
+\begin{thebibliography}{9}
+
+\fontsize{9.3}{11.3}\selectfont
+
+%\bibitem{36:blueprint} Frank Mittelbach and Chris Rowley:
+%  \emph{\LaTeX{} Tagged PDF \Dash A blueprint for a large project}.\\
+%  \url{https://latex-project.org/publications/indexbyyear/2020/}
+
+%\bibitem{36:source2e}
+%  \emph{\LaTeX{} documentation on the \LaTeX{} Project Website}.\\
+%  \url{https://latex-project.org/help/documentation/}
+
+\bibitem{36:Lamport}
+Leslie Lamport.
+\newblock {\LaTeX}: {A} Document Preparation System: User's Guide and Reference
+  Manual.
+\newblock \mbox{Addison}-Wesley, Reading, MA, USA, 2nd edition, 1994.
+\newblock ISBN 0-201-52983-1.
+\newblock Reprinted with corrections in 1996.
+
+\bibitem{36:ltnews32} \LaTeX{} Project Team:
+  \emph{\LaTeXe{} news 32}.\\
+  \url{https://latex-project.org/news/latex2e-news/ltnews32.pdf}
+
+\bibitem{36:ltnews34} \LaTeX{} Project Team:
+  \emph{\LaTeXe{} news 34}.\\
+  \url{https://latex-project.org/news/latex2e-news/ltnews34.pdf}
+
+\bibitem{36:ltnews35} \LaTeX{} Project Team:
+  \emph{\LaTeXe{} news 35}.\\
+  \url{https://latex-project.org/news/latex2e-news/ltnews35.pdf}
+
+\bibitem{36:fntguide} \LaTeX{} Project Team:
+  \emph{\LaTeXe{} font selection}.\\
+  \url{https://latex-project.org/help/documentation/}
+
+%\bibitem{36:ltfilehook-doc} Frank Mittelbach, Phelype Oleinik, \LaTeX{}~Project~Team:
+%  \emph{The \texttt{\upshape ltfilehook} documentation}.\\
+%  Run \texttt{texdoc} \texttt{ltfilehook-doc} to view.
+\end{thebibliography}
+
+
+
+\end{document}


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

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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex/base/manifest.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/manifest.txt	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/base/manifest.txt	2022-11-01 19:57:17 UTC (rev 64892)
@@ -33,8 +33,8 @@
 % encguide.tex    --  Guide to font encodings.
 % fntguide.tex    --  Guide to font selection.
 % modguide.tex    --  Guide to modifying and distributing LaTeX.
-% usrguide.tex    --  User guide for this release.
-% usrguide3.tex   --  User guide for expl3-based methods.
+% usrguide.tex    --  User guide for the 2020s onward.
+% usrguide-historic.tex --  User guide for move from LaTeX2.09 to LaTeX2e.
 %
 % ltnews01.tex    --  What was new in the release dated 1994/06.
 % ltnews02.tex    --  What was new in the release dated 1994/12.

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

Modified: trunk/Master/texmf-dist/doc/latex/base/modguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/modguide.tex	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/base/modguide.tex	2022-11-01 19:57:17 UTC (rev 64892)
@@ -41,7 +41,12 @@
 \title{Modifying \LaTeX}
 
 \author{\copyright~Copyright 1995, \LaTeX\ Project Team.\\
-   All rights reserved.}
+   All rights reserved.%
+   \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{modguide.tex} for full details.}%
+}
 
 \date{12 December 1995}
 

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

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

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

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

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

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

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

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

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

Index: trunk/Master/texmf-dist/doc/latex/base/usrguide-historic.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/usrguide-historic.pdf	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/base/usrguide-historic.pdf	2022-11-01 19:57:17 UTC (rev 64892)

Property changes on: trunk/Master/texmf-dist/doc/latex/base/usrguide-historic.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/base/usrguide-historic.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/usrguide-historic.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/base/usrguide-historic.tex	2022-11-01 19:57:17 UTC (rev 64892)
@@ -0,0 +1,1832 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 1993-2022
+% The LaTeX Project and any individual authors listed elsewhere
+% in this file.
+%
+% This file is part of the LaTeX base system.
+% -------------------------------------------
+%
+% It may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+%    http://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008 or later.
+%
+% This file has the LPPL maintenance status "maintained".
+%
+% The list of all files belonging to the LaTeX base distribution is
+% given in the file `manifest.txt'. See also `legal.txt' for additional
+% information.
+%
+% The list of derived (unpacked) files belonging to the distribution
+% and covered by LPPL is defined by the unpacking scripts (with
+% extension .ins) which are part of the distribution.
+%
+% \fi
+% Filename: usrguide-historic.tex
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+
+\documentclass{ltxguide}[2001/05/28]
+
+\title{\LaTeX\ for authors --- historic version}
+
+\author{\copyright~Copyright 1995--2022, \LaTeX\ Project Team.\\
+   All rights reserved.%
+   \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{usrguide.tex} for full details.}%
+}
+
+\date{30 August 2022}
+
+
+\begin{document}
+
+\maketitle
+
+\tableofcontents
+
+\section{Introduction}
+
+Welcome to \LaTeXe, the new standard version of the \LaTeX{} Document
+Preparation System.
+
+This document describes how to take advantage of the new features of
+\LaTeX, and how to process your old \LaTeX{} documents with
+\LaTeXe. However, this document is only a brief introduction to the
+new facilities and is intended for authors who are already familiar
+with the old version of \LaTeX{}.  It is \emph{not} a reference manual
+for \LaTeXe{} nor is it a complete introduction to \LaTeX.
+
+It is somewhat of an historical document now, since \LaTeXe{} came into
+existence in 1994.
+
+\subsection[\LaTeXe---The new \LaTeX~release]
+  {\LaTeXe---The new \LaTeX~release\\ (well, for more than 10 years now)}
+
+The previous version of \LaTeX{} was known as \LaTeX~2.09.  Over the
+years many extensions have been developed for \LaTeX.  This is, of
+course, a sure sign of its continuing popularity but it has had one
+unfortunate result: incompatible \LaTeX{} formats came into use at
+different sites.  This included `standard \LaTeX~2.09', \LaTeX{} built
+with the \emph{New Font Selection Scheme}~(\NFSS), \SLiTeX, \AmSLaTeX,
+and so on.  Thus, to process documents from various places, a site
+maintainer was forced to keep multiple versions of the \LaTeX{}
+program.  In addition, when looking at a source file it was not always
+clear for which format the document was written.
+
+To put an end to this unsatisfactory situation, \LaTeXe{} has been
+produced; it brings all such extensions back under a single format and
+thus prevents the proliferation of mutually incompatible dialects of
+\LaTeX~2.09.  With \LaTeXe{} the `new font selection scheme' is
+standard and, for example, \textsf{amsmath} (formerly the \AmSLaTeX{}
+format) or \textsf{slides} (formerly the \SLiTeX{} format) are simply
+extensions, which may be loaded by documents using the same base format.
+
+The introduction of a new release also made it possible to add a small
+number of often-requested features and to make the task of writing
+packages and classes simpler.
+
+\subsection{\LaTeX3---The long-term future of \LaTeX}
+\label{Sec:ltx3}
+
+\LaTeXe{} is the consolidation step in a comprehensive
+reimplementation of the \LaTeX{} system.  The next major release of
+\LaTeX{} will be \LaTeX3, which will include a radical overhaul of the
+document designers' and package writers' interface to \LaTeX.
+
+\LaTeX3 is a long-term research project but, until it is completed,
+the project team are committed to the active maintenance of \LaTeXe{}.
+Thus the experience gained from the production and maintenance of
+\LaTeXe{} will be a major influence on the design of \LaTeX3.
+A brief description of the project can be found in the document
+|ltx3info.tex|.
+
+If you would like to support the project then you are welcome to send
+donations to the \LaTeX\ Project Fund; this has been set up to help
+the research team by financing various expenses associated with this
+voluntary work of maintaining the current \LaTeX{} and developing
+\LaTeX\ further.
+
+The fund is administered by The \TeX{} Users Group and by various
+local user groups.  Information about making donations and joining
+these groups is available from:
+\begin{quote}\small\label{addrs}
+   \texttt{http://www.tug.org/lugs.html}
+\end{quote}
+
+The \LaTeX3{} project has its home page
+on the World Wide Web at:
+\begin{verbatim}
+  http://www.latex-project.org/
+\end{verbatim}
+This page describes \LaTeX{} and the \LaTeX3 project, and contains
+pointers to other \LaTeX{} resources, such as the user guides, the
+\TeX{} Frequently Asked Questions, and the \LaTeX{} bugs database.
+
+Older articles covering aspects of the \LaTeX3 project are also
+available for anonymous ftp from the Comprehensive \TeX{} Archive, in
+the directory:
+\begin{verbatim}
+  ctan:info/ltx3pub
+\end{verbatim}
+The file |ltx3pub.bib| in that directory contains an abstract of each
+of the files.
+
+\subsection{Overview}
+
+This document contains an overview of the new structure and features
+of \LaTeX.  It is \emph{not} a self-contained document, as it contains
+only the features of \LaTeX{} which have changed since version 2.09.
+You should read this document in conjunction with an introduction to
+\LaTeX{}.
+
+\begin{description}
+
+\item[Section~\ref{Sec:class+packages}]
+   contains an overview of the new structure of
+   \LaTeX{} documents.  It describes how classes and packages work and
+   how class and package options can be used.  It lists the standard
+   packages and classes which come with \LaTeX.
+
+\item[Section~\ref{Sec:commands}] describes the new commands available
+   to authors in \LaTeXe.
+
+\item[Section~\ref{Sec:209}] shows how to process old \LaTeX{}
+   documents with \LaTeXe.
+
+\item[Section~\ref{Sec:problems}] contains advice on dealing with
+   problems you may encounter in running \LaTeXe.
+   It lists some error messages which are new in \LaTeXe{} and
+   it describes some of the more common problems and how to cure them,
+   or where to find further information.
+
+\end{description}
+
+\subsection{Further information}
+
+For a general introduction to \LaTeX, including the new features of
+\LaTeXe, you should read \emph{\LaTeXbook}
+by Leslie Lamport~\cite{A-W:LLa94}.
+
+A more detailed description of the new features of \LaTeX, including an
+overview of more than 200 packages and nearly 1000 ready to run examples, is
+to be found in \emph{\LaTeXcomp second edition} by Frank Mittelbach and
+Michel Goossens~\cite{A-W:MG2004}.
+
+Packages and programs for producing and manipulating graphics are
+discussed at length in \emph{\LaTeXGcomp} by Michel Goossens,
+Sebastian Rahtz and Frank Mittelbach~\cite{A-W:GRM97}.
+
+Solutions for publishing with \LaTeX{} on the World Wide Web are given
+in \emph{\LaTeXWcomp} by Michel Goossens and Sebastian
+Rahtz~\cite{A-W:GR99}.
+
+For more information about the many new \LaTeX{} packages you should
+read the package documentation, which should be available from the
+same source as your copy of \LaTeX.
+
+There are a number of documentation files which accompany every copy
+of \LaTeX.  A copy of \emph{\LaTeX{} News} will come out with each
+six-monthly release of \LaTeX; it will be found in the files
+|ltnews*.tex|.  The class- and package-writer's guide \emph{\clsguide}
+describes the new \LaTeX{} features for writers of document classes
+and packages; it is in |clsguide.tex|.  The guide \emph{\fntguide}
+describes the \LaTeX{} font selection scheme for class- and
+package-writers; it is in |fntguide.tex|. Support for Cyrillic languages
+in \LaTeX{} is described in \emph{\cyrguide}.
+
+The documented source code (from the files used to produce the kernel
+format via |latex.ltx|) is now available as
+\emph{The \LaTeXe\ Sources}.  ]
+This very large document also includes an index of
+\LaTeX{} commands.  It can be typeset from the \LaTeX{} file
+|source2e.tex| in the |base| directory, using the source files and
+the class file |ltxdoc.cls| from this directory.
+
+For more information about \TeX{} and \LaTeX{}, please contact your
+local \TeX{} Users Group, or the international \TeX{} Users Group (see
+page \pageref{addrs}).
+
+
+\section{Classes and packages}
+\label{Sec:class+packages}
+
+This section describes the new structure of \LaTeX{} documents and the
+new types of file: \emph{classes} and \emph{packages}.
+
+\subsection{What are classes and packages?}
+
+The main difference between \LaTeX~2.09 and \LaTeXe{} is in the
+commands before |\begin{document}|.
+
+In \LaTeX~2.09, documents had \emph{styles},
+such as \textsf{article} or \textsf{book}, and \emph{options},
+such as \textsf{twoside} or \textsf{epsfig}.
+These were indicated by the |\documentstyle| command:
+\begin{quote}
+   |\documentstyle|\oarg{options}\arg{style}
+\end{quote}
+For example, to specify a two-sided article with encapsulated
+PostScript figures, you said:
+\begin{verbatim}
+   \documentstyle[twoside,epsfig]{article}
+\end{verbatim}
+However, there were two different types of document style option:
+\emph{built-in options} such as |twoside|; and \emph{packages} such as
+|epsfig.sty|.  These were very different, since any \LaTeX{} document
+style could use the \textsf{epsfig} package but only document styles
+which declared the \textsf{twoside} option could use that option.
+
+To avoid this confusion, \LaTeXe{} differentiates between built-in
+options and packages.  These are given by the new |\documentclass| and
+|\usepackage| commands:
+\begin{quote}
+   |\documentclass|\oarg{options}\arg{class} \\
+   |\usepackage|\oarg{options}\arg{packages}
+\end{quote}
+For example, to specify a two-sided article with encapsulated
+PostScript figures, you now write:
+\begin{verbatim}
+   \documentclass[twoside]{article}
+   \usepackage{epsfig}
+\end{verbatim}
+You can load more than one package with a single |\usepackage|
+command; for example, rather than writing:
+\begin{verbatim}
+   \usepackage{epsfig}
+   \usepackage{multicol}
+\end{verbatim}
+you can specify:
+\begin{verbatim}
+   \usepackage{epsfig,multicol}
+\end{verbatim}
+Note that \LaTeXe{} still understands the \LaTeX~2.09 |\documentstyle|
+command.  This command causes \LaTeXe{} to enter \emph{\LaTeX~2.09
+compatibility mode}, which is described in Section~\ref{Sec:209}.
+
+You should not, however, use the |\documentstyle| command for new
+documents because this compatibility mode is very slow and the new
+features of \LaTeXe{} are not available in this mode.
+
+To help differentiate between classes and packages, document classes
+now end with |.cls| rather than |.sty|.  Packages still end with
+|.sty|, since most \LaTeX~2.09 packages work well with \LaTeXe.
+
+\subsection{Class and package options}
+
+In \LaTeX~2.09, only document styles could have options such as
+|twoside| or |draft|.  In \LaTeXe{}, both classes and packages are
+allowed to have options.  For example, to specify a two-sided article
+with graphics using the |dvips| driver, you write:
+
+\begin{verbatim}
+   \documentclass[twoside]{article}
+   \usepackage[dvips]{graphics}
+\end{verbatim}
+It is possible for packages to share common options.  For example,
+you could, in addition, load the \textsf{color} package by specifying:
+\begin{verbatim}
+   \documentclass[twoside]{article}
+   \usepackage[dvips]{graphics}
+   \usepackage[dvips]{color}
+\end{verbatim}
+But because |\usepackage| allows more than one package to be listed,
+this can be shortened to:
+\begin{verbatim}
+   \documentclass[twoside]{article}
+   \usepackage[dvips]{graphics,color}
+\end{verbatim}
+In addition, packages will also use each option given to
+the |\documentclass| command (if they know what to do with it), so you
+could also write:
+\begin{verbatim}
+   \documentclass[twoside,dvips]{article}
+   \usepackage{graphics,color}
+\end{verbatim}
+Class and package options are covered in more detail in
+\emph{\LaTeXcomp} and in \emph{\clsguide}.
+
+\subsection{Standard classes}
+
+The following classes are distributed with \LaTeX:
+\begin{description}
+
+\item[article]  The |article| class described in \emph{\LaTeXbook}.
+\item[book]     The |book| class described in \emph{\LaTeXbook}.
+\item[report]   The |report| class described in \emph{\LaTeXbook}.
+\item[letter]   The |letter| class described in \emph{\LaTeXbook}.
+\item[slides]   The |slides| class described in \emph{\LaTeXbook},
+   formerly \SLiTeX.
+\item[proc]     A document class for proceedings, based on |article|.
+   Formerly the |proc| package.
+\item[ltxdoc]   The document class for documenting the \LaTeX{}
+   program, based on |article|.
+\item[ltxguide] The document class for \emph{\usrguide} and
+   \emph{\clsguide}, based on |article|.  The document you are reading
+   now uses the |ltxguide| class. The layout for this class is likely
+   to change in future releases of \LaTeX.
+\item[ltnews]   The document class for the \emph{\LaTeX{} News}
+   information sheet, based on |article|. The layout for this class
+   is likely to change in future releases of \LaTeX.
+\item[minimal]
+\NEWfeature{1995/12/01}
+   This class is the bare minimum (3 lines) that is needed in a
+   \LaTeX\ class file. It just sets the text width and height, and
+   defines |\normalsize|.  It is principally intended for debugging
+   and testing \LaTeX\ code in situations where you do not need to
+   load a `full' class such as |article|. If, however, you are
+   designing a completely new class that is aimed for documents with
+   structure radically different from the structure supplied by the
+   article class, then it may make sense to use this as a base and add
+   to it code implementing the required structure, rather than
+   starting from |article| and modifying the code there.
+\end{description}
+
+\subsection{Standard packages}
+\label{Sec:st-pack}
+
+The following packages are distributed with \LaTeX:
+\begin{description}
+\item[alltt]
+\NEWfeature{1994/12/01}
+   This package provides the |alltt| environment, which is like
+   the |verbatim| environment except that |\|, |{|, and |}|
+   have their usual meanings.  It is described in |alltt.dtx| and
+   \emph{\LaTeXbook}.
+\item[doc] This is the basic package for typesetting the documentation
+   of \LaTeX{} programs.  It is described in |doc.dtx| and in
+   \emph{\LaTeXcomp}.
+\item[exscale]  This provides scaled versions of the math extension
+   font.  It is described in |exscale.dtx| and \emph{\LaTeXcomp}.
+ \item[fontenc] This is used to specify which font encoding \LaTeX{}
+   should use.  It is described in |ltoutenc.dtx|.
+\item[graphpap]
+\NEWfeature{1994/12/01}
+   This package defines the |\graphpaper| command; this
+   can be used in a |picture| environment.
+\item[ifthen]   Provides commands of the form `if\dots then do\dots
+   otherwise do\dots'.
+   It is described in |ifthen.dtx| and \emph{\LaTeXcomp}.
+\item[inputenc]
+\NEWfeature{1994/12/01}
+   This is used to specify which input encoding \LaTeX{} should use.
+   It is described in |inputenc.dtx|.
+\item[latexsym] \LaTeXe{} no longer loads the \LaTeX{} symbol font by
+   default.  To access it, you should use the |latexsym| package.  It
+   is described in |latexsym.dtx| and in \emph{\LaTeXcomp}; see also
+   Section~\ref{Sec:problems}.
+ \item[makeidx] This provides commands for producing indexes.  It is
+   described in \emph{\LaTeXbook} and in \emph{\LaTeXcomp}.
+ \item[newlfont] This is used to emulate the font commands of
+   \LaTeX~2.09 with the New Font Selection Scheme. It is described in
+   \emph{\LaTeXcomp}.
+ \item[oldlfont] This is used to emulate the font commands of
+   \LaTeX~2.09.  It is described in \emph{\LaTeXcomp}.
+ \item[showidx]
+   This causes the argument of each |\index| command to
+   be printed on the page where it occurs.
+   It is described in \emph{\LaTeXbook}.
+ \item[syntonly] This is used to process a document without
+   typesetting it.  It is described in |syntonly.dtx| and in
+   \emph{\LaTeXcomp}.
+ \item[tracefnt] This allows you to control how much information about
+   \LaTeX's font loading is displayed.  It is described in
+   \emph{\LaTeXcomp}.
+\end{description}
+
+\subsection{Related software}
+
+\NEWdescription{1998/12/01}
+The following software should be available from the same distributor
+as your copy of \LaTeXe.  You should obtain at least the
+\textsf{graphics} and \textsf{tools} collections in order to have all
+the files described in \emph{\LaTeXbook}.  The |amsmath| package (part
+of \textsf{amslatex} and formerly known as |amstex|)
+and \textsf{babel} are also mentioned in the list
+of `standard packages' in section C.5.2 of that book.
+\begin{description}
+\item[amslatex]  Advanced mathematical typesetting from the American
+  Mathematical Society. This includes the |amsmath| package; it
+  provides many commands for typesetting mathematical formulas of
+  higher complexity.  It is produced and supported by the American
+  Mathematical Society and it is described in \emph{\LaTeXcomp}.
+\item[babel]  This package and related files support typesetting in
+  many languages. It is described in \emph{\LaTeXcomp}.
+\item[cyrillic]
+\NEWfeature{1998/12/01}
+  Everything you need (except the fonts themselves) for
+  typesetting with Cyrillic fonts.
+\item[graphics]  This includes the |graphics| package which
+  provides support for the inclusion and transformation of graphics,
+  including files produced by other software. Also included, is the
+  |color| package which provides support for typesetting in colour.
+  Both these packages are described in \emph{\LaTeXbook}.
+\item[psnfss]    Everything you need (except the fonts themselves) for
+  typesetting with a large range of Type~1 (PostScript) fonts.
+\item[tools]     Miscellaneous packages written by the \LaTeX3
+  project team.
+\end{description}
+These packages come with documentation and each of them is also
+described in at least one of the books \emph{\LaTeXcomp} and
+\emph{\LaTeXbook}.
+
+\subsubsection{Tools}
+
+This collection of packages includes, at least, the following (some
+files may have slightly different names on certain systems):
+
+\begin{description}
+\item[array]
+        Extended versions of the environments |array|, |tabular|
+        and |tabular*|, with many extra features.
+\item[calc]
+\NEWfeature{1996/12/01}
+        Enables the use of certain algebraic notation when specifying
+        values for lengths and counters.
+\item[dcolumn]
+        Alignment on `decimal points' in tabular entries. Requires the
+        |array| package.
+\item[delarray]
+        Adds `large delimiters' around arrays. Requires |array|.
+\item[hhline]
+        Finer control over horizontal rules in tables. Requires |array|.
+\item[longtable]
+        Multi-page tables. (Does not require |array|, but it uses the
+        extended features if both are loaded.)
+\item[tabularx]
+        Defines a |tabularx| environment that is similar to |tabular*|
+        but it modifies the column widths, rather than the inter-column
+        space, to achieve the desired table width.
+\item[afterpage]
+        Place text after the current page.
+\item[bm]
+        Access bold math symbols.
+\item[enumerate]
+        Extended version of the |enumerate| environment.
+\item[fontsmpl]
+        Package and test file for producing `font samples'.
+\item[ftnright]
+        Place all footnotes in the right-hand column in two-column mode.
+\item[indentfirst]
+        Indent the first paragraph of sections, etc.
+\item[layout]
+        Show the page layout defined by the current document class.
+\item[multicol]
+        Typeset text in columns, with the length of the columns
+        `balanced'.
+\item[rawfonts]
+        Preload fonts using the old internal font names of \LaTeX~2.09.
+        See Section~\ref{Sec:oldinternals}.
+\item[somedefs]
+       Selective handling of package options. (Used by the rawfonts
+       package.)
+\item[showkeys]
+        Prints the `keys' used by |\label|, |\ref|, |\cite| etc.; useful
+        whilst drafting.
+\item[theorem]
+       Flexible declaration of `theorem-like' environments.
+\item[varioref]
+       `Smart' handling of page references.
+\item[verbatim]
+        Flexible extension of the verbatim environment.
+\item[xr]
+       Cross reference other `external' documents.
+\item[xspace]
+       `Smart space' command that helps you to avoid the common mistake
+       of missing spaces after command names.
+\end{description}
+
+
+\section{Commands}
+\label{Sec:commands}
+
+This section describes the new commands available in \LaTeXe.
+They are covered in more detail in \emph{\LaTeXbook} and in
+\emph{\LaTeXcomp}.
+
+\subsection{Preamble commands}
+\label{Sec:pre}
+
+The changes to the preamble commands are intentionally designed to make
+\LaTeXe{} documents look clearly different from old documents.  The
+commands should be used only before |\begin{document}|.
+
+\begin{decl}
+|\documentclass| \oarg{option-list} \arg{class-name}
+   \oarg{release-date}
+\end{decl}
+
+This command replaces the
+\LaTeX~2.09 command |\documentstyle|.
+
+There must be exactly one |\documentclass| command in a document; and
+it should normally come before any other command.  (There are some
+exceptions, e.g., you can have |filecontents| environments before it
+or |\RequirePackage| but these should be only used in special
+scenarios as discussed elsewhere.)
+
+The \m{option-list} is a list of options, each of which may modify the
+formatting of elements which are defined in the \m{class-name} file,
+as well as those in all following |\usepackage| commands (see
+below).
+
+The optional argument \m{release-date} can be used to specify the
+earliest desired release date of the class file; it should contain a
+date in the format \textsc{yyyy/mm/dd}.  If a version of the class
+older than this date is found, a warning is issued.
+
+For example, to specify a two-column article, using a version of
+|article.cls| released after June 1994, you specify:
+\begin{verbatim}
+   \documentclass[twocolumn]{article}[1994/06/01]
+\end{verbatim}
+
+\begin{decl}
+|\documentstyle| \oarg{option-list} \arg{class-name}
+\end{decl}
+
+This command is still supported for compatibility with old files.  It
+is essentially the same as |\documentclass| except that it invokes
+\emph{\LaTeX~2.09 compatibility mode}.  It also causes any options in
+the \m{option-list} that are not processed by the class file to be
+loaded as packages after the class has been loaded. See
+Section~\ref{Sec:209} for more details on \LaTeX~2.09 compatibility
+mode.
+
+\begin{decl}
+|\usepackage| \oarg{option-list} \arg{package-name} \oarg{release-date}
+\end{decl}
+
+Any number of |\usepackage| commands is allowed. Each package file
+(as denoted by \m{package-name}) defines new elements (or modifies
+those defined in the class file loaded by the \m{class-name} argument
+of the |\documentclass| command).  A package file thus extends the
+range of documents which can be processed.
+
+The \m{option-list} argument can contain a list of options, each of
+which can modify the formatting of elements which are defined in this
+\m{package-name} file.
+
+As above, \m{release-date} can contain the earliest desired release
+date of the package file in the format \textsc{yyyy/mm/dd}; if an
+older version of the package is found, a warning is issued.
+
+For example, to load the |graphics| package for the |dvips| driver,
+using a version of |graphics.sty| released after June 1994, you write:
+\begin{verbatim}
+   \usepackage[dvips]{graphics}[1994/06/01]
+\end{verbatim}
+Each package is loaded only once.  If the same package is requested
+more than once, nothing happens in the second or following attempt
+unless the package has been requested with options that were not given
+in the original |\usepackage|. If such extra options are specified
+then an error message is produced. See Section~\ref{Sec:problems} how
+to resolve this problem.
+
+As well as processing the options given in the \m{option-list} of the
+|\usepackage| command, each package processes the
+\m{option-list} of the |\documentclass| command as well. This
+means that any option which should be processed by every package (to
+be precise, by every package that specifies an action for it) can be
+specified just once, in the |\documentclass| command, rather than
+being repeated for each package that needs it.
+
+\begin{decl}
+|\listfiles|
+\end{decl}
+
+If this command is placed in the preamble then a list of the files
+read in (as a result of processing the document) will be displayed
+on the terminal (and in the log file) at the end of the run. Where
+possible, a short description will also be produced.
+
+\NEWdescription{1995/12/01}
+\emph{Warning}: this command will list only files which were read
+using \LaTeX{} commands such as |\input|\arg{file} or
+|\include|\arg{file}.  If the file was read using the primitive \TeX{}
+syntax |\input |\emph{file} (without |{ }| braces around the file name)
+then it will not be listed; failure to use the \LaTeX{} form with the
+braces can cause more severe problems, possibly leading to overwriting
+important files, so \textbf{always put in the braces}.
+
+
+\begin{decl}
+|\setcounter{errorcontextlines}| \arg{num}
+\end{decl}
+
+\TeX~3 introduced a new primitive |\errorcontextlines| which controls
+the format of error messages. \LaTeXe\ provides an interface to this
+through the standard |\setcounter| command. As most \LaTeX\ users do
+not want to see the internal definitions of \LaTeX\ commands each time
+they make an error, \LaTeXe{} sets this to $-1$ by default.
+
+
+\subsection{Environments to write out support files}
+
+\NEWfeature{2019}
+%
+Until the \LaTeX\ release in 2019 the |filecontents| environment was
+restricted to a place before the |\documentclass| command. These days
+it can be used anywhere, though we still think that in most cases it is
+best to only use it a the top of your document or in the preamble.
+
+\begin{decl}
+|\begin{filecontents}| \oarg{option-list} \arg{file-name} \\
+  \m{file-contents} \\
+|\end{filecontents}|
+\end{decl}
+
+The |filecontents| environment is intended for bundling within a
+single document file the contents of packages, options, or other
+files.  When the document file is run through \LaTeXe{} the body of
+this environment is written verbatim (preceded by a comment line) to a
+file whose name is given as the environment's only argument.  However,
+if that file already exists then nothing happens except for an
+information message.
+
+These days most UTF-8 text characters can be used in a
+|filecontents| envi\-ronment---they will be written unchanged to the
+output file.  However, tabs and form feeds produce a warning,
+explaining that they are turned into spaces or blank lines,
+respectively.
+
+By default the environment does not overwrite an existing file and it
+even refuses to write out the data if there exists a file that is
+anywhere in the path that \TeX\ searches when inputting files.  With
+the option |nosearch| you can ask it to look only into the current
+directory and with the option |overwrite| (or |force|) you can request
+it to write the file regardless. It will, however, never write to
+|\jobname.tex| to avoid overwriting itself.
+
+The |filecontents| environment is used for including \LaTeX{} files.
+For other plain text files (such as Encapsulated PostScript files),
+you should use the |filecontents*| environment which does not add a
+comment line.
+
+
+
+
+\subsection{Document structure}
+
+The |book| document class introduces new commands to indicate
+document structure.
+\begin{decl}
+|\frontmatter| \\ |\mainmatter| \\ |\backmatter|
+\end{decl}
+These commands indicate the beginning of the front matter (title page,
+table of contents and prefaces), main matter (main text) and back
+matter (bibliography, indexes and colophon).
+
+\subsection{Definitions}
+
+In \LaTeX, commands can have both mandatory and optional arguments,
+for example in:
+\begin{verbatim}
+   \documentclass[11pt]{article}
+\end{verbatim}
+the |11pt| argument is optional, whereas the |article| class name is
+mandatory.
+
+In \LaTeX~2.09 users could define commands with arguments, but these
+had to be mandatory arguments.  With \LaTeXe, users can now define
+commands and environments which also have one optional argument.
+
+\begin{decl}
+|\newcommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\
+|\newcommand*| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\
+|\renewcommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\
+|\renewcommand*| \arg{cmd} \oarg{num} \oarg{default} \arg{definition}
+\end{decl}
+
+These commands have a new, second, optional argument; this is used for
+defining commands which themselves take one optional argument.  This
+new argument is best introduced by means of a simple (and hence not
+very practical) example:
+\begin{verbatim}
+   \newcommand{\example}[2][YYY]{Mandatory arg: #2;
+                                 Optional arg: #1.}
+\end{verbatim}
+This defines |\example| to be a command with two arguments, referred
+to as |#1| and |#2| in the \arg{definition}---nothing new so far.  But
+by adding a second optional argument to this |\newcommand| (the
+|[YYY]|) the first argument (|#1|) of the newly defined command
+|\example| is made optional with its default value being |YYY|.
+
+Thus the usage of |\example| is either:
+\begin{verbatim}
+   \example{BBB}
+\end{verbatim}
+which prints:
+\begin{quote}
+   Mandatory arg: BBB;
+   Optional arg: YYY.
+\end{quote}
+or:
+\begin{verbatim}
+   \example[XXX]{AAA}
+\end{verbatim}
+which prints:
+\begin{quote}
+   Mandatory arg: AAA;
+   Optional arg: XXX.
+\end{quote}
+
+The default value of the optional argument is \texttt{YYY}.
+This value is specified as the \oarg{default} argument of the
+|\newcommand| that created |\example|.
+
+As another more useful example, the definition:
+\begin{verbatim}
+   \newcommand{\seq}[2][n]{\lbrace #2_{0},\ldots,\,#2_{#1} \rbrace}
+\end{verbatim}
+means that the input |$\seq{a}$| produces
+the formula $\lbrace a_{0},\ldots,\,a_{n} \rbrace$,
+whereas the input |$\seq[k]{x}$| produces the formula
+$\lbrace x_{0},\ldots,\,x_{k} \rbrace$.
+
+In summary, the command:
+\begin{quote}
+   |\newcommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition}
+\end{quote}
+defines \m{cmd} to be a command with \m{num} arguments, the first of
+which is optional and has default value \m{default}.
+
+Note that there can only be one optional argument but, as before,
+there can be up to nine arguments in total.
+
+\begin{decl}
+|\newenvironment|
+ \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} \\
+|\newenvironment*|
+ \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} \\
+|\renewenvironment|
+ \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} \\
+|\renewenvironment*|
+ \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def}
+\end{decl}
+
+\LaTeXe\ also supports the creation of environments that have one
+optional argument.  Thus the syntax of these two commands has
+been extended in the same way as that of |\newcommand|.
+
+\begin{decl}
+|\providecommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\
+|\providecommand*| \arg{cmd} \oarg{num} \oarg{default} \arg{definition}
+\end{decl}
+
+This takes the same arguments as |\newcommand|. If \m{cmd} is already
+defined then the existing definition is kept; but if it is currently
+undefined then the effect of |\providecommand| is to define \m{cmd}
+just as if |\newcommand| had been used.
+
+\NEWfeature{1994/12/01}
+  All the above five `defining commands' now have \texttt{*}-forms that
+  are usually the better form to use when defining commands with
+  arguments, unless any of these arguments is intended to contain
+  whole paragraphs of text.  Moreover, if you ever do find yourself
+  needing to use the non-star form then you should ask whether
+  that argument would not better be treated as the contents of a
+  suitably defined environment.
+
+\NEWfeature{1995/12/01}
+  The commands produced by the above five `defining commands' are
+  now robust.
+
+\subsection{Boxes}
+
+These next three commands for making LR-boxes all existed in
+\LaTeX~2.09.  They have been enhanced in two ways.
+
+\begin{decl}
+|\makebox| \oarg{width} \oarg{pos}  \arg{text} \\
+|\framebox| \oarg{width} \oarg{pos}  \arg{text} \\
+|\savebox| \arg{cmd} \oarg{width} \oarg{pos}  \arg{text}
+\end{decl}
+
+One small but far-reaching change for \LaTeXe\ is that, within the
+\m{width} argument only, four special lengths can be used.  These are
+all dimensions of the box that would be produced by using simply
+|\mbox|\arg{text}:
+\begin{itemize}
+\item []   |\height|\quad its height above the baseline;
+\item []   |\depth|\quad its depth below the baseline;
+\item []   |\totalheight|\quad the sum of |\height| and |\depth|;
+\item []   |\width|\quad its width.
+\end{itemize}
+Thus, to put `hello' in the centre of a box of twice its natural
+width, you would use:
+\begin{verbatim}
+   \makebox[2\width]{hello}
+\end{verbatim}
+Or you could put \textit{f} into a square box, like
+this:
+   \framebox{\makebox[\totalheight]{\itshape f\/}}
+\begin{verbatim}
+   \framebox{\makebox[\totalheight]{\itshape f\/}}
+\end{verbatim}
+Note that it is the total width of the framed box, including the
+frame, which is set to |\totalheight|.
+
+The other change is a new possibility for \m{pos}: |s| has been added
+to |l| and |r|.  If \m{pos} is |s| then the text is stretched the full
+length of the box, making use of any `rubber lengths' (including any
+inter-word spaces) in the contents of the box.  If no such `rubber
+length' is present, an `underfull box' will probably be produced.
+
+\begin{decl}
+|\parbox| \oarg{pos} \oarg{height} \oarg{inner-pos} \arg{width}
+         \arg{text} \\
+|\begin{minipage}|
+         \oarg{pos} \oarg{height} \oarg{inner-pos} \arg{width}\\
+\m{text}\\
+|\end{minipage}|
+\end{decl}
+
+As for the box commands above, |\height|, |\width|, etc.~may be used
+in the \oarg{height} argument to denote the natural dimensions of the
+box.
+
+The \m{inner-pos} argument is new in \LaTeXe.  It is the vertical
+equivalent to the \m{pos} argument for |\makebox|, etc, determining
+the position of \m{text} within the box.  The \m{inner-pos} may be any
+one of |t|, |b|, |c|, or |s|, denoting top, bottom, centered, or
+`stretched' alignment respectively.  When the \m{inner-pos} argument
+is not specified, \LaTeX\ gives it same  value as \m{pos} (this could be
+the latter's default value).
+
+
+\begin{decl}
+|\begin{lrbox}| \arg{cmd}\\
+\m{text}\\
+|\end{lrbox}|
+\end{decl}
+
+This is an environment which does not directly print anything.
+Its effect is to save the typeset \m{text} in the bin \m{cmd}. Thus
+it is like |\sbox| \arg{cmd} \arg{text}, except that any white space
+before or after the contents \m{text} is ignored.
+
+This is very useful as it enables both the |\verb| command and the
+\texttt{verbatim} environment to be used within \m{text}.
+
+It also makes it possible to define, for example, a `framed box'
+environment.  This is done by first using this environment to save
+some text in a bin \m{cmd} and then calling
+|\fbox{\usebox{|\m{cmd}|}}|.
+
+The following example defines an environment, called |fmpage|, that is
+a framed version of |minipage|.
+\begin{verbatim}
+   \newsavebox{\fmbox}
+   \newenvironment{fmpage}[1]
+     {\begin{lrbox}{\fmbox}\begin{minipage}{#1}}
+     {\end{minipage}\end{lrbox}\fbox{\usebox{\fmbox}}}
+\end{verbatim}
+
+
+\subsection{Measuring things}
+
+The first of these next commands was in \LaTeX~2.09. The two new
+commands are the obvious analogues.
+
+\begin{decl}
+|\settowidth|  \arg{length-cmd} \arg{lr text} \\
+|\settoheight| \arg{length-cmd} \arg{lr text} \\
+|\settodepth|  \arg{length-cmd} \arg{lr text}
+\end{decl}
+
+\subsection{Line endings}
+
+\NEWdescription{1994/12/01}
+The command |\\|, which is used to indicate a line-end in various
+places, is now a robust command when used within arguments such as
+section titles.
+
+Also, because it is often necessary to distinguish which type of line
+is to be ended, we have introduced the following new command; it
+has the same argument syntax as that of |\\|.
+\begin{decl}[1994/12/01]
+|\tabularnewline| \oarg{vertical-space}
+\end{decl}
+One example of its use is when the text in the last
+column of a |tabular| environment is set with |\raggedright|; then
+|\tabularnewline| can be used to indicate the end of a row of the
+|tabular|, whilst |\\| will indicate the end of a line of text in a
+paragraph within the column. This command can be used in the |array|
+environment as well as |tabular|, and also the extended versions of
+these environments offered by the \textsf{array} and \textsf{longtable}
+packages in the tools collection.
+
+\subsection{Controlling page breaks}
+
+Sometimes it is necessary, for a final version of a document, to
+`help' \LaTeX\ break the pages in the best way. \LaTeX~2.09 had a
+variety of commands for this situation: |\clearpage|, |\pagebreak|
+etc.  \LaTeXe\ provides, in addition, commands which can produce
+longer pages as well as shorter ones.
+
+
+\begin{decl}
+|\enlargethispage| \arg{size} \\
+|\enlargethispage*| \arg{size}
+\end{decl}
+
+These commands increase the height of a page (from its normal value of
+|\textheight|) by the specified amount \m{size}, a rigid length. This
+change affects \emph{only} the current page.
+
+This can be used, for example, to allow an extra line to be fitted
+onto the page or, with a negative length, to produce a page
+shorter than normal.
+
+The star form also shrinks any vertical white space on the page as
+much as possible, so as to fit the maximum amount of text on the
+page.
+
+\NEWdescription{1995/12/01}
+These commands do not change the position of the footer text; thus, if
+a page is lengthened too far, the main text may overprint the footer.
+
+\subsection{Floats}
+
+There is a new command, |\suppressfloats|, and a new `float
+specifier'.  These will enable people to gain better
+control of \LaTeX's float placement algorithm.
+
+\begin{decl}
+|\suppressfloats| \oarg{placement}
+\end{decl}
+
+This command stops any further floating environments from being placed
+on the current page. With an optional argument, which should be either
+|t| or |b| (not both), this restriction applies only to putting
+further floats at the top or at the bottom.  Any floats which would
+normally be placed on this page are placed on the next page instead.
+
+\begin{decl}
+The extra float location specifier: \ \texttt{!}
+\end{decl}
+
+This can be used, along with at least one of \texttt{h}, \texttt{t},
+\texttt{b} and \texttt{p}, in the location optional argument of a
+float.
+
+If a \texttt{!} is present then, just for this particular float,
+whenever it is processed by the float mechanism the following are
+ignored:
+\begin{itemize}
+\item  all restrictions on the number of floats which can appear;
+\item all explicit restrictions on the amount of space on a text page
+which may be occupied by floats or must be occupied by text.
+\end{itemize}
+The mechanism will, however, still attempt to ensure that pages are
+not overfull and that floats of the same type are printed in the
+correct order.
+
+Note that its presence has no effect on the production of float pages.
+
+A \texttt{!} specifier overrides the effect of any |\suppressfloats|
+command for this particular float.
+
+\subsection{Font changing: text}
+
+The font selection scheme used in \LaTeXe{} differs a lot from that
+used in \LaTeX~2.09.  In this section, we give a brief description of
+the new commands.  A more detailed description with examples is given
+in \emph{\LaTeXcomp}, and the interface for class- and package-writers
+is described in \emph{\fntguide}.
+
+\begin{decl}
+|\normalfont|\\
+|\rmfamily|\\
+|\sffamily|\\
+|\ttfamily|\\
+|\mdseries|\\
+|\bfseries|\\
+|\upshape|\\
+|\itshape|\\
+|\slshape|\\
+|\scshape|
+\end{decl}
+
+These are font commands whose use is the same as the commands |\rm|,
+|\bf|, etc.  The difference is that each command changes just one
+attribute of the font (the attribute changed is part of the name).
+One result of this is that, for example, |\bfseries\itshape| produces
+both a change of series and a change of shape, to give a bold italic
+font.
+
+\begin{decl}
+|\textnormal|\arg{text}\\
+|\textrm|\arg{text}\\
+|\textsf|\arg{text}\\
+|\texttt|\arg{text}\\
+|\textmd|\arg{text}\\
+|\textbf|\arg{text}\\
+|\textup|\arg{text}\\
+|\textit|\arg{text}\\
+|\textsl|\arg{text}\\
+|\textsc|\arg{text}\\
+|\emph|\arg{text}
+\end{decl}
+
+These are one-argument commands; they take as an argument the
+text which is to be typeset in the particular font. They also
+automatically insert italic corrections where appropriate; if you do
+not like the result, you can add an italic correction with |\/| or
+remove it with |\nocorr|.  The |\nocorr| should always be the first or
+last thing within the \arg{text} argument.
+
+\subsection{Font changing: math}
+
+Most of the fonts used within math mode do not need to be explicitly
+invoked; but to use letters from a range of fonts, the following
+class of commands is provided.
+
+\begin{decl}
+|\mathrm| \arg{letters}\\
+|\mathnormal| \arg{letters}\\
+|\mathcal| \arg{letters}\\
+|\mathbf| \arg{letters}\\
+|\mathsf| \arg{letters}\\
+|\mathtt| \arg{letters}\\
+|\mathit| \arg{letters}
+\end{decl}
+
+These are also one-argument commands which take as an argument the
+letters which are to be typeset in the particular font.  The argument
+is processed in math mode so spaces within it will be ignored.  Only
+letters, digits and accents have their font changed, for example
+|$\mathbf{\tilde A \times 1}$| produces $\mathbf{\tilde A \times 1}$.
+
+\subsection{Ensuring math mode}
+
+\begin{decl}
+|\ensuremath| \arg{math commands}
+\end{decl}
+
+In \LaTeX~2.09, if you wanted a command to work both in math mode and
+in text mode, the suggested method was to define something like:
+\begin{verbatim}
+   \newcommand{\Gp}{\mbox{$G_p$}}
+\end{verbatim}
+Unfortunately, the |\mbox| stops |\Gp| changing size correctly in (for
+instance) subscripts or a fraction.
+
+In \LaTeXe{} you can define it thus:
+\begin{verbatim}
+   \newcommand{\Gp}{\ensuremath{G_p}}
+\end{verbatim}
+Now |\Gp| will work correctly in all contexts.
+
+This is because the |\ensuremath| does nothing, producing simply
+|G_p|, when |\Gp| is used within math mode; but it ensures that math
+mode is entered (and exited) as required when |\Gp| is used in text
+mode.
+
+
+\subsection{Setting text superscripts}
+
+\begin{decl}
+|\textsuperscript| \arg{text}
+\end{decl}
+
+\NEWfeature{1995/06/01} In \LaTeX~2.09 textual superscripts such as
+footnote markers were produced by internally entering math mode and
+typesetting the number as a math superscript.  This normally looked
+fine since the digits in math fonts are the same as those in text
+fonts when Computer Modern fonts are used.  But when a different
+document font (such as Times) is selected, the results look rather
+strange.  For this reason the command |\textsuperscript| has been
+introduced which typesets its argument in the current text font, in a
+superscript position and in the correct size.
+
+\subsection{Text commands: all encodings}
+
+\NEWdescription{1994/12/01}
+  One of the main differences between \LaTeXe{} and \LaTeX~2.09 is
+  that \LaTeXe{} can deal with fonts in arbitrary \emph{encodings}.
+  (A font encoding is the sequence of characters in the font---for
+  example a Cyrillic font would have a different encoding from a Greek
+  font.)
+
+  The two major font encodings that are used for Latin languages such
+  as English or German are |OT1| (Donald Knuth's 7-bit encoding, which
+  has been used during most of \TeX's lifetime) and |T1| (the new
+  8-bit `Cork' encoding).
+
+  \LaTeX~2.09 only supported the |OT1| encoding, whereas \LaTeXe{} has
+  support for both |OT1| and |T1| built-in.  The next section will
+  cover the new commands which are available if you have |T1|-encoded
+  fonts.  This section describes new commands which are available in
+  all encodings.
+
+  Most of these commands provide characters which were available in
+  \LaTeX~2.09 already.  For example |\textemdash| gives an `em dash',
+  which was available in \LaTeX~2.09 by typing |---|.  However, some
+  fonts (for example a Greek font) may not have the |---| ligature,
+  but you will still be able to access an em dash by typing
+  |\textemdash|.
+
+\begin{decl}[1994/12/01]
+      |\r{<text>}|
+\end{decl}
+   This command gives a `ring' accent, for example `\r{o}' can be typed
+   |\r{o}|.
+
+\begin{decl}[1994/12/01]
+      |\SS|
+\end{decl}
+  This command produces a German `SS', that is a capital `\ss'.  This
+  letter can hyphenate differently from `SS', so is needed for entering
+  all-caps German.
+
+\begin{decl}[1994/12/01]
+      |\textcircled{<text>}|
+\end{decl}
+   This command is used to build `circled characters' such as
+   |\copyright|.  For example |\textcircled{a}| produces
+   \textcircled{a}.
+
+\begin{decl}[1994/12/01]
+      |\textcompwordmark|
+\end{decl}
+  This command is used to separate letters which would normally
+  ligature.  For example `f\textcompwordmark i' is produced with
+  |f\textcompwordmark i|.  Note that the `f' and `i' have not
+  ligatured to produce `fi'.  This is rarely useful in English
+  (`shelf\textcompwordmark ful' is a rare example of where it might be
+  used) but is used in languages such as German.
+
+\begin{decl}[1994/12/01]
+      |\textvisiblespace|
+\end{decl}
+   This command produces a `visible space' character
+   `\textvisiblespace'.  This is sometimes used in computer listings,
+   for example `type \textsf{hello\textvisiblespace world}'.
+
+\begin{decl}[1994/12/01]
+      |\textemdash|
+      |\textendash|
+      |\textexclamdown|
+      |\textquestiondown| \\
+      |\textquotedblleft|
+      |\textquotedblright|
+      |\textquoteleft|
+      |\textquoteright|
+\end{decl}
+   These commands produce characters which would otherwise be
+   accessed via ligatures:
+   \begin{center}
+      \begin{tabular}{ccl}
+         \emph{ligature} & \emph{character} & \emph{command} \\
+         |---| & --- & |\textemdash| \\
+         |--|  & --  & |\textendash| \\
+         |!`|  & !`  & |\textexclamdown| \\
+         |?`|  & ?`  & |\textquestiondown| \\
+         |``|  & ``  & |\textquotedblleft| \\
+         |''|  & ''  & |\textquotedblright| \\
+         |`|   & `   & |\textquoteleft| \\
+         |'|   & '   & |\textquoteright|
+      \end{tabular}
+   \end{center}
+   The reason for making these characters directly accessible is so
+   that they will work in encodings which do not have these characters.
+
+\begin{decl}[1994/12/01]
+      |\textbullet|
+      |\textperiodcentered|
+\end{decl}
+   These commands allow access to characters which were previously only
+   available in math mode:
+   \begin{center}
+      \begin{tabular}{lcl}
+         \emph{math command} & \emph{character} & \emph{text command} \\
+          |\bullet|   & $\bullet$   & |\textbullet| \\
+         |\cdot|     & $\cdot$     & |\textperiodcentered|
+      \end{tabular}
+   \end{center}
+
+\begin{decl}[1995/12/01]
+      |\textbackslash|
+      |\textbar|
+      |\textless|
+      |\textgreater|
+\end{decl}
+   These commands allow access to ASCII characters which were
+   only available in verbatim or math mode:
+   \begin{center}
+      \begin{tabular}{lcl}
+         \emph{math command} & \emph{character} & \emph{text command} \\
+          |\backslash|   & $\backslash$   & |\textbackslash| \\
+          |\mid|     & $\mid$     & |\textbar| \\
+          |<<| & $<$ & |\textless| \\
+          |>>| & $>$ & |\textgreater|
+      \end{tabular}
+   \end{center}
+
+\begin{decl}[1995/12/01]
+      |\textasciicircum|
+      |\textasciitilde|
+\end{decl}
+   These commands allow access to ASCII characters which were
+   previously only available in verbatim:
+   \begin{center}
+      \begin{tabular}{cl}
+         \emph{verbatim} & \emph{text command} \\
+         |^| & |\textasciicircum| \\
+         |~| & |\textasciitilde|
+      \end{tabular}
+   \end{center}
+
+\begin{decl}[1995/12/01]
+      |\textregistered|
+      |\texttrademark|
+\end{decl}
+   These commands provide the `registered trademark' (R) and
+   `trademark' (TM) symbols.
+
+\subsection{Text commands: the T1 encoding}
+
+\NEWdescription{1994/12/01}
+  The |OT1| font encoding is fine for typesetting in English, but has
+  problems when typesetting other languages.  The |T1| encoding solves
+  some of these problems, by providing extra characters (such as `eth'
+  and `thorn'), and it allows words containing accented letters to be
+  hyphenated (as long as you have a package like |babel| which allows
+  for non-American hyphenation).
+
+  This section describes the commands you can use if you have the |T1|
+  fonts.  To use them, you need to get the `ec fonts', or the
+  |T1|-encoded PostScript fonts, as used by \textsf{psnfss}.
+  All these fonts are
+  available by anonymous ftp in the Comprehensive \TeX{} Archive, and
+  are also available on the CD-ROMs \emph{4all \TeX} and
+  \emph{\TeX{} Live} (both available from the \TeX{} Users Group).
+
+   You can then select the |T1| fonts by saying:
+\begin{verbatim}
+   \usepackage[T1]{fontenc}
+\end{verbatim}
+   This will allow you to use the commands in this section.
+
+   \emph{Note:} Since this document must be processable on any site
+   running an up-to-date \LaTeX, it does not contain any characters
+   that are present only in |T1|-encoded fonts.  This means that this
+   document cannot show you what these glyphs look like!  If you want
+   to see them then run \LaTeX{} on the document |fontsmpl| and
+   respond `|cmr|' when it prompts you for a family name.
+
+\begin{decl}[1994/12/01]
+      |\k{<text>}|
+\end{decl}
+   This command produces an `ogonek' accent.
+
+\begin{decl}[1994/12/01]
+      |\DH|
+      |\DJ|
+      |\NG|
+      |\TH|
+      |\dh|
+      |\dj|
+      |\ng|
+      |\th|
+\end{decl}
+   These commands produce characters `eth', `dbar', `eng', and `thorn'.
+
+\begin{decl}[1994/12/01]
+      |\guillemotleft|
+      |\guillemotright|
+      |\guilsinglleft|
+      |\guilsinglright| \\
+      |\quotedblbase|
+      |\quotesinglbase|
+      |\textquotedbl|
+\end{decl}
+   % A local hack (could be improved):
+   \newcommand{\fauxguillemet}[1]{$\vcenter{\hbox{$\scriptscriptstyle#1$}}$}
+   These commands produce various sorts of quotation mark.
+   Rough representations of them are:
+   \fauxguillemet\ll a\fauxguillemet\gg{}
+   \fauxguillemet<a\fauxguillemet>
+   ,\kern -0.1em,\kern 0.05em a\kern -0.05em``
+   ,\kern 0.05em a\kern -0.05em` and |"|a|"|.
+
+\NEWdescription{2001/06/01}
+   There are therefore some extra short-form ligatures available for
+   use in documents that will only be used with |T1|-encoded fonts.
+
+   The guillemets |\guillemotleft| and |\guillemotright|%
+   \footnote{We apologise once again for maintaining Adobe's
+     enormous solipsism~(sic) of confusing a diving bird with
+     punctuation marks!}
+   can be obtained by typing |<<<<| and |>>>>| and |\quotedblbase|
+   by typing |,,|\,.
+
+   Also, unlike the unexpected results with
+   |OT1|-encoded fonts, |<<| and |>>| will produce \textless{} and
+   \textgreater{}.
+
+   Note also that the single character |"| will no longer produce ''
+   but rather |\textquotedbl|.
+
+\subsection{Logos}
+
+\begin{decl}
+|\LaTeX|\\
+|\LaTeXe|
+\end{decl}
+
+|\LaTeX| (producing `\LaTeX') is still the `main' logo command,
+but if you need to refer to the new features, you can write
+|\LaTeXe| (producing `\LaTeXe').
+
+\subsection{Picture commands}
+
+\begin{decl}
+   |\qbezier[<N>](<AX>,<AY>)(<BX>,<BY>)(<CX>,<CY>)| \\
+   | \bezier{<N>}(<AX>,<AY>)(<BX>,<BY>)(<CX>,<CY>)|
+\end{decl}
+The |\qbezier| command can be used in |picture| mode to draw a
+quadratic Bezier curve from position |(<AX>,<AY>)| to |(<CX>,<CY>)| with
+control point |(<BX>,<BY>)|.  The optional argument \m{N} gives the
+number of points on the curve.
+
+For example, the diagram:
+\begin{center}
+   \begin{picture}(50,50)
+      \thicklines
+      \qbezier(0,0)(0,50)(50,50)
+      \qbezier[20](0,0)(50,0)(50,50)
+      \thinlines
+      \put(0,0){\line(1,1){50}}
+   \end{picture}
+\end{center}
+is drawn with:
+\begin{verbatim}
+   \begin{picture}(50,50)
+      \thicklines
+      \qbezier(0,0)(0,50)(50,50)
+      \qbezier[20](0,0)(50,0)(50,50)
+      \thinlines
+      \put(0,0){\line(1,1){50}}
+   \end{picture}
+\end{verbatim}
+The |\bezier| command is the same, except that the argument \m{N} is not
+optional.  It is provided for compatibility with the \LaTeX~2.09
+|bezier| document style option.
+
+\subsection{Old commands}
+
+\begin{decl}
+|\samepage|
+\end{decl}
+
+The |\samepage| command still exists but is no longer being
+maintained.
+This is because it only ever worked erratically; it does not
+guarantee that there will be no page-breaks within its scope; and
+it can cause footnotes and marginals to be wrongly placed.
+
+We recommend using |\enlargethispage| in conjunction with page-break
+commands such as |\newpage| and |\pagebreak| to help control page
+breaks.
+
+\begin{decl}
+   |\SLiTeX|
+\end{decl}
+Since \SLiTeX{} no longer exists, the logo is no longer defined in the
+\LaTeX{} kernel.  A suitable replacement is |\textsc{Sli\TeX}|.  The
+\SLiTeX{} logo is defined in \LaTeX~2.09 compatibility mode.
+
+\begin{decl}
+|\mho| |\Join| |\Box| |\Diamond| |\leadsto| \\
+|\sqsubset| |\sqsupset| |\lhd| |\unlhd| |\rhd| |\unrhd|
+\end{decl}
+
+These symbols are contained in the \LaTeX{} symbol font, which was
+automatically loaded by \LaTeX~2.09.  However, \TeX{} has room for
+only sixteen math font families; thus many users discovered that they
+ran out.  Because of this, \LaTeX{} does not load the \LaTeX{} symbol
+font unless you use the \textsf{latexsym} package.
+
+These symbols are also made available, using different fonts, by the
+\textsf{amsfonts} package, which also defines a large number of other
+symbols.  It is supplied by the American Mathematical Society.
+
+The \textsf{latexsym} package is loaded automatically in \LaTeX~2.09
+compatibility mode.
+
+\section{\LaTeX~2.09 documents}
+\label{Sec:209}
+
+\LaTeXe{} can process (almost) any \LaTeX~2.09 document, by entering
+\emph{\LaTeX~2.09 compatibility mode}.  Nothing has changed, you run
+\LaTeX{} in the same way you always did, and you will get much the
+same results.
+
+The reason for the `almost' is that some \LaTeX~2.09 packages made use
+of low-level unsupported features of \LaTeX.  If you discover such a
+package, you should find out if it has been updated to work with
+\LaTeXe.  Most packages will still work with \LaTeXe---the easiest way
+to find out whether a package still works is to try it!
+
+\LaTeX~2.09 compatibility mode is a comprehensive emulation of
+\LaTeX~2.09, but at the cost of time.  Documents can run up to 50\%
+slower in compatibility mode than they did under \LaTeX~2.09.
+In addition, many of the new features of \LaTeXe{} are not available in
+\LaTeX~2.09 compatibility mode.
+
+\subsection{Warning}
+
+\NEWdescription{1995/12/01}
+This \emph{\LaTeX~2.09 compatibility mode} is provided solely to allow
+you to process 2.09 documents, i.e.~documents that were written (we
+hope, a long time ago) for a very old system and therefore could be
+processed by using a genuine antique \LaTeX~2.09 system.
+
+This mode is therefore \emph{not} intended to provide access to the
+enhanced features of \LaTeXe{}.  Thus it must not be used to process
+new documents which masquerade as 2.09 documents (i.e.~they begin with
+|\documentstyle|) but which could not be processed using that genuine
+antique \LaTeX~2.09 system because they contain some new,
+\LaTeXe{}-only, commands or environments.
+
+To prevent such misuse of the system, and the consequent trouble it
+causes when such misleadingly encoded documents are distributed, the
+\emph{\LaTeX~2.09 compatibility mode} turns off most of these new
+features and commands.  Any attempt to use them will give you an error
+message and, moreover, many of them simply  will not work, whilst
+others will produce unpredictable results.
+So don't bother sending us any bug reports about such occurrences since
+they are intentional.
+
+
+\subsection{Font selection problems}
+\label{Sec:fsprob}
+
+When using compatibility mode, it is possible that you will find
+problems with font-changing commands in some old documents.  These
+problems are of two types:
+
+\begin{itemize}
+\item producing error messages;
+\item not producing the font changes you expected.
+\end{itemize}
+
+In case of error messages it is possible that the document (or an old
+style file used therein) contains references to old internal commands
+which are no longer defined, see Section~\ref{Sec:oldinternals} for
+more information if this is the case.
+
+\NEWdescription{1995/12/01}
+One example of the unexpected is if you use one of the new style of
+math-mode font changing command as follows:
+\begin{verbatim}
+$ \mathbf{xy} A $
+\end{verbatim}
+You may well find that this behaves as if you had put:
+\begin{verbatim}
+$ \bf {xy} A $
+\end{verbatim}
+everything including the $A$ coming out bold.
+
+\LaTeX~2.09 allowed sites to customize their \LaTeX{} installation,
+which resulted in documents producing different results on different
+\LaTeX{} installations.  \LaTeXe{} no longer allows so much
+customization but, for compatibility with old documents, the local
+configuration file |latex209.cfg| is loaded every time \LaTeXe{}
+enters \LaTeX~2.09 compatibility mode.
+
+For example, if your site was customized to use the New Font
+Selection Scheme (\NFSS) with the |oldlfont| option, then you can
+make \LaTeXe{} emulate this by creating a |latex209.cfg| file
+containing the commands:
+\begin{verbatim}
+\ExecuteOptions{oldlfont}\RequirePackage{oldlfont}
+\end{verbatim}
+Similarly, to emulate \NFSS{} with the |newlfont| option, you can
+create a |latex209.cfg| file containing:
+\begin{verbatim}
+\ExecuteOptions{newlfont}\RequirePackage{newlfont}
+\end{verbatim}
+
+
+\subsection{Native mode}
+\label{Sec:native}
+
+To run an old document faster, and use the new features of
+\LaTeXe, you should try using \emph{\LaTeXe{} native mode}.
+This is done by replacing the command:
+\begin{quote}
+   |\documentstyle[|\m{options}|,|\m{packages}|]|\arg{class}
+\end{quote}
+with:
+\begin{quote}
+   |\documentclass|\oarg{options}\arg{class} \\
+   |\usepackage{latexsym,|\m{packages}|}|
+\end{quote}
+However, some documents which can be processed in \LaTeX~2.09
+compatibility mode may not work in native mode.  Some \LaTeX~2.09
+packages will only work with \LaTeXe{} in 2.09 compatibility mode.
+Some documents will cause errors because of \LaTeXe's improved error
+detection abilities.
+
+But most \LaTeX~2.09 documents can be processed by \LaTeXe{}'s native
+mode with the above change.  Again, the easiest way to find out
+whether your documents can be processed in native mode is to try it!
+
+
+\section{Local modifications}
+\label{sec:loc}
+
+\NEWdescription{1995/12/01}
+There are two common types of local modifications that can be done
+very simply.  Do not forget that documents produced using such
+modifications will not be usable at other places (such documents are
+called `non-portable').
+
+One type of modification is the use of personal commands for commonly
+used symbols or constructions.  These should be put into a package
+file (for example, one called \texttt{mymacros.sty}) and loaded by
+putting |\usepackage{mymacros}| in the document preamble.
+
+Another type is a local document class that is very similar to one of
+the standard classes but contains some straightforward modifications
+such as extra environments, different values for some parameters, etc.
+These should be put into a class file; here we shall describe a simple
+method of constructing such a file using, as an example, a class
+called \textsf{larticle} that is very similar to the \textsf{article}
+class.
+
+\NEWfeature{1995/12/01}
+The class file called \texttt{larticle.cls} should (after the
+preliminary identification commands) start as follows:
+\begin{verbatim}
+   \LoadClassWithOptions{article}
+\end{verbatim}
+This command should be followed by whatever additions and changes you
+wish to make to the results of reading in the file
+\texttt{article.sty}.
+
+The effect of using the above |\LoadClassWithOptions| command is to
+load the standard class file \textsf{article} with whatever options
+are asked for by the document.  Thus a document using your
+\textsf{larticle} class can specify any option that could be specified
+when using the standard \textsf{article} class; for example:
+\begin{verbatim}
+   \documentclass[a4paper,twocolumn,dvips]{larticle}
+\end{verbatim}
+
+
+\section{Problems}
+\label{Sec:problems}
+
+This section describes some of the things which may go wrong when
+using \LaTeXe, and what you can do about it.
+
+\subsection{New error messages}
+
+\LaTeXe{} has a number of new error messages.
+Please also note that many error messages now produce further helpful
+information if you press |h| in response to the error prompt.
+
+\begin{decl}
+|Option clash for package |\m{package}|.|
+\end{decl}
+The named package has been loaded twice with different options.  If
+you enter |h| you will be told what the options were, for example, if
+your document contained:
+\begin{verbatim}
+   \usepackage[foo]{fred}
+   \usepackage[baz]{fred}
+\end{verbatim}
+then you will get the error message:
+\begin{verbatim}
+   Option clash for package fred.
+\end{verbatim}
+and typing |h| at the |?| prompt will give you:
+\begin{verbatim}
+   The package fred has already been loaded with options:
+     [foo]
+   There has now been an attempt to load it with options:
+     [baz]
+   Adding the line:
+     \usepackage[foo,baz]{fred}
+   to your document may fix this.
+   Try typing <<return>> to proceed.
+\end{verbatim}
+The cure is, as suggested, to load the package with both sets of
+options.  Note that since \LaTeX{} packages can call other packages,
+it is possible to get a package option clash without explicitly
+requesting the same package twice.
+
+\begin{decl}
+   |Command |\m{command}| not provided in base NFSS.|
+\end{decl}
+The \m{command} is not provided by default in \LaTeXe.  This error is
+generated by using one of the commands:
+\begin{verbatim}
+   \mho \Join \Box \Diamond \leadsto
+   \sqsubset \sqsupset \lhd \unlhd \rhd \unrhd
+\end{verbatim}
+which are now part of the \textsf{latexsym} package.
+The cure is to add:
+\begin{verbatim}
+   \usepackage{latexsym}
+\end{verbatim}
+in the preamble of your document.
+
+\begin{decl}
+   |LaTeX2e command <command> in LaTeX 2.09 document.|
+\end{decl}
+The \m{command} is a \LaTeXe{} command but this is a \LaTeX~2.09
+document.  The cure is to replace the command by a \LaTeX~2.09
+command, or to run document in native mode, as described in
+Section~\ref{Sec:native}.
+
+\begin{decl}
+   |NFSS release 1 command \newmathalphabet found.|
+\end{decl}
+The command |\newmathalphabet| was used by the New Font Selection
+Scheme Release 1 but it has now been replaced by
+|\DeclareMathAlphabet|, the use of which is described in
+\emph{\fntguide}.
+
+The best cure is to update the package which contained the
+|\newmathalphabet| command.  Find out if there is a new release of
+the package, or (if you wrote the package yourself) consult
+\emph{\fntguide} for the new syntax of font commands.
+
+If there is no updated version of the package then you can cure this
+error by using the \textsf{newlfont} or \textsf{oldlfont} package,
+which tells \LaTeX{} which version of |\newmathalphabet| should be
+emulated.
+
+You should use \textsf{oldlfont} if the document selects math fonts with
+syntax such as this:
+\begin{quote}
+  |{\cal A}|, etc.
+\end{quote}
+Use \textsf{newlfont} if the document's syntax is like this:
+\begin{quote}
+  |\cal{A}|, etc.
+\end{quote}
+
+
+\begin{decl}
+   |Text for \verb command ended by end of line.|
+\end{decl}
+The |\verb| command has been begun but not ended on that line.  This
+usually means that you have forgotten to put in the end-character of
+the |\verb| command.
+
+\begin{decl}
+   |Illegal use of \verb command.|
+\end{decl}
+The |\verb| command has been used inside the argument of another
+command.  This has never been allowed in \LaTeX{}---often producing
+incorrect output without any warning---and so \LaTeXe{} produces
+an error message.
+
+\subsection{Old internal commands}
+\label{Sec:oldinternals}
+
+A number of \LaTeX~2.09 internal commands have been removed, since
+their functionality is now provided in a different way.  See
+\emph{\clsguide} for more details of the new, supported interface for
+class and package writers.
+
+\begin{decl}
+   |\tenrm| |\elvrm| |\twlrm| \dots\\
+   |\tenbf| |\elvbf| |\twlbf| \dots\\
+   |\tensf| |\elvsf| |\twlsf| \dots\\
+   $\vdots$
+\end{decl}
+These commands provided access to the seventy fonts preloaded by
+\LaTeX~2.09.  In contrast, \LaTeXe{} normally preloads at most
+fourteen fonts, which saves a lot of font memory; but a consequence is
+that any \LaTeX{} file which used the above commands to directly
+access fonts will no longer work.
+
+Their use will usually produce an error message such as:
+\begin{verbatim}
+   ! Undefined control sequence.
+   l.5 \tenrm
+\end{verbatim}
+The cure for this is to update the document to use the new
+font-changing commands provided by \LaTeXe; these are described in
+\emph{\fntguide}.
+
+If this is not possible then, as a last resort, you can
+use the \textsf{rawfonts} package, which loads the
+seventy \LaTeX~2.09 fonts and provides direct access to them using the
+old commands.  This takes both time and memory.  If you do not
+wish to load all seventy fonts, you can select some of them by using the
+|only| option to \textsf{rawfonts}.  For example, to load only |tenrm|
+and |tenbf| you write:
+\begin{verbatim}
+   \usepackage[only,tenrm,tenbf]{rawfonts}
+\end{verbatim}
+
+The \textsf{rawfonts} package is distributed as part of the \LaTeX{}
+tools software, see Section~\ref{Sec:st-pack}.
+
+\subsection{Old files}
+
+One of the more common mistakes in running \LaTeX{} is to read in old
+versions of packages instead of the new versions.  If you get an
+incomprehensible error message from a standard package, make sure you
+are loading the most recent version of the package.  You can find out
+which version of the package has been loaded by looking in the log
+file for a line like:
+\begin{verbatim}
+   Package: fred 1994/06/01 v0.01 Fred's package.
+\end{verbatim}
+You can use the \m{release-date} options to |\documentclass| and
+|\usepackage| to make sure that you are getting a suitably recent copy
+of the document class or package.  This is useful when sending a
+document to another site, which may have out-of-date software.
+
+\subsection{Where to go for more help}
+
+If you can't find the answer for your problem here, try looking in
+\emph{\LaTeXbook} or \emph{\LaTeXcomp}.  If you have a problem with
+installing \LaTeX, look in the installation guide files which come with
+the distribution.
+
+If this doesn't help, contact your local \LaTeX{} guru or local
+\LaTeX{} mailing list.
+
+If you think you've discovered a bug then please report it!  First,
+you should find out if the problem is with a third-party package or
+class.  If the problem is caused by a package or class other than
+those listed in Section~\ref{Sec:class+packages} then please report
+the problem to the author of the package or class, not to the \LaTeX3
+project team.
+
+If the bug really is with core \LaTeX{} then you should create a
+\emph{short}, \emph{self-contained} document which exhibits the
+problem.  You should run a \emph{recent} (less than a year old)
+version of \LaTeX{} on the file and then run \LaTeX{} on
+|latexbug.tex|.  This will create an error report which you should
+send, together with the sample document and log file, to the
+\LaTeX{} bugs address which can be found in the file
+|latexbug.tex| or |bugs.txt|.
+
+
+\section{Enjoy!}
+\label{Sec:enjoy}
+
+We certainly hope you will enjoy using the new standard \LaTeX{} but,
+if this is not possible, we hope that you will enjoy success and
+fulfillment as a result of the documents which it will help you to
+create.
+
+If you find that the contribution of \LaTeX{} to your life is such
+that you would like to support the work of the project team, then
+please read Section~\ref{Sec:ltx3} and discover practical ways to do
+this.
+
+\begin{thebibliography}{1}
+
+\bibitem{A-W:GRM97}
+Michel Goossens, Sebastian Rahtz and Frank Mittelbach.
+\newblock {\em The {\LaTeX} Graphics Companion}.
+\newblock Addison-Wesley, Reading, Massachusetts, 1997.
+
+
+\bibitem{A-W:GR99}
+Michel Goossens and Sebastian Rahtz.
+\newblock {\em The {\LaTeX} Web Companion}.
+\newblock Addison-Wesley, Reading, Massachusetts, 1999.
+
+
+\bibitem{A-W:DEK91}
+Donald~E. Knuth.
+\newblock {\em The \TeX book}.
+\newblock Addison-Wesley, Reading, Massachusetts, 1986.
+\newblock Revised to cover \TeX3, 1991.
+
+
+\bibitem{A-W:LLa94}
+Leslie Lamport.
+\newblock {\em {\LaTeX:} A Document Preparation System}.
+\newblock Addison-Wesley, Reading, Massachusetts, second edition, 1994.
+
+\bibitem{A-W:MG2004}
+Frank Mittelbach and Michel Goossens.
+\newblock {\em The {\LaTeX} Companion second edition}.
+\newblock With Johannes Braams, David Carlisle, and Chris Rowley.
+\newblock Addison-Wesley, Reading, Massachusetts, 2004.
+
+
+\end{thebibliography}
+
+\end{document}


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

Modified: trunk/Master/texmf-dist/doc/latex/base/usrguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/usrguide.tex	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/base/usrguide.tex	2022-11-01 19:57:17 UTC (rev 64892)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2022
+% Copyright (C) 2020-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -28,18 +28,44 @@
 % \fi
 % Filename: usrguide.tex
 
-\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\documentclass{ltxguide}
 
-\documentclass{ltxguide}[2001/05/28]
+\usepackage[T1]{fontenc}  % needed for \textbackslash in tt
+\usepackage{csquotes}
 
-\title{\LaTeXe~for authors}
+\title{\LaTeX\ for authors --- current version}
+\author{\copyright~Copyright 2020-2022, \LaTeX\ Project Team.\\
+   All rights reserved.%
+   \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{usrguide.tex} for full details.}%
+}
 
-\author{\copyright~Copyright 1995--2020, \LaTeX\ Project Team.\\
-   All rights reserved.}
+\date{2022-07-05}
 
-\date{25 May 2020}
+\NewDocumentCommand\cs{m}{\texttt{\textbackslash\detokenize{#1}}}
+\NewDocumentCommand\marg{m}{\arg{#1}}
+\NewDocumentCommand\meta{m}{\ensuremath{\langle}\textit{#1}\ensuremath{\rangle}}
+\NewDocumentCommand\pkg{m}{\textsf{#1}}
+\NewDocumentCommand\text{m}{\ifmmode\mbox{#1}\else#1\fi}
+% Fix a 'feature'
+\makeatletter
+\renewcommand \verbatim at font {\normalfont \ttfamily}
+\makeatother
 
 
+% for fpeval documentation
+
+\providecommand\fpop[1]{\mathop{\texttt{#1}}}
+\providecommand\fpbin[1]{\mathbin{\texttt{#1}}}
+\providecommand\fprel[1]{\mathrel{\texttt{#1}}}
+\providecommand\nan{\texttt{NaN}}
+
+\ExplSyntaxOn
+\ProvideExpandableDocumentCommand \fpeval { m } { \fp_eval:n {#1} }
+\ExplSyntaxOff
+
 \begin{document}
 
 \maketitle
@@ -48,1780 +74,1133 @@
 
 \section{Introduction}
 
-Welcome to \LaTeXe, the new standard version of the \LaTeX{} Document
-Preparation System.
+\LaTeXe{} was released in 1994 and added a number of then-new concepts to
+\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
+\emph{stable} and \emph{widely-usable} concepts that have resulted from that
+work. These `new' ideas have been transferred from development packages
+into the \LaTeXe{} kernel. As such, they are now available to \emph{all}
+\LaTeX{} users and have the \emph{same stability} as any other part of the
+kernel. The fact that `behind the scenes' they are built on \pkg{expl3}
+is useful for the development team, but is not directly important to users.
 
-This document describes how to take advantage of the new features of
-\LaTeX, and how to process your old \LaTeX{} documents with
-\LaTeXe. However, this document is only a brief introduction to the
-new facilities and is intended for authors who are already familiar
-with the old version of \LaTeX{}.  It is \emph{not} a reference manual
-for \LaTeXe{} nor is it a complete introduction to \LaTeX.
+\section{Creating document commands and environments}
 
-It is somewhat of an historical document now, since \LaTeXe{} came into
-existence in 1994.
+\subsection{Overview}
 
-\subsection[\LaTeXe---The new \LaTeX~release]
-  {\LaTeXe---The new \LaTeX~release\\ (well, for more than 10 years now)}
+Creating document commands and environments using the \LaTeX3 toolset is based
+around the idea that a common set of descriptions can be used to cover almost
+all argument types used in real documents. Thus parsing is reduced to a simple
+description of which arguments a command takes: this description provides the
+`glue' between the document syntax and the implementation of the
+command.
 
-The previous version of \LaTeX{} was known as \LaTeX~2.09.  Over the
-years many extensions have been developed for \LaTeX.  This is, of
-course, a sure sign of its continuing popularity but it has had one
-unfortunate result: incompatible \LaTeX{} formats came into use at
-different sites.  This included `standard \LaTeX~2.09', \LaTeX{} built
-with the \emph{New Font Selection Scheme}~(\NFSS), \SLiTeX, \AmSLaTeX,
-and so on.  Thus, to process documents from various places, a site
-maintainer was forced to keep multiple versions of the \LaTeX{}
-program.  In addition, when looking at a source file it was not always
-clear for which format the document was written.
+First, we will describe the argument types, then move on to explain how these
+can be used to create both document commands and environments. Various more
+specialized features are then described, which allow an even richer application
+of a simple interface set up.
 
-To put an end to this unsatisfactory situation, \LaTeXe{} has been
-produced; it brings all such extensions back under a single format and
-thus prevents the proliferation of mutually incompatible dialects of
-\LaTeX~2.09.  With \LaTeXe{} the `new font selection scheme' is
-standard and, for example, \textsf{amsmath} (formerly the \AmSLaTeX{}
-format) or \textsf{slides} (formerly the \SLiTeX{} format) are simply
-extensions, which may be loaded by documents using the same base format.
+The details here are intended to help users create document commands in
+general. More technical detail, suitable for \TeX{} programmers, is included
+in \texttt{interface3}.
 
-The introduction of a new release also made it possible to add a small
-number of often-requested features and to make the task of writing
-packages and classes simpler.
+\subsection{Describing argument types}
 
-\subsection{\LaTeX3---The long-term future of \LaTeX}
-\label{Sec:ltx3}
+In order to allow each argument to be defined independently, the parser does
+not simply need to know the number of arguments for a function, but also the
+nature of each one. This is done by constructing an \emph{argument
+specification}, which defines the number of arguments, the type of each
+argument and any additional information needed for the parser to read the user
+input and properly pass it through to internal functions.
 
-\LaTeXe{} is the consolidation step in a comprehensive
-reimplementation of the \LaTeX{} system.  The next major release of
-\LaTeX{} will be \LaTeX3, which will include a radical overhaul of the
-document designers' and package writers' interface to \LaTeX.
+The basic form of the argument specifier is a list of letters, where each
+letter defines a type of argument. As will be described below, some of the
+types need additional information, such as default values. The argument types
+can be divided into two, those which define arguments that are mandatory
+(potentially raising an error if not found) and those which define optional
+arguments. The mandatory types
+\begin{itemize}
+  \item[\texttt{m}] A standard mandatory argument, which can either be a single token
+    alone or multiple tokens surrounded by curly braces |{}|. Regardless of the
+    input, the argument will be passed to the internal code without the outer
+    braces. This is the type specifier for a normal \TeX{} argument.
+  \item[\texttt{r}] Given as \texttt{r}\meta{token1}\meta{token2}, this denotes a
+    `required' delimited argument, where the delimiters are
+    \meta{token1} and \meta{token2}. If the opening delimiter \meta{token1} is
+    missing, the default marker |-NoValue-| will be inserted after a suitable
+    error.
+  \item[\texttt{R}] Given as \texttt{R}\meta{token1}\meta{token2}\marg{default},
+    this is a `required' delimited argument as for~\texttt{r},
+    but it has a user-definable recovery \meta{default} instead of
+    |-NoValue-|.
+  \item[\texttt{v}] Reads an argument `verbatim', between the following
+    character and its next occurrence, in a way similar to the argument
+    of the \LaTeXe{} command \cs{verb}. Thus a \texttt{v}-type argument
+    is read between two identical characters, which cannot be any of |%|, |\|,
+    |#|, |{|, |}| or \verb*| |. The verbatim argument can also be enclosed
+    between braces, |{| and |}|. A command with a verbatim argument will
+    produce an error when it appears within an argument of another function.
+  \item[\texttt{b}] Only suitable in the argument specification of an
+    environment, it denotes the body of the environment, between
+    |\begin|\marg{environment} and |\end|\marg{environment}.  See
+    Section~\ref{sec:cmd:body} for details.
+\end{itemize}
+The types which define optional arguments are:
+\begin{itemize}
+  \item[\texttt{o}] A standard \LaTeX{} optional argument, surrounded with square
+    brackets, which will supply the special |-NoValue-| marker if not given
+    (as described later).
+  \item[\texttt{d}] Given as \texttt{d}\meta{token1}\meta{token2}, an optional
+    argument which is delimited by \meta{token1} and \meta{token2}. As with
+    \texttt{o}, if no value is given the special marker |-NoValue-| is
+    returned.
+  \item[\texttt{O}] Given as \texttt{O}\marg{default}, is like \texttt{o}, but returns
+    \meta{default} if no value is given.
+  \item[\texttt{D}] Given as \texttt{D}\meta{token1}\meta{token2}\marg{default}, it is
+    as for \texttt{d}, but returns \meta{default} if no value is given.
+    Internally, the \texttt{o}, \texttt{d} and \texttt{O} types are
+    short-cuts to an appropriated-constructed \texttt{D} type argument.
+  \item[\texttt{s}] An optional star, which will result in a value
+    \cs{BooleanTrue} if a star is present and \cs{BooleanFalse}
+    otherwise (as described later).
+  \item[\texttt{t}] An optional \meta{token}, which will result in a value
+    \cs{BooleanTrue} if \meta{token} is present and \cs{BooleanFalse}
+    otherwise. Given as \texttt{t}\meta{token}.
+  \item[\texttt{e}] Given as \texttt{e}\marg{tokens}, a set of optional
+    \emph{embellishments}, each of which requires a \emph{value}.
+    If an embellishment is not present, |-NoValue-| is returned.  Each
+    embellishment gives one argument, ordered as for the list of
+    \meta{tokens} in the argument specification.  All \meta{tokens}
+    must be distinct.
+  \item[\texttt{E}] As for \texttt{e} but returns one or more \meta{defaults}
+    if values are not given: \texttt{E}\marg{tokens}\marg{defaults}. See
+    Section~\ref{sec:cmd:embellishment} for more details.
+\end{itemize}
 
-\LaTeX3 is a long-term research project but, until it is completed,
-the project team are committed to the active maintenance of \LaTeXe{}.
-Thus the experience gained from the production and maintenance of
-\LaTeXe{} will be a major influence on the design of \LaTeX3.
-A brief description of the project can be found in the document
-|ltx3info.tex|.
+\subsection{Modifying argument descriptions}
 
-If you would like to support the project then you are welcome to send
-donations to the \LaTeX\ Project Fund; this has been set up to help
-the research team by financing various expenses associated with this
-voluntary work of maintaining the current \LaTeX{} and developing
-\LaTeX\ further.
+In addition to the argument \emph{types} discussed above, the argument
+description also gives special meaning to three other characters.
 
-The fund is administered by The \TeX{} Users Group and by various
-local user groups.  Information about making donations and joining
-these groups is available from:
-\begin{quote}\small\label{addrs}
-   \texttt{http://www.tug.org/lugs.html}
-\end{quote}
+First, \texttt{+} is used to make an argument long (to accept paragraph
+tokens). In contrast to \cs{newcommand}, this applies on an
+argument-by-argument basis. So modifying the example to `|s o o +m O{default}|'
+means that the mandatory argument is now \cs{long}, whereas the optional
+arguments are not.
 
-The \LaTeX3{} project has its home page
-on the World Wide Web at:
-\begin{verbatim}
-  http://www.latex-project.org/
-\end{verbatim}
-This page describes \LaTeX{} and the \LaTeX3 project, and contains
-pointers to other \LaTeX{} resources, such as the user guides, the
-\TeX{} Frequently Asked Questions, and the \LaTeX{} bugs database.
+Secondly, \texttt{!} is used to control whether spaces are allowed before
+optional arguments. There are some subtleties to this, as \TeX{} itself
+has some restrictions on where spaces can be `detected': more detail
+is given in Section~\ref{sec:cmd:opt-space}.
 
-Older articles covering aspects of the \LaTeX3 project are also
-available for anonymous ftp from the Comprehensive \TeX{} Archive, in
-the directory:
-\begin{verbatim}
-  ctan:info/ltx3pub
-\end{verbatim}
-The file |ltx3pub.bib| in that directory contains an abstract of each
-of the files.
+Thirdly, \texttt{=} is used to declare that the following argument should
+be interpreted as a series of keyvals. See Section~\ref{sec:cmd:keyval}
+for more details.
 
-\subsection{Overview}
+Finally, the character \texttt{>} is used to declare so-called
+`argument processors', which can be used to modify the contents of an
+argument before it is passed to the macro definition. The use of argument
+processors is a somewhat advanced topic, (or at least a less commonly used
+feature) and is covered in Section~\ref{sec:cmd:processors}.
 
-This document contains an overview of the new structure and features
-of \LaTeX.  It is \emph{not} a self-contained document, as it contains
-only the features of \LaTeX{} which have changed since version 2.09.
-You should read this document in conjunction with an introduction to
-\LaTeX{}.
+\subsection{Creating document commands and environments}
 
-\begin{description}
+\begin{decl}
+  |\NewDocumentCommand|     \arg{cmd} \arg{arg spec} \arg{code} \\
+  |\RenewDocumentCommand|   \arg{cmd} \arg{arg spec} \arg{code} \\
+  |\ProvideDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\
+  |\DeclareDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code}
+\end{decl}
+This family of commands are used to create a \meta{cmd}. The argument
+specification for the function is given by \meta{arg spec}, and the command
+uses the \meta{code} with |#1|, |#2|, etc.\ replaced by the arguments found
+by the parser.
 
-\item[Section~\ref{Sec:class+packages}]
-   contains an overview of the new structure of
-   \LaTeX{} documents.  It describes how classes and packages work and
-   how class and package options can be used.  It lists the standard
-   packages and classes which come with \LaTeX.
+An example:
+\begin{verbatim}
+\NewDocumentCommand\chapter{s o m}
+  {%
+    \IfBooleanTF{#1}%
+      {\typesetstarchapter{#3}}%
+      {\typesetnormalchapter{#2}{#3}}%
+  }
+\end{verbatim}
+would be a way to define a \cs{chapter} command which would essentially behave
+like the current \LaTeXe{} command (except that it would accept an optional
+argument even when a \texttt{*} was parsed). The \cs{typesetnormalchapter}
+could test its first argument for being |-NoValue-| to see if an optional
+argument was present. (See Section~\ref{sec:cmd:special} for details of
+\cs{IfBooleanTF} and testing for |-NoValue-|.)
 
-\item[Section~\ref{Sec:commands}] describes the new commands available
-   to authors in \LaTeXe.
+The difference between the \cs{New...} \cs{Renew...}, \cs{Provide...}
+and \cs{Declare...} versions is the behavior if \meta{cmd} is already
+defined.
+\begin{itemize}
+ \item \cs{NewDocumentCommand} will issue an error if \meta{cmd}
+   has already been defined.
+ \item \cs{RenewDocumentCommand} will issue an error if \meta{cmd}
+   has not previously been defined.
+ \item \cs{ProvideDocumentCommand} creates a new definition for
+   \meta{function} only if one has not already been given.
+ \item \cs{DeclareDocumentCommand} will always create the new
+   definition, irrespective of any existing \meta{cmd} with the
+   same name.  This should be used sparingly.
+\end{itemize}
 
-\item[Section~\ref{Sec:209}] shows how to process old \LaTeX{}
-   documents with \LaTeXe.
+If the \meta{cmd} can't be provided as a single token but needs
+\enquote{constructing}, you can use \cs{ExpandArgs} as explained in
+Section~\ref{sec:preconstructing-csnames} which also gives an example
+in which this is needed.
 
-\item[Section~\ref{Sec:problems}] contains advice on dealing with
-   problems you may encounter in running \LaTeXe.
-   It lists some error messages which are new in \LaTeXe{} and
-   it describes some of the more common problems and how to cure them,
-   or where to find further information.
+\begin{decl}
+  |\NewDocumentEnvironment|     \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\
+  |\RenewDocumentEnvironment|   \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\
+  |\ProvideDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\
+  |\DeclareDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code}
+\end{decl}
+These commands work in the same way as \cs{NewDocumentCommand}, etc.\@, but
+create environments (\cs{begin}\arg{env} \ldots{}
+\cs{end}\arg{env}). Both the \meta{beg-code} and \meta{end-code}
+may access the arguments as defined by \meta{arg spec}. The arguments will be
+given following \cs{begin}\arg{env}.
 
-\end{description}
+\subsection{Optional arguments}
+\label{sec:cmd:opt}
 
-\subsection{Further information}
+In contrast to commands created using \LaTeXe{}'s \cs{newcommand}, optional
+arguments created using \cs{NewDocumentCommand} may safely be nested. Thus for
+example, following
+\begin{verbatim}
+\NewDocumentCommand\foo{om}{I grabbed `#1' and `#2'}
+\NewDocumentCommand\baz{o}{#1-#1}
+\end{verbatim}
+using the command as
+\begin{verbatim}
+\foo[\baz[stuff]]{more stuff}
+\end{verbatim}
+will print
+\begin{quote}
+I grabbed `stuff-stuff' and `more stuff'
+\end{quote}
+This is particularly useful when placing a command with an optional argument
+\emph{inside} the optional argument of a second command.
 
-For a general introduction to \LaTeX, including the new features of
-\LaTeXe, you should read \emph{\LaTeXbook}
-by Leslie Lamport~\cite{A-W:LLa94}.
+When an optional argument is followed by a mandatory argument with the same
+delimiter, the parser issues a warning because the optional argument could not
+be omitted by the user, thus becoming in effect mandatory. This can apply to
+\texttt{o}, \texttt{d}, \texttt{O}, \texttt{D}, \texttt{s}, \texttt{t},
+\texttt{e}, and \texttt{E} type arguments followed by \texttt{r} or
+\texttt{R}-type required arguments.
 
-A more detailed description of the new features of \LaTeX, including an
-overview of more than 200 packages and nearly 1000 ready to run examples, is
-to be found in \emph{\LaTeXcomp second edition} by Frank Mittelbach and
-Michel Goossens~\cite{A-W:MG2004}.
+The default for \texttt{O}, \texttt{D} and \texttt{E} arguments can be
+the result of grabbing another argument. Thus for example
+\begin{verbatim}
+\NewDocumentCommand\foo{O{#2} m}
+\end{verbatim}
+would use the mandatory argument as the default for the leading optional
+one.
 
-Packages and programs for producing and manipulating graphics are
-discussed at length in \emph{\LaTeXGcomp} by Michel Goossens,
-Sebastian Rahtz and Frank Mittelbach~\cite{A-W:GRM97}.
+\subsection{Spacing and optional arguments}
+\label{sec:cmd:opt-space}
 
-Solutions for publishing with \LaTeX{} on the World Wide Web are given
-in \emph{\LaTeXWcomp} by Michel Goossens and Sebastian
-Rahtz~\cite{A-W:GR99}.
-
-For more information about the many new \LaTeX{} packages you should
-read the package documentation, which should be available from the
-same source as your copy of \LaTeX.
-
-There are a number of documentation files which accompany every copy
-of \LaTeX.  A copy of \emph{\LaTeX{} News} will come out with each
-six-monthly release of \LaTeX; it will be found in the files
-|ltnews*.tex|.  The class- and package-writer's guide \emph{\clsguide}
-describes the new \LaTeX{} features for writers of document classes
-and packages; it is in |clsguide.tex|.  The guide \emph{\fntguide}
-describes the \LaTeX{} font selection scheme for class- and
-package-writers; it is in |fntguide.tex|. Support for Cyrillic languages
-in \LaTeX{} is described in \emph{\cyrguide}.
-
-The documented source code (from the files used to produce the kernel
-format via |latex.ltx|) is now available as
-\emph{The \LaTeXe\ Sources}.  ]
-This very large document also includes an index of
-\LaTeX{} commands.  It can be typeset from the \LaTeX{} file
-|source2e.tex| in the |base| directory, using the source files and
-the class file |ltxdoc.cls| from this directory.
-
-For more information about \TeX{} and \LaTeX{}, please contact your
-local \TeX{} Users Group, or the international \TeX{} Users Group (see
-page \pageref{addrs}).
-
-
-\section{Classes and packages}
-\label{Sec:class+packages}
-
-This section describes the new structure of \LaTeX{} documents and the
-new types of file: \emph{classes} and \emph{packages}.
-
-\subsection{What are classes and packages?}
-
-The main difference between \LaTeX~2.09 and \LaTeXe{} is in the
-commands before |\begin{document}|.
-
-In \LaTeX~2.09, documents had \emph{styles},
-such as \textsf{article} or \textsf{book}, and \emph{options},
-such as \textsf{twoside} or \textsf{epsfig}.
-These were indicated by the |\documentstyle| command:
-\begin{quote}
-   |\documentstyle|\oarg{options}\arg{style}
-\end{quote}
-For example, to specify a two-sided article with encapsulated
-PostScript figures, you said:
+\TeX{} will find the first argument after a function name irrespective of any
+intervening spaces. This is true for both mandatory and optional arguments. So
+|\foo[arg]| and \verb*|\foo [arg]| are equivalent. Spaces are also ignored when
+collecting arguments up to the last mandatory argument to be collected (as it
+must exist). So after
 \begin{verbatim}
-   \documentstyle[twoside,epsfig]{article}
+\NewDocumentCommand\foo{m o m}{ ... }
 \end{verbatim}
-However, there were two different types of document style option:
-\emph{built-in options} such as |twoside|; and \emph{packages} such as
-|epsfig.sty|.  These were very different, since any \LaTeX{} document
-style could use the \textsf{epsfig} package but only document styles
-which declared the \textsf{twoside} option could use that option.
+the user input |\foo{arg1}[arg2]{arg3}| and \verb*|\foo{arg1} [arg2] {arg3}|
+will both be parsed in the same way.
 
-To avoid this confusion, \LaTeXe{} differentiates between built-in
-options and packages.  These are given by the new |\documentclass| and
-|\usepackage| commands:
-\begin{quote}
-   |\documentclass|\oarg{options}\arg{class} \\
-   |\usepackage|\oarg{options}\arg{packages}
-\end{quote}
-For example, to specify a two-sided article with encapsulated
-PostScript figures, you now write:
+The behavior of optional arguments \emph{after} any mandatory arguments is
+selectable. The standard settings will allow spaces here, and thus with
 \begin{verbatim}
-   \documentclass[twoside]{article}
-   \usepackage{epsfig}
+\NewDocumentCommand\foobar{m o}{ ... }
 \end{verbatim}
-You can load more than one package with a single |\usepackage|
-command; for example, rather than writing:
+both |\foobar{arg1}[arg2]| and \verb*|\foobar{arg1} [arg2]| will find an
+optional argument. This can be changed by giving the modified |!| in the
+argument specification:
 \begin{verbatim}
-   \usepackage{epsfig}
-   \usepackage{multicol}
+\NewDocumentCommand\foobar{m !o}{ ... }
 \end{verbatim}
-you can specify:
+where \verb*|\foobar{arg1} [arg2]| will not find an optional argument.
+
+There is one subtlety here due to the difference in handling by \TeX{} of
+`control symbols', where the command name is made up of a single
+character, such as `\texttt{\textbackslash\textbackslash}'.
+Spaces are not ignored by \TeX{} here,
+and thus it is possible to require an optional argument directly follow such a
+command. The most common example is the use of \texttt{\textbackslash\textbackslash}
+in \pkg{amsmath} environments, which in the terms here would be defined as
 \begin{verbatim}
-   \usepackage{epsfig,multicol}
+\NewDocumentCommand\\{!s !o}{ ... }
 \end{verbatim}
-Note that \LaTeXe{} still understands the \LaTeX~2.09 |\documentstyle|
-command.  This command causes \LaTeXe{} to enter \emph{\LaTeX~2.09
-compatibility mode}, which is described in Section~\ref{Sec:209}.
 
-You should not, however, use the |\documentstyle| command for new
-documents because this compatibility mode is very slow and the new
-features of \LaTeXe{} are not available in this mode.
+\subsection{`Embellishments'}
+\label{sec:cmd:embellishment}
 
-To help differentiate between classes and packages, document classes
-now end with |.cls| rather than |.sty|.  Packages still end with
-|.sty|, since most \LaTeX~2.09 packages work well with \LaTeXe.
-
-\subsection{Class and package options}
-
-In \LaTeX~2.09, only document styles could have options such as
-|twoside| or |draft|.  In \LaTeXe{}, both classes and packages are
-allowed to have options.  For example, to specify a two-sided article
-with graphics using the |dvips| driver, you write:
-
+The \texttt{E}-type argument allows one default value per test token. This is
+achieved by giving a list of defaults for each entry in the list, for example:
 \begin{verbatim}
-   \documentclass[twoside]{article}
-   \usepackage[dvips]{graphics}
+E{^_}{{UP}{DOWN}}
 \end{verbatim}
-It is possible for packages to share common options.  For example,
-you could, in addition, load the \textsf{color} package by specifying:
+If the list of default values is \emph{shorter} than the list of test tokens,
+the special |-NoValue-| marker will be returned (as for the \texttt{e}-type
+argument). Thus for example
 \begin{verbatim}
-   \documentclass[twoside]{article}
-   \usepackage[dvips]{graphics}
-   \usepackage[dvips]{color}
+E{^_}{{UP}}
 \end{verbatim}
-But because |\usepackage| allows more than one package to be listed,
-this can be shortened to:
-\begin{verbatim}
-   \documentclass[twoside]{article}
-   \usepackage[dvips]{graphics,color}
-\end{verbatim}
-In addition, packages will also use each option given to
-the |\documentclass| command (if they know what to do with it), so you
-could also write:
-\begin{verbatim}
-   \documentclass[twoside,dvips]{article}
-   \usepackage{graphics,color}
-\end{verbatim}
-Class and package options are covered in more detail in
-\emph{\LaTeXcomp} and in \emph{\clsguide}.
+has default \texttt{UP} for the |^| test character, but will return the
+|-NoValue-| marker as a default for |_|. This allows mixing of explicit
+defaults with testing for missing values.
 
-\subsection{Standard classes}
 
-The following classes are distributed with \LaTeX:
-\begin{description}
+\subsection{Testing special values}
+\label{sec:cmd:special}
 
-\item[article]  The |article| class described in \emph{\LaTeXbook}.
-\item[book]     The |book| class described in \emph{\LaTeXbook}.
-\item[report]   The |report| class described in \emph{\LaTeXbook}.
-\item[letter]   The |letter| class described in \emph{\LaTeXbook}.
-\item[slides]   The |slides| class described in \emph{\LaTeXbook},
-   formerly \SLiTeX.
-\item[proc]     A document class for proceedings, based on |article|.
-   Formerly the |proc| package.
-\item[ltxdoc]   The document class for documenting the \LaTeX{}
-   program, based on |article|.
-\item[ltxguide] The document class for \emph{\usrguide} and
-   \emph{\clsguide}, based on |article|.  The document you are reading
-   now uses the |ltxguide| class. The layout for this class is likely
-   to change in future releases of \LaTeX.
-\item[ltnews]   The document class for the \emph{\LaTeX{} News}
-   information sheet, based on |article|. The layout for this class
-   is likely to change in future releases of \LaTeX.
-\item[minimal]
-\NEWfeature{1995/12/01}
-   This class is the bare minimum (3 lines) that is needed in a
-   \LaTeX\ class file. It just sets the text width and height, and
-   defines |\normalsize|.  It is principally intended for debugging
-   and testing \LaTeX\ code in situations where you do not need to
-   load a `full' class such as |article|. If, however, you are
-   designing a completely new class that is aimed for documents with
-   structure radically different from the structure supplied by the
-   article class, then it may make sense to use this as a base and add
-   to it code implementing the required structure, rather than
-   starting from |article| and modifying the code there.
-\end{description}
+Optional arguments make use of dedicated variables to return information about
+the nature of the argument received.
 
-\subsection{Standard packages}
-\label{Sec:st-pack}
 
-The following packages are distributed with \LaTeX:
-\begin{description}
-\item[alltt]
-\NEWfeature{1994/12/01}
-   This package provides the |alltt| environment, which is like
-   the |verbatim| environment except that |\|, |{|, and |}|
-   have their usual meanings.  It is described in |alltt.dtx| and
-   \emph{\LaTeXbook}.
-\item[doc] This is the basic package for typesetting the documentation
-   of \LaTeX{} programs.  It is described in |doc.dtx| and in
-   \emph{\LaTeXcomp}.
-\item[exscale]  This provides scaled versions of the math extension
-   font.  It is described in |exscale.dtx| and \emph{\LaTeXcomp}.
- \item[fontenc] This is used to specify which font encoding \LaTeX{}
-   should use.  It is described in |ltoutenc.dtx|.
-\item[graphpap]
-\NEWfeature{1994/12/01}
-   This package defines the |\graphpaper| command; this
-   can be used in a |picture| environment.
-\item[ifthen]   Provides commands of the form `if\dots then do\dots
-   otherwise do\dots'.
-   It is described in |ifthen.dtx| and \emph{\LaTeXcomp}.
-\item[inputenc]
-\NEWfeature{1994/12/01}
-   This is used to specify which input encoding \LaTeX{} should use.
-   It is described in |inputenc.dtx|.
-\item[latexsym] \LaTeXe{} no longer loads the \LaTeX{} symbol font by
-   default.  To access it, you should use the |latexsym| package.  It
-   is described in |latexsym.dtx| and in \emph{\LaTeXcomp}; see also
-   Section~\ref{Sec:problems}.
- \item[makeidx] This provides commands for producing indexes.  It is
-   described in \emph{\LaTeXbook} and in \emph{\LaTeXcomp}.
- \item[newlfont] This is used to emulate the font commands of
-   \LaTeX~2.09 with the New Font Selection Scheme. It is described in
-   \emph{\LaTeXcomp}.
- \item[oldlfont] This is used to emulate the font commands of
-   \LaTeX~2.09.  It is described in \emph{\LaTeXcomp}.
- \item[showidx]
-   This causes the argument of each |\index| command to
-   be printed on the page where it occurs.
-   It is described in \emph{\LaTeXbook}.
- \item[syntonly] This is used to process a document without
-   typesetting it.  It is described in |syntonly.dtx| and in
-   \emph{\LaTeXcomp}.
- \item[tracefnt] This allows you to control how much information about
-   \LaTeX's font loading is displayed.  It is described in
-   \emph{\LaTeXcomp}.
-\end{description}
 
-\subsection{Related software}
-
-\NEWdescription{1998/12/01}
-The following software should be available from the same distributor
-as your copy of \LaTeXe.  You should obtain at least the
-\textsf{graphics} and \textsf{tools} collections in order to have all
-the files described in \emph{\LaTeXbook}.  The |amsmath| package (part
-of \textsf{amslatex} and formerly known as |amstex|)
-and \textsf{babel} are also mentioned in the list
-of `standard packages' in section C.5.2 of that book.
-\begin{description}
-\item[amslatex]  Advanced mathematical typesetting from the American
-  Mathematical Society. This includes the |amsmath| package; it
-  provides many commands for typesetting mathematical formulas of
-  higher complexity.  It is produced and supported by the American
-  Mathematical Society and it is described in \emph{\LaTeXcomp}.
-\item[babel]  This package and related files support typesetting in
-  many languages. It is described in \emph{\LaTeXcomp}.
-\item[cyrillic]
-\NEWfeature{1998/12/01}
-  Everything you need (except the fonts themselves) for
-  typesetting with Cyrillic fonts.
-\item[graphics]  This includes the |graphics| package which
-  provides support for the inclusion and transformation of graphics,
-  including files produced by other software. Also included, is the
-  |color| package which provides support for typesetting in colour.
-  Both these packages are described in \emph{\LaTeXbook}.
-\item[psnfss]    Everything you need (except the fonts themselves) for
-  typesetting with a large range of Type~1 (PostScript) fonts.
-\item[tools]     Miscellaneous packages written by the \LaTeX3
-  project team.
-\end{description}
-These packages come with documentation and each of them is also
-described in at least one of the books \emph{\LaTeXcomp} and
-\emph{\LaTeXbook}.
-
-\subsubsection{Tools}
-
-This collection of packages includes, at least, the following (some
-files may have slightly different names on certain systems):
-
-\begin{description}
-\item[array]
-        Extended versions of the environments |array|, |tabular|
-        and |tabular*|, with many extra features.
-\item[calc]
-\NEWfeature{1996/12/01}
-        Enables the use of certain algebraic notation when specifying
-        values for lengths and counters.
-\item[dcolumn]
-        Alignment on `decimal points' in tabular entries. Requires the
-        |array| package.
-\item[delarray]
-        Adds `large delimiters' around arrays. Requires |array|.
-\item[hhline]
-        Finer control over horizontal rules in tables. Requires |array|.
-\item[longtable]
-        Multi-page tables. (Does not require |array|, but it uses the
-        extended features if both are loaded.)
-\item[tabularx]
-        Defines a |tabularx| environment that is similar to |tabular*|
-        but it modifies the column widths, rather than the inter-column
-        space, to achieve the desired table width.
-\item[afterpage]
-        Place text after the current page.
-\item[bm]
-        Access bold math symbols.
-\item[enumerate]
-        Extended version of the |enumerate| environment.
-\item[fontsmpl]
-        Package and test file for producing `font samples'.
-\item[ftnright]
-        Place all footnotes in the right-hand column in two-column mode.
-\item[indentfirst]
-        Indent the first paragraph of sections, etc.
-\item[layout]
-        Show the page layout defined by the current document class.
-\item[multicol]
-        Typeset text in columns, with the length of the columns
-        `balanced'.
-\item[rawfonts]
-        Preload fonts using the old internal font names of \LaTeX~2.09.
-        See Section~\ref{Sec:oldinternals}.
-\item[somedefs]
-       Selective handling of package options. (Used by the rawfonts
-       package.)
-\item[showkeys]
-        Prints the `keys' used by |\label|, |\ref|, |\cite| etc.; useful
-        whilst drafting.
-\item[theorem]
-       Flexible declaration of `theorem-like' environments.
-\item[varioref]
-       `Smart' handling of page references.
-\item[verbatim]
-        Flexible extension of the verbatim environment.
-\item[xr]
-       Cross reference other `external' documents.
-\item[xspace]
-       `Smart space' command that helps you to avoid the common mistake
-       of missing spaces after command names.
-\end{description}
-
-
-\section{Commands}
-\label{Sec:commands}
-
-This section describes the new commands available in \LaTeXe.
-They are covered in more detail in \emph{\LaTeXbook} and in
-\emph{\LaTeXcomp}.
-
-\subsection{Preamble commands}
-\label{Sec:pre}
-
-The changes to the preamble commands are intentionally designed to make
-\LaTeXe{} documents look clearly different from old documents.  The
-commands should be used only before |\begin{document}|.
-
 \begin{decl}
-|\documentclass| \oarg{option-list} \arg{class-name}
-   \oarg{release-date}
+  |\IfNoValueTF| \arg{arg} \arg{true code} \arg{false code} \\
+  |\IfNoValueT|  \arg{arg} \arg{true code} \\
+  |\IfNoValueF|  \arg{arg} \arg{false code}
 \end{decl}
+The \cs{IfNoValue(TF)} tests are used to check if \meta{argument} (|#1|,
+|#2|, \emph{etc.}) is the special |-NoValue-| marker. For example
+\begin{verbatim}
+\NewDocumentCommand\foo{o m}
+  {%
+    \IfNoValueTF {#1}%
+      {\DoSomethingJustWithMandatoryArgument{#2}}%
+      {\DoSomethingWithBothArguments{#1}{#2}}%
+  }
+\end{verbatim}
+will use a different internal function if the optional argument
+is given than if it is not present.
 
-This command replaces the
-\LaTeX~2.09 command |\documentstyle|.
+Note that three tests are available, depending on which outcome
+branches are required: \cs{IfNoValueTF}, \cs{IfNoValueT} and
+\cs{IfNoValueF}.
 
-There must be exactly one |\documentclass| command in a document; and
-it should normally come before any other command.  (There are some
-exceptions, e.g., you can have |filecontents| environments before it
-or |\RequirePackage| but these should be only used in special
-scenarios as discussed elsewhere.)
+As the \cs{IfNoValue(TF)} tests are expandable, it is possible to
+test these values later, for example at the point of typesetting or
+in an expansion context.
 
-The \m{option-list} is a list of options, each of which may modify the
-formatting of elements which are defined in the \m{class-name} file,
-as well as those in all following |\usepackage| commands (see
-below).
-
-The optional argument \m{release-date} can be used to specify the
-earliest desired release date of the class file; it should contain a
-date in the format \textsc{yyyy/mm/dd}.  If a version of the class
-older than this date is found, a warning is issued.
-
-For example, to specify a two-column article, using a version of
-|article.cls| released after June 1994, you specify:
+It is important to note that |-NoValue-| is constructed such that it
+will \emph{not} match the simple text input |-NoValue-|, i.e.~that
 \begin{verbatim}
-   \documentclass[twocolumn]{article}[1994/06/01]
+\IfNoValueTF{-NoValue-}
 \end{verbatim}
+will be logically \texttt{false}.
+When two optional arguments follow each other (a syntax we typically
+discourage), it can make sense to allow users of the command to
+specify only the second argument by providing an empty first
+argument.
+\NEWdescription{2022/06/01}
+Rather than testing separately for emptiness and for
+|-NoValue-| it is then best to use the argument type~|O| with an
+empty default value, and then test for emptiness using the
+conditional \cs{IfBlankTF} (described below) instead.
 
 \begin{decl}
-|\documentstyle| \oarg{option-list} \arg{class-name}
+  |\IfValueTF| \arg{arg} \arg{true code} \arg{false code} \\
+  |\IfValueT|  \arg{arg} \arg{true code} \\
+  |\IfValueF|  \arg{arg} \arg{false code}
 \end{decl}
+The reverse form of the \cs{IfNoValue(TF)} tests are also available
+as \cs{IfValue(TF)}. The context will determine which logical
+form makes the most sense for a given code scenario.
 
-This command is still supported for compatibility with old files.  It
-is essentially the same as |\documentclass| except that it invokes
-\emph{\LaTeX~2.09 compatibility mode}.  It also causes any options in
-the \m{option-list} that are not processed by the class file to be
-loaded as packages after the class has been loaded. See
-Section~\ref{Sec:209} for more details on \LaTeX~2.09 compatibility
-mode.
 
-\begin{decl}
-|\usepackage| \oarg{option-list} \arg{package-name} \oarg{release-date}
-\end{decl}
 
-Any number of |\usepackage| commands is allowed. Each package file
-(as denoted by \m{package-name}) defines new elements (or modifies
-those defined in the class file loaded by the \m{class-name} argument
-of the |\documentclass| command).  A package file thus extends the
-range of documents which can be processed.
 
-The \m{option-list} argument can contain a list of options, each of
-which can modify the formatting of elements which are defined in this
-\m{package-name} file.
 
-As above, \m{release-date} can contain the earliest desired release
-date of the package file in the format \textsc{yyyy/mm/dd}; if an
-older version of the package is found, a warning is issued.
+\begin{decl}[2022/06/01]
+  |\IfBlankTF| \arg{arg} \arg{true code} \arg{false code} \\
+  |\IfBlankT|  \arg{arg} \arg{true code} \\
+  |\IfBlankF|  \arg{arg} \arg{false code}
+\end{decl}
 
-For example, to load the |graphics| package for the |dvips| driver,
-using a version of |graphics.sty| released after June 1994, you write:
+
+The \cs{IfNoValueTF} command chooses the \meta{true code} if the optional argument has not
+been used at all (and it returns the special \texttt{-NoValue-}
+marker), but not if it has been given an empty value. In contrast
+\cs{IfBlankTF} returns true if its argument is either truly empty or
+only contains one or more normal blanks.
+For example
 \begin{verbatim}
-   \usepackage[dvips]{graphics}[1994/06/01]
+\NewDocumentCommand\foo{m!o}{\par #1:
+  \IfNoValueTF{#2}
+    {No optional}%
+    {%
+      \IfBlankTF{#2}
+        {Blanks in or empty}%
+        {Real content in}%
+    }%
+  \space argument!}
+\foo{1}[bar] \foo{2}[  ] \foo{3}[] \foo{4}[\space] \foo{5} [x]
 \end{verbatim}
-Each package is loaded only once.  If the same package is requested
-more than once, nothing happens in the second or following attempt
-unless the package has been requested with options that were not given
-in the original |\usepackage|. If such extra options are specified
-then an error message is produced. See Section~\ref{Sec:problems} how
-to resolve this problem.
+results
+in the following output:
+\begin{quote}
+  \NewDocumentCommand\foo{m!o}{\par #1:
+    \IfNoValueTF{#2}{No optional}%
+                {\IfBlankTF{#2}{Blanks in or empty}%
+                  {Real content in}}%
+                \space argument!}
+  \foo{1}[bar] \foo{2}[  ] \foo{3}[] \foo{4}[\space] \foo{5} [x]
+\end{quote}
 
-As well as processing the options given in the \m{option-list} of the
-|\usepackage| command, each package processes the
-\m{option-list} of the |\documentclass| command as well. This
-means that any option which should be processed by every package (to
-be precise, by every package that specifies an action for it) can be
-specified just once, in the |\documentclass| command, rather than
-being repeated for each package that needs it.
+Note that the \cs{space} in (4) is considered real content---because it is
+a command and not a \enquote{space} character---even though it results
+in producing a space. You can also observe in (5) the effect of the
+\texttt{!} specifier, preventing the last \cs{foo}
+from interpreting \texttt{[x]} as its optional argument.
 
-\begin{decl}
-|\listfiles|
-\end{decl}
 
-If this command is placed in the preamble then a list of the files
-read in (as a result of processing the document) will be displayed
-on the terminal (and in the log file) at the end of the run. Where
-possible, a short description will also be produced.
 
-\NEWdescription{1995/12/01}
-\emph{Warning}: this command will list only files which were read
-using \LaTeX{} commands such as |\input|\arg{file} or
-|\include|\arg{file}.  If the file was read using the primitive \TeX{}
-syntax |\input |\emph{file} (without |{ }| braces around the file name)
-then it will not be listed; failure to use the \LaTeX{} form with the
-braces can cause more severe problems, possibly leading to overwriting
-important files, so \textbf{always put in the braces}.
 
-
 \begin{decl}
-|\setcounter{errorcontextlines}| \arg{num}
+  |\BooleanFalse|  \\
+  |\BooleanTrue|
 \end{decl}
+The \texttt{true} and \texttt{false} flags set when searching for
+an optional character (using \texttt{s} or \texttt{t\meta{char}}) have
+names which are accessible outside of code blocks.
 
-\TeX~3 introduced a new primitive |\errorcontextlines| which controls
-the format of error messages. \LaTeXe\ provides an interface to this
-through the standard |\setcounter| command. As most \LaTeX\ users do
-not want to see the internal definitions of \LaTeX\ commands each time
-they make an error, \LaTeXe{} sets this to $-1$ by default.
-
-
-\subsection{Environments to write out support files}
-
-\NEWfeature{2019}
-%
-Until the \LaTeX\ release in 2019 the |filecontents| environment was
-restricted to a place before the |\documentclass| command. These days
-it can be used anywhere, though we still think that in most cases it is
-best to only use it a the top of your document or in the preamble.
-
 \begin{decl}
-|\begin{filecontents}| \oarg{option-list} \arg{file-name} \\
-  \m{file-contents} \\
-|\end{filecontents}|
+  |\IfBooleanTF| \arg{arg} \arg{true code} \arg{false code} \\
+  |\IfBooleanT|  \arg{arg} \arg{true code} \\
+  |\IfBooleanF|  \arg{arg} \arg{false code}
 \end{decl}
+Used to test if \meta{argument} (|#1|, |#2|, \emph{etc.}) is
+\cs{BooleanTrue} or \cs{BooleanFalse}. For example
+\begin{verbatim}
+\NewDocumentCommand\foo{sm}
+  {%
+    \IfBooleanTF {#1}%
+      {\DoSomethingWithStar{#2}}%
+      {\DoSomethingWithoutStar{#2}}%
+  }
+\end{verbatim}
+checks for a star as the first argument, then chooses the action to
+take based on this information.
 
-The |filecontents| environment is intended for bundling within a
-single document file the contents of packages, options, or other
-files.  When the document file is run through \LaTeXe{} the body of
-this environment is written verbatim (preceded by a comment line) to a
-file whose name is given as the environment's only argument.  However,
-if that file already exists then nothing happens except for an
-information message.
+\subsection{Auto-converting to key--value format}
+\label{sec:cmd:keyval}
 
-These days most UTF-8 text characters can be used in a
-|filecontents| envi\-ronment---they will be written unchanged to the
-output file.  However, tabs and form feeds produce a warning,
-explaining that they are turned into spaces or blank lines,
-respectively.
+Some document commands have a long history of accepting a `free text' optional
+argument, for example \cs{caption} and the sectioning commands \cs{section},
+etc. Introducing more sophisticated (keyval) options to these commands
+therefore needs a method to interpret the optional argument \emph{either} as
+free text \emph{or} as a series of keyvals. This needs to take place
+during argument grabbing as there is a need for careful treatment of
+braces to obtain the correct result.
 
-By default the environment does not overwrite an existing file and it
-even refuses to write out the data if there exists a file that is
-anywhere in the path that \TeX\ searches when inputting files.  With
-the option |nosearch| you can ask it to look only into the current
-directory and with the option |overwrite| (or |force|) you can request
-it to write the file regardless. It will, however, never write to
-|\jobname.tex| to avoid overwriting itself.
+The \texttt{=} modifier is available to allow \pkg{ltcmd} to correctly
+implement this process. The modifier guarantees that the argument will be
+passed to further code as a series of keyvals. To do that, the \texttt{=}
+should be followed by an argument containing the default key name. This is used
+as the key in a key--value pair \emph{if} the `raw' argument does \emph{not}
+have the correct form to be interpreted as a set of keyvals.
 
-The |filecontents| environment is used for including \LaTeX{} files.
-For other plain text files (such as Encapsulated PostScript files),
-you should use the |filecontents*| environment which does not add a
-comment line.
-
-
-
-
-\subsection{Document structure}
-
-The |book| document class introduces new commands to indicate
-document structure.
-\begin{decl}
-|\frontmatter| \\ |\mainmatter| \\ |\backmatter|
-\end{decl}
-These commands indicate the beginning of the front matter (title page,
-table of contents and prefaces), main matter (main text) and back
-matter (bibliography, indexes and colophon).
-
-\subsection{Definitions}
-
-In \LaTeX, commands can have both mandatory and optional arguments,
-for example in:
+Taking \cs{caption} as an example, with the demonstration implementation
 \begin{verbatim}
-   \documentclass[11pt]{article}
+\DeclareDocumentCommand
+  \caption
+  {s ={short-text} +O{#3} +m}
+  {%
+    \showtokens{Grabbed arguments:^^J(#2)^^Jand^^J(#3)}%
+  }
 \end{verbatim}
-the |11pt| argument is optional, whereas the |article| class name is
-mandatory.
-
-In \LaTeX~2.09 users could define commands with arguments, but these
-had to be mandatory arguments.  With \LaTeXe, users can now define
-commands and environments which also have one optional argument.
-
-\begin{decl}
-|\newcommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\
-|\newcommand*| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\
-|\renewcommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\
-|\renewcommand*| \arg{cmd} \oarg{num} \oarg{default} \arg{definition}
-\end{decl}
-
-These commands have a new, second, optional argument; this is used for
-defining commands which themselves take one optional argument.  This
-new argument is best introduced by means of a simple (and hence not
-very practical) example:
+the default key name is \texttt{short-text}. When the command \cs{caption} is
+then used, if the optional argument is free text such as
 \begin{verbatim}
-   \newcommand{\example}[2][YYY]{Mandatory arg: #2;
-                                 Optional arg: #1.}
+\caption[Some short text]{A much longer and more detailed text for
+  demonstration purposes}
 \end{verbatim}
-This defines |\example| to be a command with two arguments, referred
-to as |#1| and |#2| in the \arg{definition}---nothing new so far.  But
-by adding a second optional argument to this |\newcommand| (the
-|[YYY]|) the first argument (|#1|) of the newly defined command
-|\example| is made optional with its default value being |YYY|.
-
-Thus the usage of |\example| is either:
+then the output will be
 \begin{verbatim}
-   \example{BBB}
+Grabbed arguments:
+(short-text={Some short text})
+and
+(A much longer and more detailed text for demonstration purposes)
 \end{verbatim}
-which prints:
-\begin{quote}
-   Mandatory arg: BBB;
-   Optional arg: YYY.
-\end{quote}
-or:
+On the other hand, if the caption is given with a keyval-form argument
 \begin{verbatim}
-   \example[XXX]{AAA}
+\caption[label = cap:demo]%
+  {A much longer and more detailed text for demonstration purposes}
 \end{verbatim}
-which prints:
-\begin{quote}
-   Mandatory arg: AAA;
-   Optional arg: XXX.
-\end{quote}
+then this will be respected
+\begin{verbatim}
+Grabbed arguments:
+(label = cap:demo)
+and
+(A much longer and more detailed text for demonstration purposes)
+\end{verbatim}
 
-The default value of the optional argument is \texttt{YYY}.
-This value is specified as the \oarg{default} argument of the
-|\newcommand| that created |\example|.
+Interpretation as keyval form is determined by the presence of \texttt{=}
+characters within the argument. Those in inline math mode (enclosed within
+\verb|$...$| or \verb|\(...\)|) are ignored. An argument can be forced to be
+read as keyvals by including an empty entry at the start
+\begin{verbatim}
+\caption[=,This is now a keyval]%
+% ...
+\caption[This is not $=$ keyval]%
+\end{verbatim}
 
-As another more useful example, the definition:
+This empty entry is \emph{not} passed to the underlying code, so will not lead
+to issues with keyval parsers that do not allow an empty key name. Any text-mode
+\texttt{=} signs will need to be braced to avoid being misinterpreted: this
+is likely most conveniently handled by bracing the entire argument
 \begin{verbatim}
-   \newcommand{\seq}[2][n]{\lbrace #2_{0},\ldots,\,#2_{#1} \rbrace}
+\caption[{Not = to a keyval!}]%
 \end{verbatim}
-means that the input |$\seq{a}$| produces
-the formula $\lbrace a_{0},\ldots,\,a_{n} \rbrace$,
-whereas the input |$\seq[k]{x}$| produces the formula
-$\lbrace x_{0},\ldots,\,x_{k} \rbrace$.
+which will be passed correctly as
+\begin{verbatim}
+Grabbed arguments:
+(short-text = {Not = to a keyval!})
+\end{verbatim}
 
-In summary, the command:
-\begin{quote}
-   |\newcommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition}
-\end{quote}
-defines \m{cmd} to be a command with \m{num} arguments, the first of
-which is optional and has default value \m{default}.
+\subsection{Argument processors}
+\label{sec:cmd:processors}
 
-Note that there can only be one optional argument but, as before,
-there can be up to nine arguments in total.
+Argument processor are applied to an argument \emph{after} it has been grabbed
+by the underlying system but before it is passed to \meta{code}. An argument
+processor can therefore be used to regularize input at an early stage, allowing
+the internal functions to be completely independent of input form. Processors
+are applied to user input and to default values for optional arguments, but
+\emph{not} to the special |-NoValue-| marker.
 
-\begin{decl}
-|\newenvironment|
- \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} \\
-|\newenvironment*|
- \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} \\
-|\renewenvironment|
- \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} \\
-|\renewenvironment*|
- \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def}
-\end{decl}
+Each argument processor is specified by the syntax \texttt{>}\marg{processor}
+in the argument specification. Processors are applied from right to left, so
+that
+\begin{verbatim}
+>{\ProcessorB} >{\ProcessorA} m
+\end{verbatim}
+would apply \cs{ProcessorA} followed by \cs{ProcessorB} to the tokens grabbed
+by the \texttt{m} argument.
 
-\LaTeXe\ also supports the creation of environments that have one
-optional argument.  Thus the syntax of these two commands has
-been extended in the same way as that of |\newcommand|.
-
 \begin{decl}
-|\providecommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\
-|\providecommand*| \arg{cmd} \oarg{num} \oarg{default} \arg{definition}
+  |\SplitArgument| \arg{number} \arg{token(s)}
 \end{decl}
-
-This takes the same arguments as |\newcommand|. If \m{cmd} is already
-defined then the existing definition is kept; but if it is currently
-undefined then the effect of |\providecommand| is to define \m{cmd}
-just as if |\newcommand| had been used.
-
-\NEWfeature{1994/12/01}
-  All the above five `defining commands' now have \texttt{*}-forms that
-  are usually the better form to use when defining commands with
-  arguments, unless any of these arguments is intended to contain
-  whole paragraphs of text.  Moreover, if you ever do find yourself
-  needing to use the non-star form then you should ask whether
-  that argument would not better be treated as the contents of a
-  suitably defined environment.
-
-\NEWfeature{1995/12/01}
-  The commands produced by the above five `defining commands' are
-  now robust.
-
-\subsection{Boxes}
-
-These next three commands for making LR-boxes all existed in
-\LaTeX~2.09.  They have been enhanced in two ways.
-
-\begin{decl}
-|\makebox| \oarg{width} \oarg{pos}  \arg{text} \\
-|\framebox| \oarg{width} \oarg{pos}  \arg{text} \\
-|\savebox| \arg{cmd} \oarg{width} \oarg{pos}  \arg{text}
-\end{decl}
-
-One small but far-reaching change for \LaTeXe\ is that, within the
-\m{width} argument only, four special lengths can be used.  These are
-all dimensions of the box that would be produced by using simply
-|\mbox|\arg{text}:
-\begin{itemize}
-\item []   |\height|\quad its height above the baseline;
-\item []   |\depth|\quad its depth below the baseline;
-\item []   |\totalheight|\quad the sum of |\height| and |\depth|;
-\item []   |\width|\quad its width.
-\end{itemize}
-Thus, to put `hello' in the centre of a box of twice its natural
-width, you would use:
+This processor splits the argument given at each occurrence of the
+\meta{tokens} up to a maximum of \meta{number} tokens (thus
+dividing the input into $\text{\meta{number}} + 1$ parts).
+An error is given if too many \meta{tokens} are present in the
+input. The processed input is placed inside
+$\text{\meta{number}} + 1$ sets of braces for further use.
+If there are fewer than \arg{number} of \arg{tokens} in the argument
+then |-NoValue-| markers are added at the end of the processed
+argument.
 \begin{verbatim}
-   \makebox[2\width]{hello}
+\NewDocumentCommand \foo {>{\SplitArgument{2}{;}} m}
+  {\InternalFunctionOfThreeArguments#1}
 \end{verbatim}
-Or you could put \textit{f} into a square box, like
-this:
-   \framebox{\makebox[\totalheight]{\itshape f\/}}
+If only a single character \meta{token} is used for the split, any
+category code $13$ (active) character matching the \meta{token} will
+be replaced before the split takes place.
+Spaces are trimmed at each end of each item parsed.
+
+The \texttt{E} argument type is somewhat special, because with a single
+\texttt{E} in the command declaration you may end up with several
+arguments in a command (one formal argument per embellishment token).
+Therefore, when an argument processor is applied to an \texttt{E}-type
+argument, all the arguments pass through that processor before being fed
+to the \meta{code}.  For example, this command
 \begin{verbatim}
-   \framebox{\makebox[\totalheight]{\itshape f\/}}
+\NewDocumentCommand \foo { >{\TrimSpaces} e{_^} }
+  { [#1](#2) }
 \end{verbatim}
-Note that it is the total width of the framed box, including the
-frame, which is set to |\totalheight|.
+applies \cs{TrimSpaces} to both arguments.
 
-The other change is a new possibility for \m{pos}: |s| has been added
-to |l| and |r|.  If \m{pos} is |s| then the text is stretched the full
-length of the box, making use of any `rubber lengths' (including any
-inter-word spaces) in the contents of the box.  If no such `rubber
-length' is present, an `underfull box' will probably be produced.
-
 \begin{decl}
-|\parbox| \oarg{pos} \oarg{height} \oarg{inner-pos} \arg{width}
-         \arg{text} \\
-|\begin{minipage}|
-         \oarg{pos} \oarg{height} \oarg{inner-pos} \arg{width}\\
-\m{text}\\
-|\end{minipage}|
+  |\SplitList| \arg{token(s)}
 \end{decl}
+This processor splits the argument given at each occurrence of the
+\meta{token(s)} where the number of items is not fixed. Each item is
+then wrapped in braces within |#1|. The result is that the
+processed argument can be further processed using a mapping function
+(see below).
+\begin{verbatim}
+\NewDocumentCommand \foo {>{\SplitList{;}} m}
+  {\MappingFunction#1}
+\end{verbatim}
+If only a single character \meta{token} is used for the split, any
+category code $13$ (active) character matching the \meta{token} will
+be replaced before the split takes place.
+Spaces are trimmed at each end of each item parsed.
 
-As for the box commands above, |\height|, |\width|, etc.~may be used
-in the \oarg{height} argument to denote the natural dimensions of the
-box.
-
-The \m{inner-pos} argument is new in \LaTeXe.  It is the vertical
-equivalent to the \m{pos} argument for |\makebox|, etc, determining
-the position of \m{text} within the box.  The \m{inner-pos} may be any
-one of |t|, |b|, |c|, or |s|, denoting top, bottom, centered, or
-`stretched' alignment respectively.  When the \m{inner-pos} argument
-is not specified, \LaTeX\ gives it same  value as \m{pos} (this could be
-the latter's default value).
-
-
 \begin{decl}
-|\begin{lrbox}| \arg{cmd}\\
-\m{text}\\
-|\end{lrbox}|
+  |\ProcessList| \arg{list} \arg{function}
 \end{decl}
-
-This is an environment which does not directly print anything.
-Its effect is to save the typeset \m{text} in the bin \m{cmd}. Thus
-it is like |\sbox| \arg{cmd} \arg{text}, except that any white space
-before or after the contents \m{text} is ignored.
-
-This is very useful as it enables both the |\verb| command and the
-\texttt{verbatim} environment to be used within \m{text}.
-
-It also makes it possible to define, for example, a `framed box'
-environment.  This is done by first using this environment to save
-some text in a bin \m{cmd} and then calling
-|\fbox{\usebox{|\m{cmd}|}}|.
-
-The following example defines an environment, called |fmpage|, that is
-a framed version of |minipage|.
+To support \cs{SplitList}, the function \cs{ProcessList} is available
+to apply a \meta{function} to every entry in a \meta{list}. The
+\meta{function} should absorb one argument: the list entry. For example
 \begin{verbatim}
-   \newsavebox{\fmbox}
-   \newenvironment{fmpage}[1]
-     {\begin{lrbox}{\fmbox}\begin{minipage}{#1}}
-     {\end{minipage}\end{lrbox}\fbox{\usebox{\fmbox}}}
+\NewDocumentCommand \foo {>{\SplitList{;}} m}
+  {\ProcessList{#1}{\SomeDocumentCommand}}
 \end{verbatim}
 
-
-\subsection{Measuring things}
-
-The first of these next commands was in \LaTeX~2.09. The two new
-commands are the obvious analogues.
-
 \begin{decl}
-|\settowidth|  \arg{length-cmd} \arg{lr text} \\
-|\settoheight| \arg{length-cmd} \arg{lr text} \\
-|\settodepth|  \arg{length-cmd} \arg{lr text}
+  |\ReverseBoolean|
 \end{decl}
+This processor reverses the logic of \cs{BooleanTrue} and
+\cs{BooleanFalse}, so that the example from earlier would become
+\begin{verbatim}
+\NewDocumentCommand\foo{>{\ReverseBoolean} s m}
+  {%
+    \IfBooleanTF#1%
+      {\DoSomethingWithoutStar{#2}}%
+      {\DoSomethingWithStar{#2}}%
+  }
+\end{verbatim}
 
-\subsection{Line endings}
-
-\NEWdescription{1994/12/01}
-The command |\\|, which is used to indicate a line-end in various
-places, is now a robust command when used within arguments such as
-section titles.
-
-Also, because it is often necessary to distinguish which type of line
-is to be ended, we have introduced the following new command; it
-has the same argument syntax as that of |\\|.
-\begin{decl}[1994/12/01]
-|\tabularnewline| \oarg{vertical-space}
-\end{decl}
-One example of its use is when the text in the last
-column of a |tabular| environment is set with |\raggedright|; then
-|\tabularnewline| can be used to indicate the end of a row of the
-|tabular|, whilst |\\| will indicate the end of a line of text in a
-paragraph within the column. This command can be used in the |array|
-environment as well as |tabular|, and also the extended versions of
-these environments offered by the \textsf{array} and \textsf{longtable}
-packages in the tools collection.
-
-\subsection{Controlling page breaks}
-
-Sometimes it is necessary, for a final version of a document, to
-`help' \LaTeX\ break the pages in the best way. \LaTeX~2.09 had a
-variety of commands for this situation: |\clearpage|, |\pagebreak|
-etc.  \LaTeXe\ provides, in addition, commands which can produce
-longer pages as well as shorter ones.
-
-
 \begin{decl}
-|\enlargethispage| \arg{size} \\
-|\enlargethispage*| \arg{size}
+  |\TrimSpaces|
 \end{decl}
+Removes any leading and trailing spaces (tokens with character code~$32$
+and category code~$10$) for the ends of the argument. Thus for example
+declaring a function
+\begin{verbatim}
+\NewDocumentCommand\foo {>{\TrimSpaces} m}
+  {\showtokens{#1}}
+\end{verbatim}
+and using it in a document as
+\begin{flushleft}
+  \verb=  =\verb*=\foo{ hello world }=
+\end{flushleft}
+will show `\verb*=hello world=' at the terminal, with the space at each
+end removed. \cs{TrimSpaces} will remove multiple spaces from the ends of
+the input in cases where these have been included such that the standard
+\TeX{} conversion of multiple spaces to a single space does not apply.
 
-These commands increase the height of a page (from its normal value of
-|\textheight|) by the specified amount \m{size}, a rigid length. This
-change affects \emph{only} the current page.
+\subsection{Body of an environment}
+\label{sec:cmd:body}
 
-This can be used, for example, to allow an extra line to be fitted
-onto the page or, with a negative length, to produce a page
-shorter than normal.
+While environments |\begin|\marg{environment}\ \dots{}\,|\end|\marg{environment}
+are typically used in cases where the code implementing the \meta{environment}
+does not need to access the contents of the environment (its `body'),
+it is sometimes useful to have the body as a standard argument.
 
-The star form also shrinks any vertical white space on the page as
-much as possible, so as to fit the maximum amount of text on the
-page.
+This is achieved by ending the argument specification with~\texttt{b}, which is
+a dedicated argument type for this situation. For instance
+\begin{verbatim}
+\NewDocumentEnvironment{twice} {O{\ttfamily} +b}
+  {#2#1#2} {}
+\begin{twice}[\itshape]
+  Hello world!
+\end{twice}
+\end{verbatim}
+typesets `Hello world!{\itshape Hello world!}'.
 
-\NEWdescription{1995/12/01}
-These commands do not change the position of the footer text; thus, if
-a page is lengthened too far, the main text may overprint the footer.
+The prefix |+| is used to allow multiple paragraphs in the environment's body.
+Argument processors can also be applied to \texttt{b}~arguments. By default,
+spaces are trimmed at both ends of the body: in the example there would
+otherwise be spaces coming from the ends the lines after |[\itshape]| and
+|world!|. Putting the prefix |!| before \texttt{b} suppresses space-trimming.
 
-\subsection{Floats}
+When \texttt{b} is used in the argument specification, the last
+argument of the environment declaration (e.g.,
+\cs{NewDocumentEnvironment}), which consists of an \meta{end code} to
+insert at |\end|\marg{environment}, is redundant since one can simply
+put that code at the end of the \meta{start code}. Nevertheless this
+(empty) \meta{end code} must be provided.
 
-There is a new command, |\suppressfloats|, and a new `float
-specifier'.  These will enable people to gain better
-control of \LaTeX's float placement algorithm.
+Environments that use this feature can be nested.
 
-\begin{decl}
-|\suppressfloats| \oarg{placement}
-\end{decl}
+\subsection{Fully-expandable document commands}
 
-This command stops any further floating environments from being placed
-on the current page. With an optional argument, which should be either
-|t| or |b| (not both), this restriction applies only to putting
-further floats at the top or at the bottom.  Any floats which would
-normally be placed on this page are placed on the next page instead.
+Document commands created using \cs{NewDocumentCommand}, etc.\@, are normally
+created so that they do not expand unexpectedly. This is done using engine
+features, so is more powerful than \LaTeXe{}'s \cs{protect} mechanism. There
+are \emph{very rare} occasion when it may be useful to create functions using a
+expansion-only grabber. This imposes a number of restrictions on the
+nature of the arguments accepted by a function, and the code it implements.
+This facility should only be used when \emph{absolutely necessary}.
 
 \begin{decl}
-The extra float location specifier: \ \texttt{!}
+  |\NewExpandableDocumentCommand|     \arg{cmd} \arg{arg spec} \arg{code} \\
+  |\RenewExpandableDocumentCommand|   \arg{cmd} \arg{arg spec} \arg{code} \\
+  |\ProvideExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\
+  |\DeclareExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code}
 \end{decl}
+This family of commands is used to create a document-level \meta{function},
+which will grab its arguments in a fully-expandable manner. The
+argument specification for the function is given by \meta{arg spec},
+and the function will execute \meta{code}. In  general, \meta{code} will
+also be fully expandable, although it is possible that this will
+not be the case (for example, a function for use in a table might
+expand so that \cs{omit} is the first non-expandable non-space token).
 
-This can be used, along with at least one of \texttt{h}, \texttt{t},
-\texttt{b} and \texttt{p}, in the location optional argument of a
-float.
-
-If a \texttt{!} is present then, just for this particular float,
-whenever it is processed by the float mechanism the following are
-ignored:
+Parsing arguments by pure expansion imposes a number of restrictions on
+both the type of arguments that can be read and the error checking
+available:
 \begin{itemize}
-\item  all restrictions on the number of floats which can appear;
-\item all explicit restrictions on the amount of space on a text page
-which may be occupied by floats or must be occupied by text.
+  \item The last argument (if any are present) must be one of the
+    mandatory types \texttt{m}, \texttt{r} or \texttt{R}.
+  \item The `verbatim' argument type \texttt{v} is not available.
+  \item Argument processors (using \texttt{>}) are not available.
+  \item It is not possible to differentiate between, for example
+    |\foo[| and |\foo{[}|: in both cases the \texttt{[} will be
+    interpreted as the start of an optional argument. As a
+    result, checking for optional arguments is less robust than
+    in the standard version.
 \end{itemize}
-The mechanism will, however, still attempt to ensure that pages are
-not overfull and that floats of the same type are printed in the
-correct order.
 
-Note that its presence has no effect on the production of float pages.
+\subsection{Details about argument delimiters}
 
-A \texttt{!} specifier overrides the effect of any |\suppressfloats|
-command for this particular float.
+In normal (non-expandable) commands, the delimited types look for the
+initial delimiter by peeking ahead (using \pkg{expl3}'s |\peek_...|
+functions) looking for the delimiter token.  The token has to have the
+same meaning and `shape' of the token defined as delimiter.
+There are three possible cases of delimiters: character tokens, control
+sequence tokens, and active character tokens.  For all practical purposes
+of this description, active character tokens will behave exactly as
+control sequence tokens.
 
-\subsection{Font changing: text}
+\subsubsection{Character tokens}
 
-The font selection scheme used in \LaTeXe{} differs a lot from that
-used in \LaTeX~2.09.  In this section, we give a brief description of
-the new commands.  A more detailed description with examples is given
-in \emph{\LaTeXcomp}, and the interface for class- and package-writers
-is described in \emph{\fntguide}.
+A character token is characterized by its character code, and its meaning
+is the category code~(|\catcode|).  When a command is defined, the meaning
+of the character token is fixed into the definition of the command and
+cannot change.  A command will correctly see an argument delimiter if
+the open delimiter has the same character and category codes as at the
+time of the definition.  For example in:
+\begin{verbatim}
+\NewDocumentCommand { \foobar } { D<>{default} } {(#1)}
+\foobar <hello> \par
+\char_set_catcode_letter:N <
+\foobar <hello>
+\end{verbatim}
+the output would be:
+\begin{verbatim}
+(hello)
+(default)<hello>
+\end{verbatim}
+as the open-delimiter |<| changed in meaning between the two calls to
+|\foobar|, so the second one doesn't see the |<| as a valid delimiter.
+Commands assume that if a valid open-delimiter was found, a matching
+close-delimiter will also be there.  If it is not (either by being
+omitted or by changing in meaning), a low-level \TeX{} error is raised
+and the command call is aborted.
 
-\begin{decl}
-|\normalfont|\\
-|\rmfamily|\\
-|\sffamily|\\
-|\ttfamily|\\
-|\mdseries|\\
-|\bfseries|\\
-|\upshape|\\
-|\itshape|\\
-|\slshape|\\
-|\scshape|
-\end{decl}
+\subsubsection{Control sequence tokens}
 
-These are font commands whose use is the same as the commands |\rm|,
-|\bf|, etc.  The difference is that each command changes just one
-attribute of the font (the attribute changed is part of the name).
-One result of this is that, for example, |\bfseries\itshape| produces
-both a change of series and a change of shape, to give a bold italic
-font.
-
-\begin{decl}
-|\textnormal|\arg{text}\\
-|\textrm|\arg{text}\\
-|\textsf|\arg{text}\\
-|\texttt|\arg{text}\\
-|\textmd|\arg{text}\\
-|\textbf|\arg{text}\\
-|\textup|\arg{text}\\
-|\textit|\arg{text}\\
-|\textsl|\arg{text}\\
-|\textsc|\arg{text}\\
-|\emph|\arg{text}
-\end{decl}
-
-These are one-argument commands; they take as an argument the
-text which is to be typeset in the particular font. They also
-automatically insert italic corrections where appropriate; if you do
-not like the result, you can add an italic correction with |\/| or
-remove it with |\nocorr|.  The |\nocorr| should always be the first or
-last thing within the \arg{text} argument.
-
-\subsection{Font changing: math}
-
-Most of the fonts used within math mode do not need to be explicitly
-invoked; but to use letters from a range of fonts, the following
-class of commands is provided.
-
-\begin{decl}
-|\mathrm| \arg{letters}\\
-|\mathnormal| \arg{letters}\\
-|\mathcal| \arg{letters}\\
-|\mathbf| \arg{letters}\\
-|\mathsf| \arg{letters}\\
-|\mathtt| \arg{letters}\\
-|\mathit| \arg{letters}
-\end{decl}
-
-These are also one-argument commands which take as an argument the
-letters which are to be typeset in the particular font.  The argument
-is processed in math mode so spaces within it will be ignored.  Only
-letters, digits and accents have their font changed, for example
-|$\mathbf{\tilde A \times 1}$| produces $\mathbf{\tilde A \times 1}$.
-
-\subsection{Ensuring math mode}
-
-\begin{decl}
-|\ensuremath| \arg{math commands}
-\end{decl}
-
-In \LaTeX~2.09, if you wanted a command to work both in math mode and
-in text mode, the suggested method was to define something like:
+A control sequence (or control character) token is characterized by is
+its name, and its meaning is its definition.
+A token cannot have two different meanings at the same time.
+When a control sequence is defined as delimiter in a command,
+it will be detected as delimiter whenever the control sequence name
+is found in the document regardless of its current definition.
+For example in:
 \begin{verbatim}
-   \newcommand{\Gp}{\mbox{$G_p$}}
+\cs_set:Npn \x { abc }
+\NewDocumentCommand { \foobar } { D\x\y{default} } {(#1)}
+\foobar \x hello\y \par
+\cs_set:Npn \x { def }
+\foobar \x hello\y
 \end{verbatim}
-Unfortunately, the |\mbox| stops |\Gp| changing size correctly in (for
-instance) subscripts or a fraction.
-
-In \LaTeXe{} you can define it thus:
+the output would be:
 \begin{verbatim}
-   \newcommand{\Gp}{\ensuremath{G_p}}
+(hello)
+(hello)
 \end{verbatim}
-Now |\Gp| will work correctly in all contexts.
+with both calls to the command seeing the delimiter |\x|.
 
-This is because the |\ensuremath| does nothing, producing simply
-|G_p|, when |\Gp| is used within math mode; but it ensures that math
-mode is entered (and exited) as required when |\Gp| is used in text
-mode.
+\subsection{Creating new argument processors}
 
-
-\subsection{Setting text superscripts}
-
 \begin{decl}
-|\textsuperscript| \arg{text}
+  |\ProcessedArgument|
 \end{decl}
+Argument processors allow manipulation of a grabbed argument before it is
+passed to the underlying code. New processor implementations may be created
+as functions which take one trailing argument, and which leave their result in
+the \cs{ProcessedArgument} variable. For example, \cs{ReverseBoolean} is
+defined as
+\begin{verbatim}
+\ExplSyntaxOn
+\cs_new_protected:Npn \ReverseBoolean #1
+  {
+    \bool_if:NTF #1
+      { \tl_set:Nn \ProcessedArgument { \c_false_bool } }
+      { \tl_set:Nn \ProcessedArgument { \c_true_bool } }
+  }
+\ExplSyntaxOff
+\end{verbatim}
+[As an aside: the code is written in \pkg{expl3}, so we don't have to
+  worry about spaces creeping into the definition.]
 
-\NEWfeature{1995/06/01} In \LaTeX~2.09 textual superscripts such as
-footnote markers were produced by internally entering math mode and
-typesetting the number as a math superscript.  This normally looked
-fine since the digits in math fonts are the same as those in text
-fonts when Computer Modern fonts are used.  But when a different
-document font (such as Times) is selected, the results look rather
-strange.  For this reason the command |\textsuperscript| has been
-introduced which typesets its argument in the current text font, in a
-superscript position and in the correct size.
+\subsection{Access to the argument specification}
 
-\subsection{Text commands: all encodings}
+The argument specifications for document commands and environments are
+available for examination and use.
 
-\NEWdescription{1994/12/01}
-  One of the main differences between \LaTeXe{} and \LaTeX~2.09 is
-  that \LaTeXe{} can deal with fonts in arbitrary \emph{encodings}.
-  (A font encoding is the sequence of characters in the font---for
-  example a Cyrillic font would have a different encoding from a Greek
-  font.)
-
-  The two major font encodings that are used for Latin languages such
-  as English or German are |OT1| (Donald Knuth's 7-bit encoding, which
-  has been used during most of \TeX's lifetime) and |T1| (the new
-  8-bit `Cork' encoding).
-
-  \LaTeX~2.09 only supported the |OT1| encoding, whereas \LaTeXe{} has
-  support for both |OT1| and |T1| built-in.  The next section will
-  cover the new commands which are available if you have |T1|-encoded
-  fonts.  This section describes new commands which are available in
-  all encodings.
-
-  Most of these commands provide characters which were available in
-  \LaTeX~2.09 already.  For example |\textemdash| gives an `em dash',
-  which was available in \LaTeX~2.09 by typing |---|.  However, some
-  fonts (for example a Greek font) may not have the |---| ligature,
-  but you will still be able to access an em dash by typing
-  |\textemdash|.
-
-\begin{decl}[1994/12/01]
-      |\r{<text>}|
+\begin{decl}
+  |\GetDocumentCommandArgSpec| \arg{function}         \\
+  |\GetDocumentEnvironmentArgSpec| \arg{environment}
 \end{decl}
-   This command gives a `ring' accent, for example `\r{o}' can be typed
-   |\r{o}|.
+These functions transfer the current argument specification for the
+requested \meta{function} or \meta{environment} into the token list
+variable \cs{ArgumentSpecification}. If the \meta{function} or
+\meta{environment} has no known argument specification then an error
+is issued. The assignment to \cs{ArgumentSpecification} is local to
+the current \TeX{} group.
 
-\begin{decl}[1994/12/01]
-      |\SS|
+\begin{decl}
+  |\ShowDocumentCommandArgSpec| \arg{function}         \\
+  |\ShowDocumentEnvironmentArgSpec| \arg{environment}
 \end{decl}
-  This command produces a German `SS', that is a capital `\ss'.  This
-  letter can hyphenate differently from `SS', so is needed for entering
-  all-caps German.
+These functions show the current argument specification for the
+requested \meta{function} or \meta{environment} at the terminal. If
+the \meta{function} or \meta{environment} has no known argument
+specification then an error is issued.
 
-\begin{decl}[1994/12/01]
-      |\textcircled{<text>}|
-\end{decl}
-   This command is used to build `circled characters' such as
-   |\copyright|.  For example |\textcircled{a}| produces
-   \textcircled{a}.
 
-\begin{decl}[1994/12/01]
-      |\textcompwordmark|
-\end{decl}
-  This command is used to separate letters which would normally
-  ligature.  For example `f\textcompwordmark i' is produced with
-  |f\textcompwordmark i|.  Note that the `f' and `i' have not
-  ligatured to produce `fi'.  This is rarely useful in English
-  (`shelf\textcompwordmark ful' is a rare example of where it might be
-  used) but is used in languages such as German.
 
-\begin{decl}[1994/12/01]
-      |\textvisiblespace|
-\end{decl}
-   This command produces a `visible space' character
-   `\textvisiblespace'.  This is sometimes used in computer listings,
-   for example `type \textsf{hello\textvisiblespace world}'.
+\section{Copying and showing (robust) commands}
 
-\begin{decl}[1994/12/01]
-      |\textemdash|
-      |\textendash|
-      |\textexclamdown|
-      |\textquestiondown| \\
-      |\textquotedblleft|
-      |\textquotedblright|
-      |\textquoteleft|
-      |\textquoteright|
-\end{decl}
-   These commands produce characters which would otherwise be
-   accessed via ligatures:
-   \begin{center}
-      \begin{tabular}{ccl}
-         \emph{ligature} & \emph{character} & \emph{command} \\
-         |---| & --- & |\textemdash| \\
-         |--|  & --  & |\textendash| \\
-         |!`|  & !`  & |\textexclamdown| \\
-         |?`|  & ?`  & |\textquestiondown| \\
-         |``|  & ``  & |\textquotedblleft| \\
-         |''|  & ''  & |\textquotedblright| \\
-         |`|   & `   & |\textquoteleft| \\
-         |'|   & '   & |\textquoteright|
-      \end{tabular}
-   \end{center}
-   The reason for making these characters directly accessible is so
-   that they will work in encodings which do not have these characters.
+If you want to (slightly) alter an existing command you may want to
+save the current definition under a new name and then use that in a
+new definition. If the existing command is robust, then the old trick of
+using the low-level \cs{let} for this doesn't work, because it only
+copies the top-level definition, but not the part that actually does
+the work. As most \LaTeX{} commands are nowadays robust, \LaTeX{}
+now offers some high-level declarations for this instead.
 
-\begin{decl}[1994/12/01]
-      |\textbullet|
-      |\textperiodcentered|
-\end{decl}
-   These commands allow access to characters which were previously only
-   available in math mode:
-   \begin{center}
-      \begin{tabular}{lcl}
-         \emph{math command} & \emph{character} & \emph{text command} \\
-          |\bullet|   & $\bullet$   & |\textbullet| \\
-         |\cdot|     & $\cdot$     & |\textperiodcentered|
-      \end{tabular}
-   \end{center}
+However, please note that it is usually better to make use of
+available hooks (e.g., the generic command or environment hooks),
+instead of copying the current definition and thereby freezing it; see
+the hook management documentation \texttt{lthooks-doc.pdf} for
+details.
 
-\begin{decl}[1995/12/01]
-      |\textbackslash|
-      |\textbar|
-      |\textless|
-      |\textgreater|
+\begin{decl}
+  |\NewCommandCopy|       \arg{cmd} \arg{existing-cmd} \\
+  |\RenewCommandCopy|     \arg{cmd} \arg{existing-cmd} \\
+  |\DeclareCommandCopy|   \arg{cmd} \arg{existing-cmd}
 \end{decl}
-   These commands allow access to ASCII characters which were
-   only available in verbatim or math mode:
-   \begin{center}
-      \begin{tabular}{lcl}
-         \emph{math command} & \emph{character} & \emph{text command} \\
-          |\backslash|   & $\backslash$   & |\textbackslash| \\
-          |\mid|     & $\mid$     & |\textbar| \\
-          |<<| & $<$ & |\textless| \\
-          |>>| & $>$ & |\textgreater|
-      \end{tabular}
-   \end{center}
 
-\begin{decl}[1995/12/01]
-      |\textasciicircum|
-      |\textasciitilde|
-\end{decl}
-   These commands allow access to ASCII characters which were
-   previously only available in verbatim:
-   \begin{center}
-      \begin{tabular}{cl}
-         \emph{verbatim} & \emph{text command} \\
-         |^| & |\textasciicircum| \\
-         |~| & |\textasciitilde|
-      \end{tabular}
-   \end{center}
-
-\begin{decl}[1995/12/01]
-      |\textregistered|
-      |\texttrademark|
-\end{decl}
-   These commands provide the `registered trademark' (R) and
-   `trademark' (TM) symbols.
-
-\subsection{Text commands: the T1 encoding}
-
-\NEWdescription{1994/12/01}
-  The |OT1| font encoding is fine for typesetting in English, but has
-  problems when typesetting other languages.  The |T1| encoding solves
-  some of these problems, by providing extra characters (such as `eth'
-  and `thorn'), and it allows words containing accented letters to be
-  hyphenated (as long as you have a package like |babel| which allows
-  for non-American hyphenation).
-
-  This section describes the commands you can use if you have the |T1|
-  fonts.  To use them, you need to get the `ec fonts', or the
-  |T1|-encoded PostScript fonts, as used by \textsf{psnfss}.
-  All these fonts are
-  available by anonymous ftp in the Comprehensive \TeX{} Archive, and
-  are also available on the CD-ROMs \emph{4all \TeX} and
-  \emph{\TeX{} Live} (both available from the \TeX{} Users Group).
-
-   You can then select the |T1| fonts by saying:
+This copies the definition of \meta{existing-cmd} to \meta{cmd}. After
+this \meta{existing-cmd} can be redefined and \meta{cmd}
+still works! This allows you to then provide a new definition for
+\meta{existing-cmd} that makes use of \meta{cmd} (i.e., of its old
+definition). For example, after
 \begin{verbatim}
-   \usepackage[T1]{fontenc}
+\NewCommandCopy\LaTeXorig\LaTeX
+\RenewDocumentCommand\LaTeX{}{\textcolor{blue}{\LaTeXorig}}
 \end{verbatim}
-   This will allow you to use the commands in this section.
+all \LaTeX{} logos generated with \cs{LaTeX} will come out in blue
+(assuming you have a color package loaded).
 
-   \emph{Note:} Since this document must be processable on any site
-   running an up-to-date \LaTeX, it does not contain any characters
-   that are present only in |T1|-encoded fonts.  This means that this
-   document cannot show you what these glyphs look like!  If you want
-   to see them then run \LaTeX{} on the document |fontsmpl| and
-   respond `|cmr|' when it prompts you for a family name.
+The differences between \cs{New...} and \cs{Renew...} are as
+elsewhere: i.e., you get an error depending on whether or not
+\meta{cmd} already exists, or in case of \cs{Declare...} it is copied
+regardless. Note that there is no \cs{Provide...} declaration, because
+that would be of limited value.
 
-\begin{decl}[1994/12/01]
-      |\k{<text>}|
-\end{decl}
-   This command produces an `ogonek' accent.
 
-\begin{decl}[1994/12/01]
-      |\DH|
-      |\DJ|
-      |\NG|
-      |\TH|
-      |\dh|
-      |\dj|
-      |\ng|
-      |\th|
-\end{decl}
-   These commands produce characters `eth', `dbar', `eng', and `thorn'.
+If the \meta{cmd} or \meta{existing-cmd} can't be provided as a single
+token but need \enquote{constructing}, you can use \cs{ExpandArgs}
+as explained in
+Section~\ref{sec:preconstructing-csnames}.
 
-\begin{decl}[1994/12/01]
-      |\guillemotleft|
-      |\guillemotright|
-      |\guilsinglleft|
-      |\guilsinglright| \\
-      |\quotedblbase|
-      |\quotesinglbase|
-      |\textquotedbl|
-\end{decl}
-   % A local hack (could be improved):
-   \newcommand{\fauxguillemet}[1]{$\vcenter{\hbox{$\scriptscriptstyle#1$}}$}
-   These commands produce various sorts of quotation mark.
-   Rough representations of them are:
-   \fauxguillemet\ll a\fauxguillemet\gg{}
-   \fauxguillemet<a\fauxguillemet>
-   ,\kern -0.1em,\kern 0.05em a\kern -0.05em``
-   ,\kern 0.05em a\kern -0.05em` and |"|a|"|.
 
-\NEWdescription{2001/06/01}
-   There are therefore some extra short-form ligatures available for
-   use in documents that will only be used with |T1|-encoded fonts.
 
-   The guillemets |\guillemotleft| and |\guillemotright|%
-   \footnote{We apologise once again for maintaining Adobe's
-     enormous solipsism~(sic) of confusing a diving bird with
-     punctuation marks!}
-   can be obtained by typing |<<<<| and |>>>>| and |\quotedblbase|
-   by typing |,,|\,.
 
-   Also, unlike the unexpected results with
-   |OT1|-encoded fonts, |<<| and |>>| will produce \textless{} and
-   \textgreater{}.
-
-   Note also that the single character |"| will no longer produce ''
-   but rather |\textquotedbl|.
-
-\subsection{Logos}
-
 \begin{decl}
-|\LaTeX|\\
-|\LaTeXe|
+  |\ShowCommand|       \arg{cmd}
 \end{decl}
 
-|\LaTeX| (producing `\LaTeX') is still the `main' logo command,
-but if you need to refer to the new features, you can write
-|\LaTeXe| (producing `\LaTeXe').
+This displays the meaning of the \meta{cmd} on the terminal and then
+stops (just like the primitive \cs{show}). The difference is that it
+correctly shows the meaning of more complex commands, e.g., in case of
+robust commands it displays not only the top-level definition but
+also the actual payload code and in case of commands declared with
+\cs{NewDocumentCommand}, etc.\ it also gives you detailed information
+about the argument signature.
 
-\subsection{Picture commands}
 
-\begin{decl}
-   |\qbezier[<N>](<AX>,<AY>)(<BX>,<BY>)(<CX>,<CY>)| \\
-   | \bezier{<N>}(<AX>,<AY>)(<BX>,<BY>)(<CX>,<CY>)|
-\end{decl}
-The |\qbezier| command can be used in |picture| mode to draw a
-quadratic Bezier curve from position |(<AX>,<AY>)| to |(<CX>,<CY>)| with
-control point |(<BX>,<BY>)|.  The optional argument \m{N} gives the
-number of points on the curve.
+\section[Preconstructing command names \\ (or otherwise expanding arguments)]
+        {Preconstructing command names (or otherwise expanding arguments)}
+\label{sec:preconstructing-csnames}
 
-For example, the diagram:
-\begin{center}
-   \begin{picture}(50,50)
-      \thicklines
-      \qbezier(0,0)(0,50)(50,50)
-      \qbezier[20](0,0)(50,0)(50,50)
-      \thinlines
-      \put(0,0){\line(1,1){50}}
-   \end{picture}
-\end{center}
-is drawn with:
-\begin{verbatim}
-   \begin{picture}(50,50)
-      \thicklines
-      \qbezier(0,0)(0,50)(50,50)
-      \qbezier[20](0,0)(50,0)(50,50)
-      \thinlines
-      \put(0,0){\line(1,1){50}}
-   \end{picture}
-\end{verbatim}
-The |\bezier| command is the same, except that the argument \m{N} is not
-optional.  It is provided for compatibility with the \LaTeX~2.09
-|bezier| document style option.
+When declaring new commands with \cs{NewDocumentCommand} or
+\cs{NewCommandCopy} or similar, it is sometimes necessary to
+``construct'' the csname. As a general mechanism the L3 programming
+layer has \cs{exp_args:N...} for this, but there is no mechanism for
+it if \cs{ExplSyntaxOn} is not active (and mixing programming and user
+interface level commands is not a good approach anyhow). We therefore
+offer a mechanism to access this ability using CamelCase naming.
 
-\subsection{Old commands}
-
 \begin{decl}
-|\samepage|
+  |\UseName|  \arg{string} \\
+  |\ExpandArgs| \arg{spec} \arg{cmd} \arg{arg1} \dots
 \end{decl}
 
-The |\samepage| command still exists but is no longer being
-maintained.
-This is because it only ever worked erratically; it does not
-guarantee that there will be no page-breaks within its scope; and
-it can cause footnotes and marginals to be wrongly placed.
+\cs{UseName} turns the \meta{string} directly into a csname and
+then executes it: this is equivalent to the long-standing
+\LaTeXe{} internal command \cs{@nameuse}, or the L3 programming
+equivalent \cs{use:c}. \cs{ExpandArgs} takes a \meta{spec} which
+describes how to expand the \meta{arguments}, carries out these
+operations then executes the \meta{cmd}. The \meta{spec} uses
+the descriptions offered by the L3 programming layer, and the
+relevant \cs{exp_args:N...} function must exist. Common cases will
+have a \meta{spec} of \texttt{c}, \texttt{cc} or \texttt{Nc}: see below.
 
-We recommend using |\enlargethispage| in conjunction with page-break
-commands such as |\newpage| and |\pagebreak| to help control page
-breaks.
-
-\begin{decl}
-   |\SLiTeX|
-\end{decl}
-Since \SLiTeX{} no longer exists, the logo is no longer defined in the
-\LaTeX{} kernel.  A suitable replacement is |\textsc{Sli\TeX}|.  The
-\SLiTeX{} logo is defined in \LaTeX~2.09 compatibility mode.
-
-\begin{decl}
-|\mho| |\Join| |\Box| |\Diamond| |\leadsto| \\
-|\sqsubset| |\sqsupset| |\lhd| |\unlhd| |\rhd| |\unrhd|
-\end{decl}
-
-These symbols are contained in the \LaTeX{} symbol font, which was
-automatically loaded by \LaTeX~2.09.  However, \TeX{} has room for
-only sixteen math font families; thus many users discovered that they
-ran out.  Because of this, \LaTeX{} does not load the \LaTeX{} symbol
-font unless you use the \textsf{latexsym} package.
-
-These symbols are also made available, using different fonts, by the
-\textsf{amsfonts} package, which also defines a large number of other
-symbols.  It is supplied by the American Mathematical Society.
-
-The \textsf{latexsym} package is loaded automatically in \LaTeX~2.09
-compatibility mode.
-
-\section{\LaTeX~2.09 documents}
-\label{Sec:209}
-
-\LaTeXe{} can process (almost) any \LaTeX~2.09 document, by entering
-\emph{\LaTeX~2.09 compatibility mode}.  Nothing has changed, you run
-\LaTeX{} in the same way you always did, and you will get much the
-same results.
-
-The reason for the `almost' is that some \LaTeX~2.09 packages made use
-of low-level unsupported features of \LaTeX.  If you discover such a
-package, you should find out if it has been updated to work with
-\LaTeXe.  Most packages will still work with \LaTeXe---the easiest way
-to find out whether a package still works is to try it!
-
-\LaTeX~2.09 compatibility mode is a comprehensive emulation of
-\LaTeX~2.09, but at the cost of time.  Documents can run up to 50\%
-slower in compatibility mode than they did under \LaTeX~2.09.
-In addition, many of the new features of \LaTeXe{} are not available in
-\LaTeX~2.09 compatibility mode.
-
-\subsection{Warning}
-
-\NEWdescription{1995/12/01}
-This \emph{\LaTeX~2.09 compatibility mode} is provided solely to allow
-you to process 2.09 documents, i.e.~documents that were written (we
-hope, a long time ago) for a very old system and therefore could be
-processed by using a genuine antique \LaTeX~2.09 system.
-
-This mode is therefore \emph{not} intended to provide access to the
-enhanced features of \LaTeXe{}.  Thus it must not be used to process
-new documents which masquerade as 2.09 documents (i.e.~they begin with
-|\documentstyle|) but which could not be processed using that genuine
-antique \LaTeX~2.09 system because they contain some new,
-\LaTeXe{}-only, commands or environments.
-
-To prevent such misuse of the system, and the consequent trouble it
-causes when such misleadingly encoded documents are distributed, the
-\emph{\LaTeX~2.09 compatibility mode} turns off most of these new
-features and commands.  Any attempt to use them will give you an error
-message and, moreover, many of them simply  will not work, whilst
-others will produce unpredictable results.
-So don't bother sending us any bug reports about such occurrences since
-they are intentional.
-
-
-\subsection{Font selection problems}
-\label{Sec:fsprob}
-
-When using compatibility mode, it is possible that you will find
-problems with font-changing commands in some old documents.  These
-problems are of two types:
-
-\begin{itemize}
-\item producing error messages;
-\item not producing the font changes you expected.
-\end{itemize}
-
-In case of error messages it is possible that the document (or an old
-style file used therein) contains references to old internal commands
-which are no longer defined, see Section~\ref{Sec:oldinternals} for
-more information if this is the case.
-
-\NEWdescription{1995/12/01}
-One example of the unexpected is if you use one of the new style of
-math-mode font changing command as follows:
+As an example, the following declaration provides a method to generate
+copyedit commands:
 \begin{verbatim}
-$ \mathbf{xy} A $
+\NewDocumentCommand\newcopyedit{mO{red}}
+  {%
+    \newcounter{todo#1}%
+    \ExpandArgs{c}\NewDocumentCommand{#1}{s m}%
+      {%
+        \stepcounter{todo#1}%
+        \IfBooleanTF {##1}%
+          {\todo[color=#2!10]{\UseName{thetodo#1}: ##2}}%
+          {\todo[inline,color=#2!10]{\UseName{thetodo#1}: ##2}}%
+      }%
+  }
 \end{verbatim}
-You may well find that this behaves as if you had put:
-\begin{verbatim}
-$ \bf {xy} A $
-\end{verbatim}
-everything including the $A$ coming out bold.
+Given that declaration you can then write
+\verb/\newcopyedit{note}[blue]/ which defines the command \cs{note}
+and the corresponding counter for you.
 
-\LaTeX~2.09 allowed sites to customize their \LaTeX{} installation,
-which resulted in documents producing different results on different
-\LaTeX{} installations.  \LaTeXe{} no longer allows so much
-customization but, for compatibility with old documents, the local
-configuration file |latex209.cfg| is loaded every time \LaTeXe{}
-enters \LaTeX~2.09 compatibility mode.
-
-For example, if your site was customized to use the New Font
-Selection Scheme (\NFSS) with the |oldlfont| option, then you can
-make \LaTeXe{} emulate this by creating a |latex209.cfg| file
-containing the commands:
+A second example is to copy a command by string name using
+\cs{NewCommandCopy}: here we might need to construct both command
+names.
 \begin{verbatim}
-\ExecuteOptions{oldlfont}\RequirePackage{oldlfont}
+\NewDocumentCommand\savebyname{m}
+  {\ExpandArgs{cc}\NewCommandCopy{saved#1}{#1}}
 \end{verbatim}
-Similarly, to emulate \NFSS{} with the |newlfont| option, you can
-create a |latex209.cfg| file containing:
-\begin{verbatim}
-\ExecuteOptions{newlfont}\RequirePackage{newlfont}
-\end{verbatim}
 
-
-\subsection{Native mode}
-\label{Sec:native}
-
-To run an old document faster, and use the new features of
-\LaTeXe, you should try using \emph{\LaTeXe{} native mode}.
-This is done by replacing the command:
-\begin{quote}
-   |\documentstyle[|\m{options}|,|\m{packages}|]|\arg{class}
-\end{quote}
-with:
-\begin{quote}
-   |\documentclass|\oarg{options}\arg{class} \\
-   |\usepackage{latexsym,|\m{packages}|}|
-\end{quote}
-However, some documents which can be processed in \LaTeX~2.09
-compatibility mode may not work in native mode.  Some \LaTeX~2.09
-packages will only work with \LaTeXe{} in 2.09 compatibility mode.
-Some documents will cause errors because of \LaTeXe's improved error
-detection abilities.
-
-But most \LaTeX~2.09 documents can be processed by \LaTeXe{}'s native
-mode with the above change.  Again, the easiest way to find out
-whether your documents can be processed in native mode is to try it!
-
-
-\section{Local modifications}
-\label{sec:loc}
-
-\NEWdescription{1995/12/01}
-There are two common types of local modifications that can be done
-very simply.  Do not forget that documents produced using such
-modifications will not be usable at other places (such documents are
-called `non-portable').
-
-One type of modification is the use of personal commands for commonly
-used symbols or constructions.  These should be put into a package
-file (for example, one called \texttt{mymacros.sty}) and loaded by
-putting |\usepackage{mymacros}| in the document preamble.
-
-Another type is a local document class that is very similar to one of
-the standard classes but contains some straightforward modifications
-such as extra environments, different values for some parameters, etc.
-These should be put into a class file; here we shall describe a simple
-method of constructing such a file using, as an example, a class
-called \textsf{larticle} that is very similar to the \textsf{article}
-class.
-
-\NEWfeature{1995/12/01}
-The class file called \texttt{larticle.cls} should (after the
-preliminary identification commands) start as follows:
+In the \meta{spec} each \texttt{c} stands for one argument that is
+turned into a `\texttt{c}'ommand. An \texttt{n} represents a
+`\texttt{n}'ormal argument that is not altered and \texttt{N} stands for
+a `\texttt{N}'ormal argument which is also left unchanged, but one
+consisting only of a single token (and usually unbraced). Thus, to
+construct a command from a string only for the second argument of
+\cs{NewCommandCopy} you would write
 \begin{verbatim}
-   \LoadClassWithOptions{article}
+\ExpandArgs{Nc}\NewCommandCopy\mysectionctr{c at section}
 \end{verbatim}
-This command should be followed by whatever additions and changes you
-wish to make to the results of reading in the file
-\texttt{article.sty}.
+There are several other single letters supported in the L3 programming
+layer that \emph{could} be used in the \meta{spec} to manipulate
+arguments in other ways.  If you are interested, take a look at the
+\enquote{Argument expansion} section in the L3 programming layer
+documentation in \texttt{interface3.pdf}.
 
-The effect of using the above |\LoadClassWithOptions| command is to
-load the standard class file \textsf{article} with whatever options
-are asked for by the document.  Thus a document using your
-\textsf{larticle} class can specify any option that could be specified
-when using the standard \textsf{article} class; for example:
-\begin{verbatim}
-   \documentclass[a4paper,twocolumn,dvips]{larticle}
-\end{verbatim}
 
 
-\section{Problems}
-\label{Sec:problems}
+\section{Expandable floating point (and other) calculations}
 
-This section describes some of the things which may go wrong when
-using \LaTeXe, and what you can do about it.
+The \LaTeX3 programming layer which is part of the format offers a
+rich interface to manipulate floating point variables and values. To
+allow for (simpler) applications to use this on document-level or in
+packages otherwise not making use of the L3 programming layer a few
+interface commands are made available.
 
-\subsection{New error messages}
 
-\LaTeXe{} has a number of new error messages.
-Please also note that many error messages now produce further helpful
-information if you press |h| in response to the error prompt.
-
 \begin{decl}
-|Option clash for package |\m{package}|.|
+  |\fpeval| \arg{floating point expression}
 \end{decl}
-The named package has been loaded twice with different options.  If
-you enter |h| you will be told what the options were, for example, if
-your document contained:
-\begin{verbatim}
-   \usepackage[foo]{fred}
-   \usepackage[baz]{fred}
-\end{verbatim}
-then you will get the error message:
-\begin{verbatim}
-   Option clash for package fred.
-\end{verbatim}
-and typing |h| at the |?| prompt will give you:
-\begin{verbatim}
-   The package fred has already been loaded with options:
-     [foo]
-   There has now been an attempt to load it with options:
-     [baz]
-   Adding the line:
-     \usepackage[foo,baz]{fred}
-   to your document may fix this.
-   Try typing <<return>> to proceed.
-\end{verbatim}
-The cure is, as suggested, to load the package with both sets of
-options.  Note that since \LaTeX{} packages can call other packages,
-it is possible to get a package option clash without explicitly
-requesting the same package twice.
 
-\begin{decl}
-   |Command |\m{command}| not provided in base NFSS.|
-\end{decl}
-The \m{command} is not provided by default in \LaTeXe.  This error is
-generated by using one of the commands:
-\begin{verbatim}
-   \mho \Join \Box \Diamond \leadsto
-   \sqsubset \sqsupset \lhd \unlhd \rhd \unrhd
-\end{verbatim}
-which are now part of the \textsf{latexsym} package.
-The cure is to add:
-\begin{verbatim}
-   \usepackage{latexsym}
-\end{verbatim}
-in the preamble of your document.
+The expandable command \cs{fpeval} takes as its argument a floating
+point expression and produces a result using the normal rules of
+mathematics. As this command is expandable it can be used where \TeX{}
+requires a number and for example within a low-level \cs{edef} operation
+to give a purely numerical result.
 
-\begin{decl}
-   |LaTeX2e command <command> in LaTeX 2.09 document.|
-\end{decl}
-The \m{command} is a \LaTeXe{} command but this is a \LaTeX~2.09
-document.  The cure is to replace the command by a \LaTeX~2.09
-command, or to run document in native mode, as described in
-Section~\ref{Sec:native}.
 
-\begin{decl}
-   |NFSS release 1 command \newmathalphabet found.|
-\end{decl}
-The command |\newmathalphabet| was used by the New Font Selection
-Scheme Release 1 but it has now been replaced by
-|\DeclareMathAlphabet|, the use of which is described in
-\emph{\fntguide}.
 
-The best cure is to update the package which contained the
-|\newmathalphabet| command.  Find out if there is a new release of
-the package, or (if you wrote the package yourself) consult
-\emph{\fntguide} for the new syntax of font commands.
+Briefly, the floating point expressions may comprise:
+\begin{itemize}
+  \item Basic arithmetic: addition $x\fpbin{+}y$, subtraction $x\fpbin{-}y$,
+    multiplication $x\fpbin{*}y$, division $x\fpbin{/}y$, square root~$\sqrt{x}$,
+    and parentheses.
+  \item Comparison operators: $x\fprel{<}y$,
+    $x\fprel{<=}y$, $x\fprel{>?}y$,
+    $x\fprel{!=}y$ \emph{etc.}
+  \item Boolean logic: sign $\fpop{sign} x$,
+    negation $\fpop{!}x$, conjunction
+    $x\fprel{\&\&}y$, disjunction $x\fprel{\string|\string|}y$, ternary
+    operator $x\fprel{?}y\fprel{:}z$.
+  \item Exponentials: $\fpop{exp} x$, $\fpop{ln} x$, $x\mathord{\texttt{\^{}}}y$.
+  \item Integer factorial: $\fpop{fact} x$.
+  \item Trigonometry: $\fpop{sin} x$, $\fpop{cos} x$, $\fpop{tan} x$, $\fpop{cot} x$, $\fpop{sec}
+    x$, $\fpop{csc} x$ expecting their arguments in radians, and
+    $\fpop{sind} x$, $\fpop{cosd} x$,
+    $\fpop{tand} x$, $\fpop{cotd} x$,
+    $\fpop{secd} x$, $\fpop{cscd} x$ expecting their
+    arguments in degrees.
+  \item Inverse trigonometric functions: $\fpop{asin} x$,
+    $\fpop{acos} x$, $\fpop{atan} x$,
+    $\fpop{acot} x$, $\fpop{asec} x$,
+    $\fpop{acsc} x$ giving a result in radians, and
+    $\fpop{asind} x$, $\fpop{acosd} x$,
+    $\fpop{atand} x$, $\fpop{acotd} x$,
+    $\fpop{asecd} x$, $\fpop{acscd} x$ giving a result
+    in degrees.
+  \item Extrema: $\fpop{max}(x_{1},x_{2},\ldots)$, $\fpop{min}(x_{1},x_{2},\ldots)$,
+    $\fpop{abs}(x)$.
+  \item Rounding functions, controlled by two optional
+    values,  $n$ (number of places, $0$ by default) and
+      $t$ (behavior on a tie, $\nan$ by default):
+    \begin{itemize}
+    \item $\fpop{trunc}(x,n)$ rounds towards zero,
+    \item $\fpop{floor}(x,n)$ rounds towards~$-\infty$,
+    \item $\fpop{ceil}(x,n)$ rounds towards~$+\infty$,
+    \item $\fpop{round}(x,n,t)$ rounds to the closest value, with
+    ties rounded to an even value by default, towards zero if $t=0$,
+    towards $+\infty$ if $t>0$ and towards $-\infty$ if $t<0$.
+    \end{itemize}
+  \item Random numbers: $\fpop{rand}()$, $\fpop{randint}(m,n)$.
+  \item Constants: \texttt{pi}, \texttt{deg} (one degree in radians).
+  \item Dimensions, automatically expressed in points, \emph{e.g.},
+    \texttt{pc} is~$12$.
+  \item Automatic conversion (no need for \cs{number}) of
+    integer, dimension, and skip variables to floating points numbers,
+    expressing dimensions in points and ignoring the stretch and
+    shrink components of skips.
+  \item Tuples: $(x_1,\ldots{},x_n)$ that can be added together,
+    multiplied or divided by a floating point number, and nested.
+\end{itemize}
 
-If there is no updated version of the package then you can cure this
-error by using the \textsf{newlfont} or \textsf{oldlfont} package,
-which tells \LaTeX{} which version of |\newmathalphabet| should be
-emulated.
-
-You should use \textsf{oldlfont} if the document selects math fonts with
-syntax such as this:
+An example of use could be the following:
+\begin{verbatim}
+\LaTeX{} can now compute: $ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3}
+  = \fpeval{sin(3.5)/2 + 2e-3} $.
+\end{verbatim}
+which produces the following output:
 \begin{quote}
-  |{\cal A}|, etc.
+  \LaTeX{} can now compute: $ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3}
+  = \fpeval{sin(3.5)/2 + 2e-3} $.
 \end{quote}
-Use \textsf{newlfont} if the document's syntax is like this:
-\begin{quote}
-  |\cal{A}|, etc.
-\end{quote}
 
-
 \begin{decl}
-   |Text for \verb command ended by end of line.|
+  |\inteval| \arg{integer expression}
 \end{decl}
-The |\verb| command has been begun but not ended on that line.  This
-usually means that you have forgotten to put in the end-character of
-the |\verb| command.
 
-\begin{decl}
-   |Illegal use of \verb command.|
-\end{decl}
-The |\verb| command has been used inside the argument of another
-command.  This has never been allowed in \LaTeX{}---often producing
-incorrect output without any warning---and so \LaTeXe{} produces
-an error message.
+  The expandable command \cs{inteval} takes as its argument an integer
+  expression and produces a result using the normal rules of
+  mathematics with some restrictions, see below. The operations
+  recognized are |+|, |-|, |*| and |/| plus parentheses.  As this
+  command is expandable it can be used where \TeX{} requires a number
+  and for example within a low-level \cs{edef} operation to give a
+  purely numerical result.
 
-\subsection{Old internal commands}
-\label{Sec:oldinternals}
+  This is basically a thin wrapper for the primitive \cs{numexpr}
+  command and therefore has some syntax restrictions. These are:
+  \begin{itemize}
+  \item \texttt{/} denotes division rounded to the closest integer with
+    ties rounded away from zero;
+  \item there is an error and the overall expression evaluates to zero
+    whenever the absolute value of any intermediate result exceeds
+    $2^{31}-1$, except in the case of scaling operations
+    $a$\texttt{*}$b$\texttt{/}$c$, for which $a$\texttt{*}$b$ may be
+    arbitrarily large;
+  \item parentheses may not appear after unary \texttt{+} or
+    \texttt{-}, namely placing \texttt{+(} or \texttt{-(} at the start
+    of an expression or after \texttt{+}, \texttt{-}, \texttt{*},
+    \texttt{/} or~\texttt{(} leads to an error.
+  \end{itemize}
 
-A number of \LaTeX~2.09 internal commands have been removed, since
-their functionality is now provided in a different way.  See
-\emph{\clsguide} for more details of the new, supported interface for
-class and package writers.
-
-\begin{decl}
-   |\tenrm| |\elvrm| |\twlrm| \dots\\
-   |\tenbf| |\elvbf| |\twlbf| \dots\\
-   |\tensf| |\elvsf| |\twlsf| \dots\\
-   $\vdots$
-\end{decl}
-These commands provided access to the seventy fonts preloaded by
-\LaTeX~2.09.  In contrast, \LaTeXe{} normally preloads at most
-fourteen fonts, which saves a lot of font memory; but a consequence is
-that any \LaTeX{} file which used the above commands to directly
-access fonts will no longer work.
-
-Their use will usually produce an error message such as:
+An example of use could be the following.
 \begin{verbatim}
-   ! Undefined control sequence.
-   l.5 \tenrm
+\LaTeX{} can now compute: The sum of the numbers is $\inteval{1 + 2 + 3}$.
 \end{verbatim}
-The cure for this is to update the document to use the new
-font-changing commands provided by \LaTeXe; these are described in
-\emph{\fntguide}.
+which results in
+\enquote{\LaTeX{} can now compute: The sum of the numbers is $\inteval{1 + 2 + 3}$.}
 
-If this is not possible then, as a last resort, you can
-use the \textsf{rawfonts} package, which loads the
-seventy \LaTeX~2.09 fonts and provides direct access to them using the
-old commands.  This takes both time and memory.  If you do not
-wish to load all seventy fonts, you can select some of them by using the
-|only| option to \textsf{rawfonts}.  For example, to load only |tenrm|
-and |tenbf| you write:
-\begin{verbatim}
-   \usepackage[only,tenrm,tenbf]{rawfonts}
-\end{verbatim}
 
-The \textsf{rawfonts} package is distributed as part of the \LaTeX{}
-tools software, see Section~\ref{Sec:st-pack}.
+\begin{decl}
+  |\dimeval| \arg{dimen expression} \qquad
+  |\skipeval| \arg{skip expression}
+\end{decl}
 
-\subsection{Old files}
-
-One of the more common mistakes in running \LaTeX{} is to read in old
-versions of packages instead of the new versions.  If you get an
-incomprehensible error message from a standard package, make sure you
-are loading the most recent version of the package.  You can find out
-which version of the package has been loaded by looking in the log
-file for a line like:
+Similar to \cs{inteval} but computing a length (\texttt{dimen}) or a
+rubber length (\texttt{skip}) value. Both are thin wrappers around
+the corresponding engine primitives, which makes them fast, but
+therefore shows the same syntax peculiars as discussed
+above. Nevertheless, in practice they are usually sufficient.  For
+example
 \begin{verbatim}
-   Package: fred 1994/06/01 v0.01 Fred's package.
+\newcommand\calulateheight[1]{%
+  \setlength\textheight{\dimeval{\topskip+\baselineskip*\inteval{#1-1}}}}
 \end{verbatim}
-You can use the \m{release-date} options to |\documentclass| and
-|\usepackage| to make sure that you are getting a suitably recent copy
-of the document class or package.  This is useful when sending a
-document to another site, which may have out-of-date software.
+sets the \cs{textheight} to the appropriate value if a page should
+hold a specific number of text lines. Thus after |\calulateheight{40}|
+it is set to \dimeval{\topskip+\baselineskip*\inteval{40-1}}, given
+the values \cs{topskip} (\dimeval{\topskip}) and \cs{baselineskip}
+(\dimeval{\baselineskip}) in the current document.
 
-\subsection{Where to go for more help}
+\section{Case changing}
 
-If you can't find the answer for your problem here, try looking in
-\emph{\LaTeXbook} or \emph{\LaTeXcomp}.  If you have a problem with
-installing \LaTeX, look in the installation guide files which come with
-the distribution.
+\TeX{} provides two primitives \cs{uppercase} and \cs{lowercase} for changing
+the case of text. However, these have a range of limitations: they only change
+the case of explicit characters, do not account for the surrounding context, do
+not support UTF-8 input with 8-bit engines, etc. To overcome this problem,
+\LaTeX{} provides the commands \cs{MakeUppercase}, \cs{MakeLowercase} and
+\cs{MakeTitlecase}: these offer significant enhancement over the \TeX{}
+primitives. These commands are engine-robust (\cs{protected}), and so
+can be used in moving arguments.
 
-If this doesn't help, contact your local \LaTeX{} guru or local
-\LaTeX{} mailing list.
+Upper- and lower-casing are well-understood in general conversation.
+Titlecasing here follows the definition given by the Unicode Consortium: the
+first character of the input will be converted to (broadly) uppercase, and the
+rest of the input to lowercase. The full range of Unicode UTF-8 input can be
+supported, with the proviso that at present the characters set up with 8-bit
+engines match those available in standard input encodings (|T1|, |T2|, |LGR|).
+\begin{quotation}
+  \begin{tabular}{rl}
+    |\MakeUppercase{hello WORLD ßüé}| & \MakeUppercase{hello WORLD ßüé} \\
+    |\MakeLowercase{hello WORLD ßüé}| & \MakeLowercase{hello WORLD ßüé} \\
+    |\MakeTitlecase{hello WORLD ßüé}| & \MakeTitlecase{hello WORLD ßüé} \\
+  \end{tabular}
+\end{quotation}
 
-If you think you've discovered a bug then please report it!  First,
-you should find out if the problem is with a third-party package or
-class.  If the problem is caused by a package or class other than
-those listed in Section~\ref{Sec:class+packages} then please report
-the problem to the author of the package or class, not to the \LaTeX3
-project team.
+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.
 
-If the bug really is with core \LaTeX{} then you should create a
-\emph{short}, \emph{self-contained} document which exhibits the
-problem.  You should run a \emph{recent} (less than a year old)
-version of \LaTeX{} on the file and then run \LaTeX{} on
-|latexbug.tex|.  This will create an error report which you should
-send, together with the sample document and log file, to the
-\LaTeX{} bugs address which can be found in the file
-|latexbug.tex| or |bugs.txt|.
+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
+are the arguments to the commands \cs{label}, \cs{ref}, \cs{cite}, \cs{begin}
+and \cs{end}. Additional exclusions can be added using the command
+\cs{AddToNoCaseChangeList}. Input can be excluded from case changing using the
+command \cs{NoCaseChange}.
+\begin{quotation}
+  \begin{tabular}{rl}
+    |\MakeUppercase{Some text $y = mx + c$}|
+      & \MakeUppercase{Some text $y = mx + c$} \\
+    |\MakeUppercase{\NoCaseChange{iPhone}}|
+      & \MakeLowercase{\NoCaseChange{iPhone}} \\
+  \end{tabular}
+\end{quotation}
 
+To allow robust commands to be used within case changing \emph{and} to produce
+the expected output, two additional control commands are available.
+\cs{CaseSwitch} allows the user to specify the result for the four possible
+cases
+\begin{itemize}
+  \item No case changing
+  \item Uppercasing
+  \item Lowercasing
+  \item Titlecasing (only applies for the start of the input)
+\end{itemize}
+The command \cs{DeclareCaseChangeEquivalent} provides a way to substitute a
+command by an alternative version when it is found inside a case changing
+situation.
 
-\section{Enjoy!}
-\label{Sec:enjoy}
-
-We certainly hope you will enjoy using the new standard \LaTeX{} but,
-if this is not possible, we hope that you will enjoy success and
-fulfillment as a result of the documents which it will help you to
-create.
-
-If you find that the contribution of \LaTeX{} to your life is such
-that you would like to support the work of the project team, then
-please read Section~\ref{Sec:ltx3} and discover practical ways to do
-this.
-
-\begin{thebibliography}{1}
-
-\bibitem{A-W:GRM97}
-Michel Goossens, Sebastian Rahtz and Frank Mittelbach.
-\newblock {\em The {\LaTeX} Graphics Companion}.
-\newblock Addison-Wesley, Reading, Massachusetts, 1997.
-
-
-\bibitem{A-W:GR99}
-Michel Goossens and Sebastian Rahtz.
-\newblock {\em The {\LaTeX} Web Companion}.
-\newblock Addison-Wesley, Reading, Massachusetts, 1999.
-
-
-\bibitem{A-W:DEK91}
-Donald~E. Knuth.
-\newblock {\em The \TeX book}.
-\newblock Addison-Wesley, Reading, Massachusetts, 1986.
-\newblock Revised to cover \TeX3, 1991.
-
-
-\bibitem{A-W:LLa94}
-Leslie Lamport.
-\newblock {\em {\LaTeX:} A Document Preparation System}.
-\newblock Addison-Wesley, Reading, Massachusetts, second edition, 1994.
-
-\bibitem{A-W:MG2004}
-Frank Mittelbach and Michel Goossens.
-\newblock {\em The {\LaTeX} Companion second edition}.
-\newblock With Johannes Braams, David Carlisle, and Chris Rowley.
-\newblock Addison-Wesley, Reading, Massachusetts, 2004.
-
-
-\end{thebibliography}
-
 \end{document}

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

Deleted: trunk/Master/texmf-dist/doc/latex/base/usrguide3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/base/usrguide3.tex	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/base/usrguide3.tex	2022-11-01 19:57:17 UTC (rev 64892)
@@ -1,1112 +0,0 @@
-% \iffalse meta-comment
-%
-% Copyright (C) 2020-2022
-% The LaTeX Project and any individual authors listed elsewhere
-% in this file.
-%
-% This file is part of the LaTeX base system.
-% -------------------------------------------
-%
-% It may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% of this license or (at your option) any later version.
-% The latest version of this license is in
-%    http://www.latex-project.org/lppl.txt
-% and version 1.3c or later is part of all distributions of LaTeX
-% version 2008 or later.
-%
-% This file has the LPPL maintenance status "maintained".
-%
-% The list of all files belonging to the LaTeX base distribution is
-% given in the file `manifest.txt'. See also `legal.txt' for additional
-% information.
-%
-% The list of derived (unpacked) files belonging to the distribution
-% and covered by LPPL is defined by the unpacking scripts (with
-% extension .ins) which are part of the distribution.
-%
-% \fi
-% Filename: usrguide3.tex
-
-\documentclass{ltxguide}
-
-\usepackage[T1]{fontenc}  % needed for \textbackslash in tt
-\usepackage{csquotes}
-
-\title{New \LaTeX\ methods for authors (starting 2020)}
-\author{\copyright~Copyright 2020-2022, \LaTeX\ Project Team.\\
-   All rights reserved.}
-
-\date{2022-07-05}
-
-\NewDocumentCommand\cs{m}{\texttt{\textbackslash\detokenize{#1}}}
-\NewDocumentCommand\marg{m}{\arg{#1}}
-\NewDocumentCommand\meta{m}{\ensuremath{\langle}\textit{#1}\ensuremath{\rangle}}
-\NewDocumentCommand\pkg{m}{\textsf{#1}}
-\NewDocumentCommand\text{m}{\ifmmode\mbox{#1}\else#1\fi}
-% Fix a 'feature'
-\makeatletter
-\renewcommand \verbatim at font {\normalfont \ttfamily}
-\makeatother
-
-
-% for fpeval documentation
-
-\providecommand\fpop[1]{\mathop{\texttt{#1}}}
-\providecommand\fpbin[1]{\mathbin{\texttt{#1}}}
-\providecommand\fprel[1]{\mathrel{\texttt{#1}}}
-\providecommand\nan{\texttt{NaN}}
-
-\ExplSyntaxOn
-\ProvideExpandableDocumentCommand \fpeval { m } { \fp_eval:n {#1} }
-\ExplSyntaxOff
-
-\begin{document}
-
-\maketitle
-
-\tableofcontents
-
-\section{Introduction}
-
-\LaTeXe{} was released in 1994 and added a number of then-new concepts to
-\LaTeX{}. These are described in \texttt{usrguide}, 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
-\emph{stable} and \emph{widely-usable} concepts that have resulted from that
-work. These `new' ideas have been transferred from development packages
-into the \LaTeXe{} kernel. As such, they are now available to \emph{all}
-\LaTeX{} users and have the \emph{same stability} as any other part of the
-kernel. The fact that `behind the scenes' they are built on \pkg{expl3}
-is useful for the development team, but is not directly important to users.
-
-\section{Creating document commands and environments}
-
-\subsection{Overview}
-
-Creating document commands and environments using the \LaTeX3 toolset is based
-around the idea that a common set of descriptions can be used to cover almost
-all argument types used in real documents. Thus parsing is reduced to a simple
-description of which arguments a command takes: this description provides the
-`glue' between the document syntax and the implementation of the
-command.
-
-First, we will describe the argument types, then move on to explain how these
-can be used to create both document commands and environments. Various more
-specialized features are then described, which allow an even richer application
-of a simple interface set up.
-
-The details here are intended to help users create document commands in
-general. More technical detail, suitable for \TeX{} programmers, is included
-in \texttt{interface3}.
-
-\subsection{Describing argument types}
-
-In order to allow each argument to be defined independently, the parser does
-not simply need to know the number of arguments for a function, but also the
-nature of each one. This is done by constructing an \emph{argument
-specification}, which defines the number of arguments, the type of each
-argument and any additional information needed for the parser to read the user
-input and properly pass it through to internal functions.
-
-The basic form of the argument specifier is a list of letters, where each
-letter defines a type of argument. As will be described below, some of the
-types need additional information, such as default values. The argument types
-can be divided into two, those which define arguments that are mandatory
-(potentially raising an error if not found) and those which define optional
-arguments. The mandatory types
-\begin{itemize}
-  \item[\texttt{m}] A standard mandatory argument, which can either be a single token
-    alone or multiple tokens surrounded by curly braces |{}|. Regardless of the
-    input, the argument will be passed to the internal code without the outer
-    braces. This is the type specifier for a normal \TeX{} argument.
-  \item[\texttt{r}] Given as \texttt{r}\meta{token1}\meta{token2}, this denotes a
-    `required' delimited argument, where the delimiters are
-    \meta{token1} and \meta{token2}. If the opening delimiter \meta{token1} is
-    missing, the default marker |-NoValue-| will be inserted after a suitable
-    error.
-  \item[\texttt{R}] Given as \texttt{R}\meta{token1}\meta{token2}\marg{default},
-    this is a `required' delimited argument as for~\texttt{r},
-    but it has a user-definable recovery \meta{default} instead of
-    |-NoValue-|.
-  \item[\texttt{v}] Reads an argument `verbatim', between the following
-    character and its next occurrence, in a way similar to the argument
-    of the \LaTeXe{} command \cs{verb}. Thus a \texttt{v}-type argument
-    is read between two identical characters, which cannot be any of |%|, |\|,
-    |#|, |{|, |}| or \verb*| |. The verbatim argument can also be enclosed
-    between braces, |{| and |}|. A command with a verbatim argument will
-    produce an error when it appears within an argument of another function.
-  \item[\texttt{b}] Only suitable in the argument specification of an
-    environment, it denotes the body of the environment, between
-    |\begin|\marg{environment} and |\end|\marg{environment}.  See
-    Section~\ref{sec:cmd:body} for details.
-\end{itemize}
-The types which define optional arguments are:
-\begin{itemize}
-  \item[\texttt{o}] A standard \LaTeX{} optional argument, surrounded with square
-    brackets, which will supply the special |-NoValue-| marker if not given
-    (as described later).
-  \item[\texttt{d}] Given as \texttt{d}\meta{token1}\meta{token2}, an optional
-    argument which is delimited by \meta{token1} and \meta{token2}. As with
-    \texttt{o}, if no value is given the special marker |-NoValue-| is
-    returned.
-  \item[\texttt{O}] Given as \texttt{O}\marg{default}, is like \texttt{o}, but returns
-    \meta{default} if no value is given.
-  \item[\texttt{D}] Given as \texttt{D}\meta{token1}\meta{token2}\marg{default}, it is
-    as for \texttt{d}, but returns \meta{default} if no value is given.
-    Internally, the \texttt{o}, \texttt{d} and \texttt{O} types are
-    short-cuts to an appropriated-constructed \texttt{D} type argument.
-  \item[\texttt{s}] An optional star, which will result in a value
-    \cs{BooleanTrue} if a star is present and \cs{BooleanFalse}
-    otherwise (as described later).
-  \item[\texttt{t}] An optional \meta{token}, which will result in a value
-    \cs{BooleanTrue} if \meta{token} is present and \cs{BooleanFalse}
-    otherwise. Given as \texttt{t}\meta{token}.
-  \item[\texttt{e}] Given as \texttt{e}\marg{tokens}, a set of optional
-    \emph{embellishments}, each of which requires a \emph{value}.
-    If an embellishment is not present, |-NoValue-| is returned.  Each
-    embellishment gives one argument, ordered as for the list of
-    \meta{tokens} in the argument specification.  All \meta{tokens}
-    must be distinct.
-  \item[\texttt{E}] As for \texttt{e} but returns one or more \meta{defaults}
-    if values are not given: \texttt{E}\marg{tokens}\marg{defaults}. See
-    Section~\ref{sec:cmd:embellishment} for more details.
-\end{itemize}
-
-\subsection{Modifying argument descriptions}
-
-In addition to the argument \emph{types} discussed above, the argument
-description also gives special meaning to three other characters.
-
-First, \texttt{+} is used to make an argument long (to accept paragraph
-tokens). In contrast to \cs{newcommand}, this applies on an
-argument-by-argument basis. So modifying the example to `|s o o +m O{default}|'
-means that the mandatory argument is now \cs{long}, whereas the optional
-arguments are not.
-
-Secondly, \texttt{!} is used to control whether spaces are allowed before
-optional arguments. There are some subtleties to this, as \TeX{} itself
-has some restrictions on where spaces can be `detected': more detail
-is given in Section~\ref{sec:cmd:opt-space}.
-
-Finally, the character \texttt{>} is used to declare so-called
-`argument processors', which can be used to modify the contents of an
-argument before it is passed to the macro definition. The use of argument
-processors is a somewhat advanced topic, (or at least a less commonly used
-feature) and is covered in Section~\ref{sec:cmd:processors}.
-
-\subsection{Creating document commands and environments}
-
-\begin{decl}
-  |\NewDocumentCommand|     \arg{cmd} \arg{arg spec} \arg{code} \\
-  |\RenewDocumentCommand|   \arg{cmd} \arg{arg spec} \arg{code} \\
-  |\ProvideDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\
-  |\DeclareDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code}
-\end{decl}
-This family of commands are used to create a \meta{cmd}. The argument
-specification for the function is given by \meta{arg spec}, and the command
-uses the \meta{code} with |#1|, |#2|, etc.\ replaced by the arguments found
-by the parser.
-
-An example:
-\begin{verbatim}
-  \NewDocumentCommand\chapter{s o m}
-    {%
-      \IfBooleanTF{#1}%
-        {\typesetstarchapter{#3}}%
-        {\typesetnormalchapter{#2}{#3}}%
-    }
-\end{verbatim}
-would be a way to define a \cs{chapter} command which would essentially behave
-like the current \LaTeXe{} command (except that it would accept an optional
-argument even when a \texttt{*} was parsed). The \cs{typesetnormalchapter}
-could test its first argument for being |-NoValue-| to see if an optional
-argument was present. (See Section~\ref{sec:cmd:special} for details of
-\cs{IfBooleanTF} and testing for |-NoValue-|.)
-
-The difference between the \cs{New...} \cs{Renew...}, \cs{Provide...}
-and \cs{Declare...} versions is the behavior if \meta{cmd} is already
-defined.
-\begin{itemize}
- \item \cs{NewDocumentCommand} will issue an error if \meta{cmd}
-   has already been defined.
- \item \cs{RenewDocumentCommand} will issue an error if \meta{cmd}
-   has not previously been defined.
- \item \cs{ProvideDocumentCommand} creates a new definition for
-   \meta{function} only if one has not already been given.
- \item \cs{DeclareDocumentCommand} will always create the new
-   definition, irrespective of any existing \meta{cmd} with the
-   same name.  This should be used sparingly.
-\end{itemize}
-
-If the \meta{cmd} can't be provided as a single token but needs
-\enquote{constructing}, you can use \cs{ExpandArgs} as explained in
-Section~\ref{sec:preconstructing-csnames} which also gives an example
-in which this is needed.
-
-\begin{decl}
-  |\NewDocumentEnvironment|     \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\
-  |\RenewDocumentEnvironment|   \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\
-  |\ProvideDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\
-  |\DeclareDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code}
-\end{decl}
-These commands work in the same way as \cs{NewDocumentCommand}, etc.\@, but
-create environments (\cs{begin}\arg{env} \ldots{}
-\cs{end}\arg{env}). Both the \meta{beg-code} and \meta{end-code}
-may access the arguments as defined by \meta{arg spec}. The arguments will be
-given following \cs{begin}\arg{env}.
-
-\subsection{Optional arguments}
-\label{sec:cmd:opt}
-
-In contrast to commands created using \LaTeXe{}'s \cs{newcommand}, optional
-arguments created using \cs{NewDocumentCommand} may safely be nested. Thus for
-example, following
-\begin{verbatim}
-\NewDocumentCommand\foo{om}{I grabbed `#1' and `#2'}
-\NewDocumentCommand\baz{o}{#1-#1}
-\end{verbatim}
-using the command as
-\begin{verbatim}
-\foo[\baz[stuff]]{more stuff}
-\end{verbatim}
-will print
-\begin{quote}
-I grabbed `stuff-stuff' and `more stuff'
-\end{quote}
-This is particularly useful when placing a command with an optional argument
-\emph{inside} the optional argument of a second command.
-
-When an optional argument is followed by a mandatory argument with the same
-delimiter, the parser issues a warning because the optional argument could not
-be omitted by the user, thus becoming in effect mandatory. This can apply to
-\texttt{o}, \texttt{d}, \texttt{O}, \texttt{D}, \texttt{s}, \texttt{t},
-\texttt{e}, and \texttt{E} type arguments followed by \texttt{r} or
-\texttt{R}-type required arguments.
-
-The default for \texttt{O}, \texttt{D} and \texttt{E} arguments can be
-the result of grabbing another argument. Thus for example
-\begin{verbatim}
-  \NewDocumentCommand\foo{O{#2} m}
-\end{verbatim}
-would use the mandatory argument as the default for the leading optional
-one.
-
-\subsection{Spacing and optional arguments}
-\label{sec:cmd:opt-space}
-
-\TeX{} will find the first argument after a function name irrespective of any
-intervening spaces. This is true for both mandatory and optional arguments. So
-|\foo[arg]| and \verb*|\foo [arg]| are equivalent. Spaces are also ignored when
-collecting arguments up to the last mandatory argument to be collected (as it
-must exist). So after
-\begin{verbatim}
-  \NewDocumentCommand\foo{m o m}{ ... }
-\end{verbatim}
-the user input |\foo{arg1}[arg2]{arg3}| and \verb*|\foo{arg1} [arg2] {arg3}|
-will both be parsed in the same way.
-
-The behavior of optional arguments \emph{after} any mandatory arguments is
-selectable. The standard settings will allow spaces here, and thus with
-\begin{verbatim}
-  \NewDocumentCommand\foobar{m o}{ ... }
-\end{verbatim}
-both |\foobar{arg1}[arg2]| and \verb*|\foobar{arg1} [arg2]| will find an
-optional argument. This can be changed by giving the modified |!| in the
-argument specification:
-\begin{verbatim}
-  \NewDocumentCommand\foobar{m !o}{ ... }
-\end{verbatim}
-where \verb*|\foobar{arg1} [arg2]| will not find an optional argument.
-
-There is one subtlety here due to the difference in handling by \TeX{} of
-`control symbols', where the command name is made up of a single
-character, such as `\texttt{\textbackslash\textbackslash}'.
-Spaces are not ignored by \TeX{} here,
-and thus it is possible to require an optional argument directly follow such a
-command. The most common example is the use of \texttt{\textbackslash\textbackslash}
-in \pkg{amsmath} environments, which in the terms here would be defined as
-\begin{verbatim}
-  \NewDocumentCommand\\{!s !o}{ ... }
-\end{verbatim}
-
-\subsection{`Embellishments'}
-\label{sec:cmd:embellishment}
-
-The \texttt{E}-type argument allows one default value per test token. This is
-achieved by giving a list of defaults for each entry in the list, for example:
-\begin{verbatim}
-  E{^_}{{UP}{DOWN}}
-\end{verbatim}
-If the list of default values is \emph{shorter} than the list of test tokens,
-the special |-NoValue-| marker will be returned (as for the \texttt{e}-type
-argument). Thus for example
-\begin{verbatim}
-  E{^_}{{UP}}
-\end{verbatim}
-has default \texttt{UP} for the |^| test character, but will return the
-|-NoValue-| marker as a default for |_|. This allows mixing of explicit
-defaults with testing for missing values.
-
-
-\subsection{Testing special values}
-\label{sec:cmd:special}
-
-Optional arguments make use of dedicated variables to return information about
-the nature of the argument received.
-
-
-
-\begin{decl}
-  |\IfNoValueTF| \arg{arg} \arg{true code} \arg{false code} \\
-  |\IfNoValueT|  \arg{arg} \arg{true code} \\
-  |\IfNoValueF|  \arg{arg} \arg{false code}
-\end{decl}
-The \cs{IfNoValue(TF)} tests are used to check if \meta{argument} (|#1|,
-|#2|, \emph{etc.}) is the special |-NoValue-| marker. For example
-\begin{verbatim}
-  \NewDocumentCommand\foo{o m}
-    {%
-      \IfNoValueTF {#1}%
-        {\DoSomethingJustWithMandatoryArgument{#2}}%
-        {\DoSomethingWithBothArguments{#1}{#2}}%
-    }
-\end{verbatim}
-will use a different internal function if the optional argument
-is given than if it is not present.
-
-Note that three tests are available, depending on which outcome
-branches are required: \cs{IfNoValueTF}, \cs{IfNoValueT} and
-\cs{IfNoValueF}.
-
-As the \cs{IfNoValue(TF)} tests are expandable, it is possible to
-test these values later, for example at the point of typesetting or
-in an expansion context.
-
-It is important to note that |-NoValue-| is constructed such that it
-will \emph{not} match the simple text input |-NoValue-|, i.e.~that
-\begin{verbatim}
-  \IfNoValueTF{-NoValue-}
-\end{verbatim}
-will be logically \texttt{false}.
-When two optional arguments follow each other (a syntax we typically
-discourage), it can make sense to allow users of the command to
-specify only the second argument by providing an empty first
-argument.
-\NEWdescription{2022/06/01}
-Rather than testing separately for emptiness and for
-|-NoValue-| it is then best to use the argument type~|O| with an
-empty default value, and then test for emptiness using the
-conditional \cs{IfBlankTF} (described below) instead.
-
-\begin{decl}
-  |\IfValueTF| \arg{arg} \arg{true code} \arg{false code} \\
-  |\IfValueT|  \arg{arg} \arg{true code} \\
-  |\IfValueF|  \arg{arg} \arg{false code}
-\end{decl}
-The reverse form of the \cs{IfNoValue(TF)} tests are also available
-as \cs{IfValue(TF)}. The context will determine which logical
-form makes the most sense for a given code scenario.
-
-
-
-
-
-\begin{decl}[2022/06/01]
-  |\IfBlankTF| \arg{arg} \arg{true code} \arg{false code} \\
-  |\IfBlankT|  \arg{arg} \arg{true code} \\
-  |\IfBlankF|  \arg{arg} \arg{false code}
-\end{decl}
-
-
-The \cs{IfNoValueTF} command chooses the \meta{true code} if the optional argument has not
-been used at all (and it returns the special \texttt{-NoValue-}
-marker), but not if it has been given an empty value. In contrast
-\cs{IfBlankTF} returns true if its argument is either truly empty or
-only contains one or more normal blanks.
-For example
-\begin{verbatim}
-\NewDocumentCommand\foo{m!o}{\par #1:
-   \IfNoValueTF{#2}{No optional}%
-                   {\IfBlankTF{#2}{Blanks in or empty}%
-                                  {Real content in}}%
-                    \space argument!}
-\foo{1}[bar] \foo{2}[  ] \foo{3}[] \foo{4}[\space] \foo{5} [x]
-\end{verbatim}
-results
-in the following output:
-\begin{quote}
-  \NewDocumentCommand\foo{m!o}{\par #1:
-    \IfNoValueTF{#2}{No optional}%
-                {\IfBlankTF{#2}{Blanks in or empty}%
-                  {Real content in}}%
-                \space argument!}
-  \foo{1}[bar] \foo{2}[  ] \foo{3}[] \foo{4}[\space] \foo{5} [x]
-\end{quote}
-  
-Note that the \cs{space} in (4) is considered real content---because it is
-a command and not a \enquote{space} character---even though it results
-in producing a space. You can also observe in (5) the effect of the
-\texttt{!} specifier, preventing the last \cs{foo}
-from interpreting \texttt{[x]} as its optional argument.
-
-
-
-
-\begin{decl}
-  |\BooleanFalse|  \\
-  |\BooleanTrue|
-\end{decl}
-The \texttt{true} and \texttt{false} flags set when searching for
-an optional character (using \texttt{s} or \texttt{t\meta{char}}) have
-names which are accessible outside of code blocks.
-
-\begin{decl}
-  |\IfBooleanTF| \arg{arg} \arg{true code} \arg{false code} \\
-  |\IfBooleanT|  \arg{arg} \arg{true code} \\
-  |\IfBooleanF|  \arg{arg} \arg{false code}
-\end{decl}
-Used to test if \meta{argument} (|#1|, |#2|, \emph{etc.}) is
-\cs{BooleanTrue} or \cs{BooleanFalse}. For example
-\begin{verbatim}
-  \NewDocumentCommand\foo{sm}
-    {%
-      \IfBooleanTF {#1}%
-        {\DoSomethingWithStar{#2}}%
-        {\DoSomethingWithoutStar{#2}}%
-    }
-\end{verbatim}
-checks for a star as the first argument, then chooses the action to
-take based on this information.
-
-\subsection{Argument processors}
-\label{sec:cmd:processors}
-
-Argument processor are applied to an argument \emph{after} it has been grabbed
-by the underlying system but before it is passed to \meta{code}. An argument
-processor can therefore be used to regularize input at an early stage, allowing
-the internal functions to be completely independent of input form. Processors
-are applied to user input and to default values for optional arguments, but
-\emph{not} to the special |-NoValue-| marker.
-
-Each argument processor is specified by the syntax \texttt{>}\marg{processor}
-in the argument specification. Processors are applied from right to left, so
-that
-\begin{verbatim}
-  >{\ProcessorB} >{\ProcessorA} m
-\end{verbatim}
-would apply \cs{ProcessorA} followed by \cs{ProcessorB} to the tokens grabbed
-by the \texttt{m} argument.
-
-\begin{decl}
-  |\SplitArgument| \arg{number} \arg{token(s)}
-\end{decl}
-This processor splits the argument given at each occurrence of the
-\meta{tokens} up to a maximum of \meta{number} tokens (thus
-dividing the input into $\text{\meta{number}} + 1$ parts).
-An error is given if too many \meta{tokens} are present in the
-input. The processed input is placed inside
-$\text{\meta{number}} + 1$ sets of braces for further use.
-If there are fewer than \arg{number} of \arg{tokens} in the argument
-then |-NoValue-| markers are added at the end of the processed
-argument.
-\begin{verbatim}
-  \NewDocumentCommand \foo {>{\SplitArgument{2}{;}} m}
-    {\InternalFunctionOfThreeArguments#1}
-\end{verbatim}
-If only a single character \meta{token} is used for the split, any
-category code $13$ (active) character matching the \meta{token} will
-be replaced before the split takes place.
-Spaces are trimmed at each end of each item parsed.
-
-The \texttt{E} argument type is somewhat special, because with a single
-\texttt{E} in the command declaration you may end up with several
-arguments in a command (one formal argument per embellishment token).
-Therefore, when an argument processor is applied to an \texttt{E}-type
-argument, all the arguments pass through that processor before being fed
-to the \meta{code}.  For example, this command
-\begin{verbatim}
-  \NewDocumentCommand \foo { >{\TrimSpaces} e{_^} }
-    { [#1](#2) }
-\end{verbatim}
-applies \cs{TrimSpaces} to both arguments.
-
-\begin{decl}
-  |\SplitList| \arg{token(s)}
-\end{decl}
-This processor splits the argument given at each occurrence of the
-\meta{token(s)} where the number of items is not fixed. Each item is
-then wrapped in braces within |#1|. The result is that the
-processed argument can be further processed using a mapping function
-(see below).
-\begin{verbatim}
-  \NewDocumentCommand \foo {>{\SplitList{;}} m}
-    {\MappingFunction#1}
-\end{verbatim}
-If only a single character \meta{token} is used for the split, any
-category code $13$ (active) character matching the \meta{token} will
-be replaced before the split takes place.
-Spaces are trimmed at each end of each item parsed.
-
-\begin{decl}
-  |\ProcessList| \arg{list} \arg{function}
-\end{decl}
-To support \cs{SplitList}, the function \cs{ProcessList} is available
-to apply a \meta{function} to every entry in a \meta{list}. The
-\meta{function} should absorb one argument: the list entry. For example
-\begin{verbatim}
-  \NewDocumentCommand \foo {>{\SplitList{;}} m}
-    {\ProcessList{#1}{\SomeDocumentCommand}}
-\end{verbatim}
-
-\begin{decl}
-  |\ReverseBoolean|
-\end{decl}
-This processor reverses the logic of \cs{BooleanTrue} and
-\cs{BooleanFalse}, so that the example from earlier would become
-\begin{verbatim}
-  \NewDocumentCommand\foo{>{\ReverseBoolean} s m}
-   {%
-      \IfBooleanTF#1%
-        {\DoSomethingWithoutStar{#2}}%
-        {\DoSomethingWithStar{#2}}%
-    }
-\end{verbatim}
-
-\begin{decl}
-  |\TrimSpaces|
-\end{decl}
-Removes any leading and trailing spaces (tokens with character code~$32$
-and category code~$10$) for the ends of the argument. Thus for example
-declaring a function
-\begin{verbatim}
-  \NewDocumentCommand\foo {>{\TrimSpaces} m}
-    {\showtokens{#1}}
-\end{verbatim}
-and using it in a document as
-\begin{flushleft}
-  \verb=  =\verb*=\foo{ hello world }=
-\end{flushleft}
-will show `\verb*=hello world=' at the terminal, with the space at each
-end removed. \cs{TrimSpaces} will remove multiple spaces from the ends of
-the input in cases where these have been included such that the standard
-\TeX{} conversion of multiple spaces to a single space does not apply.
-
-\subsection{Body of an environment}
-\label{sec:cmd:body}
-
-While environments |\begin|\marg{environment}\ \dots{}\,|\end|\marg{environment}
-are typically used in cases where the code implementing the \meta{environment}
-does not need to access the contents of the environment (its `body'),
-it is sometimes useful to have the body as a standard argument.
-
-This is achieved by ending the argument specification with~\texttt{b}, which is
-a dedicated argument type for this situation. For instance
-\begin{verbatim}
-  \NewDocumentEnvironment{twice} {O{\ttfamily} +b}
-    {#2#1#2} {}
-\end{verbatim}
-\begin{verbatim}
-  \begin{twice}[\itshape]
-    Hello world!
-  \end{twice}
-\end{verbatim}
-typesets `Hello world!{\itshape Hello world!}'.
-
-The prefix |+| is used to allow multiple paragraphs in the environment's body.
-Argument processors can also be applied to \texttt{b}~arguments. By default,
-spaces are trimmed at both ends of the body: in the example there would
-otherwise be spaces coming from the ends the lines after |[\itshape]| and
-|world!|. Putting the prefix |!| before \texttt{b} suppresses space-trimming.
-
-When \texttt{b} is used in the argument specification, the last
-argument of the environment declaration (e.g.,
-\cs{NewDocumentEnvironment}), which consists of an \meta{end code} to
-insert at |\end|\marg{environment}, is redundant since one can simply
-put that code at the end of the \meta{start code}. Nevertheless this
-(empty) \meta{end code} must be provided.
-
-Environments that use this feature can be nested.
-
-\subsection{Fully-expandable document commands}
-
-Document commands created using \cs{NewDocumentCommand}, etc.\@, are normally
-created so that they do not expand unexpectedly. This is done using engine
-features, so is more powerful than \LaTeXe{}'s \cs{protect} mechanism. There
-are \emph{very rare} occasion when it may be useful to create functions using a
-expansion-only grabber. This imposes a number of restrictions on the
-nature of the arguments accepted by a function, and the code it implements.
-This facility should only be used when \emph{absolutely necessary}.
-
-\begin{decl}
-  |\NewExpandableDocumentCommand|     \arg{cmd} \arg{arg spec} \arg{code} \\
-  |\RenewExpandableDocumentCommand|   \arg{cmd} \arg{arg spec} \arg{code} \\
-  |\ProvideExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\
-  |\DeclareExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code}
-\end{decl}
-This family of commands is used to create a document-level \meta{function},
-which will grab its arguments in a fully-expandable manner. The
-argument specification for the function is given by \meta{arg spec},
-and the function will execute \meta{code}. In  general, \meta{code} will
-also be fully expandable, although it is possible that this will
-not be the case (for example, a function for use in a table might
-expand so that \cs{omit} is the first non-expandable non-space token).
-
-Parsing arguments by pure expansion imposes a number of restrictions on
-both the type of arguments that can be read and the error checking
-available:
-\begin{itemize}
-  \item The last argument (if any are present) must be one of the
-    mandatory types \texttt{m}, \texttt{r} or \texttt{R}.
-  \item The `verbatim' argument type \texttt{v} is not available.
-  \item Argument processors (using \texttt{>}) are not available.
-  \item It is not possible to differentiate between, for example
-    |\foo[| and |\foo{[}|: in both cases the \texttt{[} will be
-    interpreted as the start of an optional argument. As a
-    result, checking for optional arguments is less robust than
-    in the standard version.
-\end{itemize}
-
-\subsection{Details about argument delimiters}
-
-In normal (non-expandable) commands, the delimited types look for the
-initial delimiter by peeking ahead (using \pkg{expl3}'s |\peek_...|
-functions) looking for the delimiter token.  The token has to have the
-same meaning and `shape' of the token defined as delimiter.
-There are three possible cases of delimiters: character tokens, control
-sequence tokens, and active character tokens.  For all practical purposes
-of this description, active character tokens will behave exactly as
-control sequence tokens.
-
-\subsubsection{Character tokens}
-
-A character token is characterized by its character code, and its meaning
-is the category code~(|\catcode|).  When a command is defined, the meaning
-of the character token is fixed into the definition of the command and
-cannot change.  A command will correctly see an argument delimiter if
-the open delimiter has the same character and category codes as at the
-time of the definition.  For example in:
-\begin{verbatim}
-  \NewDocumentCommand { \foobar } { D<>{default} } {(#1)}
-\end{verbatim}
-\begin{verbatim}
-  \foobar <hello> \par
-  \char_set_catcode_letter:N <
-  \foobar <hello>
-\end{verbatim}
-the output would be:
-\begin{verbatim}
-  (hello)
-  (default)<hello>
-\end{verbatim}
-as the open-delimiter |<| changed in meaning between the two calls to
-|\foobar|, so the second one doesn't see the |<| as a valid delimiter.
-Commands assume that if a valid open-delimiter was found, a matching
-close-delimiter will also be there.  If it is not (either by being
-omitted or by changing in meaning), a low-level \TeX{} error is raised
-and the command call is aborted.
-
-\subsubsection{Control sequence tokens}
-
-A control sequence (or control character) token is characterized by is
-its name, and its meaning is its definition.
-A token cannot have two different meanings at the same time.
-When a control sequence is defined as delimiter in a command,
-it will be detected as delimiter whenever the control sequence name
-is found in the document regardless of its current definition.
-For example in:
-\begin{verbatim}
-  \cs_set:Npn \x { abc }
-  \NewDocumentCommand { \foobar } { D\x\y{default} } {(#1)}
-  \foobar \x hello\y \par
-  \cs_set:Npn \x { def }
-  \foobar \x hello\y
-\end{verbatim}
-the output would be:
-\begin{verbatim}
-  (hello)
-  (hello)
-\end{verbatim}
-with both calls to the command seeing the delimiter |\x|.
-
-\subsection{Creating new argument processors}
-
-\begin{decl}
-  |\ProcessedArgument|
-\end{decl}
-Argument processors allow manipulation of a grabbed argument before it is
-passed to the underlying code. New processor implementations may be created
-as functions which take one trailing argument, and which leave their result in
-the \cs{ProcessedArgument} variable. For example, \cs{ReverseBoolean} is
-defined as
-\begin{verbatim}
-\ExplSyntaxOn
-  \cs_new_protected:Npn \ReverseBoolean #1
-    {
-      \bool_if:NTF #1
-        { \tl_set:Nn \ProcessedArgument { \c_false_bool } }
-        { \tl_set:Nn \ProcessedArgument { \c_true_bool } }
-    }
-\ExplSyntaxOff
-\end{verbatim}
-[As an aside: the code is written in \pkg{expl3}, so we don't have to
-  worry about spaces creeping into the definition.]
-
-\subsection{Access to the argument specification}
-
-The argument specifications for document commands and environments are
-available for examination and use.
-
-\begin{decl}
-  |\GetDocumentCommandArgSpec| \arg{function}         \\
-  |\GetDocumentEnvironmentArgSpec| \arg{environment}
-\end{decl}
-These functions transfer the current argument specification for the
-requested \meta{function} or \meta{environment} into the token list
-variable \cs{ArgumentSpecification}. If the \meta{function} or
-\meta{environment} has no known argument specification then an error
-is issued. The assignment to \cs{ArgumentSpecification} is local to
-the current \TeX{} group.
-
-\begin{decl}
-  |\ShowDocumentCommandArgSpec| \arg{function}         \\
-  |\ShowDocumentEnvironmentArgSpec| \arg{environment}
-\end{decl}
-These functions show the current argument specification for the
-requested \meta{function} or \meta{environment} at the terminal. If
-the \meta{function} or \meta{environment} has no known argument
-specification then an error is issued.
-
-
-
-\section{Copying and showing (robust) commands}
-
-If you want to (slightly) alter an existing command you may want to
-save the current definition under a new name and then use that in a
-new definition. If the existing command is robust, then the old trick of
-using the low-level \cs{let} for this doesn't work, because it only
-copies the top-level definition, but not the part that actually does
-the work. As most \LaTeX{} commands are nowadays robust, \LaTeX{}
-now offers some high-level declarations for this instead.
-
-However, please note that it is usually better to make use of
-available hooks (e.g., the generic command or environment hooks),
-instead of copying the current definition and thereby freezing it; see
-the hook management documentation \texttt{lthooks-doc.pdf} for
-details.
-
-\begin{decl}
-  |\NewCommandCopy|       \arg{cmd} \arg{existing-cmd} \\
-  |\RenewCommandCopy|     \arg{cmd} \arg{existing-cmd} \\
-  |\DeclareCommandCopy|   \arg{cmd} \arg{existing-cmd}
-\end{decl}
-
-This copies the definition of \meta{existing-cmd} to \meta{cmd}. After
-this \meta{existing-cmd} can be redefined and \meta{cmd}
-still works! This allows you to then provide a new definition for
-\meta{existing-cmd} that makes use of \meta{cmd} (i.e., of its old
-definition). For example, after
-\begin{verbatim}
-  \NewCommandCopy\LaTeXorig\LaTeX
-  \RenewDocumentCommand\LaTeX{}{\textcolor{blue}{\LaTeXorig}}
-\end{verbatim}
-all \LaTeX{} logos generated with \cs{LaTeX} will come out in blue
-(assuming you have a color package loaded).
-
-The differences between \cs{New...} and \cs{Renew...} are as
-elsewhere: i.e., you get an error depending on whether or not
-\meta{cmd} already exists, or in case of \cs{Declare...} it is copied
-regardless. Note that there is no \cs{Provide...} declaration, because
-that would be of limited value.
-
-
-If the \meta{cmd} or \meta{existing-cmd} can't be provided as a single
-token but need \enquote{constructing}, you can use \cs{ExpandArgs}
-as explained in
-Section~\ref{sec:preconstructing-csnames}.
-
-
-
-
-\begin{decl}
-  |\ShowCommand|       \arg{cmd}
-\end{decl}
-
-This displays the meaning of the \meta{cmd} on the terminal and then
-stops (just like the primitive \cs{show}). The difference is that it
-correctly shows the meaning of more complex commands, e.g., in case of
-robust commands it displays not only the top-level definition but
-also the actual payload code and in case of commands declared with
-\cs{NewDocumentCommand}, etc.\ it also gives you detailed information
-about the argument signature.
-
-
-\section[Preconstructing command names \\ (or otherwise expanding arguments)]
-        {Preconstructing command names (or otherwise expanding arguments)}
-\label{sec:preconstructing-csnames}
-
-When declaring new commands with \cs{NewDocumentCommand} or
-\cs{NewCommandCopy} or similar, it is sometimes necessary to
-``construct'' the csname. As a general mechanism the L3 programming
-layer has \cs{exp_args:N...} for this, but there is no mechanism for
-it if \cs{ExplSyntaxOn} is not active (and mixing programming and user
-interface level commands is not a good approach anyhow). We therefore
-offer a mechanism to access this ability using CamelCase naming.
-
-\begin{decl}
-  |\UseName|  \arg{string} \\
-  |\ExpandArgs| \arg{spec} \arg{cmd} \arg{arg1} \dots
-\end{decl}
-
-\cs{UseName} turns the \meta{string} directly into a csname and
-then executes it: this is equivalent to the long-standing
-\LaTeXe{} internal command \cs{@nameuse}, or the L3 programming
-equivalent \cs{use:c}. \cs{ExpandArgs} takes a \meta{spec} which
-describes how to expand the \meta{arguments}, carries out these
-operations then executes the \meta{cmd}. The \meta{spec} uses
-the descriptions offered by the L3 programming layer, and the
-relevant \cs{exp_args:N...} function must exist. Common cases will
-have a \meta{spec} of \texttt{c}, \texttt{cc} or \texttt{Nc}: see below.
-
-As an example, the following declaration provides a method to generate
-copyedit commands:
-\begin{verbatim}
-\NewDocumentCommand\newcopyedit{mO{red}}
-  {\newcounter{todo#1}%
-   \ExpandArgs{c}\NewDocumentCommand{#1}{s m}%
-     {\stepcounter{todo#1}%
-      \IfBooleanTF {##1}%
-         {\todo[color=#2!10]{\UseName{thetodo#1}: ##2}}%
-         {\todo[inline,color=#2!10]{\UseName{thetodo#1}: ##2}}%
-     }%
-  }
-\end{verbatim}
-Given that declaration you can then write
-\verb/\newcopyedit{note}[blue]/ which defines the command \cs{note}
-and the corresponding counter for you.
-
-A second example is to copy a command by string name using
-\cs{NewCommandCopy}: here we might need to construct both command
-names.
-\begin{verbatim}
-\NewDocumentCommand\savebyname{m}
-  {\ExpandArgs{cc}\NewCommandCopy{saved#1}{#1}}
-\end{verbatim}
-
-In the \meta{spec} each \texttt{c} stands for one argument that is
-turned into a `\texttt{c}'ommand. An \texttt{n} represents a
-`\texttt{n}'ormal argument that is not altered and \texttt{N} stands for
-a `\texttt{N}'ormal argument which is also left unchanged, but one
-consisting only of a single token (and usually unbraced). Thus, to
-construct a command from a string only for the second argument of
-\cs{NewCommandCopy} you would write
-\begin{verbatim}
-\ExpandArgs{Nc}\NewCommandCopy\mysectionctr{c at section}
-\end{verbatim}
-There are several other single letters supported in the L3 programming
-layer that \emph{could} be used in the \meta{spec} to manipulate
-arguments in other ways.  If you are interested, take a look at the
-\enquote{Argument expansion} section in the L3 programming layer
-documentation in \texttt{interface3.pdf}.
-
-
-
-\section{Expandable floating point (and other) calculations}
-
-The \LaTeX3 programming layer which is part of the format offers a
-rich interface to manipulate floating point variables and values. To
-allow for (simpler) applications to use this on document-level or in
-packages otherwise not making use of the L3 programming layer a few
-interface commands are made available.
-
-
-\begin{decl}
-  |\fpeval| \arg{floating point expression}
-\end{decl}
-
-The expandable command \cs{fpeval} takes as its argument a floating
-point expression and produces a result using the normal rules of
-mathematics. As this command is expandable it can be used where \TeX{}
-requires a number and for example within a low-level \cs{edef} operation
-to give a purely numerical result.
-
-
-
-Briefly, the floating point expressions may comprise:
-\begin{itemize}
-  \item Basic arithmetic: addition $x\fpbin{+}y$, subtraction $x\fpbin{-}y$,
-    multiplication $x\fpbin{*}y$, division $x\fpbin{/}y$, square root~$\sqrt{x}$,
-    and parentheses.
-  \item Comparison operators: $x\fprel{<}y$,
-    $x\fprel{<=}y$, $x\fprel{>?}y$,
-    $x\fprel{!=}y$ \emph{etc.}
-  \item Boolean logic: sign $\fpop{sign} x$,
-    negation $\fpop{!}x$, conjunction
-    $x\fprel{\&\&}y$, disjunction $x\fprel{\string|\string|}y$, ternary
-    operator $x\fprel{?}y\fprel{:}z$.
-  \item Exponentials: $\fpop{exp} x$, $\fpop{ln} x$, $x\mathord{\texttt{\^{}}}y$.
-  \item Integer factorial: $\fpop{fact} x$.
-  \item Trigonometry: $\fpop{sin} x$, $\fpop{cos} x$, $\fpop{tan} x$, $\fpop{cot} x$, $\fpop{sec}
-    x$, $\fpop{csc} x$ expecting their arguments in radians, and
-    $\fpop{sind} x$, $\fpop{cosd} x$,
-    $\fpop{tand} x$, $\fpop{cotd} x$,
-    $\fpop{secd} x$, $\fpop{cscd} x$ expecting their
-    arguments in degrees.
-  \item Inverse trigonometric functions: $\fpop{asin} x$,
-    $\fpop{acos} x$, $\fpop{atan} x$,
-    $\fpop{acot} x$, $\fpop{asec} x$,
-    $\fpop{acsc} x$ giving a result in radians, and
-    $\fpop{asind} x$, $\fpop{acosd} x$,
-    $\fpop{atand} x$, $\fpop{acotd} x$,
-    $\fpop{asecd} x$, $\fpop{acscd} x$ giving a result
-    in degrees.
-  \item Extrema: $\fpop{max}(x_{1},x_{2},\ldots)$, $\fpop{min}(x_{1},x_{2},\ldots)$,
-    $\fpop{abs}(x)$.
-  \item Rounding functions, controlled by two optional
-    values,  $n$ (number of places, $0$ by default) and
-      $t$ (behavior on a tie, $\nan$ by default):
-    \begin{itemize}
-    \item $\fpop{trunc}(x,n)$ rounds towards zero,
-    \item $\fpop{floor}(x,n)$ rounds towards~$-\infty$,
-    \item $\fpop{ceil}(x,n)$ rounds towards~$+\infty$,
-    \item $\fpop{round}(x,n,t)$ rounds to the closest value, with
-    ties rounded to an even value by default, towards zero if $t=0$,
-    towards $+\infty$ if $t>0$ and towards $-\infty$ if $t<0$.
-    \end{itemize}
-  \item Random numbers: $\fpop{rand}()$, $\fpop{randint}(m,n)$.
-  \item Constants: \texttt{pi}, \texttt{deg} (one degree in radians).
-  \item Dimensions, automatically expressed in points, \emph{e.g.},
-    \texttt{pc} is~$12$.
-  \item Automatic conversion (no need for \cs{number}) of
-    integer, dimension, and skip variables to floating points numbers,
-    expressing dimensions in points and ignoring the stretch and
-    shrink components of skips.
-  \item Tuples: $(x_1,\ldots{},x_n)$ that can be added together,
-    multiplied or divided by a floating point number, and nested.
-\end{itemize}
-
-An example of use could be the following:
-\begin{verbatim}
-  \LaTeX{} can now compute: $ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3}
-  = \fpeval{sin(3.5)/2 + 2e-3} $.
-\end{verbatim}
-which produces the following output:
-\begin{quote}
-  \LaTeX{} can now compute: $ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3}
-  = \fpeval{sin(3.5)/2 + 2e-3} $.
-\end{quote}
-
-\begin{decl}
-  |\inteval| \arg{integer expression}
-\end{decl}
-
-  The expandable command \cs{inteval} takes as its argument an integer
-  expression and produces a result using the normal rules of
-  mathematics with some restrictions, see below. The operations
-  recognized are |+|, |-|, |*| and |/| plus parentheses.  As this
-  command is expandable it can be used where \TeX{} requires a number
-  and for example within a low-level \cs{edef} operation to give a
-  purely numerical result.
-
-  This is basically a thin wrapper for the primitive \cs{numexpr}
-  command and therefore has some syntax restrictions. These are:
-  \begin{itemize}
-  \item \texttt{/} denotes division rounded to the closest integer with
-    ties rounded away from zero;
-  \item there is an error and the overall expression evaluates to zero
-    whenever the absolute value of any intermediate result exceeds
-    $2^{31}-1$, except in the case of scaling operations
-    $a$\texttt{*}$b$\texttt{/}$c$, for which $a$\texttt{*}$b$ may be
-    arbitrarily large;
-  \item parentheses may not appear after unary \texttt{+} or
-    \texttt{-}, namely placing \texttt{+(} or \texttt{-(} at the start
-    of an expression or after \texttt{+}, \texttt{-}, \texttt{*},
-    \texttt{/} or~\texttt{(} leads to an error.
-  \end{itemize}
-
-An example of use could be the following.
-\begin{verbatim}
-\LaTeX{} can now compute: The sum of the numbers is $\inteval{1 + 2 + 3}$.
-\end{verbatim}
-which results in
-\enquote{\LaTeX{} can now compute: The sum of the numbers is $\inteval{1 + 2 + 3}$.}
-
-
-\begin{decl}
-  |\dimeval| \arg{dimen expression} \qquad
-  |\skipeval| \arg{skip expression}
-\end{decl}
-
-Similar to \cs{inteval} but computing a length (\texttt{dimen}) or a
-rubber length (\texttt{skip}) value. Both are thin wrappers around
-the corresponding engine primitives, which makes them fast, but
-therefore shows the same syntax peculiars as discussed
-above. Nevertheless, in practice they are usually sufficient.  For
-example
-\begin{verbatim}
-\newcommand\calulateheight[1]{%
-  \setlength\textheight{\dimeval{\topskip+\baselineskip*\inteval{#1-1}}}}
-\end{verbatim}
-sets the \cs{textheight} to the appropriate value if a page should
-hold a specific number of text lines. Thus after |\calulateheight{40}|
-it is set to \dimeval{\topskip+\baselineskip*\inteval{40-1}}, given
-the values \cs{topskip} (\dimeval{\topskip}) and \cs{baselineskip}
-(\dimeval{\baselineskip}) in the current document.
-
-\section{Case changing}
-
-\TeX{} provides two primitives \cs{uppercase} and \cs{lowercase} for changing
-the case of text. However, these have a range of limitations: they only change
-the case of explicit characters, do not account for the surrounding context, do
-not support UTF-8 input with 8-bit engines, etc. To overcome this problem,
-\LaTeX{} provides the commands \cs{MakeUppercase}, \cs{MakeLowercase} and
-\cs{MakeTitlecase}: these offer significant enhancement over the \TeX{}
-primitives. These commands are engine-robust (\cs{protected}), and so
-can be used in moving arguments.
-
-Upper- and lower-casing are well-understood in general conversation.
-Titlecasing here follows the definition given by the Unicode Consortium: the
-first character of the input will be converted to (broadly) uppercase, and the
-rest of the input to lowercase. The full range of Unicode UTF-8 input can be
-supported, with the proviso that at present the characters set up with 8-bit
-engines match those available in standard input encodings (|T1|, |T2|, |LGR|).
-\begin{quotation}
-  \begin{tabular}{rl}
-    |\MakeUppercase{hello WORLD ßüé}| & \MakeUppercase{hello WORLD ßüé} \\
-    |\MakeLowercase{hello WORLD ßüé}| & \MakeLowercase{hello WORLD ßüé} \\
-    |\MakeTitlecase{hello WORLD ßüé}| & \MakeTitlecase{hello WORLD ßüé} \\
-  \end{tabular}
-\end{quotation}
-
-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
-are the arguments to the commands \cs{label}, \cs{ref}, \cs{cite}, \cs{begin}
-and \cs{end}. Additional exclusions can be added using the command
-\cs{AddToNoCaseChangeList}. Input can be excluded from case changing using the
-command \cs{NoCaseChange}.
-\begin{quotation}
-  \begin{tabular}{rl}
-    |\MakeUppercase{Some text $y = mx + c$}|
-      & \MakeUppercase{Some text $y = mx + c$} \\
-    |\MakeUppercase{\NoCaseChange{iPhone}}|
-      & \MakeLowercase{\NoCaseChange{iPhone}} \\
-  \end{tabular}
-\end{quotation}
-
-To allow robust commands to be used within case changing \emph{and} to produce
-the expected output, two additional control commands are available.
-\cs{CaseSwitch} allows the user to specify the result for the four possible
-cases
-\begin{itemize}
-  \item No case changing
-  \item Uppercasing
-  \item Lowercasing
-  \item Titlecasing (only applies for the start of the input)
-\end{itemize}
-The command \cs{DeclareCaseChangeEquivalent} provides a way to substitute a
-command by an alternative version when it is found inside a case changing
-situation.
-
-\end{document}

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

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

Modified: trunk/Master/texmf-dist/doc/latex/firstaid/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/firstaid/changes.txt	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/firstaid/changes.txt	2022-11-01 19:57:17 UTC (rev 64892)
@@ -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/firstaid/latex2e-first-aid-for-external-files.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/graphics/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/graphics/README.md	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/graphics/README.md	2022-11-01 19:57:17 UTC (rev 64892)
@@ -1,7 +1,7 @@
 The LaTeX `graphics` bundle
 ===========================
 
-Release 2022-06-01
+Release 2022-11-01
 
 Overview
 --------

Modified: trunk/Master/texmf-dist/doc/latex/graphics/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/graphics/changes.txt	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/graphics/changes.txt	2022-11-01 19:57:17 UTC (rev 64892)
@@ -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/graphics/color.pdf
===================================================================
(Binary files differ)

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

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

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

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

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

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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex/latex-lab/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/latex-lab/README.md	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/latex-lab/README.md	2022-11-01 19:57:17 UTC (rev 64892)
@@ -1,6 +1,6 @@
 # LaTeX laboratory
 
-Release 2022-06-01 pre-release 4
+Release 2022-11-01
 
 ## Overview
 

Modified: trunk/Master/texmf-dist/doc/latex/latex-lab/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/latex-lab/changes.txt	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/latex-lab/changes.txt	2022-11-01 19:57:17 UTC (rev 64892)
@@ -1,3 +1,8 @@
+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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex/tools/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tools/README.md	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/tools/README.md	2022-11-01 19:57:17 UTC (rev 64892)
@@ -1,7 +1,7 @@
 The LaTeX `tools` bundle
 ========================
 
-Release 2022-06-01
+Release 2022-11-01
 
 Overview
 --------

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex/tools/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tools/changes.txt	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/doc/latex/tools/changes.txt	2022-11-01 19:57:17 UTC (rev 64892)
@@ -10,6 +10,16 @@
 ================================================================================
 
 #########################
+# 2022-11-01 Release
+#########################
+
+2022-09-04  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* array.dtx (section{The macros \texttt{\textbackslash @classz}):
+	Test against \strutbox height to determine if an m-cell contains
+	 only a single line (gh/766)
+
+#########################
 # 2022-06-01 Release
 #########################
 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/source/latex/base/classes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/classes.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/base/classes.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -53,7 +53,7 @@
 %<*driver>
 \ProvidesFile{classes.drv}
 %</driver>
-              [2021/10/04 v1.4n
+              [2022/07/02 v1.4n
 %<article|report|book> Standard LaTeX document class]
 %<10pt|11pt|12pt>      Standard LaTeX file (size option)]
 %    \end{macrocode}
@@ -2538,7 +2538,7 @@
 %    The macro above uses |\@makechapterhead|\meta{text} to format the
 %    heading of the chapter.
 %
-%    We begin by leaving some white space. The we open a group in
+%    We begin by leaving some white space. Then we open a group in
 %    which we have a paragraph indent of 0pt, and in which we have the
 %    text set ragged right. We also reset the font.
 % \changes{v1.3c}{1995/05/25}{replace \cs{reset at font} with

Modified: trunk/Master/texmf-dist/source/latex/base/cmfonts.fdd
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/cmfonts.fdd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/base/cmfonts.fdd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright 1993-2019
+% Copyright 1993-2022
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -67,7 +67,7 @@
 %<*driver,  >
              \ProvidesFile{cmfonts.drv}
 %</driver,  >
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 %
 %<*driver>
 \documentclass{ltxdoc}
@@ -261,13 +261,13 @@
 %    (thanks to Christian Cornelssen)}
 %    \begin{macrocode}
 %<*new|ec>
-%<*!tt>
+%<*!tt&!T1cmss>
 \providecommand{\EC at family}[5]{%
   \DeclareFontShape{#1}{#2}{#3}{#4}%
   {<5><6><7><8><9><10><10.95><12><14.4>%
 %<ec>   <17.28><20.74><24.88><29.86><35.83>genb*#5}{}}
 %<!ec>   <17.28><20.74><24.88>genb*#5}{}}
-%</!tt>
+%</!tt&!T1cmss>
 %    \end{macrocode}
 % For monospaced fonts, the normal interpolation breaks down below
 % 8pt, so scale the 8pt fonts instead.
@@ -282,6 +282,21 @@
 %<ec>  <35.83>genb*#5}{}}
 %<!ec>  <9><10><10.95><12><14.4><17.28><20.74><24.88>genb*#5}{}}
 %</tt>
+%    \end{macrocode}
+% \changes{v2.5l}{2022/07/10}%
+%         {Avoid ec ss fonts at design size 5, 6, 7. gh/879}
+% For ec cmss fonts avoid the small design sizes which have incorrect
+% definitions.
+% (Medium weight bolder and wider than bold extended for 5pt and 6pt,
+% 7pt does not have expected contrast. Scale 8pt, matching |fix-cm|).
+% gh/879
+%    \begin{macrocode}
+%<*T1cmss>
+\providecommand{\EC at ssfamily}[5]{%
+  \DeclareFontShape{#1}{#2}{#3}{#4}%
+  {<5><6><7><8>#50800%
+   <9><10><10.95><12><14.4><17.28><20.74><24.88><29.86><35.83>genb*#5}{}}
+%</T1cmss>
 %</new|ec>
 %    \end{macrocode}
 %
@@ -375,6 +390,8 @@
 % \changes{v2.5a}{1997/01/14}
 %      {EC fonts}
 % \changes{v2.5d}{1997/06/02}{bold sc fonts latex/2497}
+% \changes{v2.5k}{2022/06/10}{add support for slanted small caps github/782}
+%
 %    \begin{macrocode}
 %<*ec>
 \EC at family{T1}{cmr}{m}{n}{ecrm}
@@ -387,6 +404,9 @@
 \EC at family{T1}{cmr}{bx}{sl}{ecbl}
 \EC at family{T1}{cmr}{bx}{sc}{ecxc}
 \EC at family{T1}{cmr}{m}{ui}{ecui}
+\EC at family{T1}{cmr}{m}{scsl}{ecsc}
+\EC at family{T1}{cmr}{bx}{scsl}{ecoc}
+\EC at family{T1}{cmr}{b}{scsl}{ecoc}
 %</ec>
 %</T1cmr>
 %    \end{macrocode}
@@ -489,12 +509,12 @@
 %      {EC fonts}
 %    \begin{macrocode}
 %<*ec>
-\EC at family{T1}{cmss}{m}{n}{ecss}
-\EC at family{T1}{cmss}{m}{sl}{ecsi}
-\EC at family{T1}{cmss}{m}{it}{ecsi}
-\EC at family{T1}{cmss}{bx}{n}{ecsx}
-\EC at family{T1}{cmss}{bx}{it}{ecso}
-\EC at family{T1}{cmss}{bx}{sl}{ecso}
+\EC at ssfamily{T1}{cmss}{m}{n}{ecss}
+\EC at ssfamily{T1}{cmss}{m}{sl}{ecsi}
+\EC at ssfamily{T1}{cmss}{m}{it}{ecsi}
+\EC at ssfamily{T1}{cmss}{bx}{n}{ecsx}
+\EC at ssfamily{T1}{cmss}{bx}{it}{ecso}
+\EC at ssfamily{T1}{cmss}{bx}{sl}{ecso}
 %</ec>
 %    \end{macrocode}
 %    The next substitution is very questionable.

Modified: trunk/Master/texmf-dist/source/latex/base/doc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/doc.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/base/doc.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -45,7 +45,7 @@
 %<+package>
 %<+package>\ProvidesPackage{doc}
 %<+shortvrb>\ProvidesPackage{shortvrb}
-%<+package|shortvrb>  [2022/06/08 v3.0j
+%<+package|shortvrb>  [2022/07/03 v3.0k
 %<+package|shortvrb>   Standard LaTeX documentation package V3 (FMi)]
 %\catcode`\<=12
 %
@@ -260,8 +260,8 @@
 % \begin{abstract}
 %    Roughly 30 years ago (version 1.0 was dated 1988/05/05) I wrote
 %    the first version of the \DOC package, a package to provide code
-%    documentation for \TeX{} code. Since then it has be used all over
-%    the place to document the \LaTeX{} kernel and most of the
+%    documentation for \TeX{} code. Since then it has been used all
+%    over the place to document the \LaTeX{} kernel and most of the
 %    packages that are nowadays available. The core code of version 2
 %    (which is the current version) exists since 1998, i.e., for 20
 %    years.
@@ -1909,113 +1909,39 @@
 %    should be altered further.
 %    \fmi{cleanup replacement of kvoptions}
 %
-%    \begin{macrocode}
-\ExplSyntaxOn
-%    \end{macrocode}
 % Some keys are available as options for use in \cs{usepackage} some are
 % for the generated item \api's:
-% \fmi{cleanup documentation (and code once the new key interface is there)}
-%    \begin{macrocode}
-\newif \ifdoc at noprint
-\newif \ifdoc at noindex
-\newif \ifdoc at hyperref \doc at hyperreftrue
-\newif \ifdoc at multicol \doc at multicoltrue
-\newif \ifdoc at debugshow
-\newif \ifdoc at reportchangedates
-\keys_define:nn {doc}
-  {
-    noprint  .choice:,
-    noprint / true  .code:n = { \legacy_if_set_true:n  { doc at noprint } },
-    noprint / false .code:n = { \legacy_if_set_false:n { doc at noprint } },
-    noprint  .default:n = { true },
-    noindex  .choice:,
-    noindex / true  .code:n = { \legacy_if_set_true:n  { doc at noindex } },
-    noindex / false .code:n = { \legacy_if_set_false:n { doc at noindex } },
-    noindex  .default:n = { true },
-    hyperref  .choice:,
-    hyperref / true  .code:n = { \legacy_if_set_true:n  { doc at hyperref } },
-    hyperref / false .code:n = { \legacy_if_set_false:n { doc at hyperref } },
-    hyperref  .default:n = { true },
-%    \end{macrocode}
+% \changes{v3.0k}{2022/06/22}{Use \cs{DeclareKeys}}
 % \changes{v3.0h}{2022/06/01}{fix choice key name (gh/750)}
-%    \begin{macrocode}
-    nohyperref  .choice:,
-    nohyperref / true  .code:n = { \legacy_if_set_false:n  { doc at hyperref } },
-    nohyperref / false .code:n = { \legacy_if_set_true:n { doc at hyperref } },
-    nohyperref  .default:n = { true },
-    multicol  .choice:,
-    multicol / true  .code:n = { \legacy_if_set_true:n  { doc at multicol } },
-    multicol / false .code:n = { \legacy_if_set_false:n { doc at multicol } },
-    multicol  .default:n = { true },
-    nomulticol  .choice:,
-    nomulticol / true  .code:n = { \legacy_if_set_false:n  { doc at multicol } },
-    nomulticol / false .code:n = { \legacy_if_set_true:n { doc at multicol } },
-%    \end{macrocode}
 % \changes{v3.0h}{2022/06/01}{fix default key name (gh/750)}
 %    \begin{macrocode}
-    nomulticol  .default:n = { true },
-    debugshow  .choice:,
-    debugshow / true  .code:n = { \legacy_if_set_true:n  { doc at debugshow } },
-    debugshow / false .code:n = { \legacy_if_set_false:n { doc at debugshow } },
-    debugshow  .default:n = { true },
-    reportchangedates  .choice:,
-    reportchangedates / true  .code:n = { \legacy_if_set_true:n  { doc at reportchangedates } },
-    reportchangedates / false .code:n = { \legacy_if_set_false:n { doc at reportchangedates } },
-    reportchangedates  .default:n = { true },
-  }
-%    \end{macrocode}
-% This one is for \cs{usepackage} and \cs{NewDocElement}:
-%    \begin{macrocode}
-\newif \ifdoc at toplevel \doc at topleveltrue
-\keys_define:nn {doc}
+\DeclareKeys
   {
-    toplevel  .choice:,
-    toplevel / true  .code:n = { \legacy_if_set_true:n  { doc at toplevel } },
-    toplevel / false .code:n = { \legacy_if_set_false:n { doc at toplevel } },
-    toplevel  .default:n = { true },
-    notoplevel  .choice:,
-    notoplevel / true  .code:n = { \legacy_if_set_false:n  { doc at toplevel } },
-    notoplevel / false .code:n = { \legacy_if_set_true:n { doc at toplevel } },
-    notoplevel  .default:n = { true }
+    noprint           .if    = {doc at noprint},
+    noindex           .if    = {doc at noindex},
+    hyperref          .if    = {doc at hyperref},
+    nohyperref        .ifnot = {doc at hyperref},
+    multicol          .if    = {doc at multicol},
+    nomulticol        .ifnot = {doc at multicol},
+    debugshow         .if    = {doc at debugshow},
+    reportchangedates .if    = {doc at reportchangedates},
+    toplevel          .if    = {doc at toplevel},
+    notoplevel        .ifnot = {doc at toplevel},
+    macrolike         .if    = {doc at macrolike},
+    envlike           .ifnot = {doc at macrolike},
+    idxtype           .store = \doc at idxtype,
+    idxgroup          .store = \doc at idxgroup,
+    printtype         .store = \doc at printtype,
+    outer             .if    = {doc at outer},
   }
 %    \end{macrocode}
-% These are for \cs{NewDocElement}:
+%
+% Setting these options to true initially.
 %    \begin{macrocode}
-\newif \ifdoc at macrolike
-\keys_define:nn {doc}
-  {
-    macrolike  .choice:,
-    macrolike / true  .code:n = { \legacy_if_set_true:n  { doc at macrolike } },
-    macrolike / false .code:n = { \legacy_if_set_false:n { doc at macrolike } },
-    macrolike  .default:n = { true },
-    envlike  .choice:,
-    envlike / true  .code:n = { \legacy_if_set_false:n  { doc at macrolike } },
-    envlike / false .code:n = { \legacy_if_set_true:n { doc at macrolike } },
-    envlike  .default:n = { true }
-  }
-
-\keys_define:nn { doc }
-  {
-    idxtype  .tl_set:N = \doc at idxtype,
-    idxgroup .tl_set:N = \doc at idxgroup,
-    printtype .tl_set:N = \doc at printtype
-  }
+\doc at hyperreftrue
+\doc at multicoltrue
+\doc at topleveltrue
 %    \end{macrocode}
-% And this one only for instances of doc elements in the document, it
-%    covers the case where you want to document a macro which is
-%    declared to be \cs{outer}. This is not a concept officially
-%    supported by \LaTeX{} but there are cases when it gets used.
-%    \begin{macrocode}
-\newif\ifdoc at outer
-\keys_define:nn {doc}
-  {
-    outer  .choice:,
-    outer / true  .code:n = { \legacy_if_set_true:n  { doc at outer } },
-    outer / false .code:n = { \legacy_if_set_false:n { doc at outer } },
-    outer  .default:n = { true },
-  }
-\ExplSyntaxOff
-%    \end{macrocode}
 %
 % \subsection{Processing the package keys}
 %

Modified: trunk/Master/texmf-dist/source/latex/base/docstrip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/docstrip.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/base/docstrip.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -29,9 +29,9 @@
 \catcode`\{=1
 \catcode`\}=2
 \def\filename{docstrip.dtx}
-\def\fileversion{v2.6a}
-\def\filedate{2020-11-23}
-\def\docdate {2020-11-23}
+\def\fileversion{v2.6b}
+\def\filedate{2022-09-03}
+\def\docdate {2022-09-03}
 %%
 %
 %\iffalse
@@ -42,7 +42,7 @@
 %%                         Frank Mittelbach
 %% Copyright (C) 1995 Marcin Woli\'nski
 %% Copyright (C) 1996-1997 Mark Wooding, Marcin Woli\'nski
-%% Copyright (C) 1998-2021 LaTeX Project and the above authors.
+%% Copyright (C) 1998-2022 LaTeX Project and the above authors.
 %% All rights are reserved.
 %%
 %
@@ -2537,12 +2537,16 @@
 %    |\plusOption| is called. This macro is very similar to
 %    |\doOption|, the only difference being that displayed
 %    message now contains `\texttt{+}'.
+% \changes{v2.6b}{2022-09-03}{Complete the handling of @@-modules from
+%    \texttt{l3docstrip.dtx} (gh/337) also for +/- lines (gh/903)} 
 %    \begin{macrocode}
 \def\plusOption+#1>#2\endLine{%
   \maybeMsg{<+#1 . >}%
   \Evaluate{#1}%
   \def\do##1##2##3{%
-    \if1\Expr{##2}\StreamPut##1{#2}\fi
+    \if1\Expr{##2}%
+      \def\inLine{#2}\replaceModuleInLine
+      \StreamPut##1{\inLine}\fi
     }%
   \activefiles
   }
@@ -2553,12 +2557,16 @@
 %    When a `\texttt{-}' is found as a guard modifier,
 %    |\minusOption| is called. This macro is very similar to
 %    |\plusOption|, the difference is that condition is negated.
+% \changes{v2.6b}{2022-09-03}{Complete the handling of @@-modules from
+%    \texttt{l3docstrip.dtx} (gh/337) also for +/- lines (gh/903)} 
 %    \begin{macrocode}
 \def\minusOption-#1>#2\endLine{%
   \maybeMsg{<-#1 . >}%
   \Evaluate{#1}%
   \def\do##1##2##3{%
-    \if1\Expr{##2}\else \StreamPut##1{#2}\fi
+    \if1\Expr{##2}\else
+      \def\inLine{#2}\replaceModuleInLine
+      \StreamPut##1{\inLine}\fi
     }%
   \activefiles
   }

Modified: trunk/Master/texmf-dist/source/latex/base/ltboxes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltboxes.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/base/ltboxes.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltboxes.dtx}
-             [2022/01/31 v1.4c LaTeX Kernel (Box Commands)]
+             [2022/09/07 v1.4d LaTeX Kernel (Box Commands)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltboxes.dtx}
@@ -1004,6 +1004,16 @@
 %    \end{macrocode}
 % \end{macro}
 %
+%  \begin{macro}{\if at in@minipage at env}
+%    
+% \changes{v1.4d}{2022/09/07}
+%         {Check for nested minipages and warn (gh/168)}
+%    \begin{macrocode}
+\newif\if at in@minipage at env
+%    \end{macrocode}
+%  \end{macro}
+%
+%
 % \begin{macro}{\minipage}
 % \changes{v0.1a}{1993/12/03}
 %         {Redefined to support extra optional arguments}
@@ -1060,6 +1070,28 @@
     \color at begingroup
       \hsize\@tempdima
       \textwidth\hsize \columnwidth\hsize
+%    \end{macrocode}
+%    We check for nested minipages inside the box so that there is
+%    always a group resetting the switch even if the code does not use
+%    \cs{begin} to start the minipage.
+% \changes{v1.4d}{2022/09/07}
+%         {Check for nested minipages and warn (gh/168)}
+%    \begin{macrocode}
+      \if at in@minipage at env
+%    \end{macrocode}
+%    We only issue a warning if the outer minipage contained footnotes
+%    because that is the problematical case.
+%    \begin{macrocode}
+        \ifvoid\@mpfootins\else
+          \@latex at warning{Nested minipage:
+            footnotes may be misplaced}%
+        \fi
+      \else
+        \@in at minipage@envtrue
+      \fi
+%    \end{macrocode}
+%
+%    \begin{macrocode}
       \@parboxrestore
       \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c at mpfootnote\z@
       \let\@footnotetext\@mpfootnotetext

Modified: trunk/Master/texmf-dist/source/latex/base/ltclass.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltclass.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/base/ltclass.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -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/base/ltcmd.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltcmd.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/base/ltcmd.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -34,8 +34,8 @@
 %%% From File: ltcmd.dtx
 %
 %    \begin{macrocode}
-\def\ltcmdversion{v1.0l}
-\def\ltcmddate{2022-03-18}
+\def\ltcmdversion{v1.1a}
+\def\ltcmddate{2022-08-16}
 %    \end{macrocode}
 %
 %<*driver>
@@ -247,6 +247,15 @@
 %    \end{macrocode}
 % \end{variable}
 %
+% \begin{variable}{\l_@@_suppress_strip_bool}
+% \changes{v1.1a}{2022/08/10}{New switch}
+%   Used to indicate that an a pair of braces should not be stripped from
+%   an optional argument.
+%    \begin{macrocode}
+\bool_new:N \l_@@_suppress_strip_bool
+%    \end{macrocode}
+% \end{variable}
+%
 % \begin{variable}{\l_@@_m_args_int}
 %   The number of \texttt{m} arguments: if this is the same as the total
 %   number of arguments, then a short-cut can be taken in the creation of
@@ -315,6 +324,19 @@
 %    \end{macrocode}
 % \end{variable}
 %
+% \begin{variable}{\q_@@_recursion_tail,\q_@@_recursion_stop}
+% \begin{macro}{\@@_if_recursion_tail_stop_do:Nn}
+% \begin{macro}{\@@_use_i_delimit_by_q_recursion_stop:nw}
+%   Quarks and functions for internal processing.
+%    \begin{macrocode}
+\quark_new:N \q_@@_recursion_tail
+\quark_new:N \q_@@_recursion_stop
+\__kernel_quark_new_test:N \@@_if_recursion_tail_stop_do:Nn
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{variable}
+%
 % \begin{variable}{\l_@@_tmp_prop, \l_@@_tmpa_tl, \l_@@_tmpb_tl}
 % \begin{macro}{\@@_tmp:w}
 %   Scratch space.
@@ -874,7 +896,7 @@
 %   \item Check that each argument has the correct number of data items
 %     associated with it, and that where a single character is required,
 %     one has actually been supplied.
-%   \item Check that processors and the markers~|+| and~|!| are followed
+%   \item Check that processors and the markers~|+|, |!| and~|=| are followed
 %     by an argument for which they make sense, and are not redundant.
 %   \item Check the absence of forbidden types for expandable commands,
 %     namely \texttt{G}/\texttt{v} always, and \texttt{l}/\texttt{u}
@@ -918,6 +940,7 @@
     \bool_set_true:N \l_@@_grab_expandably_bool
     \bool_set_false:N \l_@@_obey_spaces_bool
     \bool_set_false:N \l_@@_long_bool
+    \bool_set_false:N \l_@@_suppress_strip_bool
     \bool_set_false:N \l_@@_some_obey_spaces_bool
     \bool_set_false:N \l_@@_some_long_bool
     \bool_set_false:N \l_@@_some_short_bool
@@ -1020,7 +1043,11 @@
 %     \@@_normalize_type_>:w,
 %     \@@_normalize_type_+:w,
 %     \@@_normalize_type_!:w,
+%     \@@_normalize_type_=:w
 %   }
+% \changes{v1.1a}{2022/08/10}{Refactor to use common auxiliary}
+% \changes{v1.1a}{2022/08/10}{Add support for \texttt{=} modifier}
+% \begin{macro}{\@@_normalize_type_aux:NnNn}
 %   Check that these prefixes have arguments, namely that the next token
 %   is not \cs{q_recursion_tail}, and remember to leave it after the
 %   looping macro.  Processors are forbidden in expandable commands.
@@ -1044,33 +1071,52 @@
   }
 \cs_new_protected:cpn { @@_normalize_type_+:w } #1
   {
-    \quark_if_recursion_tail_stop_do:nn {#1} { \@@_bad_arg_spec:wn }
-    \bool_if:NT \l_@@_long_bool
+    \@@_normalize_type_aux:NnNn + {#1}
+      \l_@@_long_bool
+      { \bool_set_true:N \l_@@_long_bool }
+  }
+\cs_new_protected:cpn { @@_normalize_type_!:w } #1
+  {
+    \@@_normalize_type_aux:NnNn ! {#1}
+      \l_@@_obey_spaces_bool
       {
-        \msg_error:nnxx { cmd } { two-markers }
-          { \@@_environment_or_command: } { + }
-        \@@_bad_def:wn
+        \bool_set_true:N \l_@@_obey_spaces_bool
+        \bool_set_true:N \l_@@_some_obey_spaces_bool
       }
-    \bool_set_true:N \l_@@_long_bool
-    \int_decr:N \l_@@_current_arg_int
-    \@@_normalize_arg_spec_loop:n {#1}
   }
-\cs_new_protected:cpn { @@_normalize_type_!:w } #1
+\cs_new_protected:cpn { @@_normalize_type_=:w } #1#2
   {
-    \quark_if_recursion_tail_stop_do:nn {#1} { \@@_bad_arg_spec:wn }
-    \bool_if:NT \l_@@_obey_spaces_bool
+    \@@_normalize_type_aux:NnNn = {#2}
+      \l_@@_suppress_strip_bool
       {
+        \bool_if:NT \l_@@_expandable_bool
+          {
+            \msg_error:nnxx { cmd } { keyval-in-expandable }
+              { \iow_char:N \\ \l_@@_function_tl } { \tl_to_str:n {#1} }
+            \@@_bad_def:wn
+          }
+        \bool_set_true:N \l_@@_suppress_strip_bool
+        \bool_set_false:N \l_@@_grab_expandably_bool
+        \tl_put_right:Nx \l_@@_arg_spec_tl
+          { = { \tl_trim_spaces:n {#1} } }
+      }
+  }
+\cs_new_protected:Npn \@@_normalize_type_aux:NnNn #1#2#3#4
+  {
+    \quark_if_recursion_tail_stop_do:nn {#2} { \@@_bad_arg_spec:wn }
+    \bool_if:NT #3
+      {
         \msg_error:nnxx { cmd } { two-markers }
-          { \@@_environment_or_command: } { ! }
+          { \@@_environment_or_command: } { #1 }
         \@@_bad_def:wn
       }
-    \bool_set_true:N \l_@@_obey_spaces_bool
-    \bool_set_true:N \l_@@_some_obey_spaces_bool
+    #4
     \int_decr:N \l_@@_current_arg_int
-    \@@_normalize_arg_spec_loop:n {#1}
+    \@@_normalize_arg_spec_loop:n {#2}
   }
 %    \end{macrocode}
 % \end{macro}
+% \end{macro}
 %
 % \begin{macro}
 %   {
@@ -1224,12 +1270,12 @@
 % \end{macro}
 %
 % \begin{macro}{\@@_allowed_token_check:N}
-%   Some tokens are now allowed as delimiters for some argument types,
+%   Some tokens are not allowed as delimiters for some argument types,
 %   notably implicit begin/end-group tokens (|\bgroup|/|\egroup|).
 %   The major problem with these tokens is that for |\peek_...| functions,
-%   a literal~|{|$_1$. is virtually indistinguishable from a |\bgroup| or
+%   a literal~|{|$_1$ is virtually indistinguishable from a |\bgroup| or
 %   other token which was |\let| to a~|{|$_1$, and the same goes
-%   for~|}|$_2$.  All other tokens can be easily distingushed from their
+%   for~|}|$_2$.  All other tokens can be easily distinguished from their
 %   implicit counterparts by grabbing them and looking at the string
 %   length (see \cs{@@_token_if_cs:NTF}), but for begin/end group tokens
 %   that is not possible without the risk of mistakenly grabbing the
@@ -1324,13 +1370,13 @@
 % \begin{macro}{\@@_add_arg_spec:n, \@@_add_arg_spec_mandatory:n}
 %   When adding an argument to the argument specification, set the
 %   \texttt{some_long} or \texttt{some_short} booleans as appropriate
-%   and clear the booleans keeping track of |+| and |!| markers.
+%   and clear the booleans keeping track of |+|, |!| and |=| markers.
 %   Before that, test for a short argument following some long
 %   arguments: this is forbidden for expandable commands and prevents
 %   grabbing arguments expandably.
 %
 %   For mandatory arguments do some more work, in particular complain if
-%   they were preceeded by~|!|.
+%   they were preceded by~|!|.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_add_arg_spec:n #1
   {
@@ -1387,6 +1433,7 @@
     \int_zero:N \l_@@_current_arg_int
     \bool_set_false:N \l_@@_long_bool
     \bool_set_false:N \l_@@_obey_spaces_bool
+    \bool_set_false:N \l_@@_suppress_strip_bool
     \int_zero:N \l_@@_m_args_int
     \bool_set_false:N \l_@@_defaults_bool
     \tl_clear:N \l_@@_defaults_tl
@@ -1484,6 +1531,23 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\@@_add_type_=:}
+% \changes{v1.1a}{2022/08/10}{Add support for \texttt{=} modifier}
+%   A mix of the ideas from above: set a flag and add a processor.
+%    \begin{macrocode}
+\cs_new_protected:cpn { @@_add_type_=:w } #1
+  {
+    \@@_flush_m_args:
+    \bool_set_true:N \l_@@_prefixed_bool
+    \bool_set_true:N \l_@@_suppress_strip_bool
+    \bool_set_true:N \l_@@_process_some_bool
+    \tl_put_left:Nn \l_@@_process_one_tl
+      { { \@@_arg_to_keyvalue:nn {#1} } }
+    \@@_prepare_signature_bypass:N
+  }
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\@@_add_type_b:w}
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_add_type_b:w
@@ -1677,11 +1741,16 @@
             @@_grab_ #1
             \bool_if:NT \l_@@_long_bool { _long }
             \bool_if:NT \l_@@_obey_spaces_bool { _obey_spaces }
+            \bool_lazy_and:nnT
+              { \l_@@_suppress_strip_bool }
+              { \str_if_eq_p:nn {#1} { D } }
+              { _no_strip }
             :w
           }
       }
     \bool_set_false:N \l_@@_long_bool
     \bool_set_false:N \l_@@_obey_spaces_bool
+    \bool_set_false:N \l_@@_suppress_strip_bool
     \tl_put_right:Nx \l_@@_process_all_tl
       {
         {
@@ -2488,7 +2557,7 @@
     \quark_if_nil:nF {#1}
       { \tl_const:cn { c_@@_show_type_#1_tl } {#2} \@@_tmp:w }
   }
-\@@_tmp:w t0 r1 d1 R2 D2 O3 e4 E5 +6 !6 >7 \q_nil \q_nil
+\@@_tmp:w t0 r1 d1 R2 D2 O3 e4 E5 +6 !6 >7 =7 \q_nil \q_nil
 %    \end{macrocode}
 %
 % \begin{macro}{
@@ -2615,6 +2684,7 @@
 %     \@@_grab_b_aux:NNw,
 %     \@@_grab_b_end:Nw
 %   }
+% \changes{v1.1a}{2022/08/10}{Track changes in \texttt{D}-type implementation}
 %   This uses the well-tested code of \texttt{D}-type arguments,
 %   skipping the peeking step because the \texttt{b}-type argument is
 %   always present, and adding a cleanup stage at the end by hijacking
@@ -2640,7 +2710,7 @@
   { \@@_grab_b_aux:NNw \cs_set_protected:Npn \exp_not:n }
 \cs_new_protected:Npn \@@_grab_b_aux:NNw #1#2#3 \@@_run_code:
   {
-    \@@_grab_D_aux:NNnN \begin \end {#3} #1
+    \@@_grab_D_aux:NNnNN \begin \end {#3} #1 \use_ii:nn
     \tl_put_left:Nn \l_@@_signature_tl { \@@_grab_b_end:Nw #2 }
     \tl_set_eq:NN \l_@@_saved_args_tl \l_@@_args_tl
     \tl_clear:N \l_@@_args_tl
@@ -2660,10 +2730,18 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\@@_grab_D:w}
-% \begin{macro}{\@@_grab_D_long:w}
-% \begin{macro}{\@@_grab_D_obey_spaces:w}
-% \begin{macro}{\@@_grab_D_long_obey_spaces:w}
+% \begin{macro}
+%   {
+%     \@@_grab_D:w                          ,
+%     \@@_grab_D_long:w                     ,
+%     \@@_grab_D_obey_spaces:w              ,
+%     \@@_grab_D_long_obey_spaces:w         ,
+%     \@@_grab_D_no_strip:w                 ,
+%     \@@_grab_D_long_no_strip:w            ,
+%     \@@_grab_D_obey_spaces_no_strip:w     ,
+%     \@@_grab_D_long_obey_spaces_no_strip:w
+%   }
+% \changes{v1.1a}{2022/08/10}{Add support for skipping brace stripping}
 %   The generic delimited argument grabber. The auxiliary function does
 %   a peek test before calling \cs{@@_grab_D_call:Nw}, so that the
 %   optional nature of the argument works as expected.
@@ -2670,27 +2748,51 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_grab_D:w #1#2#3 \@@_run_code:
   {
-    \@@_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected_nopar:Npn
-      \@@_peek_nonspace_remove:NTF
+    \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn
+      \@@_peek_nonspace_remove:NTF \use_ii:nn
   }
 \cs_new_protected:Npn \@@_grab_D_long:w #1#2#3 \@@_run_code:
   {
-    \@@_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected:Npn
-      \@@_peek_nonspace_remove:NTF
+    \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn
+      \@@_peek_nonspace_remove:NTF \use_ii:nn
   }
 \cs_new_protected:Npn \@@_grab_D_obey_spaces:w #1#2#3 \@@_run_code:
   {
-    \@@_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected_nopar:Npn
-      \@@_peek_meaning_remove:NTF
+    \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn
+      \@@_peek_meaning_remove:NTF \use_ii:nn
   }
 \cs_new_protected:Npn \@@_grab_D_long_obey_spaces:w #1#2#3 \@@_run_code:
   {
-    \@@_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected:Npn
-      \@@_peek_meaning_remove:NTF
+    \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn
+      \@@_peek_meaning_remove:NTF \use_ii:nn
   }
+\cs_new_protected:Npn \@@_grab_D_no_strip:w
+  #1#2#3 \@@_run_code:
+  {
+    \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn
+      \@@_peek_nonspace_remove:NTF \use_none:n
+  }
+\cs_new_protected:Npn \@@_grab_D_long_no_strip:w
+  #1#2#3 \@@_run_code:
+  {
+    \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn
+      \@@_peek_nonspace_remove:NTF \use_none:n
+  }
+\cs_new_protected:Npn \@@_grab_D_obey_spaces_no_strip:w
+  #1#2#3 \@@_run_code:
+  {
+    \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn
+      \@@_peek_meaning_remove:NTF \use_none:n
+  }
+\cs_new_protected:Npn \@@_grab_D_long_obey_spaces_no_strip:w
+  #1#2#3 \@@_run_code:
+  {
+    \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn
+      \@@_peek_meaning_remove:NTF \use_none:n
+  }
 %    \end{macrocode}
+% \begin{macro}{\@@_grab_D_aux:NNnNNN}
 % \begin{macro}{\@@_grab_D_aux:NNnNN}
-% \begin{macro}{\@@_grab_D_aux:NNnN}
 %   This is a bit complicated. The idea is that, in order to check for
 %   nested optional argument tokens (\texttt{[[...]]} and so on) the
 %   argument needs to be grabbed without removing any braces at all. If
@@ -2699,9 +2801,9 @@
 %   prevents loss of braces, and there is then a test to see if there are
 %   nested delimiters to handle.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_grab_D_aux:NNnNN #1#2#3#4#5
+\cs_new_protected:Npn \@@_grab_D_aux:NNnNNN #1#2#3#4#5#6
   {
-    \@@_grab_D_aux:NNnN #1#2 {#3} #4
+    \@@_grab_D_aux:NNnNN #1#2 {#3} #4 #6
     #5 #1
       { \@@_grab_D_call:Nw #1 }
       { \@@_add_arg:o \c_novalue_tl }
@@ -2712,9 +2814,10 @@
 %   extra factors to allow for: the argument might be entirely empty, and
 %   spaces at the start and end of the input must be retained around a brace
 %   group. Also notice that a \emph{blank} argument might still contain
-%   spaces.
+%   spaces. To allow for suppression of brace stripping, the business end
+%   is passed here as |#5|.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_grab_D_aux:NNnN #1#2#3#4
+\cs_new_protected:Npn \@@_grab_D_aux:NNnNN #1#2#3#4#5
   {
     \tl_set:Nn \l_@@_signature_tl {#3}
     \exp_after:wN #4 \l_@@_fn_tl ##1 #2
@@ -2728,7 +2831,7 @@
                 \str_if_eq:eeTF
                   { \exp_not:o { \use_none:n ##1 } }
                   { { \exp_not:o { \use_ii:nnn ##1 \q_nil } } }
-                  { \@@_add_arg:o { \use_ii:nn ##1 } }
+                  { \@@_add_arg:o { #5 ##1 } }
                   { \@@_add_arg:o { \use_none:n ##1 } }
               }
           }
@@ -2738,9 +2841,6 @@
 % \end{macro}
 % \end{macro}
 % \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
 %
 % \begin{macro}{\@@_grab_D_nested:NNnN}
 % \begin{macro}{\@@_grab_D_nested:w}
@@ -3039,6 +3139,7 @@
 %
 % \begin{macro}{\@@_grab_R:w, \@@_grab_R_long:w}
 % \begin{macro}{\@@_grab_R_aux:NNnN}
+% \changes{v1.1a}{2022/08/10}{Track changes in \texttt{D}-type implementation}
 %  The grabber for \texttt{R}-type arguments is basically the same as
 %  that for \texttt{D}-type ones, but always skips spaces (as it is mandatory)
 %  and has a hard-coded error message.
@@ -3049,7 +3150,7 @@
   { \@@_grab_R_aux:NNnN #1 #2 {#3} \cs_set_protected:Npn }
 \cs_new_protected:Npn \@@_grab_R_aux:NNnN #1#2#3#4
   {
-    \@@_grab_D_aux:NNnN #1 #2 {#3} #4
+    \@@_grab_D_aux:NNnNN #1 #2 {#3} #4 \use_ii:nn
     \@@_peek_nonspace_remove:NTF #1
       { \@@_grab_D_call:Nw #1 }
       {
@@ -3873,6 +3974,190 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \subsection{Conversion to key--value form}
+%
+% This is implemented as a process but with no public interfaces,
+% hence is treated separately from the others: it's a feature of
+% \pkg{ltcmd} which just happens to use the same mechanism as a processor.
+%
+% \begin{macro}{\@@_arg_to_keyvalue:nn}
+% \changes{v1.1a}{2022/08/10}{New internal arg-to-keyval processor}
+% \begin{macro}{\@@_arg_to_keyvalue_braces:nnn}
+% \begin{macro}{\@@_arg_to_keyvalue_auxi:nnn}
+% \begin{macro}{\@@_arg_to_keyvalue_auxii:Nnnn}
+% \begin{macro}{\@@_arg_to_keyvalue_auxiii:nnn}
+% \begin{macro}{\@@_arg_to_keyvalue_auxiv:Nnnn}
+% \begin{macro}{\@@_arg_to_keyvalue_auxv:nn}
+% \begin{macro}{\@@_arg_to_keyvalue_loop:w}
+% \begin{macro}{\@@_arg_to_keyvalue_loop_group:n}
+% \begin{macro}{\@@_arg_to_keyvalue_loop_space:w}
+% \begin{macro}{\@@_arg_to_keyvalue_loop_N_type:N}
+% \begin{macro}{\@@_arg_to_keyvalue_math:w}
+% \begin{macro}{\@@_arg_to_keyvalue_math_N_type:N}
+% \begin{macro}{\@@_arg_to_keyvalue_math_group:n}
+% \begin{macro}{\@@_arg_to_keyvalue_math_space:w}
+% \begin{macro}{\@@_arg_to_keyvalue_set_default:nn}
+% \begin{macro}{\@@_arg_to_keyvalue_set_keyvalue:nn}
+% \begin{macro}[EXP]{\@@_split_N_head_apply:Nn}
+% \begin{macro}[EXP]{\@@_split_N_head_apply_aux:NNw}
+%   If the entire argument is braced, we treat as free text and return as
+%   the value for the text key. Alternatively, if the start of the input is
+%   |=,| then it is forced to be key--value. To avoid needing to worry about
+%   catcodes for this, and to allow spaces around the |=|, we use a
+%   series of steps rather than a delimited argument.
+%     \begin{macrocode}
+\cs_new_protected:Npn \@@_arg_to_keyvalue:nn #1#2
+  {
+    \tl_trim_spaces_apply:nN {#2} \@@_arg_to_keyvalue_braces:nnn
+      {#1} {#2}
+  }
+\cs_new_protected:Npn \@@_arg_to_keyvalue_braces:nnn #1#2#3
+  {
+    \tl_if_head_is_group:nT {#1}
+      {
+        \tl_if_blank:oT { \use_none:n #1 }
+          {
+            \tl_set:Nx \ProcessedArgument { #2 = { \exp_not:n #1 } }
+            \use_none:nnnn
+          }
+      }
+    \@@_arg_to_keyvalue_auxi:nnn {#1} {#2} {#3}
+  }
+\cs_new:Npn \@@_arg_to_keyvalue_auxi:nnn #1
+  {
+    \tl_if_head_is_N_type:nTF {#1}
+      { \@@_split_N_head_apply:Nn \@@_arg_to_keyvalue_auxii:Nnnn {#1} }
+      { \@@_arg_to_keyvalue_auxv:nn }
+  }
+\cs_new:Npn \@@_arg_to_keyvalue_auxii:Nnnn #1#2
+  {
+    \str_if_eq:eeTF { \exp_not:n {#1} } { = }
+      { \tl_trim_spaces_apply:nN {#2} \@@_arg_to_keyvalue_auxiii:nnn }
+      { \@@_arg_to_keyvalue_auxv:nn }
+  }
+\cs_new:Npn \@@_arg_to_keyvalue_auxiii:nnn #1
+  {
+    \tl_if_head_is_N_type:nTF {#1}
+      { \@@_split_N_head_apply:Nn \@@_arg_to_keyvalue_auxiv:Nnnn {#1} }
+      { \@@_arg_to_keyvalue_auxv:nn }
+  }
+\cs_new:Npn \@@_arg_to_keyvalue_auxiv:Nnnn #1#2
+  {
+    \str_if_eq:eeTF { \exp_not:n {#1} } { , }
+      { \tl_set:Nn \ProcessedArgument {#2} \use_none:nn }
+      { \@@_arg_to_keyvalue_auxv:nn }
+  }
+%    \end{macrocode}
+%   The two clear-cut cases have been eliminated, and we therefore have to deal
+%   with a search for |=| signs. We need an \enquote{action} loop here
+%   so we do not get mislead by for example |{=}|. As the code here is for
+%   very much predictable types of input, we hard-code what constitutes
+%   math mode opening and closing.  At the very beginning, the default
+%   key (|#1|) and the argument as given by the user (|#2|) are placed
+%   right after the \cs{q_@@_recursion_stop}, so that when the recursion
+%   ends, the macros \cs{@@_arg_to_keyvalue_set_default:nn} or
+%   \cs{@@_arg_to_keyvalue_set_keyvalue:nn} can be used to grab these
+%   two items and set the \cs{ProcessedArgument} accordingly.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_arg_to_keyvalue_auxv:nn #1#2
+  {
+    \@@_arg_to_keyvalue_loop:w #2
+      \q_@@_recursion_tail \q_@@_recursion_stop {#1} {#2}
+  }
+\cs_new_protected:Npn \@@_arg_to_keyvalue_loop:w #1 \q_@@_recursion_stop
+  {
+    \tl_if_head_is_N_type:nTF {#1}
+      { \@@_arg_to_keyvalue_loop_N_type:N }
+      {
+        \tl_if_head_is_group:nTF {#1}
+          { \@@_arg_to_keyvalue_loop_group:n }
+          { \@@_arg_to_keyvalue_loop_space:w }
+      }
+        #1 \q_@@_recursion_stop
+  }
+\cs_new_protected:Npn \@@_arg_to_keyvalue_loop_group:n #1
+  { \@@_arg_to_keyvalue_loop:w }
+\use:n { \cs_new_protected:Npn \@@_arg_to_keyvalue_loop_space:w } ~
+  { \@@_arg_to_keyvalue_loop:w }
+\cs_new_protected:Npn \@@_arg_to_keyvalue_loop_N_type:N #1
+  {
+    \@@_if_recursion_tail_stop_do:Nn #1
+      { \@@_arg_to_keyvalue_set_default:nn }
+    \str_if_eq:nnTF {#1} { = }
+      {
+        \@@_use_i_delimit_by_q_recursion_stop:nw
+          { \@@_arg_to_keyvalue_set_keyvalue:nn }
+      }
+      {
+        \bool_lazy_or:nnTF
+            { \token_if_math_toggle_p:N #1 }
+            { \str_if_eq_p:nn {#1} { \( } }
+          { \@@_arg_to_keyvalue_math:w }
+          { \@@_arg_to_keyvalue_loop:w }
+      }
+  }
+\cs_new_protected:Npn \@@_arg_to_keyvalue_math:w #1 \q_@@_recursion_stop
+  {
+    \tl_if_head_is_N_type:nTF {#1}
+      { \@@_arg_to_keyvalue_math_N_type:N }
+      {
+        \tl_if_head_is_group:nTF {#1}
+          { \@@_arg_to_keyvalue_math_group:n }
+          { \@@_arg_to_keyvalue_math_space:w }
+      }
+        #1 \q_@@_recursion_stop
+  }
+\cs_new_protected:Npn \@@_arg_to_keyvalue_math_N_type:N #1
+  {
+    \@@_if_recursion_tail_stop_do:Nn #1
+      { \@@_arg_to_keyvalue_set_default:nn }
+    \bool_lazy_or:nnTF
+        { \token_if_math_toggle_p:N #1 }
+        { \str_if_eq_p:nn {#1} { \) } }
+      { \@@_arg_to_keyvalue_loop:w }
+      { \@@_arg_to_keyvalue_math:w }
+  }
+\cs_new_protected:Npn \@@_arg_to_keyvalue_math_group:n #1
+  { \@@_arg_to_keyvalue_math:w }
+\use:n { \cs_new_protected:Npn \@@_arg_to_keyvalue_math_space:w } ~
+  { \@@_arg_to_keyvalue_math:w }
+\cs_new_protected:Npn \@@_arg_to_keyvalue_set_default:nn #1#2
+  { \tl_set:Nn \ProcessedArgument { #1 = {#2} } }
+\cs_new_protected:Npn \@@_arg_to_keyvalue_set_keyvalue:nn #1#2
+  { \tl_set:Nn \ProcessedArgument {#2} }
+%    \end{macrocode}
+%   A utility to allow us to grab the first \texttt{N}-type token without
+%   risking brace stripping the rest of the input.
+%    \begin{macrocode}
+\cs_new:Npn \@@_split_N_head_apply:Nn #1#2
+  { \exp:w \if_false: { \fi: \@@_split_N_head_apply_aux:NNw #1#2 } }
+\cs_new:Npn \@@_split_N_head_apply_aux:NNw #1#2
+  {
+    \exp_after:wN \exp_end:
+    \exp_after:wN #1 \exp_after:wN #2 \exp_after:wN { \if_false: } \fi:
+  }
+
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
 % \subsection{Access to the argument specification}
 %
 % \begin{macro}{\@@_get_arg_spec_error:N, \@@_get_arg_spec_error:n}
@@ -4372,6 +4657,13 @@
     This~is~only~supported~for~robust~commands,~but~not~for~expandable~ones.
     \c_@@_ignore_def_tl
   }
+\msg_new:nnnn { cmd } { keyval-in-expandable }
+  { Invalid~argument~prefix~'='~in~command~'#1'. }
+  {
+    The~argument~specification~for~'#1'~contains~a~key--value~marker~'={#2}'.~
+    This~is~only~supported~for~robust~commands,~but~not~for~expandable~ones.
+    \c_@@_ignore_def_tl
+  }
 \msg_new:nnnn { cmd } { too-many-args }
   { Too~many~arguments~for~#1. }
   {

Modified: trunk/Master/texmf-dist/source/latex/base/ltdefns.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltdefns.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/base/ltdefns.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -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/base/ltfilehook.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltfilehook.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/base/ltfilehook.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -31,8 +31,8 @@
 %%% From File: ltfilehook.dtx
 %
 %    \begin{macrocode}
-\providecommand\ltfilehookversion{v1.0m}
-\providecommand\ltfilehookdate{2022/04/01}
+\providecommand\ltfilehookversion{v1.0n}
+\providecommand\ltfilehookdate{2022/08/18}
 %    \end{macrocode}
 %
 %<*driver>
@@ -1513,10 +1513,25 @@
   \global\@namedef{@pkg-disable@#1.\@pkgextension}{#2}}
 %    \end{macrocode}
 %
+% \changes{v1.0n}{2022/08/18}{Inhibit checking the loaded version when
+%   package is load-disabled, and write to the .log (gh/888)}
+%   Here we check if a control sequence named
+%   \cs[no-index]{@pkg-disable@\meta{name}.sty} is defined, and if so
+%   don't use the package loading code |#2|, but use the replacement
+%   code stored in that control sequence, write something to the log,
+%   and then prevent \cs{@onefilewithoptions} from sanity-checking the
+%   requested package date (the \tn{expandafter} here triggers one in
+%   \cs{@onefilewithoptions} that ends a conditional there, and the
+%   \tn{@gobbletwo} removes the date checking code from the input
+%   stream).
 %    \begin{macrocode}
 \def\@disable at packageload@do#1#2{%
-  \@ifundefined{@pkg-disable@#1}{#2}%
-     {\@nameuse{@pkg-disable@#1}}}
+  \@ifundefined{@pkg-disable@#1}%
+     {#2}%
+     {\@nameuse{@pkg-disable@#1}%
+      \@latex at info{Package '#1' has been disabled.%
+       \MessageBreak Load request ignored}%
+      \expandafter\@gobbletwo}}
 %    \end{macrocode}
 %
 %   \cs{reenable at package@load} undefines

Modified: trunk/Master/texmf-dist/source/latex/base/ltfinal.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltfinal.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/base/ltfinal.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltfinal.dtx}
-             [2022/07/05 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|.  
@@ -1103,19 +1106,62 @@
 %    In order to get round this, we redefine |\MakeUppercase| and
 % |\MakeLowercase| to grab their argument and brace it. 
 %
-% Earlier versions needed to procsss |\@uclclist| in an |\edef|
+% Earlier versions needed to process |\@uclclist| in an |\edef|
 % to handle legacy input encodings, but recent (2022) expl3 versions
 % handle non-UTF8 text natively so we simply call the |\text_...case:n|
 % 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/base/ltfssdcl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltfssdcl.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/base/ltfssdcl.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -36,7 +36,7 @@
 %
 %
 \ProvidesFile{ltfssdcl.dtx}
-            [2022/07/04 v3.0z LaTeX Kernel (NFSS Declarative Interface)]
+            [2022/09/20 v3.1b LaTeX Kernel (NFSS Declarative Interface)]
 % \iffalse
 \documentclass{ltxdoc}
 \begin{document}
@@ -457,7 +457,7 @@
 %
 %
 %
-%  \begin{macro}{\c at localalphabets}
+%  \begin{macro}{\c at localmathalphabets}
 % \changes{v3.0x}{2021/09/26}{Counter added for (gh/676)}
 %    To avoid hitting the ``no more math fams available'' limit of 16, we
 %    keep a defined number of math alphabets flexible/local. If we have to
@@ -577,119 +577,7 @@
 }
 %    \end{macrocode}
 %
-%
-%
-%  \begin{macro}{\freeze at math@version}
-% \changes{v3.0x}{2021/09/26}{Macro added for (gh/676)}
-%    This command stores the current state of the math version and sets
-%    things up to return to it after each formula from now on. We use
-%    L3 programming layer code to set it up.
 %    \begin{macrocode}
-\ExplSyntaxOn
-\cs_new_protected:Npn\freeze at math@version #1 {
-%    \end{macrocode}
-%    Save the current \cs{mv@\meta{version}} code and the number of
-%    allocated mathgroups inside.
-%    \begin{macrocode}
-  \@font at info{Freeze~ math~ alphabet~ allocation~ in~ version~
-              #1.\MessageBreak
-              Allocated~math~groups:~\int_use:c{ c at mv@ #1 }~ 
-              (local:~  \int_use:N\c at localmathalphabets)      }
-  \cs_gset_eq:cc { mv@#1 at frozen }{ mv@#1 }
-  \tl_gset:cx { g__nfss_frozen_mv_ #1 _tl }{ \int_use:c { c at mv@#1 } }
-%    \end{macrocode}
-%    Doing the reset the first time, we wait until we are out of
-%    math mode, so we use some recursive \cs{group_insert_after:N} for this
-%    before we execute \cs{mv@\meta{version}@reset}.
-%    \begin{macrocode}
-  \group_insert_after:N \__nfss_init_mv_freeze:N
-  \exp_after:wN \group_insert_after:N \cs:w mv@#1 at reset \cs_end:
-%    \end{macrocode}
-%    The \cs{check at mathfonts} is called at the very beginning of each
-%    math formula, so it is a good way to hook in the resetting.
-%    Again that has to happen after the formula has ended, but we know
-%    because of the place where \cs{check at mathfonts} is used
-%    that a single \cs{aftergoup} is sufficient.
-%    \begin{macrocode}
-  \tl_gput_right:No \check at mathfonts 
-       {
-         \exp_after:wN \group_insert_after:N \cs:w mv@#1 at reset \cs_end:
-       }
-%    \end{macrocode}
-%    Here is the definition of \cs{mv@\meta{version}@reset}. If there
-%    has been no new math alphabet allocation, doing a reset would
-%    just cause a lot of unnecessary processing, so we do a quick
-%    check upfront for this.
-%    \begin{macrocode}
-  \cs_gset:cpn{mv@#1 at reset}
-     {
-         \int_compare:nNnTF { \int_use:c{c at mv@#1} } > 
-                            { \tl_use:c{g__nfss_frozen_mv_ #1 _tl} }
-             {
-               \@font at info{Undo~ math~ alphabet~ allocation~ in~ version~ #1}
-%    \end{macrocode}
-%    If the undo is necessary, we restore the \cs{mv@\meta{version}} code.
-%    \begin{macrocode}
-               \cs_gset_eq:cc { mv@#1 }{ mv@#1 at frozen }
-               \int_gset:cn { c at mv@#1 }{ \tl_use:c {g__nfss_frozen_mv_ #1 _tl} }
-%    \end{macrocode}
-%    But we also should undo changes to the math alphabet
-%    definitions. We therefore run this code with a modified
-%    definition for \cs{getanddefine at fonts} because there is no need
-%    to do anything to the symbol fonts that are permanently allocated.
-%    \begin{macrocode}
-               \group_begin:
-                 \cs_set_eq:NN \getanddefine at fonts \use_none:nn
-                 \use:c {mv@#1}
-               \group_end:
-             }
-             {
-%    \end{macrocode}
-%    If there was no change, we report that in the log (but this
-%    branch could go completely).
-%    \begin{macrocode}
-               \@font at info{No~ math~ alphabet~ change~ to~ frozen~ version~ #1}
-             }
-%    \end{macrocode}
-%    If this is executed after a math display, we may have to arrange
-%    for ignoring spaces, because they are now hidden if
-%    the tokens from above intervene. This is signaled by the 2e
-%    switch \texttt{@ignore} which is set in \cs{frozen at everymath} and
-%    \cs{frozen at everydisplay}.
-%
-%    This is all 2e code so we use that syntax.
-% \changes{v3.0z}{2022/07/04}{Ignore spaces if necessary (gh/886)}
-%    \begin{macrocode}
-         \if at ignore \ignorespaces \fi
-    }
-}
-%    \end{macrocode}
-%  \end{macro}
-%
-%
-%  \begin{macro}{\__nfss_init_mv_freeze:N}
-% \changes{v3.0x}{2021/09/26}{Macro added for (gh/676)}
-%    To do the initial freeze in a safe place, we check if we are in
-%    math mode and if so try again after the group has ended by pushing
-%    the command and its  single token argument with two
-%    \cs{group_insert_after:N}s after the current group. If we are no longer in
-%    math mode we bypass the
-%    conditional and so the next token is our argument
-%    which is then finally executed.
-%    \begin{macrocode}
-\cs_new_protected:Npn \__nfss_init_mv_freeze:N #1 {%
-  \mode_if_math:T { \group_insert_after:N \__nfss_init_mv_freeze:N
-                    \group_insert_after:N } #1
-}
-%    \end{macrocode}
-%  \end{macro}
-%
-%
-%    \begin{macrocode}
-\ExplSyntaxOff 
-%    \end{macrocode}
-%
-%    \begin{macrocode}
 %</2ekernel|latexrelease>
 %<latexrelease>\EndIncludeInRelease
 %<latexrelease>\IncludeInRelease{2020/10/01}
@@ -786,8 +674,133 @@
 %<latexrelease>\EndIncludeInRelease
 %<*2ekernel>
 %    \end{macrocode}
-% \end{macro}
+%  \end{macro}
 %
+%
+%
+%
+%  \begin{macro}{\freeze at math@version}
+% \changes{v3.0x}{2021/09/26}{Macro added for (gh/676)}
+% \changes{v3.1a}{2022/09/17}{New logic for freezing math versions (gh/921)}
+%    This command stores the current state of the math version and sets
+%    things up to return to it after each formula from now on. We use
+%    L3 programming layer code to set it up.
+%    \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2022/11/01}%
+%<latexrelease>                 {\freeze at math@version}{freeze math version}%
+\ExplSyntaxOn
+\cs_new_protected:Npn\freeze at math@version #1 {
+%    \end{macrocode}
+%    Save the current \cs{mv@\meta{version}} code and the number of
+%    allocated mathgroups inside.
+%    \begin{macrocode}
+  \@font at info{Freeze~ math~ alphabet~ allocation~ in~ version~
+              #1.\MessageBreak
+              Allocated~math~groups:~\int_use:c{ c at mv@ #1 }~ 
+              (local:~  \int_use:N\c at localmathalphabets)      }
+  \cs_gset_eq:cc { mv@#1 at frozen }{ mv@#1 }
+  \tl_gset:cx { g__nfss_frozen_mv_ #1 _tl }{ \int_use:c { c at mv@#1 } }
+%    \end{macrocode}
+%    Here is the definition of \cs{mv@\meta{version}@reset}. If there
+%    has been no new math alphabet allocation, doing a reset would
+%    just cause a lot of unnecessary processing, so we do a quick
+%    check upfront for this.
+%    \begin{macrocode}
+  \cs_gset:cpn{mv@#1 at reset}
+     {
+         \int_compare:nNnTF { \int_use:c{c at mv@#1} } > 
+                            { \tl_use:c{g__nfss_frozen_mv_ #1 _tl} }
+             {
+               \@font at info{Undo~ math~ alphabet~ allocation~ in~ version~ #1}
+%    \end{macrocode}
+%    If the undo is necessary, we restore the \cs{mv@\meta{version}} code.
+%    \begin{macrocode}
+               \cs_gset_eq:cc { mv@#1 }{ mv@#1 at frozen }
+               \int_gset:cn { c at mv@#1 }{ \tl_use:c {g__nfss_frozen_mv_ #1 _tl} }
+%    \end{macrocode}
+%    But we also should undo changes to the math alphabet
+%    definitions. We therefore run this code with a modified
+%    definition for \cs{getanddefine at fonts} because there is no need
+%    to do anything to the symbol fonts that are permanently allocated.
+%    \begin{macrocode}
+               \group_begin:
+                 \cs_set_eq:NN \getanddefine at fonts \use_none:nn
+                 \use:c {mv@#1}
+               \group_end:
+             }
+             {
+%    \end{macrocode}
+%    If there was no change, we report that in the log (but this
+%    branch could go completely).
+%    \begin{macrocode}
+               \@font at info{No~ math~ alphabet~ change~ to~ frozen~ version~ #1}
+             }
+%    \end{macrocode}
+%    If this is executed after a math display, we may have to arrange
+%    for ignoring spaces, because they are now hidden if
+%    the tokens from above intervene. This is signaled by the 2e
+%    switch \texttt{@ignore} which is set in \cs{frozen at everymath} and
+%    \cs{frozen at everydisplay}.
+%
+%    This is all 2e code so we use that syntax.
+% \changes{v3.0z}{2022/07/04}{Ignore spaces if necessary (gh/886)}
+%    \begin{macrocode}
+         \if at ignore \ignorespaces \fi
+    }
+}
+\ExplSyntaxOff
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{2021/11/15}
+%<latexrelease>                 {\freeze at math@version}{freeze math version}%
+%<latexrelease>
+%<latexrelease>\ExplSyntaxOn
+%<latexrelease>\cs_set_protected:Npn\freeze at math@version #1 {
+%<latexrelease>  \@font at info{Freeze~ math~ alphabet~ allocation~ in~ version~
+%<latexrelease>              #1.\MessageBreak
+%<latexrelease>              Allocated~math~groups:~\int_use:c{ c at mv@ #1 }~
+%<latexrelease>              (local:~  \int_use:N\c at localmathalphabets)      }
+%<latexrelease>  \cs_gset_eq:cc { mv@#1 at frozen }{ mv@#1 }
+%<latexrelease>  \tl_gset:cx { g__nfss_frozen_mv_ #1 _tl }{ \int_use:c { c at mv@#1 } }
+%<latexrelease>  \group_insert_after:N \__nfss_init_mv_freeze:N
+%<latexrelease>  \exp_after:wN \group_insert_after:N \cs:w mv@#1 at reset \cs_end:
+%<latexrelease>  \tl_gput_right:No \check at mathfonts
+%<latexrelease>       {
+%<latexrelease>         \exp_after:wN \group_insert_after:N \cs:w mv@#1 at reset \cs_end:
+%<latexrelease>       }
+%<latexrelease>  \cs_gset:cpn{mv@#1 at reset}
+%<latexrelease>     {
+%<latexrelease>         \int_compare:nNnTF { \int_use:c{c at mv@#1} } >
+%<latexrelease>                            { \tl_use:c{g__nfss_frozen_mv_ #1 _tl} }
+%<latexrelease>             {
+%<latexrelease>               \@font at info{Undo~ math~ alphabet~ allocation~ in~ version~ #1}
+%<latexrelease>               \cs_gset_eq:cc { mv@#1 }{ mv@#1 at frozen }
+%<latexrelease>               \int_gset:cn { c at mv@#1 }{ \tl_use:c {g__nfss_frozen_mv_ #1 _tl} }
+%<latexrelease>               \group_begin:
+%<latexrelease>                 \cs_set_eq:NN \getanddefine at fonts \use_none:nn
+%<latexrelease>                 \use:c {mv@#1}
+%<latexrelease>               \group_end:
+%<latexrelease>             }
+%<latexrelease>             {
+%<latexrelease>               \@font at info{No~ math~ alphabet~ change~ to~ frozen~ version~ #1}
+%<latexrelease>             }
+%<latexrelease>         \if at ignore \ignorespaces \fi
+%<latexrelease>    }
+%<latexrelease>}
+%<latexrelease>\cs_set_protected:Npn \__nfss_init_mv_freeze:N #1 {%
+%<latexrelease>  \mode_if_math:T { \group_insert_after:N \__nfss_init_mv_freeze:N
+%<latexrelease>                    \group_insert_after:N } #1
+%<latexrelease>}
+%<latexrelease>\ExplSyntaxOff
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+%    \end{macrocode}
+%  \end{macro}
+%
+%
 % \begin{macro}{\process at table}
 %    \begin{macrocode}
 \def\process at table{%
@@ -868,7 +881,7 @@
 %    \begin{macrocode}
 %</2ekernel>
 %<*2ekernel|latexrelease>
-%<latexrelease>\IncludeInRelease{2021/11/15}%
+%<latexrelease>\IncludeInRelease{2022/11/01}%
 %<latexrelease>                 {\DeclareMathVersion}{local alphabets}%
 \def\DeclareMathVersion#1{%
 %    \end{macrocode}
@@ -881,6 +894,21 @@
 %    \begin{macrocode}
   \@namedef{g__nfss_frozen_mv_#1_tl}{}%
 %    \end{macrocode}
+%    We also extend \cs{check at mathfonts} to call a version reset (once
+%    frozen) after a formula has finished.
+% \changes{v3.1a}{2022/09/17}{New logic for freezing math versions (gh/921)}
+%    \begin{macrocode}
+  \expandafter\ifx\csname mv@#1\endcsname \relax
+    \expandafter \g at addto@macro \expandafter \check at mathfonts
+         \expandafter {\expandafter \aftergroup \csname mv@#1 at reset\endcsname}%
+%    \end{macrocode}
+%    Initially this macro does nothing. It is, however, important that
+%    it doesn't stop any \cs{ignorespaces}, so we make it expandable
+%    and not \cs{relax}.
+%    \begin{macrocode}
+    \@namedef{mv@#1 at reset}{}%
+  \fi
+%    \end{macrocode}
 %
 %    \begin{macrocode}
   \expandafter\new at mathversion\csname mv@#1\endcsname}
@@ -890,6 +918,12 @@
 %    \end{macrocode}
 %    
 %    \begin{macrocode}
+%<latexrelease>\IncludeInRelease{2021/11/15}%
+%<latexrelease>                 {\DeclareMathVersion}{local alphabets}%
+%<latexrelease>\def\DeclareMathVersion#1{%
+%<latexrelease>  \@namedef{g__nfss_frozen_mv_#1_tl}{}%
+%<latexrelease>  \expandafter\new at mathversion\csname mv@#1\endcsname}
+%<latexrelease>\EndIncludeInRelease
 %<latexrelease>\IncludeInRelease{0000/00/00}%
 %<latexrelease>                 {\DeclareMathVersion}{local alphabets}%
 %<latexrelease>\def\DeclareMathVersion#1{%
@@ -963,8 +997,24 @@
 % \end{macro}
 %
 % \begin{macro}{\DeclareSymbolFont}
+%    First drop any surplus \texttt{m} from the series argument then
+%    do what has been done since 1994.
+% \changes{v3.1b}{2022/09/20}{Drop any surplus 'm' in series argument (gh/918)}
 %    \begin{macrocode}
-\def\DeclareSymbolFont#1#2#3#4#5{%
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2022/11/01}%
+%<latexrelease>                 {\DeclareSymbolFont}{maybe drop m}%
+\def\DeclareSymbolFont #1#2#3#4#5{%
+ \def\reserved at a{\DeclareSymbolFont at m@dropped{#1}{#2}{#3}}%
+ \edef\reserved at b{#4}%
+ \series at maybe@drop at one@m\reserved at b\reserved at b
+ \expandafter\reserved at a\expandafter{\reserved at b}{#5}%
+}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\def\DeclareSymbolFont at m@dropped #1#2#3#4#5{%
  \@tempswafalse
  \edef\reserved at b{#2}%
  \def\cdp at elt##1##2##3##4{\def\reserved at c{##1}%
@@ -1018,6 +1068,16 @@
   \fi
   }
 \@onlypreamble\DeclareSymbolFont
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>                 {\DeclareSymbolFont}{maybe drop m}%
+%<latexrelease>
+%<latexrelease>\let\DeclareSymbolFont\DeclareSymbolFont at m@dropped
+%<latexrelease>\let\DeclareSymbolFont at m@dropped\@undefined
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
 %    \end{macrocode}
 % \end{macro}
 %
@@ -1054,8 +1114,24 @@
 % \end{macro}
 %
 % \begin{macro}{\SetSymbolFont}
+%    First drop any surplus \texttt{m} from the series argument then
+%    do what has been done since 1994.
+% \changes{v3.1b}{2022/09/20}{Drop any surplus 'm' in series argument (gh/918)}
 %    \begin{macrocode}
-\def\SetSymbolFont#1#2#3#4#5#6{%
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2022/11/01}%
+%<latexrelease>                 {\SetSymbolFont}{maybe drop m}%
+\def\SetSymbolFont #1#2#3#4#5#6{%
+ \def\reserved at a{\SetSymbolFont at m@dropped{#1}{#2}{#3}{#4}}%
+ \edef\reserved at b{#5}%
+ \series at maybe@drop at one@m\reserved at b\reserved at b
+ \expandafter\reserved at a\expandafter{\reserved at b}{#6}%
+}
+%    \end{macrocode}
+%    
+%    \begin{macrocode}
+\def\SetSymbolFont at m@dropped#1#2#3#4#5#6{%
  \@tempswafalse
  \edef\reserved at b{#3}%
  \def\cdp at elt##1##2##3##4{\def\reserved at c{##1}%
@@ -1070,6 +1146,16 @@
  \fi
 }
 \@onlypreamble\SetSymbolFont
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>                 {\SetSymbolFont}{maybe drop m}%
+%<latexrelease>
+%<latexrelease>\let\SetSymbolFont\SetSymbolFont at m@dropped
+%<latexrelease>\let\SetSymbolFont at m@dropped\@undefined
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
 %    \end{macrocode}
 % \end{macro}
 %

Modified: trunk/Master/texmf-dist/source/latex/base/ltkeys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltkeys.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/base/ltkeys.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltkeys.dtx}
-             [2022/07/05 v1.0i LaTeX Kernel (Kevyal options)]
+             [2022/10/22 v1.0l LaTeX Kernel (Keyval options)]
 % \iffalse
 \documentclass{l3doc}
 \GetFileInfo{ltkeys.dtx}
@@ -72,6 +72,7 @@
 %   \begin{itemize}
 %    \item \texttt{.code} --- execute arbitrary code
 %     \item \texttt{.if} --- sets a \TeX{} \cs{if...} switch
+%     \item \texttt{.ifnot} --- sets an inverted \TeX{} \cs{if...} switch
 %     \item \texttt{.store} --- stores a value in a macro
 %     \item \texttt{.usage} -- defines whether the option can be given only
 %       when loading (\texttt{load}), in the preamble (\texttt{preamble}) or
@@ -152,11 +153,13 @@
 %
 % \subsection{Key properties}
 %
-% \begin{macro}{.code, .if, .store, .usage}
+% \begin{macro}{.code, .if, .ifnot, .store, .usage}
 % \changes{v1.0b}{2022/02/05}
 %         {Create properties in \texttt{ltlkeys}}
 % \changes{v1.0c}{2022/02/07}
 %         {Correct \texttt.{.code} property}
+% \changes{v1.0i}{2022/06/22}
+%         {Add \texttt.{.notif} property}
 %    \begin{macrocode}
 \group_begin:
   \cs_set_protected:Npn \@@_tmp:nn #1#2
@@ -170,6 +173,7 @@
   \@@_tmp:nn
     { code:n }          { code }
     { legacy_if_set:n } { if }
+    { legacy_if_set_inverse:n } { ifnot }
     { tl_set:N }        { store }
     { usage:n }         { usage }
     { \q_recursion_tail } { }
@@ -205,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
@@ -221,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}
@@ -247,11 +254,15 @@
     \@@_option_end:
     \@@_options_loaded:n {#1}
   }
+%    \end{macrocode}
+% \changes{v1.0j}{2022/07/23}
+%         {Output `public' package name in messages}
+%    \begin{macrocode}
 \msg_new:nnnn { keys } { option-unknown }
   { Unknown~option~'#1'~for~package~#2. }
   {
     LaTeX~has~been~asked~to~set~an~option~called~'#1'~
-    but~the~#2~package~has~not~created~an~option~with~this~name.
+    but~the~package~"\msg_module_name:n {#2}"~has~not~created~an~option~with~this~name.
   }
 %    \end{macrocode}
 % \end{macro}
@@ -286,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
@@ -315,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} }
       }
   }
@@ -467,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.
@@ -488,19 +502,33 @@
 \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}
+%         {Output `public' package name in messages}
+%    \begin{macrocode}
 \msg_new:nnn { keys } { load-option-ignored }
-  { Package~"#1"~has~already~been~loaded:~ignoring~load-time~option~"#2". }
+  {
+    Package~"\msg_module_name:n {#1}"~has~already~been~loaded:~
+    ignoring~load-time~option~"#2".
+  }
+%    \end{macrocode}
+% \changes{v1.0j}{2022/07/23}
+%         {Output `public' package name in messages}
+% \changes{v1.0k}{2022/08/21}
+%         {Correct error message}
+%    \begin{macrocode}
 \msg_new:nnnn { keys } { load-only }
-  { Key~"#2"~may~only~be~used~in~the~during~loading~of~package~"#1". }
   {
+    Key~"#2"~may~only~be~used~during~loading~of~package~
+    "\msg_module_name:n {#1}".
+  }
+  {
     LaTeX~was~asked~to~set~a~key~called~"#2",~but~this~is~only~allowed~
-    in~the~optional~argument~when~loading~package~"#1".
+    in~the~optional~argument~when~loading~package~"\msg_module_name:n{#1}".
   }
 %    \end{macrocode}
 % \end{macro}

Modified: trunk/Master/texmf-dist/source/latex/base/ltluatex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltluatex.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/base/ltluatex.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -28,7 +28,7 @@
 \ProvidesFile{ltluatex.dtx}
 %</driver>
 %<*tex>
-[2021/12/27 v1.1x
+[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
@@ -1398,9 +1538,7 @@
   ligaturing             = simple,
   kerning                = simple,
   insert_local_par       = simple,
-  pre_mlist_to_hlist_filter = list,
-  mlist_to_hlist         = exclusive,
-  post_mlist_to_hlist_filter = reverselist,
+% mlist_to_hlist         = exclusive,
   new_graf               = exclusive,
 %    \end{macrocode}
 % Section 8.5: information reporting callbacks.
@@ -1461,6 +1599,30 @@
 luatexbase.callbacktypes=callbacktypes
 %    \end{macrocode}
 %
+% \changes{v1.1y}{2022/08/13}{shared\_callbacks added}
+% Sometimes multiple callbacks correspond to a single underlying engine level callback.
+% Then the engine level callback should be registered as long as at least one of these
+% callbacks is in use. This is implemented though a shared table which counts how many
+% of the involved callbacks are currently in use. The enging level callback is registered
+% iff this count is not 0.
+%
+% We add |mlist_to_hlist| directly to the list to demonstrate this, but the handler gets
+% added later when it is actually defined.
+%
+% All callbacks in this list are treated as user defined callbacks.
+%
+%    \begin{macrocode}
+local shared_callbacks = {
+  mlist_to_hlist = {
+    callback = "mlist_to_hlist",
+    count = 0,
+    handler = nil,
+  },
+}
+shared_callbacks.pre_mlist_to_hlist_filter = shared_callbacks.mlist_to_hlist
+shared_callbacks.post_mlist_to_hlist_filter = shared_callbacks.mlist_to_hlist
+%    \end{macrocode}
+%
 % \begin{macro}{callback.register}
 % \changes{v1.0a}{2015/09/24}{Function modified}
 %   Save the original function for registering callbacks and prevent the
@@ -1639,11 +1801,7 @@
 % If a default function is not required, it may be declared as |false|.
 % First we need a list of user callbacks.
 %    \begin{macrocode}
-local user_callbacks_defaults = {
-  pre_mlist_to_hlist_filter = list_handler_default,
-  mlist_to_hlist = node.mlist_to_hlist,
-  post_mlist_to_hlist_filter = list_handler_default,
-}
+local user_callbacks_defaults = {}
 %    \end{macrocode}
 %
 % \begin{macro}{create_callback}
@@ -1713,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
@@ -1733,18 +1892,29 @@
 %   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.
+%    \begin{macrocode}
+    local shared = shared_callbacks[name]
+    if shared then
+      shared.count = shared.count + 1
+      if shared.count == 1 then
+        callback_register(shared.callback, shared.handler)
+      end
+%    \end{macrocode}
 % If it is not a user defined callback use the primitive callback register.
 %    \begin{macrocode}
-    if user_callbacks_defaults[name] == nil then
+    elseif user_callbacks_defaults[name] == nil then
       callback_register(name, handlers[callbacktypes[name]](name))
     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}
@@ -1752,7 +1922,6 @@
     func        = func,
     description = description,
   }
-  local priority = #l + 1
   if callbacktypes[name] == exclusive then
     if #l == 1 then
       luatexbase_error(
@@ -1760,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
@@ -1773,11 +1942,63 @@
 %    \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)}
 % \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)
@@ -1794,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")
@@ -1822,8 +2043,15 @@
     "Removing  `" .. description .. "' from `" .. name .. "'."
   )
   if #l == 0 then
+    realcallbacklist[name] = nil
     callbacklist[name] = nil
-    if user_callbacks_defaults[name] == nil then
+    local shared = shared_callbacks[name]
+    if shared then
+      shared.count = shared.count - 1
+      if shared.count == 0 then
+        callback_register(shared.callback, nil)
+      end
+    elseif user_callbacks_defaults[name] == nil then
       callback_register(name, nil)
     end
   end
@@ -1841,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
@@ -1863,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")
@@ -1877,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
@@ -1917,10 +2146,14 @@
 % \end{macro}
 % \begin{macro}{mlist_to_hlist}
 % \changes{v1.1l}{2020/02/02}{|pre/post_mlist_to_hlist| added}
+% \changes{v1.1y}{2022/08/13}{Use shared\_callback system for pre/post/mlist_to_hlist}
 %   To emulate these callbacks, the ``real'' |mlist_to_hlist| is replaced by a
 %   wrapper calling the wrappers before and after.
 %    \begin{macrocode}
-callback_register("mlist_to_hlist", function(head, display_type, need_penalties)
+create_callback('pre_mlist_to_hlist_filter', 'list')
+create_callback('mlist_to_hlist', 'exclusive', node.mlist_to_hlist)
+create_callback('post_mlist_to_hlist_filter', 'list')
+function shared_callbacks.mlist_to_hlist.handler(head, display_type, need_penalties)
   local current = call_callback("pre_mlist_to_hlist_filter", head, display_type, need_penalties)
   if current == false then
     flush_list(head)
@@ -1933,7 +2166,7 @@
     return nil
   end
   return post
-end)
+end
 %    \end{macrocode}
 % \end{macro}
 % \endgroup

Modified: trunk/Master/texmf-dist/source/latex/base/ltmath.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltmath.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/base/ltmath.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -38,7 +38,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltmath.dtx}
-              [2022/05/08 v1.2l LaTeX Kernel (Math Setup)]
+              [2022/09/07 v1.2m LaTeX Kernel (Math Setup)]
 % \iffalse
 %</driver>
 %
@@ -370,9 +370,39 @@
 %    \begin{macrocode}
 \def\makesm at sh#1{%
   \setbox\z@\hbox{\color at begingroup#1\color at endgroup}\finsm at sh}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2022/11/01}%
+%<latexrelease>                 {\mathsm at sh}{Guard against reboxing}%
 \def\mathsm at sh#1#2{%
-  \setbox\z@\hbox{$\m at th#1{#2}$}\finsm at sh}
+  \setbox\z@\hbox{$\m at th#1{#2}$}%
 %    \end{macrocode}
+%    The empty brace groups in front of the smashed box (which is
+%    placed by \cs{finsm at sh}) ensures that a \cs{smash} in math is not
+%    just producing a single box  with its dimensions altered, but a
+%    box plus this second ord atom. The reason is that \TeX{} sometimes reboxes a
+%    box if its the only thing in a place like the denominator of a
+%    fraction. This would then undo the smashing and the additional
+%    ord atom prevents that. Two ord atoms in a row do not alter the
+%    horizontal spacing in a formula so this is otherwise transparent. 
+% \changes{v1.2m}{2022/09/03}{Guard against reboxing in fractions (gh/517)}
+%    \begin{macrocode}
+  {}\finsm at sh}
+%    \end{macrocode}
+%    \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>                 {\mathsm at sh}{Guard against reboxing}%
+%<latexrelease>\def\mathsm at sh#1#2{%
+%<latexrelease>  \setbox\z@\hbox{$\m at th#1{#2}$}\finsm at sh}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+%    \end{macrocode}
+%
 % \changes{v1.2b}{2018/09/24}{Start LR-mode if necessary (git/49)}
 %    \begin{macrocode}
 %</2ekernel>

Modified: trunk/Master/texmf-dist/source/latex/base/ltoutput.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltoutput.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/base/ltoutput.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -37,7 +37,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltoutput.dtx}
-             [2022/04/03 v1.4i LaTeX Kernel (Output Routine)]
+             [2022/08/20 v1.4j LaTeX Kernel (Output Routine)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltoutput.dtx}
@@ -829,6 +829,17 @@
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
+% \begin{macro}{\stockheight}
+% \changes{v1.4j}{2022/08/20}{Register added}
+% \begin{macro}{\stockwidth}
+% \changes{v1.4j}{2022/08/20}{Register added}
+%    New |\stock|\ldots\ registers.
+%    \begin{macrocode}
+\newdimen\stockheight
+\newdimen\stockwidth
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
 %
 % \begin{macro}{\if at insert}
 % \begin{macro}{\if at fcolmade}

Modified: trunk/Master/texmf-dist/source/latex/base/ltshipout.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltshipout.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/base/ltshipout.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -33,7 +33,7 @@
 %
 %    \begin{macrocode}
 \providecommand\ltshipoutversion{v1.0m}
-\providecommand\ltshipoutdate{2022/05/08}
+\providecommand\ltshipoutdate{2022/08/26}
 %    \end{macrocode}
 %
 %<*driver>
@@ -330,7 +330,7 @@
 %    \begin{syntax}
 %      \cs{AtBeginDvi} \Arg{code}
 %    \end{syntax}
- %    \cs{AtBeginDvi} is the existing \LaTeXe{} interface to fill the
+%    \cs{AtBeginDvi} is the existing \LaTeXe{} interface to fill the
 %    \hook{shipout/firstpage} hook. This is not really a good name
 %    as it is not just supporting \texttt{.dvi} but also \texttt{.pdf}
 %    output or \texttt{.xdv}.

Modified: trunk/Master/texmf-dist/source/latex/base/lttextcomp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/lttextcomp.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/base/lttextcomp.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -37,7 +37,7 @@
 %
 %
 \ProvidesFile{lttextcomp.dtx}
-             [2021/12/09 v1.0f LaTeX Kernel (text companion symbols)]
+             [2022/08/07 v1.0g LaTeX Kernel (text companion symbols)]
 % \iffalse
 \documentclass{ltxdoc}
 \begin{document}
@@ -226,8 +226,14 @@
    \@ifundefined{#1:#2}%
      {\@font at info{Setting #2 sub-encoding to #1/#3}}%
      {\@font at info{Changing #2 sub-encoding to #1/#3}}%
-     \@namedef{#1:#2}{#3}}
 %    \end{macrocode}
+%    This declaration should be usable in \texttt{.fd} files and
+%    therefore has to make its definition globally, because such files
+%    can get loaded in random places.
+% \changes{v1.0g}{2022/08/07}{Make  global declaration (gh/905)}
+%    \begin{macrocode}
+     \global\@namedef{#1:#2}{#3}}
+%    \end{macrocode}
 %
 %    Any reason to allow those in the middle of documents?
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/base/ltvers.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/ltvers.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/base/ltvers.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -112,10 +112,10 @@
 %</2ekernel>
 %<latexrelease>\edef\latexreleaseversion
 %<*2ekernel|latexrelease>
-   {2022-06-01}
+   {2022-11-01}
 %</2ekernel|latexrelease>
 %<*2ekernel>
-\def\patch at level{5}
+\def\patch at level{0}
 %    \end{macrocode}
 %
 % \begin{macro}{\development at branch@name}

Modified: trunk/Master/texmf-dist/source/latex/base/utf8ienc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/base/utf8ienc.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/base/utf8ienc.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -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/firstaid/latex2e-first-aid-for-external-files.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/firstaid/latex2e-first-aid-for-external-files.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/firstaid/latex2e-first-aid-for-external-files.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -111,8 +111,8 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\def\LaTeXFirstAidDate{2022/02/20}
-\def\LaTeXFirstAidVersion{v1.0r}
+\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}
 %
@@ -586,7 +590,28 @@
 %    \end{macrocode}
 %
 %
+% \subsection{First aid for \pkg{memoir}}
 %
+%  The introduction of \cs{stockheight} and \cs{stockwidth} into the
+%  kernel requires some first aid. This has to go in \emph{before}
+%  loading the class, so we cannot check the version string here.
+%    \begin{macrocode}
+\AddToHook{file/memoir.cls/before}[firstaid]{%
+  \expandafter\def\expandafter\@tempa\string\dimen{}%
+  \edef\kernel at stockheight{\expandafter\@tempa\meaning\stockheight}%
+  \edef\kernel at stockwidth{\expandafter\@tempa\meaning\stockwidth}%
+  \let\stockheight\@undefined
+  \let\stockwidth\@undefined
+}
+\AddToHook{file/memoir.cls/after}[firstaid]{%
+  \dimen\kernel at stockheight=\stockheight
+  \dimen\kernel at stockwidth=\stockwidth
+  \dimendef\stockheight=\kernel at stockheight
+  \dimendef\stockwidth=\kernel at stockwidth
+}
+%    \end{macrocode}
+%
+%
 % \subsection[Temporary fixes for the kernel (until the next
 %             patch-level release)]
 %    {Temporary fixes for the kernel \\

Modified: trunk/Master/texmf-dist/source/latex/graphics/mathcolor.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/graphics/mathcolor.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/graphics/mathcolor.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -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/latex-lab/latex-lab-footnotes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/latex-lab/latex-lab-footnotes.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/latex-lab/latex-lab-footnotes.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -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

Modified: trunk/Master/texmf-dist/source/latex/tools/array.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/array.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/tools/array.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -33,7 +33,7 @@
 %<+package>\DeclareCurrentRelease{}{2020-10-01}
 %<+package>
 %<+package>\ProvidesPackage{array}
-%<+package>         [2022/03/10 v2.5f Tabular extension package (FMi)]
+%<+package>         [2022/09/04 v2.5g Tabular extension package (FMi)]
 %
 % \fi
 %
@@ -1727,14 +1727,20 @@
 %
 %    For that reason the new implementation does the centering
 %    manually: First we check the height of the cell and if that is
-%    less or equal to =\ht\@arstrutbox= we assume that this is a
+%    less or equal to =\ht\strutbox= we assume that this is a
 %    single line cell. In that case  we don't do any vertical maneuvre
 %    and simply output the box, i.e., make it behave like a single
 %    line p-cell.
+%
+%    We use the height of \cs{strutbox} not \cs{@arstrutbox} in the comparison,
+%    because \cs{box}\cs{ar at mcellbox} does not have any strut
+%    incorporated and if \cs{arraystretch} is made very
+%    small the test would otherwise incorrectly assume a multi-line cell.
 % \changes{v2.4f}{2017/11/04}{Managing m-cells without \cs{vcenter}}
+% \changes{v2.5g}{2022/09/04}{Test against \cs{strutbox} height (gh/766)}
 %    \begin{macrocode}
 \def\ar at align@mcell{%
-  \ifdim \ht\ar at mcellbox > \ht\@arstrutbox
+  \ifdim \ht\ar at mcellbox > \ht\strutbox
 %    \end{macrocode}
 %    Otherwise we realign vertically by lowering the box. The question
 %    is how much do we need to move down? If there is any

Modified: trunk/Master/texmf-dist/source/latex/tools/verbatim.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tools/verbatim.dtx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/source/latex/tools/verbatim.dtx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -55,7 +55,7 @@
         \and
         Chris Rowley}
 
-\date{2001/03/12}
+\date{2022/07/02}
 \begin{document}
 \markboth{Verbatim style option}{Verbatim style option}
 \MaintainedByLaTeXTeam{tools}
@@ -160,7 +160,7 @@
 %   that skips any commands or text between
 %   |\begin{comment}|
 %   and the next |\end{comment}|.
-%   It also defines the command \texttt{verbatiminput} to input a whole
+%   It also defines the command |\verbatiminput| to input a whole
 %   file verbatim.
 % \end{abstract}
 %
@@ -234,7 +234,7 @@
 %
 % \DescribeMacro{\verbatiminput}
 % |\verbatiminput| is a command with one argument that inputs a file
-% verbatim, i.e.\ the command |verbatiminput{xx.yy}|
+% verbatim, i.e.\ the command |\verbatiminput{xx.yy}|
 % has the same effect as\\[2pt]
 %   \hspace*{\MacroIndent}|\begin{verbatim}|\\
 %   \hspace*{\MacroIndent}\meta{Contents of the file \texttt{xx.yy}}\\
@@ -508,7 +508,7 @@
 %<*package>
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{verbatim}
-     [2020-07-07 v1.5u LaTeX2e package for verbatim enhancements]
+     [2022-07-02 v1.5u LaTeX2e package for verbatim enhancements]
 \@ifundefined{verbatim@@@}{}{\endinput}
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/tex/latex/base/article.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/article.cls	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/article.cls	2022-11-01 19:57:17 UTC (rev 64892)
@@ -43,7 +43,7 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
 \ProvidesClass{article}
-              [2021/10/04 v1.4n
+              [2022/07/02 v1.4n
  Standard LaTeX document class]
 \newcommand\@ptsize{}
 \newif\if at restonecol

Modified: trunk/Master/texmf-dist/tex/latex/base/atbegshi-ltx.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/atbegshi-ltx.sty	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/atbegshi-ltx.sty	2022-11-01 19:57:17 UTC (rev 64892)
@@ -47,8 +47,7 @@
 %%
 %%% From File: ltshipout.dtx
 \providecommand\ltshipoutversion{v1.0m}
-\providecommand\ltshipoutdate{2022/05/08}
- %    \cs{AtBeginDvi} is the existing \LaTeXe{} interface to fill the
+\providecommand\ltshipoutdate{2022/08/26}
 \ProvidesPackage{atbegshi-ltx}
    [2021/01/10 v1.0c
      Emulation of the original atbegshi^^Jpackage with kernel methods]

Modified: trunk/Master/texmf-dist/tex/latex/base/atveryend-ltx.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/atveryend-ltx.sty	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/atveryend-ltx.sty	2022-11-01 19:57:17 UTC (rev 64892)
@@ -42,8 +42,8 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 %%% From File: ltfilehook.dtx
-\providecommand\ltfilehookversion{v1.0m}
-\providecommand\ltfilehookdate{2022/04/01}
+\providecommand\ltfilehookversion{v1.0n}
+\providecommand\ltfilehookdate{2022/08/18}
 \ProvidesPackage{atveryend-ltx}
    [2020/08/19 v1.0a
      Emulation of the original atveryend package^^Jwith kernel methods]

Modified: trunk/Master/texmf-dist/tex/latex/base/bk10.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/bk10.clo	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/bk10.clo	2022-11-01 19:57:17 UTC (rev 64892)
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 \ProvidesFile{bk10.clo}
-              [2021/10/04 v1.4n
+              [2022/07/02 v1.4n
       Standard LaTeX file (size option)]
 \renewcommand\normalsize{%
    \@setfontsize\normalsize\@xpt\@xiipt

Modified: trunk/Master/texmf-dist/tex/latex/base/bk11.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/bk11.clo	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/bk11.clo	2022-11-01 19:57:17 UTC (rev 64892)
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 \ProvidesFile{bk11.clo}
-              [2021/10/04 v1.4n
+              [2022/07/02 v1.4n
       Standard LaTeX file (size option)]
 \renewcommand\normalsize{%
    \@setfontsize\normalsize\@xipt{13.6}%

Modified: trunk/Master/texmf-dist/tex/latex/base/bk12.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/bk12.clo	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/bk12.clo	2022-11-01 19:57:17 UTC (rev 64892)
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 \ProvidesFile{bk12.clo}
-              [2021/10/04 v1.4n
+              [2022/07/02 v1.4n
       Standard LaTeX file (size option)]
 \renewcommand\normalsize{%
    \@setfontsize\normalsize\@xiipt{14.5}%

Modified: trunk/Master/texmf-dist/tex/latex/base/book.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/book.cls	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/book.cls	2022-11-01 19:57:17 UTC (rev 64892)
@@ -43,7 +43,7 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
 \ProvidesClass{book}
-              [2021/10/04 v1.4n
+              [2022/07/02 v1.4n
  Standard LaTeX document class]
 \newcommand\@ptsize{}
 \newif\if at restonecol

Modified: trunk/Master/texmf-dist/tex/latex/base/doc.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/doc.sty	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/doc.sty	2022-11-01 19:57:17 UTC (rev 64892)
@@ -53,7 +53,7 @@
 \DeclareCurrentRelease{v3}{2022-06-01}
 
 \ProvidesPackage{doc}
-  [2022/06/08 v3.0j
+  [2022/07/03 v3.0k
    Standard LaTeX documentation package V3 (FMi)]
 %%
 %% Package `doc' to use with LaTeX 2e
@@ -67,88 +67,28 @@
 \catcode`\^^A=14
 \catcode`\^^X=14
 \AtBeginDocument{\catcode`\^^A=14\relax\catcode`\^^X=14\relax}
-\ExplSyntaxOn
-\newif \ifdoc at noprint
-\newif \ifdoc at noindex
-\newif \ifdoc at hyperref \doc at hyperreftrue
-\newif \ifdoc at multicol \doc at multicoltrue
-\newif \ifdoc at debugshow
-\newif \ifdoc at reportchangedates
-\keys_define:nn {doc}
+\DeclareKeys
   {
-    noprint  .choice:,
-    noprint / true  .code:n = { \legacy_if_set_true:n  { doc at noprint } },
-    noprint / false .code:n = { \legacy_if_set_false:n { doc at noprint } },
-    noprint  .default:n = { true },
-    noindex  .choice:,
-    noindex / true  .code:n = { \legacy_if_set_true:n  { doc at noindex } },
-    noindex / false .code:n = { \legacy_if_set_false:n { doc at noindex } },
-    noindex  .default:n = { true },
-    hyperref  .choice:,
-    hyperref / true  .code:n = { \legacy_if_set_true:n  { doc at hyperref } },
-    hyperref / false .code:n = { \legacy_if_set_false:n { doc at hyperref } },
-    hyperref  .default:n = { true },
-    nohyperref  .choice:,
-    nohyperref / true  .code:n = { \legacy_if_set_false:n  { doc at hyperref } },
-    nohyperref / false .code:n = { \legacy_if_set_true:n { doc at hyperref } },
-    nohyperref  .default:n = { true },
-    multicol  .choice:,
-    multicol / true  .code:n = { \legacy_if_set_true:n  { doc at multicol } },
-    multicol / false .code:n = { \legacy_if_set_false:n { doc at multicol } },
-    multicol  .default:n = { true },
-    nomulticol  .choice:,
-    nomulticol / true  .code:n = { \legacy_if_set_false:n  { doc at multicol } },
-    nomulticol / false .code:n = { \legacy_if_set_true:n { doc at multicol } },
-    nomulticol  .default:n = { true },
-    debugshow  .choice:,
-    debugshow / true  .code:n = { \legacy_if_set_true:n  { doc at debugshow } },
-    debugshow / false .code:n = { \legacy_if_set_false:n { doc at debugshow } },
-    debugshow  .default:n = { true },
-    reportchangedates  .choice:,
-    reportchangedates / true  .code:n = { \legacy_if_set_true:n  { doc at reportchangedates } },
-    reportchangedates / false .code:n = { \legacy_if_set_false:n { doc at reportchangedates } },
-    reportchangedates  .default:n = { true },
+    noprint           .if    = {doc at noprint},
+    noindex           .if    = {doc at noindex},
+    hyperref          .if    = {doc at hyperref},
+    nohyperref        .ifnot = {doc at hyperref},
+    multicol          .if    = {doc at multicol},
+    nomulticol        .ifnot = {doc at multicol},
+    debugshow         .if    = {doc at debugshow},
+    reportchangedates .if    = {doc at reportchangedates},
+    toplevel          .if    = {doc at toplevel},
+    notoplevel        .ifnot = {doc at toplevel},
+    macrolike         .if    = {doc at macrolike},
+    envlike           .ifnot = {doc at macrolike},
+    idxtype           .store = \doc at idxtype,
+    idxgroup          .store = \doc at idxgroup,
+    printtype         .store = \doc at printtype,
+    outer             .if    = {doc at outer},
   }
-\newif \ifdoc at toplevel \doc at topleveltrue
-\keys_define:nn {doc}
-  {
-    toplevel  .choice:,
-    toplevel / true  .code:n = { \legacy_if_set_true:n  { doc at toplevel } },
-    toplevel / false .code:n = { \legacy_if_set_false:n { doc at toplevel } },
-    toplevel  .default:n = { true },
-    notoplevel  .choice:,
-    notoplevel / true  .code:n = { \legacy_if_set_false:n  { doc at toplevel } },
-    notoplevel / false .code:n = { \legacy_if_set_true:n { doc at toplevel } },
-    notoplevel  .default:n = { true }
-  }
-\newif \ifdoc at macrolike
-\keys_define:nn {doc}
-  {
-    macrolike  .choice:,
-    macrolike / true  .code:n = { \legacy_if_set_true:n  { doc at macrolike } },
-    macrolike / false .code:n = { \legacy_if_set_false:n { doc at macrolike } },
-    macrolike  .default:n = { true },
-    envlike  .choice:,
-    envlike / true  .code:n = { \legacy_if_set_false:n  { doc at macrolike } },
-    envlike / false .code:n = { \legacy_if_set_true:n { doc at macrolike } },
-    envlike  .default:n = { true }
-  }
-
-\keys_define:nn { doc }
-  {
-    idxtype  .tl_set:N = \doc at idxtype,
-    idxgroup .tl_set:N = \doc at idxgroup,
-    printtype .tl_set:N = \doc at printtype
-  }
-\newif\ifdoc at outer
-\keys_define:nn {doc}
-  {
-    outer  .choice:,
-    outer / true  .code:n = { \legacy_if_set_true:n  { doc at outer } },
-    outer / false .code:n = { \legacy_if_set_false:n { doc at outer } },
-    outer  .default:n = { true },
-  }
-\ExplSyntaxOff
+\doc at hyperreftrue
+\doc at multicoltrue
+\doc at topleveltrue
 \ProcessKeyOptions
 \newif\ifscan at allowed    \scan at allowedtrue
 \def\SetupDoc#1{%

Modified: trunk/Master/texmf-dist/tex/latex/base/docstrip.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/docstrip.tex	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/docstrip.tex	2022-11-01 19:57:17 UTC (rev 64892)
@@ -44,9 +44,9 @@
 \catcode`\{=1
 \catcode`\}=2
 \def\filename{docstrip.dtx}
-\def\fileversion{v2.6a}
-\def\filedate{2020-11-23}
-\def\docdate {2020-11-23}
+\def\fileversion{v2.6b}
+\def\filedate{2022-09-03}
+\def\docdate {2022-09-03}
 %%
 %% The docstrip program for use with TeX.
 %% Copyright (C) 1989-1991 Frank Mittelbach
@@ -54,7 +54,7 @@
 %%                         Frank Mittelbach
 %% Copyright (C) 1995 Marcin Woli\'nski
 %% Copyright (C) 1996-1997 Mark Wooding, Marcin Woli\'nski
-%% Copyright (C) 1998-2021 LaTeX Project and the above authors.
+%% Copyright (C) 1998-2022 LaTeX Project and the above authors.
 %% All rights are reserved.
 %%
 \catcode`\Z=\catcode`\%
@@ -422,7 +422,9 @@
   \maybeMsg{<+#1 . >}%
   \Evaluate{#1}%
   \def\do##1##2##3{%
-    \if1\Expr{##2}\StreamPut##1{#2}\fi
+    \if1\Expr{##2}%
+      \def\inLine{#2}\replaceModuleInLine
+      \StreamPut##1{\inLine}\fi
     }%
   \activefiles
   }
@@ -430,7 +432,9 @@
   \maybeMsg{<-#1 . >}%
   \Evaluate{#1}%
   \def\do##1##2##3{%
-    \if1\Expr{##2}\else \StreamPut##1{#2}\fi
+    \if1\Expr{##2}\else
+      \def\inLine{#2}\replaceModuleInLine
+      \StreamPut##1{\inLine}\fi
     }%
   \activefiles
   }

Modified: trunk/Master/texmf-dist/tex/latex/base/latex.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/latex.ltx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/latex.ltx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -705,8 +705,8 @@
 %%% From File: ltvers.dtx
 \def\fmtname{LaTeX2e}
 \edef\fmtversion
-   {2022-06-01}
-\def\patch at level{5}
+   {2022-11-01}
+\def\patch at level{0}
 \edef\development at branch@name{}
 \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}
@@ -1731,8 +1731,8 @@
     \xdef#1{\the\toks@}%
   \endgroup}
 %%% From File: ltcmd.dtx
-\def\ltcmdversion{v1.0l}
-\def\ltcmddate{2022-03-18}
+\def\ltcmdversion{v1.1a}
+\def\ltcmddate{2022-08-16}
 \message{document commands,}
 \ExplSyntaxOn
 \tl_new:N \l__cmd_arg_spec_tl
@@ -1759,6 +1759,7 @@
 \bool_new:N \l__cmd_obey_spaces_bool
 \tl_new:N \l__cmd_last_delimiters_tl
 \bool_new:N \l__cmd_long_bool
+\bool_new:N \l__cmd_suppress_strip_bool
 \int_new:N \l__cmd_m_args_int
 \bool_new:N \l__cmd_prefixed_bool
 \tl_new:N \l__cmd_process_all_tl
@@ -1769,6 +1770,9 @@
 \bool_new:N \l__cmd_some_obey_spaces_bool
 \bool_new:N \l__cmd_some_long_bool
 \bool_new:N \l__cmd_some_short_bool
+\quark_new:N \q__cmd_recursion_tail
+\quark_new:N \q__cmd_recursion_stop
+\__kernel_quark_new_test:N \__cmd_if_recursion_tail_stop_do:Nn
 \prop_new:N \l__cmd_tmp_prop
 \tl_new:N \l__cmd_tmpa_tl
 \tl_new:N \l__cmd_tmpb_tl
@@ -2107,6 +2111,7 @@
     \bool_set_true:N \l__cmd_grab_expandably_bool
     \bool_set_false:N \l__cmd_obey_spaces_bool
     \bool_set_false:N \l__cmd_long_bool
+    \bool_set_false:N \l__cmd_suppress_strip_bool
     \bool_set_false:N \l__cmd_some_obey_spaces_bool
     \bool_set_false:N \l__cmd_some_long_bool
     \bool_set_false:N \l__cmd_some_short_bool
@@ -2197,30 +2202,48 @@
   }
 \cs_new_protected:cpn { __cmd_normalize_type_+:w } #1
   {
-    \quark_if_recursion_tail_stop_do:nn {#1} { \__cmd_bad_arg_spec:wn }
-    \bool_if:NT \l__cmd_long_bool
+    \__cmd_normalize_type_aux:NnNn + {#1}
+      \l__cmd_long_bool
+      { \bool_set_true:N \l__cmd_long_bool }
+  }
+\cs_new_protected:cpn { __cmd_normalize_type_!:w } #1
+  {
+    \__cmd_normalize_type_aux:NnNn ! {#1}
+      \l__cmd_obey_spaces_bool
       {
-        \msg_error:nnxx { cmd } { two-markers }
-          { \__cmd_environment_or_command: } { + }
-        \__cmd_bad_def:wn
+        \bool_set_true:N \l__cmd_obey_spaces_bool
+        \bool_set_true:N \l__cmd_some_obey_spaces_bool
       }
-    \bool_set_true:N \l__cmd_long_bool
-    \int_decr:N \l__cmd_current_arg_int
-    \__cmd_normalize_arg_spec_loop:n {#1}
   }
-\cs_new_protected:cpn { __cmd_normalize_type_!:w } #1
+\cs_new_protected:cpn { __cmd_normalize_type_=:w } #1#2
   {
-    \quark_if_recursion_tail_stop_do:nn {#1} { \__cmd_bad_arg_spec:wn }
-    \bool_if:NT \l__cmd_obey_spaces_bool
+    \__cmd_normalize_type_aux:NnNn = {#2}
+      \l__cmd_suppress_strip_bool
       {
+        \bool_if:NT \l__cmd_expandable_bool
+          {
+            \msg_error:nnxx { cmd } { keyval-in-expandable }
+              { \iow_char:N \\ \l__cmd_function_tl } { \tl_to_str:n {#1} }
+            \__cmd_bad_def:wn
+          }
+        \bool_set_true:N \l__cmd_suppress_strip_bool
+        \bool_set_false:N \l__cmd_grab_expandably_bool
+        \tl_put_right:Nx \l__cmd_arg_spec_tl
+          { = { \tl_trim_spaces:n {#1} } }
+      }
+  }
+\cs_new_protected:Npn \__cmd_normalize_type_aux:NnNn #1#2#3#4
+  {
+    \quark_if_recursion_tail_stop_do:nn {#2} { \__cmd_bad_arg_spec:wn }
+    \bool_if:NT #3
+      {
         \msg_error:nnxx { cmd } { two-markers }
-          { \__cmd_environment_or_command: } { ! }
+          { \__cmd_environment_or_command: } { #1 }
         \__cmd_bad_def:wn
       }
-    \bool_set_true:N \l__cmd_obey_spaces_bool
-    \bool_set_true:N \l__cmd_some_obey_spaces_bool
+    #4
     \int_decr:N \l__cmd_current_arg_int
-    \__cmd_normalize_arg_spec_loop:n {#1}
+    \__cmd_normalize_arg_spec_loop:n {#2}
   }
 \cs_new_protected:Npn \__cmd_normalize_type_D:w #1#2#3
   {
@@ -2417,6 +2440,7 @@
     \int_zero:N \l__cmd_current_arg_int
     \bool_set_false:N \l__cmd_long_bool
     \bool_set_false:N \l__cmd_obey_spaces_bool
+    \bool_set_false:N \l__cmd_suppress_strip_bool
     \int_zero:N \l__cmd_m_args_int
     \bool_set_false:N \l__cmd_defaults_bool
     \tl_clear:N \l__cmd_defaults_tl
@@ -2464,6 +2488,16 @@
     \tl_put_left:Nn \l__cmd_process_one_tl { {#1} }
     \__cmd_prepare_signature_bypass:N
   }
+\cs_new_protected:cpn { __cmd_add_type_=:w } #1
+  {
+    \__cmd_flush_m_args:
+    \bool_set_true:N \l__cmd_prefixed_bool
+    \bool_set_true:N \l__cmd_suppress_strip_bool
+    \bool_set_true:N \l__cmd_process_some_bool
+    \tl_put_left:Nn \l__cmd_process_one_tl
+      { { \__cmd_arg_to_keyvalue:nn {#1} } }
+    \__cmd_prepare_signature_bypass:N
+  }
 \cs_new_protected:Npn \__cmd_add_type_b:w
   {
     \__cmd_flush_m_args:
@@ -2554,11 +2588,16 @@
             __cmd_grab_ #1
             \bool_if:NT \l__cmd_long_bool { _long }
             \bool_if:NT \l__cmd_obey_spaces_bool { _obey_spaces }
+            \bool_lazy_and:nnT
+              { \l__cmd_suppress_strip_bool }
+              { \str_if_eq_p:nn {#1} { D } }
+              { _no_strip }
             :w
           }
       }
     \bool_set_false:N \l__cmd_long_bool
     \bool_set_false:N \l__cmd_obey_spaces_bool
+    \bool_set_false:N \l__cmd_suppress_strip_bool
     \tl_put_right:Nx \l__cmd_process_all_tl
       {
         {
@@ -2969,7 +3008,7 @@
     \quark_if_nil:nF {#1}
       { \tl_const:cn { c__cmd_show_type_#1_tl } {#2} \__cmd_tmp:w }
   }
-\__cmd_tmp:w t0 r1 d1 R2 D2 O3 e4 E5 +6 !6 >7 \q_nil \q_nil
+\__cmd_tmp:w t0 r1 d1 R2 D2 O3 e4 E5 +6 !6 >7 =7 \q_nil \q_nil
 \cs_new_protected:Npn \__cmd_show_delim:Nw #1 #2
   { \__cmd_split_end_item:n { #1 #2 } \__cmd_split_signature_loop:Nw }
 \cs_new_protected:Npn \__cmd_show_delims:Nw #1 #2 #3
@@ -3030,7 +3069,7 @@
   { \__cmd_grab_b_aux:NNw \cs_set_protected:Npn \exp_not:n }
 \cs_new_protected:Npn \__cmd_grab_b_aux:NNw #1#2#3 \__cmd_run_code:
   {
-    \__cmd_grab_D_aux:NNnN \begin \end {#3} #1
+    \__cmd_grab_D_aux:NNnNN \begin \end {#3} #1 \use_ii:nn
     \tl_put_left:Nn \l__cmd_signature_tl { \__cmd_grab_b_end:Nw #2 }
     \tl_set_eq:NN \l__cmd_saved_args_tl \l__cmd_args_tl
     \tl_clear:N \l__cmd_args_tl
@@ -3049,32 +3088,56 @@
   }
 \cs_new_protected:Npn \__cmd_grab_D:w #1#2#3 \__cmd_run_code:
   {
-    \__cmd_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected_nopar:Npn
-      \__cmd_peek_nonspace_remove:NTF
+    \__cmd_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn
+      \__cmd_peek_nonspace_remove:NTF \use_ii:nn
   }
 \cs_new_protected:Npn \__cmd_grab_D_long:w #1#2#3 \__cmd_run_code:
   {
-    \__cmd_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected:Npn
-      \__cmd_peek_nonspace_remove:NTF
+    \__cmd_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn
+      \__cmd_peek_nonspace_remove:NTF \use_ii:nn
   }
 \cs_new_protected:Npn \__cmd_grab_D_obey_spaces:w #1#2#3 \__cmd_run_code:
   {
-    \__cmd_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected_nopar:Npn
-      \__cmd_peek_meaning_remove:NTF
+    \__cmd_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn
+      \__cmd_peek_meaning_remove:NTF \use_ii:nn
   }
 \cs_new_protected:Npn \__cmd_grab_D_long_obey_spaces:w #1#2#3 \__cmd_run_code:
   {
-    \__cmd_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected:Npn
-      \__cmd_peek_meaning_remove:NTF
+    \__cmd_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn
+      \__cmd_peek_meaning_remove:NTF \use_ii:nn
   }
-\cs_new_protected:Npn \__cmd_grab_D_aux:NNnNN #1#2#3#4#5
+\cs_new_protected:Npn \__cmd_grab_D_no_strip:w
+  #1#2#3 \__cmd_run_code:
   {
-    \__cmd_grab_D_aux:NNnN #1#2 {#3} #4
+    \__cmd_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn
+      \__cmd_peek_nonspace_remove:NTF \use_none:n
+  }
+\cs_new_protected:Npn \__cmd_grab_D_long_no_strip:w
+  #1#2#3 \__cmd_run_code:
+  {
+    \__cmd_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn
+      \__cmd_peek_nonspace_remove:NTF \use_none:n
+  }
+\cs_new_protected:Npn \__cmd_grab_D_obey_spaces_no_strip:w
+  #1#2#3 \__cmd_run_code:
+  {
+    \__cmd_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn
+      \__cmd_peek_meaning_remove:NTF \use_none:n
+  }
+\cs_new_protected:Npn \__cmd_grab_D_long_obey_spaces_no_strip:w
+  #1#2#3 \__cmd_run_code:
+  {
+    \__cmd_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn
+      \__cmd_peek_meaning_remove:NTF \use_none:n
+  }
+\cs_new_protected:Npn \__cmd_grab_D_aux:NNnNNN #1#2#3#4#5#6
+  {
+    \__cmd_grab_D_aux:NNnNN #1#2 {#3} #4 #6
     #5 #1
       { \__cmd_grab_D_call:Nw #1 }
       { \__cmd_add_arg:o \c_novalue_tl }
   }
-\cs_new_protected:Npn \__cmd_grab_D_aux:NNnN #1#2#3#4
+\cs_new_protected:Npn \__cmd_grab_D_aux:NNnNN #1#2#3#4#5
   {
     \tl_set:Nn \l__cmd_signature_tl {#3}
     \exp_after:wN #4 \l__cmd_fn_tl ##1 #2
@@ -3088,7 +3151,7 @@
                 \str_if_eq:eeTF
                   { \exp_not:o { \use_none:n ##1 } }
                   { { \exp_not:o { \use_ii:nnn ##1 \q_nil } } }
-                  { \__cmd_add_arg:o { \use_ii:nn ##1 } }
+                  { \__cmd_add_arg:o { #5 ##1 } }
                   { \__cmd_add_arg:o { \use_none:n ##1 } }
               }
           }
@@ -3286,7 +3349,7 @@
   { \__cmd_grab_R_aux:NNnN #1 #2 {#3} \cs_set_protected:Npn }
 \cs_new_protected:Npn \__cmd_grab_R_aux:NNnN #1#2#3#4
   {
-    \__cmd_grab_D_aux:NNnN #1 #2 {#3} #4
+    \__cmd_grab_D_aux:NNnNN #1 #2 {#3} #4 \use_ii:nn
     \__cmd_peek_nonspace_remove:NTF #1
       { \__cmd_grab_D_call:Nw #1 }
       {
@@ -3742,6 +3805,121 @@
   }
 \cs_new_protected:Npn \__cmd_trim_spaces:n #1
   { \tl_set:Nx \ProcessedArgument { \tl_trim_spaces:n {#1} } }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue:nn #1#2
+  {
+    \tl_trim_spaces_apply:nN {#2} \__cmd_arg_to_keyvalue_braces:nnn
+      {#1} {#2}
+  }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_braces:nnn #1#2#3
+  {
+    \tl_if_head_is_group:nT {#1}
+      {
+        \tl_if_blank:oT { \use_none:n #1 }
+          {
+            \tl_set:Nx \ProcessedArgument { #2 = { \exp_not:n #1 } }
+            \use_none:nnnn
+          }
+      }
+    \__cmd_arg_to_keyvalue_auxi:nnn {#1} {#2} {#3}
+  }
+\cs_new:Npn \__cmd_arg_to_keyvalue_auxi:nnn #1
+  {
+    \tl_if_head_is_N_type:nTF {#1}
+      { \__cmd_split_N_head_apply:Nn \__cmd_arg_to_keyvalue_auxii:Nnnn {#1} }
+      { \__cmd_arg_to_keyvalue_auxv:nn }
+  }
+\cs_new:Npn \__cmd_arg_to_keyvalue_auxii:Nnnn #1#2
+  {
+    \str_if_eq:eeTF { \exp_not:n {#1} } { = }
+      { \tl_trim_spaces_apply:nN {#2} \__cmd_arg_to_keyvalue_auxiii:nnn }
+      { \__cmd_arg_to_keyvalue_auxv:nn }
+  }
+\cs_new:Npn \__cmd_arg_to_keyvalue_auxiii:nnn #1
+  {
+    \tl_if_head_is_N_type:nTF {#1}
+      { \__cmd_split_N_head_apply:Nn \__cmd_arg_to_keyvalue_auxiv:Nnnn {#1} }
+      { \__cmd_arg_to_keyvalue_auxv:nn }
+  }
+\cs_new:Npn \__cmd_arg_to_keyvalue_auxiv:Nnnn #1#2
+  {
+    \str_if_eq:eeTF { \exp_not:n {#1} } { , }
+      { \tl_set:Nn \ProcessedArgument {#2} \use_none:nn }
+      { \__cmd_arg_to_keyvalue_auxv:nn }
+  }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_auxv:nn #1#2
+  {
+    \__cmd_arg_to_keyvalue_loop:w #2
+      \q__cmd_recursion_tail \q__cmd_recursion_stop {#1} {#2}
+  }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_loop:w #1 \q__cmd_recursion_stop
+  {
+    \tl_if_head_is_N_type:nTF {#1}
+      { \__cmd_arg_to_keyvalue_loop_N_type:N }
+      {
+        \tl_if_head_is_group:nTF {#1}
+          { \__cmd_arg_to_keyvalue_loop_group:n }
+          { \__cmd_arg_to_keyvalue_loop_space:w }
+      }
+        #1 \q__cmd_recursion_stop
+  }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_loop_group:n #1
+  { \__cmd_arg_to_keyvalue_loop:w }
+\use:n { \cs_new_protected:Npn \__cmd_arg_to_keyvalue_loop_space:w } ~
+  { \__cmd_arg_to_keyvalue_loop:w }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_loop_N_type:N #1
+  {
+    \__cmd_if_recursion_tail_stop_do:Nn #1
+      { \__cmd_arg_to_keyvalue_set_default:nn }
+    \str_if_eq:nnTF {#1} { = }
+      {
+        \__cmd_use_i_delimit_by_q_recursion_stop:nw
+          { \__cmd_arg_to_keyvalue_set_keyvalue:nn }
+      }
+      {
+        \bool_lazy_or:nnTF
+            { \token_if_math_toggle_p:N #1 }
+            { \str_if_eq_p:nn {#1} { \( } }
+          { \__cmd_arg_to_keyvalue_math:w }
+          { \__cmd_arg_to_keyvalue_loop:w }
+      }
+  }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_math:w #1 \q__cmd_recursion_stop
+  {
+    \tl_if_head_is_N_type:nTF {#1}
+      { \__cmd_arg_to_keyvalue_math_N_type:N }
+      {
+        \tl_if_head_is_group:nTF {#1}
+          { \__cmd_arg_to_keyvalue_math_group:n }
+          { \__cmd_arg_to_keyvalue_math_space:w }
+      }
+        #1 \q__cmd_recursion_stop
+  }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_math_N_type:N #1
+  {
+    \__cmd_if_recursion_tail_stop_do:Nn #1
+      { \__cmd_arg_to_keyvalue_set_default:nn }
+    \bool_lazy_or:nnTF
+        { \token_if_math_toggle_p:N #1 }
+        { \str_if_eq_p:nn {#1} { \) } }
+      { \__cmd_arg_to_keyvalue_loop:w }
+      { \__cmd_arg_to_keyvalue_math:w }
+  }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_math_group:n #1
+  { \__cmd_arg_to_keyvalue_math:w }
+\use:n { \cs_new_protected:Npn \__cmd_arg_to_keyvalue_math_space:w } ~
+  { \__cmd_arg_to_keyvalue_math:w }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_set_default:nn #1#2
+  { \tl_set:Nn \ProcessedArgument { #1 = {#2} } }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_set_keyvalue:nn #1#2
+  { \tl_set:Nn \ProcessedArgument {#2} }
+\cs_new:Npn \__cmd_split_N_head_apply:Nn #1#2
+  { \exp:w \if_false: { \fi: \__cmd_split_N_head_apply_aux:NNw #1#2 } }
+\cs_new:Npn \__cmd_split_N_head_apply_aux:NNw #1#2
+  {
+    \exp_after:wN \exp_end:
+    \exp_after:wN #1 \exp_after:wN #2 \exp_after:wN { \if_false: } \fi:
+  }
+
 \cs_new_protected:Npn \__cmd_get_arg_spec_error:N #1
   {
     \bool_set_false:N \l__cmd_environment_bool
@@ -4085,6 +4263,13 @@
     This~is~only~supported~for~robust~commands,~but~not~for~expandable~ones.
     \c__cmd_ignore_def_tl
   }
+\msg_new:nnnn { cmd } { keyval-in-expandable }
+  { Invalid~argument~prefix~'='~in~command~'#1'. }
+  {
+    The~argument~specification~for~'#1'~contains~a~key--value~marker~'={#2}'.~
+    This~is~only~supported~for~robust~commands,~but~not~for~expandable~ones.
+    \c__cmd_ignore_def_tl
+  }
 \msg_new:nnnn { cmd } { too-many-args }
   { Too~many~arguments~for~#1. }
   {
@@ -9072,12 +9257,6 @@
               (local:~  \int_use:N\c at localmathalphabets)      }
   \cs_gset_eq:cc { mv@#1 at frozen }{ mv@#1 }
   \tl_gset:cx { g__nfss_frozen_mv_ #1 _tl }{ \int_use:c { c at mv@#1 } }
-  \group_insert_after:N \__nfss_init_mv_freeze:N
-  \exp_after:wN \group_insert_after:N \cs:w mv@#1 at reset \cs_end:
-  \tl_gput_right:No \check at mathfonts
-       {
-         \exp_after:wN \group_insert_after:N \cs:w mv@#1 at reset \cs_end:
-       }
   \cs_gset:cpn{mv@#1 at reset}
      {
          \int_compare:nNnTF { \int_use:c{c at mv@#1} } >
@@ -9097,10 +9276,6 @@
          \if at ignore \ignorespaces \fi
     }
 }
-\cs_new_protected:Npn \__nfss_init_mv_freeze:N #1 {%
-  \mode_if_math:T { \group_insert_after:N \__nfss_init_mv_freeze:N
-                    \group_insert_after:N } #1
-}
 \ExplSyntaxOff
 \def\process at table{%
     \def\cdp at elt##1##2##3##4{%
@@ -9148,6 +9323,11 @@
 \@onlypreamble\process at table
 \def\DeclareMathVersion#1{%
   \@namedef{g__nfss_frozen_mv_#1_tl}{}%
+  \expandafter\ifx\csname mv@#1\endcsname \relax
+    \expandafter \g at addto@macro \expandafter \check at mathfonts
+         \expandafter {\expandafter \aftergroup \csname mv@#1 at reset\endcsname}%
+    \@namedef{mv@#1 at reset}{}%
+  \fi
   \expandafter\new at mathversion\csname mv@#1\endcsname}
 \@onlypreamble\DeclareMathVersion
 \def\new at mathversion#1{%
@@ -9182,7 +9362,13 @@
   \xdef#1{\the\toks@}%
 }
 \@onlypreamble\new at mathversion
-\def\DeclareSymbolFont#1#2#3#4#5{%
+\def\DeclareSymbolFont #1#2#3#4#5{%
+ \def\reserved at a{\DeclareSymbolFont at m@dropped{#1}{#2}{#3}}%
+ \edef\reserved at b{#4}%
+ \series at maybe@drop at one@m\reserved at b\reserved at b
+ \expandafter\reserved at a\expandafter{\reserved at b}{#5}%
+}
+\def\DeclareSymbolFont at m@dropped #1#2#3#4#5{%
  \@tempswafalse
  \edef\reserved at b{#2}%
  \def\cdp at elt##1##2##3##4{\def\reserved at c{##1}%
@@ -9237,7 +9423,13 @@
     \version at list
 }
 \@onlypreamble\new at symbolfont
-\def\SetSymbolFont#1#2#3#4#5#6{%
+\def\SetSymbolFont #1#2#3#4#5#6{%
+ \def\reserved at a{\SetSymbolFont at m@dropped{#1}{#2}{#3}{#4}}%
+ \edef\reserved at b{#5}%
+ \series at maybe@drop at one@m\reserved at b\reserved at b
+ \expandafter\reserved at a\expandafter{\reserved at b}{#6}%
+}
+\def\SetSymbolFont at m@dropped#1#2#3#4#5#6{%
  \@tempswafalse
  \edef\reserved at b{#3}%
  \def\cdp at elt##1##2##3##4{\def\reserved at c{##1}%
@@ -10407,7 +10599,7 @@
    \@ifundefined{#1:#2}%
      {\@font at info{Setting #2 sub-encoding to #1/#3}}%
      {\@font at info{Changing #2 sub-encoding to #1/#3}}%
-     \@namedef{#1:#2}{#3}}
+     \global\@namedef{#1:#2}{#3}}
 \@onlypreamble\DeclareEncodingSubset
 \@onlypreamble\DeclareEncodingSubset at aux
 \@onlypreamble\@DeclareEncodingSubset
@@ -11380,7 +11572,8 @@
 \def\makesm at sh#1{%
   \setbox\z@\hbox{\color at begingroup#1\color at endgroup}\finsm at sh}
 \def\mathsm at sh#1#2{%
-  \setbox\z@\hbox{$\m at th#1{#2}$}\finsm at sh}
+  \setbox\z@\hbox{$\m at th#1{#2}$}%
+  {}\finsm at sh}
 \def\finsm at sh{\ht\z@\z@ \dp\z@\z@ \leavevmode at ifvmode\box\z@}
 \def\buildrel#1\over#2{\mathrel{\mathop{\kern\z@#2}\limits^{#1}}}
 \DeclareRobustCommand*\cases[1]{\left\{\,\vcenter{\normalbaselines\m at th
@@ -11998,6 +12191,7 @@
 \def\@minipagefalse{\global\let\if at minipage\iffalse}
 \def\@minipagetrue {\global\let\if at minipage\iftrue}
 \@minipagefalse
+\newif\if at in@minipage at env
 \def\minipage{%
   \@ifnextchar[%]
     \@iminipage
@@ -12019,6 +12213,14 @@
     \color at begingroup
       \hsize\@tempdima
       \textwidth\hsize \columnwidth\hsize
+      \if at in@minipage at env
+        \ifvoid\@mpfootins\else
+          \@latex at warning{Nested minipage:
+            footnotes may be misplaced}%
+        \fi
+      \else
+        \@in at minipage@envtrue
+      \fi
       \@parboxrestore
       \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c at mpfootnote\z@
       \let\@footnotetext\@mpfootnotetext
@@ -14055,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}%
@@ -14096,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{%
@@ -14117,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
         }%
@@ -14128,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}%
@@ -14146,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}%
@@ -14243,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%
@@ -14278,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
@@ -14447,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}
@@ -14816,6 +15016,7 @@
   \__keys_tmp:nn
     { code:n }          { code }
     { legacy_if_set:n } { if }
+    { legacy_if_set_inverse:n } { ifnot }
     { tl_set:N }        { store }
     { usage:n }         { usage }
     { \q_recursion_tail } { }
@@ -14828,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}
@@ -14858,7 +15060,7 @@
   { Unknown~option~'#1'~for~package~#2. }
   {
     LaTeX~has~been~asked~to~set~an~option~called~'#1'~
-    but~the~#2~package~has~not~created~an~option~with~this~name.
+    but~the~package~"\msg_module_name:n {#2}"~has~not~created~an~option~with~this~name.
   }
 \cs_new_protected:Npn \__keys_options_global:n #1
   {
@@ -14891,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} }
       }
   }
@@ -14970,19 +15173,23 @@
 \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 }
-  { Package~"#1"~has~already~been~loaded:~ignoring~load-time~option~"#2". }
+  {
+    Package~"\msg_module_name:n {#1}"~has~already~been~loaded:~
+    ignoring~load-time~option~"#2".
+  }
 \msg_new:nnnn { keys } { load-only }
-  { Key~"#2"~may~only~be~used~in~the~during~loading~of~package~"#1". }
   {
+    Key~"#2"~may~only~be~used~during~loading~of~package~
+    "\msg_module_name:n {#1}".
+  }
+  {
     LaTeX~was~asked~to~set~a~key~called~"#2",~but~this~is~only~allowed~
-    in~the~optional~argument~when~loading~package~"#1".
+    in~the~optional~argument~when~loading~package~"\msg_module_name:n{#1}".
   }
 \tl_gput_left:Nn \@kernel at after@begindocument
   {
@@ -15008,8 +15215,8 @@
   { \__keys_options_expand_module:Nn \keys_set:nn {#1} {#2} }
 \ExplSyntaxOff
 %%% From File: ltfilehook.dtx
-\providecommand\ltfilehookversion{v1.0m}
-\providecommand\ltfilehookdate{2022/04/01}
+\providecommand\ltfilehookversion{v1.0n}
+\providecommand\ltfilehookdate{2022/08/18}
 \ExplSyntaxOn
 \tl_new:N \CurrentFile
 \tl_new:N \CurrentFilePath
@@ -15262,8 +15469,12 @@
 \def\disable at package@load#1#2{%
   \global\@namedef{@pkg-disable@#1.\@pkgextension}{#2}}
 \def\@disable at packageload@do#1#2{%
-  \@ifundefined{@pkg-disable@#1}{#2}%
-     {\@nameuse{@pkg-disable@#1}}}
+  \@ifundefined{@pkg-disable@#1}%
+     {#2}%
+     {\@nameuse{@pkg-disable@#1}%
+      \@latex at info{Package '#1' has been disabled.%
+       \MessageBreak Load request ignored}%
+      \expandafter\@gobbletwo}}
 \def\reenable at package@load#1{%
   \global\expandafter\let
   \csname @pkg-disable@#1.\@pkgextension \endcsname \@undefined}
@@ -15297,8 +15508,7 @@
 %%
 %%% From File: ltshipout.dtx
 \providecommand\ltshipoutversion{v1.0m}
-\providecommand\ltshipoutdate{2022/05/08}
- %    \cs{AtBeginDvi} is the existing \LaTeXe{} interface to fill the
+\providecommand\ltshipoutdate{2022/08/26}
 \ExplSyntaxOn
 \bool_new:N \g__shipout_debug_bool
 \cs_new_eq:NN \__shipout_debug:n  \use_none:n
@@ -15798,6 +16008,8 @@
 \@maxdepth = \maxdepth
 \newdimen\paperheight
 \newdimen\paperwidth
+\newdimen\stockheight
+\newdimen\stockwidth
 \newif \if at insert
 \newif \if at fcolmade
 \newif \if at specialpage \@specialpagefalse
@@ -17137,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/base/latexrelease.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/latexrelease.sty	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/latexrelease.sty	2022-11-01 19:57:17 UTC (rev 64892)
@@ -290,7 +290,7 @@
 }
 %%% From File: ltvers.dtx
 \edef\latexreleaseversion
-   {2022-06-01}
+   {2022-11-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
@@ -1890,8 +1900,8 @@
 
 \EndIncludeInRelease
 %%% From File: ltcmd.dtx
-\def\ltcmdversion{v1.0l}
-\def\ltcmddate{2022-03-18}
+\def\ltcmdversion{v1.1a}
+\def\ltcmddate{2022-08-16}
 \edef\@latexrelease at catcode@null{\the\catcode`\^^@ }
 \catcode`\^^@=12
 \ExplSyntaxOn
@@ -1921,6 +1931,7 @@
 \bool_new:N \l__cmd_obey_spaces_bool
 \tl_new:N \l__cmd_last_delimiters_tl
 \bool_new:N \l__cmd_long_bool
+\bool_new:N \l__cmd_suppress_strip_bool
 \int_new:N \l__cmd_m_args_int
 \bool_new:N \l__cmd_prefixed_bool
 \tl_new:N \l__cmd_process_all_tl
@@ -1931,6 +1942,9 @@
 \bool_new:N \l__cmd_some_obey_spaces_bool
 \bool_new:N \l__cmd_some_long_bool
 \bool_new:N \l__cmd_some_short_bool
+\quark_new:N \q__cmd_recursion_tail
+\quark_new:N \q__cmd_recursion_stop
+\__kernel_quark_new_test:N \__cmd_if_recursion_tail_stop_do:Nn
 \prop_new:N \l__cmd_tmp_prop
 \tl_new:N \l__cmd_tmpa_tl
 \tl_new:N \l__cmd_tmpb_tl
@@ -2269,6 +2283,7 @@
     \bool_set_true:N \l__cmd_grab_expandably_bool
     \bool_set_false:N \l__cmd_obey_spaces_bool
     \bool_set_false:N \l__cmd_long_bool
+    \bool_set_false:N \l__cmd_suppress_strip_bool
     \bool_set_false:N \l__cmd_some_obey_spaces_bool
     \bool_set_false:N \l__cmd_some_long_bool
     \bool_set_false:N \l__cmd_some_short_bool
@@ -2359,30 +2374,48 @@
   }
 \cs_new_protected:cpn { __cmd_normalize_type_+:w } #1
   {
-    \quark_if_recursion_tail_stop_do:nn {#1} { \__cmd_bad_arg_spec:wn }
-    \bool_if:NT \l__cmd_long_bool
+    \__cmd_normalize_type_aux:NnNn + {#1}
+      \l__cmd_long_bool
+      { \bool_set_true:N \l__cmd_long_bool }
+  }
+\cs_new_protected:cpn { __cmd_normalize_type_!:w } #1
+  {
+    \__cmd_normalize_type_aux:NnNn ! {#1}
+      \l__cmd_obey_spaces_bool
       {
-        \msg_error:nnxx { cmd } { two-markers }
-          { \__cmd_environment_or_command: } { + }
-        \__cmd_bad_def:wn
+        \bool_set_true:N \l__cmd_obey_spaces_bool
+        \bool_set_true:N \l__cmd_some_obey_spaces_bool
       }
-    \bool_set_true:N \l__cmd_long_bool
-    \int_decr:N \l__cmd_current_arg_int
-    \__cmd_normalize_arg_spec_loop:n {#1}
   }
-\cs_new_protected:cpn { __cmd_normalize_type_!:w } #1
+\cs_new_protected:cpn { __cmd_normalize_type_=:w } #1#2
   {
-    \quark_if_recursion_tail_stop_do:nn {#1} { \__cmd_bad_arg_spec:wn }
-    \bool_if:NT \l__cmd_obey_spaces_bool
+    \__cmd_normalize_type_aux:NnNn = {#2}
+      \l__cmd_suppress_strip_bool
       {
+        \bool_if:NT \l__cmd_expandable_bool
+          {
+            \msg_error:nnxx { cmd } { keyval-in-expandable }
+              { \iow_char:N \\ \l__cmd_function_tl } { \tl_to_str:n {#1} }
+            \__cmd_bad_def:wn
+          }
+        \bool_set_true:N \l__cmd_suppress_strip_bool
+        \bool_set_false:N \l__cmd_grab_expandably_bool
+        \tl_put_right:Nx \l__cmd_arg_spec_tl
+          { = { \tl_trim_spaces:n {#1} } }
+      }
+  }
+\cs_new_protected:Npn \__cmd_normalize_type_aux:NnNn #1#2#3#4
+  {
+    \quark_if_recursion_tail_stop_do:nn {#2} { \__cmd_bad_arg_spec:wn }
+    \bool_if:NT #3
+      {
         \msg_error:nnxx { cmd } { two-markers }
-          { \__cmd_environment_or_command: } { ! }
+          { \__cmd_environment_or_command: } { #1 }
         \__cmd_bad_def:wn
       }
-    \bool_set_true:N \l__cmd_obey_spaces_bool
-    \bool_set_true:N \l__cmd_some_obey_spaces_bool
+    #4
     \int_decr:N \l__cmd_current_arg_int
-    \__cmd_normalize_arg_spec_loop:n {#1}
+    \__cmd_normalize_arg_spec_loop:n {#2}
   }
 \cs_new_protected:Npn \__cmd_normalize_type_D:w #1#2#3
   {
@@ -2579,6 +2612,7 @@
     \int_zero:N \l__cmd_current_arg_int
     \bool_set_false:N \l__cmd_long_bool
     \bool_set_false:N \l__cmd_obey_spaces_bool
+    \bool_set_false:N \l__cmd_suppress_strip_bool
     \int_zero:N \l__cmd_m_args_int
     \bool_set_false:N \l__cmd_defaults_bool
     \tl_clear:N \l__cmd_defaults_tl
@@ -2626,6 +2660,16 @@
     \tl_put_left:Nn \l__cmd_process_one_tl { {#1} }
     \__cmd_prepare_signature_bypass:N
   }
+\cs_new_protected:cpn { __cmd_add_type_=:w } #1
+  {
+    \__cmd_flush_m_args:
+    \bool_set_true:N \l__cmd_prefixed_bool
+    \bool_set_true:N \l__cmd_suppress_strip_bool
+    \bool_set_true:N \l__cmd_process_some_bool
+    \tl_put_left:Nn \l__cmd_process_one_tl
+      { { \__cmd_arg_to_keyvalue:nn {#1} } }
+    \__cmd_prepare_signature_bypass:N
+  }
 \cs_new_protected:Npn \__cmd_add_type_b:w
   {
     \__cmd_flush_m_args:
@@ -2716,11 +2760,16 @@
             __cmd_grab_ #1
             \bool_if:NT \l__cmd_long_bool { _long }
             \bool_if:NT \l__cmd_obey_spaces_bool { _obey_spaces }
+            \bool_lazy_and:nnT
+              { \l__cmd_suppress_strip_bool }
+              { \str_if_eq_p:nn {#1} { D } }
+              { _no_strip }
             :w
           }
       }
     \bool_set_false:N \l__cmd_long_bool
     \bool_set_false:N \l__cmd_obey_spaces_bool
+    \bool_set_false:N \l__cmd_suppress_strip_bool
     \tl_put_right:Nx \l__cmd_process_all_tl
       {
         {
@@ -3139,7 +3188,7 @@
     \quark_if_nil:nF {#1}
       { \tl_const:cn { c__cmd_show_type_#1_tl } {#2} \__cmd_tmp:w }
   }
-\__cmd_tmp:w t0 r1 d1 R2 D2 O3 e4 E5 +6 !6 >7 \q_nil \q_nil
+\__cmd_tmp:w t0 r1 d1 R2 D2 O3 e4 E5 +6 !6 >7 =7 \q_nil \q_nil
 \cs_new_protected:Npn \__cmd_show_delim:Nw #1 #2
   { \__cmd_split_end_item:n { #1 #2 } \__cmd_split_signature_loop:Nw }
 \cs_new_protected:Npn \__cmd_show_delims:Nw #1 #2 #3
@@ -3204,7 +3253,7 @@
   { \__cmd_grab_b_aux:NNw \cs_set_protected:Npn \exp_not:n }
 \cs_new_protected:Npn \__cmd_grab_b_aux:NNw #1#2#3 \__cmd_run_code:
   {
-    \__cmd_grab_D_aux:NNnN \begin \end {#3} #1
+    \__cmd_grab_D_aux:NNnNN \begin \end {#3} #1 \use_ii:nn
     \tl_put_left:Nn \l__cmd_signature_tl { \__cmd_grab_b_end:Nw #2 }
     \tl_set_eq:NN \l__cmd_saved_args_tl \l__cmd_args_tl
     \tl_clear:N \l__cmd_args_tl
@@ -3223,32 +3272,56 @@
   }
 \cs_new_protected:Npn \__cmd_grab_D:w #1#2#3 \__cmd_run_code:
   {
-    \__cmd_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected_nopar:Npn
-      \__cmd_peek_nonspace_remove:NTF
+    \__cmd_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn
+      \__cmd_peek_nonspace_remove:NTF \use_ii:nn
   }
 \cs_new_protected:Npn \__cmd_grab_D_long:w #1#2#3 \__cmd_run_code:
   {
-    \__cmd_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected:Npn
-      \__cmd_peek_nonspace_remove:NTF
+    \__cmd_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn
+      \__cmd_peek_nonspace_remove:NTF \use_ii:nn
   }
 \cs_new_protected:Npn \__cmd_grab_D_obey_spaces:w #1#2#3 \__cmd_run_code:
   {
-    \__cmd_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected_nopar:Npn
-      \__cmd_peek_meaning_remove:NTF
+    \__cmd_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn
+      \__cmd_peek_meaning_remove:NTF \use_ii:nn
   }
 \cs_new_protected:Npn \__cmd_grab_D_long_obey_spaces:w #1#2#3 \__cmd_run_code:
   {
-    \__cmd_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected:Npn
-      \__cmd_peek_meaning_remove:NTF
+    \__cmd_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn
+      \__cmd_peek_meaning_remove:NTF \use_ii:nn
   }
-\cs_new_protected:Npn \__cmd_grab_D_aux:NNnNN #1#2#3#4#5
+\cs_new_protected:Npn \__cmd_grab_D_no_strip:w
+  #1#2#3 \__cmd_run_code:
   {
-    \__cmd_grab_D_aux:NNnN #1#2 {#3} #4
+    \__cmd_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn
+      \__cmd_peek_nonspace_remove:NTF \use_none:n
+  }
+\cs_new_protected:Npn \__cmd_grab_D_long_no_strip:w
+  #1#2#3 \__cmd_run_code:
+  {
+    \__cmd_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn
+      \__cmd_peek_nonspace_remove:NTF \use_none:n
+  }
+\cs_new_protected:Npn \__cmd_grab_D_obey_spaces_no_strip:w
+  #1#2#3 \__cmd_run_code:
+  {
+    \__cmd_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn
+      \__cmd_peek_meaning_remove:NTF \use_none:n
+  }
+\cs_new_protected:Npn \__cmd_grab_D_long_obey_spaces_no_strip:w
+  #1#2#3 \__cmd_run_code:
+  {
+    \__cmd_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn
+      \__cmd_peek_meaning_remove:NTF \use_none:n
+  }
+\cs_new_protected:Npn \__cmd_grab_D_aux:NNnNNN #1#2#3#4#5#6
+  {
+    \__cmd_grab_D_aux:NNnNN #1#2 {#3} #4 #6
     #5 #1
       { \__cmd_grab_D_call:Nw #1 }
       { \__cmd_add_arg:o \c_novalue_tl }
   }
-\cs_new_protected:Npn \__cmd_grab_D_aux:NNnN #1#2#3#4
+\cs_new_protected:Npn \__cmd_grab_D_aux:NNnNN #1#2#3#4#5
   {
     \tl_set:Nn \l__cmd_signature_tl {#3}
     \exp_after:wN #4 \l__cmd_fn_tl ##1 #2
@@ -3262,7 +3335,7 @@
                 \str_if_eq:eeTF
                   { \exp_not:o { \use_none:n ##1 } }
                   { { \exp_not:o { \use_ii:nnn ##1 \q_nil } } }
-                  { \__cmd_add_arg:o { \use_ii:nn ##1 } }
+                  { \__cmd_add_arg:o { #5 ##1 } }
                   { \__cmd_add_arg:o { \use_none:n ##1 } }
               }
           }
@@ -3460,7 +3533,7 @@
   { \__cmd_grab_R_aux:NNnN #1 #2 {#3} \cs_set_protected:Npn }
 \cs_new_protected:Npn \__cmd_grab_R_aux:NNnN #1#2#3#4
   {
-    \__cmd_grab_D_aux:NNnN #1 #2 {#3} #4
+    \__cmd_grab_D_aux:NNnNN #1 #2 {#3} #4 \use_ii:nn
     \__cmd_peek_nonspace_remove:NTF #1
       { \__cmd_grab_D_call:Nw #1 }
       {
@@ -3916,6 +3989,121 @@
   }
 \cs_new_protected:Npn \__cmd_trim_spaces:n #1
   { \tl_set:Nx \ProcessedArgument { \tl_trim_spaces:n {#1} } }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue:nn #1#2
+  {
+    \tl_trim_spaces_apply:nN {#2} \__cmd_arg_to_keyvalue_braces:nnn
+      {#1} {#2}
+  }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_braces:nnn #1#2#3
+  {
+    \tl_if_head_is_group:nT {#1}
+      {
+        \tl_if_blank:oT { \use_none:n #1 }
+          {
+            \tl_set:Nx \ProcessedArgument { #2 = { \exp_not:n #1 } }
+            \use_none:nnnn
+          }
+      }
+    \__cmd_arg_to_keyvalue_auxi:nnn {#1} {#2} {#3}
+  }
+\cs_new:Npn \__cmd_arg_to_keyvalue_auxi:nnn #1
+  {
+    \tl_if_head_is_N_type:nTF {#1}
+      { \__cmd_split_N_head_apply:Nn \__cmd_arg_to_keyvalue_auxii:Nnnn {#1} }
+      { \__cmd_arg_to_keyvalue_auxv:nn }
+  }
+\cs_new:Npn \__cmd_arg_to_keyvalue_auxii:Nnnn #1#2
+  {
+    \str_if_eq:eeTF { \exp_not:n {#1} } { = }
+      { \tl_trim_spaces_apply:nN {#2} \__cmd_arg_to_keyvalue_auxiii:nnn }
+      { \__cmd_arg_to_keyvalue_auxv:nn }
+  }
+\cs_new:Npn \__cmd_arg_to_keyvalue_auxiii:nnn #1
+  {
+    \tl_if_head_is_N_type:nTF {#1}
+      { \__cmd_split_N_head_apply:Nn \__cmd_arg_to_keyvalue_auxiv:Nnnn {#1} }
+      { \__cmd_arg_to_keyvalue_auxv:nn }
+  }
+\cs_new:Npn \__cmd_arg_to_keyvalue_auxiv:Nnnn #1#2
+  {
+    \str_if_eq:eeTF { \exp_not:n {#1} } { , }
+      { \tl_set:Nn \ProcessedArgument {#2} \use_none:nn }
+      { \__cmd_arg_to_keyvalue_auxv:nn }
+  }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_auxv:nn #1#2
+  {
+    \__cmd_arg_to_keyvalue_loop:w #2
+      \q__cmd_recursion_tail \q__cmd_recursion_stop {#1} {#2}
+  }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_loop:w #1 \q__cmd_recursion_stop
+  {
+    \tl_if_head_is_N_type:nTF {#1}
+      { \__cmd_arg_to_keyvalue_loop_N_type:N }
+      {
+        \tl_if_head_is_group:nTF {#1}
+          { \__cmd_arg_to_keyvalue_loop_group:n }
+          { \__cmd_arg_to_keyvalue_loop_space:w }
+      }
+        #1 \q__cmd_recursion_stop
+  }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_loop_group:n #1
+  { \__cmd_arg_to_keyvalue_loop:w }
+\use:n { \cs_new_protected:Npn \__cmd_arg_to_keyvalue_loop_space:w } ~
+  { \__cmd_arg_to_keyvalue_loop:w }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_loop_N_type:N #1
+  {
+    \__cmd_if_recursion_tail_stop_do:Nn #1
+      { \__cmd_arg_to_keyvalue_set_default:nn }
+    \str_if_eq:nnTF {#1} { = }
+      {
+        \__cmd_use_i_delimit_by_q_recursion_stop:nw
+          { \__cmd_arg_to_keyvalue_set_keyvalue:nn }
+      }
+      {
+        \bool_lazy_or:nnTF
+            { \token_if_math_toggle_p:N #1 }
+            { \str_if_eq_p:nn {#1} { \( } }
+          { \__cmd_arg_to_keyvalue_math:w }
+          { \__cmd_arg_to_keyvalue_loop:w }
+      }
+  }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_math:w #1 \q__cmd_recursion_stop
+  {
+    \tl_if_head_is_N_type:nTF {#1}
+      { \__cmd_arg_to_keyvalue_math_N_type:N }
+      {
+        \tl_if_head_is_group:nTF {#1}
+          { \__cmd_arg_to_keyvalue_math_group:n }
+          { \__cmd_arg_to_keyvalue_math_space:w }
+      }
+        #1 \q__cmd_recursion_stop
+  }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_math_N_type:N #1
+  {
+    \__cmd_if_recursion_tail_stop_do:Nn #1
+      { \__cmd_arg_to_keyvalue_set_default:nn }
+    \bool_lazy_or:nnTF
+        { \token_if_math_toggle_p:N #1 }
+        { \str_if_eq_p:nn {#1} { \) } }
+      { \__cmd_arg_to_keyvalue_loop:w }
+      { \__cmd_arg_to_keyvalue_math:w }
+  }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_math_group:n #1
+  { \__cmd_arg_to_keyvalue_math:w }
+\use:n { \cs_new_protected:Npn \__cmd_arg_to_keyvalue_math_space:w } ~
+  { \__cmd_arg_to_keyvalue_math:w }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_set_default:nn #1#2
+  { \tl_set:Nn \ProcessedArgument { #1 = {#2} } }
+\cs_new_protected:Npn \__cmd_arg_to_keyvalue_set_keyvalue:nn #1#2
+  { \tl_set:Nn \ProcessedArgument {#2} }
+\cs_new:Npn \__cmd_split_N_head_apply:Nn #1#2
+  { \exp:w \if_false: { \fi: \__cmd_split_N_head_apply_aux:NNw #1#2 } }
+\cs_new:Npn \__cmd_split_N_head_apply_aux:NNw #1#2
+  {
+    \exp_after:wN \exp_end:
+    \exp_after:wN #1 \exp_after:wN #2 \exp_after:wN { \if_false: } \fi:
+  }
+
 \cs_new_protected:Npn \__cmd_get_arg_spec_error:N #1
   {
     \bool_set_false:N \l__cmd_environment_bool
@@ -4261,6 +4449,13 @@
     This~is~only~supported~for~robust~commands,~but~not~for~expandable~ones.
     \c__cmd_ignore_def_tl
   }
+\msg_new:nnnn { cmd } { keyval-in-expandable }
+  { Invalid~argument~prefix~'='~in~command~'#1'. }
+  {
+    The~argument~specification~for~'#1'~contains~a~key--value~marker~'={#2}'.~
+    This~is~only~supported~for~robust~commands,~but~not~for~expandable~ones.
+    \c__cmd_ignore_def_tl
+  }
 \msg_new:nnnn { cmd } { too-many-args }
   { Too~many~arguments~for~#1. }
   {
@@ -9240,44 +9435,6 @@
  \expandafter#1\ifx\math at bgroup\bgroup{#4}\else#4\fi
  }%
 }
-\ExplSyntaxOn
-\cs_new_protected:Npn\freeze at math@version #1 {
-  \@font at info{Freeze~ math~ alphabet~ allocation~ in~ version~
-              #1.\MessageBreak
-              Allocated~math~groups:~\int_use:c{ c at mv@ #1 }~
-              (local:~  \int_use:N\c at localmathalphabets)      }
-  \cs_gset_eq:cc { mv@#1 at frozen }{ mv@#1 }
-  \tl_gset:cx { g__nfss_frozen_mv_ #1 _tl }{ \int_use:c { c at mv@#1 } }
-  \group_insert_after:N \__nfss_init_mv_freeze:N
-  \exp_after:wN \group_insert_after:N \cs:w mv@#1 at reset \cs_end:
-  \tl_gput_right:No \check at mathfonts
-       {
-         \exp_after:wN \group_insert_after:N \cs:w mv@#1 at reset \cs_end:
-       }
-  \cs_gset:cpn{mv@#1 at reset}
-     {
-         \int_compare:nNnTF { \int_use:c{c at mv@#1} } >
-                            { \tl_use:c{g__nfss_frozen_mv_ #1 _tl} }
-             {
-               \@font at info{Undo~ math~ alphabet~ allocation~ in~ version~ #1}
-               \cs_gset_eq:cc { mv@#1 }{ mv@#1 at frozen }
-               \int_gset:cn { c at mv@#1 }{ \tl_use:c {g__nfss_frozen_mv_ #1 _tl} }
-               \group_begin:
-                 \cs_set_eq:NN \getanddefine at fonts \use_none:nn
-                 \use:c {mv@#1}
-               \group_end:
-             }
-             {
-               \@font at info{No~ math~ alphabet~ change~ to~ frozen~ version~ #1}
-             }
-         \if at ignore \ignorespaces \fi
-    }
-}
-\cs_new_protected:Npn \__nfss_init_mv_freeze:N #1 {%
-  \mode_if_math:T { \group_insert_after:N \__nfss_init_mv_freeze:N
-                    \group_insert_after:N } #1
-}
-\ExplSyntaxOff
 \EndIncludeInRelease
 \IncludeInRelease{2020/10/01}
   {\document at select@group}{\document at select@group}%
@@ -9371,18 +9528,188 @@
  }%
 }
 \EndIncludeInRelease
-\IncludeInRelease{2021/11/15}%
+\IncludeInRelease{2022/11/01}%
+                 {\freeze at math@version}{freeze math version}%
+\ExplSyntaxOn
+\cs_new_protected:Npn\freeze at math@version #1 {
+  \@font at info{Freeze~ math~ alphabet~ allocation~ in~ version~
+              #1.\MessageBreak
+              Allocated~math~groups:~\int_use:c{ c at mv@ #1 }~
+              (local:~  \int_use:N\c at localmathalphabets)      }
+  \cs_gset_eq:cc { mv@#1 at frozen }{ mv@#1 }
+  \tl_gset:cx { g__nfss_frozen_mv_ #1 _tl }{ \int_use:c { c at mv@#1 } }
+  \cs_gset:cpn{mv@#1 at reset}
+     {
+         \int_compare:nNnTF { \int_use:c{c at mv@#1} } >
+                            { \tl_use:c{g__nfss_frozen_mv_ #1 _tl} }
+             {
+               \@font at info{Undo~ math~ alphabet~ allocation~ in~ version~ #1}
+               \cs_gset_eq:cc { mv@#1 }{ mv@#1 at frozen }
+               \int_gset:cn { c at mv@#1 }{ \tl_use:c {g__nfss_frozen_mv_ #1 _tl} }
+               \group_begin:
+                 \cs_set_eq:NN \getanddefine at fonts \use_none:nn
+                 \use:c {mv@#1}
+               \group_end:
+             }
+             {
+               \@font at info{No~ math~ alphabet~ change~ to~ frozen~ version~ #1}
+             }
+         \if at ignore \ignorespaces \fi
+    }
+}
+\ExplSyntaxOff
+\EndIncludeInRelease
+\IncludeInRelease{2021/11/15}
+                 {\freeze at math@version}{freeze math version}%
+
+\ExplSyntaxOn
+\cs_set_protected:Npn\freeze at math@version #1 {
+  \@font at info{Freeze~ math~ alphabet~ allocation~ in~ version~
+              #1.\MessageBreak
+              Allocated~math~groups:~\int_use:c{ c at mv@ #1 }~
+              (local:~  \int_use:N\c at localmathalphabets)      }
+  \cs_gset_eq:cc { mv@#1 at frozen }{ mv@#1 }
+  \tl_gset:cx { g__nfss_frozen_mv_ #1 _tl }{ \int_use:c { c at mv@#1 } }
+  \group_insert_after:N \__nfss_init_mv_freeze:N
+  \exp_after:wN \group_insert_after:N \cs:w mv@#1 at reset \cs_end:
+  \tl_gput_right:No \check at mathfonts
+       {
+         \exp_after:wN \group_insert_after:N \cs:w mv@#1 at reset \cs_end:
+       }
+  \cs_gset:cpn{mv@#1 at reset}
+     {
+         \int_compare:nNnTF { \int_use:c{c at mv@#1} } >
+                            { \tl_use:c{g__nfss_frozen_mv_ #1 _tl} }
+             {
+               \@font at info{Undo~ math~ alphabet~ allocation~ in~ version~ #1}
+               \cs_gset_eq:cc { mv@#1 }{ mv@#1 at frozen }
+               \int_gset:cn { c at mv@#1 }{ \tl_use:c {g__nfss_frozen_mv_ #1 _tl} }
+               \group_begin:
+                 \cs_set_eq:NN \getanddefine at fonts \use_none:nn
+                 \use:c {mv@#1}
+               \group_end:
+             }
+             {
+               \@font at info{No~ math~ alphabet~ change~ to~ frozen~ version~ #1}
+             }
+         \if at ignore \ignorespaces \fi
+    }
+}
+\cs_set_protected:Npn \__nfss_init_mv_freeze:N #1 {%
+  \mode_if_math:T { \group_insert_after:N \__nfss_init_mv_freeze:N
+                    \group_insert_after:N } #1
+}
+\ExplSyntaxOff
+
+\EndIncludeInRelease
+\IncludeInRelease{2022/11/01}%
                  {\DeclareMathVersion}{local alphabets}%
 \def\DeclareMathVersion#1{%
   \@namedef{g__nfss_frozen_mv_#1_tl}{}%
+  \expandafter\ifx\csname mv@#1\endcsname \relax
+    \expandafter \g at addto@macro \expandafter \check at mathfonts
+         \expandafter {\expandafter \aftergroup \csname mv@#1 at reset\endcsname}%
+    \@namedef{mv@#1 at reset}{}%
+  \fi
   \expandafter\new at mathversion\csname mv@#1\endcsname}
 \@onlypreamble\DeclareMathVersion
 \EndIncludeInRelease
+\IncludeInRelease{2021/11/15}%
+                 {\DeclareMathVersion}{local alphabets}%
+\def\DeclareMathVersion#1{%
+  \@namedef{g__nfss_frozen_mv_#1_tl}{}%
+  \expandafter\new at mathversion\csname mv@#1\endcsname}
+\EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
                  {\DeclareMathVersion}{local alphabets}%
 \def\DeclareMathVersion#1{%
   \expandafter\new at mathversion\csname mv@#1\endcsname}
 \EndIncludeInRelease
+\IncludeInRelease{2022/11/01}%
+                 {\DeclareSymbolFont}{maybe drop m}%
+\def\DeclareSymbolFont #1#2#3#4#5{%
+ \def\reserved at a{\DeclareSymbolFont at m@dropped{#1}{#2}{#3}}%
+ \edef\reserved at b{#4}%
+ \series at maybe@drop at one@m\reserved at b\reserved at b
+ \expandafter\reserved at a\expandafter{\reserved at b}{#5}%
+}
+\def\DeclareSymbolFont at m@dropped #1#2#3#4#5{%
+ \@tempswafalse
+ \edef\reserved at b{#2}%
+ \def\cdp at elt##1##2##3##4{\def\reserved at c{##1}%
+      \ifx\reserved at b\reserved at c \@tempswatrue\fi}%
+ \cdp at list
+ \if at tempswa
+   \@ifundefined{sym#1}{%
+      \ifnum\count18<15 %
+        \expandafter\new at mathgroup\csname sym#1\endcsname
+        \expandafter\new at symbolfont\csname sym#1\endcsname
+                        {#2}{#3}{#4}{#5}%
+      \else
+         \@latex at error{Too many symbol fonts declared}\@eha
+      \fi
+     }%
+     {%
+      \@font at info{Redeclaring symbol font `#1'}%
+      \def\group at elt##1##2{%
+           \noexpand\group at elt\noexpand##1%
+           \expandafter\ifx\csname sym#1\endcsname##1%
+             \expandafter\noexpand\csname#2/#3/#4/#5\endcsname
+           \else
+               \noexpand##2%
+           \fi}%
+      \xdef\group at list{\group at list}%
+      \def\version at elt##1{%
+          \expandafter
+          \SetSymbolFont@\expandafter##1\csname#2/#3/#4/#5\expandafter
+              \endcsname \csname sym#1\endcsname
+          }%
+      \version at list
+     }%
+  \else
+    \@latex at error{Encoding scheme  `#2' unknown}\@eha
+  \fi
+  }
+\@onlypreamble\DeclareSymbolFont
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\DeclareSymbolFont}{maybe drop m}%
+
+\let\DeclareSymbolFont\DeclareSymbolFont at m@dropped
+\let\DeclareSymbolFont at m@dropped\@undefined
+
+\EndIncludeInRelease
+\IncludeInRelease{2022/11/01}%
+                 {\SetSymbolFont}{maybe drop m}%
+\def\SetSymbolFont #1#2#3#4#5#6{%
+ \def\reserved at a{\SetSymbolFont at m@dropped{#1}{#2}{#3}{#4}}%
+ \edef\reserved at b{#5}%
+ \series at maybe@drop at one@m\reserved at b\reserved at b
+ \expandafter\reserved at a\expandafter{\reserved at b}{#6}%
+}
+\def\SetSymbolFont at m@dropped#1#2#3#4#5#6{%
+ \@tempswafalse
+ \edef\reserved at b{#3}%
+ \def\cdp at elt##1##2##3##4{\def\reserved at c{##1}%
+      \ifx\reserved at b\reserved at c \@tempswatrue\fi}%
+ \cdp at list
+ \if at tempswa
+  \expandafter\SetSymbolFont@
+    \csname mv@#2\expandafter\endcsname\csname#3/#4/#5/#6\expandafter
+    \endcsname \csname sym#1\endcsname
+ \else
+  \@latex at error{Encoding scheme  `#3' unknown}\@eha
+ \fi
+}
+\@onlypreamble\SetSymbolFont
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\SetSymbolFont}{maybe drop m}%
+
+\let\SetSymbolFont\SetSymbolFont at m@dropped
+\let\SetSymbolFont at m@dropped\@undefined
+
+\EndIncludeInRelease
 \IncludeInRelease{2019/10/01}%
                  {DeclareMathAccent}{Make math accents robust}%
 \def\DeclareMathAccent#1#2#3#4{%
@@ -10247,7 +10574,7 @@
    \@ifundefined{#1:#2}%
      {\@font at info{Setting #2 sub-encoding to #1/#3}}%
      {\@font at info{Changing #2 sub-encoding to #1/#3}}%
-     \@namedef{#1:#2}{#3}}
+     \global\@namedef{#1:#2}{#3}}
 \@onlypreamble\DeclareEncodingSubset
 \@onlypreamble\DeclareEncodingSubset at aux
 \@onlypreamble\@DeclareEncodingSubset
@@ -11566,6 +11893,17 @@
   \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi
   \ifh@ \wd\tw@\wd\z@\fi \box\tw@}
 \EndIncludeInRelease
+\IncludeInRelease{2022/11/01}%
+                 {\mathsm at sh}{Guard against reboxing}%
+\def\mathsm at sh#1#2{%
+  \setbox\z@\hbox{$\m at th#1{#2}$}%
+  {}\finsm at sh}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\mathsm at sh}{Guard against reboxing}%
+\def\mathsm at sh#1#2{%
+  \setbox\z@\hbox{$\m at th#1{#2}$}\finsm at sh}
+\EndIncludeInRelease
 \IncludeInRelease{2018/12/01}%
                  {\finsm at sh}{Start LR-mode}%
 \def\finsm at sh{\ht\z@\z@ \dp\z@\z@ \leavevmode at ifvmode\box\z@}
@@ -13699,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}%
@@ -13765,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
         }%
@@ -13794,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}%
@@ -13828,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}%
@@ -13893,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%
@@ -13985,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
@@ -14534,8 +14870,8 @@
 \endgroup%
 \EndIncludeInRelease
 %%% From File: ltfilehook.dtx
-\providecommand\ltfilehookversion{v1.0m}
-\providecommand\ltfilehookdate{2022/04/01}
+\providecommand\ltfilehookversion{v1.0n}
+\providecommand\ltfilehookdate{2022/08/18}
 \IncludeInRelease{2020/10/01}%
                  {\CurrentFile}{Hook management file}%
 \ExplSyntaxOn
@@ -14970,8 +15306,12 @@
 \def\disable at package@load#1#2{%
   \global\@namedef{@pkg-disable@#1.\@pkgextension}{#2}}
 \def\@disable at packageload@do#1#2{%
-  \@ifundefined{@pkg-disable@#1}{#2}%
-     {\@nameuse{@pkg-disable@#1}}}
+  \@ifundefined{@pkg-disable@#1}%
+     {#2}%
+     {\@nameuse{@pkg-disable@#1}%
+      \@latex at info{Package '#1' has been disabled.%
+       \MessageBreak Load request ignored}%
+      \expandafter\@gobbletwo}}
 \def\reenable at package@load#1{%
   \global\expandafter\let
   \csname @pkg-disable@#1.\@pkgextension \endcsname \@undefined}
@@ -15020,8 +15360,7 @@
 %%
 %%% From File: ltshipout.dtx
 \providecommand\ltshipoutversion{v1.0m}
-\providecommand\ltshipoutdate{2022/05/08}
- %    \cs{AtBeginDvi} is the existing \LaTeXe{} interface to fill the
+\providecommand\ltshipoutdate{2022/08/26}
 \IncludeInRelease{2020/10/01}%
                  {\shipout}{Hook management (shipout)}%
 \ExplSyntaxOn

Modified: trunk/Master/texmf-dist/tex/latex/base/ltluatex.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ltluatex.lua	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/ltluatex.lua	2022-11-01 19:57:17 UTC (rev 64892)
@@ -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,
@@ -296,9 +396,6 @@
   ligaturing             = simple,
   kerning                = simple,
   insert_local_par       = simple,
-  pre_mlist_to_hlist_filter = list,
-  mlist_to_hlist         = exclusive,
-  post_mlist_to_hlist_filter = reverselist,
   new_graf               = exclusive,
   pre_dump             = simple,
   start_run            = simple,
@@ -329,6 +426,15 @@
   provide_charproc_data           = exclusive,
 }
 luatexbase.callbacktypes=callbacktypes
+local shared_callbacks = {
+  mlist_to_hlist = {
+    callback = "mlist_to_hlist",
+    count = 0,
+    handler = nil,
+  },
+}
+shared_callbacks.pre_mlist_to_hlist_filter = shared_callbacks.mlist_to_hlist
+shared_callbacks.post_mlist_to_hlist_filter = shared_callbacks.mlist_to_hlist
 local callback_register = callback_register or callback.register
 function callback.register()
   luatexbase_error("Attempt to use callback.register() directly\n")
@@ -415,11 +521,7 @@
   [reverselist] = list_handler_default,
   [simple]      = simple_handler_default,
 }
-local user_callbacks_defaults = {
-  pre_mlist_to_hlist_filter = list_handler_default,
-  mlist_to_hlist = node.mlist_to_hlist,
-  post_mlist_to_hlist_filter = list_handler_default,
-}
+local user_callbacks_defaults = {}
 local function create_callback(name, ctype, default)
   local ctype_id = types[ctype]
   if not name  or name  == ""
@@ -479,11 +581,17 @@
         .. "add_to_callback(<callback>, <function>, <description>)"
     )
   end
-  local l = callbacklist[name]
+  local l = realcallbacklist[name]
   if l == nil then
     l = { }
-    callbacklist[name] = l
-    if user_callbacks_defaults[name] == nil then
+    realcallbacklist[name] = l
+    local shared = shared_callbacks[name]
+    if shared then
+      shared.count = shared.count + 1
+      if shared.count == 1 then
+        callback_register(shared.callback, shared.handler)
+      end
+    elseif user_callbacks_defaults[name] == nil then
       callback_register(name, handlers[callbacktypes[name]](name))
     end
   end
@@ -491,7 +599,6 @@
     func        = func,
     description = description,
   }
-  local priority = #l + 1
   if callbacktypes[name] == exclusive then
     if #l == 1 then
       luatexbase_error(
@@ -499,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" ..
@@ -520,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")
@@ -543,8 +693,15 @@
     "Removing  `" .. description .. "' from `" .. name .. "'."
   )
   if #l == 0 then
+    realcallbacklist[name] = nil
     callbacklist[name] = nil
-    if user_callbacks_defaults[name] == nil then
+    local shared = shared_callbacks[name]
+    if shared then
+      shared.count = shared.count - 1
+      if shared.count == 0 then
+        callback_register(shared.callback, nil)
+      end
+    elseif user_callbacks_defaults[name] == nil then
       callback_register(name, nil)
     end
   end
@@ -554,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
@@ -568,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")
@@ -579,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
@@ -600,7 +757,10 @@
   luatexbase = nil
 end
 luatexbase.uninstall = uninstall
-callback_register("mlist_to_hlist", function(head, display_type, need_penalties)
+create_callback('pre_mlist_to_hlist_filter', 'list')
+create_callback('mlist_to_hlist', 'exclusive', node.mlist_to_hlist)
+create_callback('post_mlist_to_hlist_filter', 'list')
+function shared_callbacks.mlist_to_hlist.handler(head, display_type, need_penalties)
   local current = call_callback("pre_mlist_to_hlist_filter", head, display_type, need_penalties)
   if current == false then
     flush_list(head)
@@ -613,4 +773,4 @@
     return nil
   end
   return post
-end)
+end

Modified: trunk/Master/texmf-dist/tex/latex/base/ltluatex.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ltluatex.tex	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/ltluatex.tex	2022-11-01 19:57:17 UTC (rev 64892)
@@ -47,7 +47,7 @@
   #1#2[#3]{\endgroup\immediate\write-1{File: #1 #3}}
 \fi
 \ProvidesFile{ltluatex.tex}%
-[2021/12/27 v1.1x
+[2022/10/03 v1.2a
   LuaTeX support for plain TeX (core)
 ]
 \edef\etatcatcode{\the\catcode`\@}

Modified: trunk/Master/texmf-dist/tex/latex/base/omlcmm.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/omlcmm.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/omlcmm.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{omlcmm.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \DeclareFontFamily{OML}{cmm}{\skewchar\font127 }
 \DeclareFontShape{OML}{cmm}{m}{it}%
      {<5><6><7><8><9>gen*cmmi%

Modified: trunk/Master/texmf-dist/tex/latex/base/omlcmr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/omlcmr.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/omlcmr.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{omlcmr.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \DeclareFontFamily{OML}{cmr}{\skewchar\font127 }
 \DeclareFontShape{OML}{cmr}{m}{n}%
    {<->ssub*cmm/m/it}{}

Modified: trunk/Master/texmf-dist/tex/latex/base/omscmr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/omscmr.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/omscmr.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{omscmr.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \DeclareFontFamily{OMS}{cmr}{\skewchar\font48 }
 \DeclareFontShape{OMS}{cmr}{m}{n}%
    {<->ssub*cmsy/m/n}{}

Modified: trunk/Master/texmf-dist/tex/latex/base/omscmsy.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/omscmsy.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/omscmsy.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{omscmsy.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \DeclareFontFamily{OMS}{cmsy}{\skewchar\font48 }
 \DeclareFontShape{OMS}{cmsy}{m}{n}{%
       <5><6><7><8><9><10>gen*cmsy%

Modified: trunk/Master/texmf-dist/tex/latex/base/omxcmex.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/omxcmex.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/omxcmex.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{omxcmex.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \DeclareFontFamily{OMX}{cmex}{}
 \DeclareFontShape{OMX}{cmex}{m}{n}{%
    <->sfixed*cmex10%

Modified: trunk/Master/texmf-dist/tex/latex/base/ot1cmdh.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot1cmdh.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/ot1cmdh.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{ot1cmdh.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \DeclareFontFamily{OT1}{cmdh}{\hyphenchar\font45 }
 \DeclareFontShape{OT1}{cmdh}{m}{n}{%
       <10>cmdunh10%

Modified: trunk/Master/texmf-dist/tex/latex/base/ot1cmfib.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot1cmfib.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/ot1cmfib.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{ot1cmfib.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \DeclareFontFamily{OT1}{cmfib}{\hyphenchar\font45 }
 \DeclareFontShape{OT1}{cmfib}{m}{n}{%
       <8>cmfib8%

Modified: trunk/Master/texmf-dist/tex/latex/base/ot1cmfr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot1cmfr.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/ot1cmfr.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{ot1cmfr.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \DeclareFontFamily{OT1}{cmfr}{\hyphenchar\font45 }
 \DeclareFontShape{OT1}{cmfr}{m}{n}{%
       <10>cmff10%

Modified: trunk/Master/texmf-dist/tex/latex/base/ot1cmr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot1cmr.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/ot1cmr.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{ot1cmr.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \DeclareFontFamily{OT1}{cmr}{\hyphenchar\font45 }
 \DeclareFontShape{OT1}{cmr}{m}{n}%
      {<5><6><7><8><9><10><12>gen*cmr%

Modified: trunk/Master/texmf-dist/tex/latex/base/ot1cmss.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot1cmss.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/ot1cmss.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{ot1cmss.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \DeclareFontFamily{OT1}{cmss}{\hyphenchar\font45 }
 \DeclareFontShape{OT1}{cmss}{m}{n}
      {%

Modified: trunk/Master/texmf-dist/tex/latex/base/ot1cmtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot1cmtt.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/ot1cmtt.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{ot1cmtt.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \DeclareFontFamily{OT1}{cmtt}{\hyphenchar \font\m at ne}
 \DeclareFontShape{OT1}{cmtt}{m}{n}
      {%

Modified: trunk/Master/texmf-dist/tex/latex/base/ot1cmvtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ot1cmvtt.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/ot1cmvtt.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{ot1cmvtt.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \DeclareFontFamily{OT1}{cmvtt}{\hyphenchar\font45 }
 \DeclareFontShape{OT1}{cmvtt}{m}{n}%
      {%

Modified: trunk/Master/texmf-dist/tex/latex/base/report.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/report.cls	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/report.cls	2022-11-01 19:57:17 UTC (rev 64892)
@@ -43,7 +43,7 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
 \ProvidesClass{report}
-              [2021/10/04 v1.4n
+              [2022/07/02 v1.4n
  Standard LaTeX document class]
 \newcommand\@ptsize{}
 \newif\if at restonecol

Modified: trunk/Master/texmf-dist/tex/latex/base/shortvrb.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/shortvrb.sty	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/shortvrb.sty	2022-11-01 19:57:17 UTC (rev 64892)
@@ -43,7 +43,7 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}[1994/12/01]
 \ProvidesPackage{shortvrb}
-  [2022/06/08 v3.0j
+  [2022/07/03 v3.0k
    Standard LaTeX documentation package V3 (FMi)]
 %%
 %% Package `doc' to use with LaTeX 2e

Modified: trunk/Master/texmf-dist/tex/latex/base/size10.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/size10.clo	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/size10.clo	2022-11-01 19:57:17 UTC (rev 64892)
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 \ProvidesFile{size10.clo}
-              [2021/10/04 v1.4n
+              [2022/07/02 v1.4n
       Standard LaTeX file (size option)]
 \renewcommand\normalsize{%
    \@setfontsize\normalsize\@xpt\@xiipt

Modified: trunk/Master/texmf-dist/tex/latex/base/size11.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/size11.clo	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/size11.clo	2022-11-01 19:57:17 UTC (rev 64892)
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 \ProvidesFile{size11.clo}
-              [2021/10/04 v1.4n
+              [2022/07/02 v1.4n
       Standard LaTeX file (size option)]
 \renewcommand\normalsize{%
    \@setfontsize\normalsize\@xipt{13.6}%

Modified: trunk/Master/texmf-dist/tex/latex/base/size12.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/size12.clo	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/size12.clo	2022-11-01 19:57:17 UTC (rev 64892)
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 \ProvidesFile{size12.clo}
-              [2021/10/04 v1.4n
+              [2022/07/02 v1.4n
       Standard LaTeX file (size option)]
 \renewcommand\normalsize{%
    \@setfontsize\normalsize\@xiipt{14.5}%

Modified: trunk/Master/texmf-dist/tex/latex/base/structuredlog.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/structuredlog.sty	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/structuredlog.sty	2022-11-01 19:57:17 UTC (rev 64892)
@@ -42,8 +42,8 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 %%% From File: ltfilehook.dtx
-\providecommand\ltfilehookversion{v1.0m}
-\providecommand\ltfilehookdate{2022/04/01}
+\providecommand\ltfilehookversion{v1.0n}
+\providecommand\ltfilehookdate{2022/08/18}
 \ProvidesExplPackage
     {structuredlog}{\ltfilehookdate}{\ltfilehookversion}
     {Structuring the TeX transcript file}

Modified: trunk/Master/texmf-dist/tex/latex/base/t1cmdh.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t1cmdh.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/t1cmdh.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{t1cmdh.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \providecommand{\EC at family}[5]{%
   \DeclareFontShape{#1}{#2}{#3}{#4}%
   {<5><6><7><8><9><10><10.95><12><14.4>%

Modified: trunk/Master/texmf-dist/tex/latex/base/t1cmfib.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t1cmfib.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/t1cmfib.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{t1cmfib.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \providecommand{\EC at family}[5]{%
   \DeclareFontShape{#1}{#2}{#3}{#4}%
   {<5><6><7><8><9><10><10.95><12><14.4>%

Modified: trunk/Master/texmf-dist/tex/latex/base/t1cmfr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t1cmfr.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/t1cmfr.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{t1cmfr.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \providecommand{\EC at family}[5]{%
   \DeclareFontShape{#1}{#2}{#3}{#4}%
   {<5><6><7><8><9><10><10.95><12><14.4>%

Modified: trunk/Master/texmf-dist/tex/latex/base/t1cmr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t1cmr.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/t1cmr.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{t1cmr.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \providecommand{\EC at family}[5]{%
   \DeclareFontShape{#1}{#2}{#3}{#4}%
   {<5><6><7><8><9><10><10.95><12><14.4>%
@@ -62,6 +62,9 @@
 \EC at family{T1}{cmr}{bx}{sl}{ecbl}
 \EC at family{T1}{cmr}{bx}{sc}{ecxc}
 \EC at family{T1}{cmr}{m}{ui}{ecui}
+\EC at family{T1}{cmr}{m}{scsl}{ecsc}
+\EC at family{T1}{cmr}{bx}{scsl}{ecoc}
+\EC at family{T1}{cmr}{b}{scsl}{ecoc}
 \endinput
 %%
 %% End of file `t1cmr.fd'.

Modified: trunk/Master/texmf-dist/tex/latex/base/t1cmss.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t1cmss.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/t1cmss.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,18 +46,18 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{t1cmss.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
-\providecommand{\EC at family}[5]{%
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
+\providecommand{\EC at ssfamily}[5]{%
   \DeclareFontShape{#1}{#2}{#3}{#4}%
-  {<5><6><7><8><9><10><10.95><12><14.4>%
-   <17.28><20.74><24.88><29.86><35.83>genb*#5}{}}
+  {<5><6><7><8>#50800%
+   <9><10><10.95><12><14.4><17.28><20.74><24.88><29.86><35.83>genb*#5}{}}
 \DeclareFontFamily{T1}{cmss}{}
-\EC at family{T1}{cmss}{m}{n}{ecss}
-\EC at family{T1}{cmss}{m}{sl}{ecsi}
-\EC at family{T1}{cmss}{m}{it}{ecsi}
-\EC at family{T1}{cmss}{bx}{n}{ecsx}
-\EC at family{T1}{cmss}{bx}{it}{ecso}
-\EC at family{T1}{cmss}{bx}{sl}{ecso}
+\EC at ssfamily{T1}{cmss}{m}{n}{ecss}
+\EC at ssfamily{T1}{cmss}{m}{sl}{ecsi}
+\EC at ssfamily{T1}{cmss}{m}{it}{ecsi}
+\EC at ssfamily{T1}{cmss}{bx}{n}{ecsx}
+\EC at ssfamily{T1}{cmss}{bx}{it}{ecso}
+\EC at ssfamily{T1}{cmss}{bx}{sl}{ecso}
 %%%%%% Font/shape undefined, therefore substituted
 \DeclareFontShape{T1}{cmss}{m}{sc}%
        {<->sub*cmr/m/sc}{}

Modified: trunk/Master/texmf-dist/tex/latex/base/t1cmtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t1cmtt.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/t1cmtt.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{t1cmtt.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \providecommand{\EC at ttfamily}[5]{%
   \DeclareFontShape{#1}{#2}{#3}{#4}%
   {<5><6><7><8>#50800%

Modified: trunk/Master/texmf-dist/tex/latex/base/t1cmvtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/t1cmvtt.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/t1cmvtt.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{t1cmvtt.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \providecommand{\EC at ttfamily}[5]{%
   \DeclareFontShape{#1}{#2}{#3}{#4}%
   {<5><6><7><8>#50800%

Modified: trunk/Master/texmf-dist/tex/latex/base/ts1cmr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ts1cmr.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/ts1cmr.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{ts1cmr.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \providecommand{\EC at family}[5]{%
   \DeclareFontShape{#1}{#2}{#3}{#4}%
   {<5><6><7><8><9><10><10.95><12><14.4>%

Modified: trunk/Master/texmf-dist/tex/latex/base/ts1cmss.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ts1cmss.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/ts1cmss.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{ts1cmss.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \providecommand{\EC at family}[5]{%
   \DeclareFontShape{#1}{#2}{#3}{#4}%
   {<5><6><7><8><9><10><10.95><12><14.4>%

Modified: trunk/Master/texmf-dist/tex/latex/base/ts1cmtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ts1cmtt.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/ts1cmtt.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{ts1cmtt.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \providecommand{\EC at ttfamily}[5]{%
   \DeclareFontShape{#1}{#2}{#3}{#4}%
   {<5><6><7><8>#50800%

Modified: trunk/Master/texmf-dist/tex/latex/base/ts1cmvtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ts1cmvtt.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/ts1cmvtt.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{ts1cmvtt.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \providecommand{\EC at ttfamily}[5]{%
   \DeclareFontShape{#1}{#2}{#3}{#4}%
   {<5><6><7><8>#50800%

Modified: trunk/Master/texmf-dist/tex/latex/base/ucmr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ucmr.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/ucmr.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{ucmr.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \DeclareFontFamily{U}{cmr}{\hyphenchar\font45 }
 \DeclareFontShape{U}{cmr}{m}{n}%
      {<5><6><7><8><9><10><12>gen*cmr%

Modified: trunk/Master/texmf-dist/tex/latex/base/ucmss.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ucmss.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/ucmss.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{ucmss.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \DeclareFontFamily{U}{cmss}{\hyphenchar\font45 }
 \DeclareFontShape{U}{cmss}{m}{n}%
      {%

Modified: trunk/Master/texmf-dist/tex/latex/base/ucmtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex/base/ucmtt.fd	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/base/ucmtt.fd	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 %% making successful document exchange impossible.
 %% 
 \ProvidesFile{ucmtt.fd}
-        [2019/12/16 v2.5j Standard LaTeX font definitions]
+        [2022/07/10 v2.5l Standard LaTeX font definitions]
 \DeclareFontFamily{U}{cmtt}{\hyphenchar \font\m at ne}
 \DeclareFontShape{U}{cmtt}{m}{n}%
      {%

Modified: trunk/Master/texmf-dist/tex/latex/firstaid/latex2e-first-aid-for-external-files.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/firstaid/latex2e-first-aid-for-external-files.ltx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/firstaid/latex2e-first-aid-for-external-files.ltx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -34,8 +34,8 @@
 %%
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
-\def\LaTeXFirstAidDate{2022/02/20}
-\def\LaTeXFirstAidVersion{v1.0r}
+\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
@@ -131,6 +132,19 @@
 \ngermanTeX
 }%
 }
+\AddToHook{file/memoir.cls/before}[firstaid]{%
+  \expandafter\def\expandafter\@tempa\string\dimen{}%
+  \edef\kernel at stockheight{\expandafter\@tempa\meaning\stockheight}%
+  \edef\kernel at stockwidth{\expandafter\@tempa\meaning\stockwidth}%
+  \let\stockheight\@undefined
+  \let\stockwidth\@undefined
+}
+\AddToHook{file/memoir.cls/after}[firstaid]{%
+  \dimen\kernel at stockheight=\stockheight
+  \dimen\kernel at stockwidth=\stockwidth
+  \dimendef\stockheight=\kernel at stockheight
+  \dimendef\stockwidth=\kernel at stockwidth
+}
 \ExplSyntaxOn
 \sys_if_engine_luatex:T
   {

Modified: trunk/Master/texmf-dist/tex/latex/graphics/mathcolor.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/graphics/mathcolor.ltx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/graphics/mathcolor.ltx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -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/latex-lab/latex-lab-footnotes.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/latex-lab/latex-lab-footnotes.ltx	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/latex-lab/latex-lab-footnotes.ltx	2022-11-01 19:57:17 UTC (rev 64892)
@@ -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

Modified: trunk/Master/texmf-dist/tex/latex/tools/array.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tools/array.sty	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/tools/array.sty	2022-11-01 19:57:17 UTC (rev 64892)
@@ -46,7 +46,7 @@
 \DeclareCurrentRelease{}{2020-10-01}
 
 \ProvidesPackage{array}
-         [2022/03/10 v2.5f Tabular extension package (FMi)]
+         [2022/09/04 v2.5g Tabular extension package (FMi)]
 %%
 
 \def\@addtopreamble#1{\xdef\@preamble{\@preamble #1}}
@@ -126,7 +126,7 @@
 
 \newbox\ar at mcellbox
 \def\ar at align@mcell{%
-  \ifdim \ht\ar at mcellbox > \ht\@arstrutbox
+  \ifdim \ht\ar at mcellbox > \ht\strutbox
     \begingroup
      \dimen@\ht\ar at mcellbox
      \advance\dimen at -\ht\@arstrutbox

Modified: trunk/Master/texmf-dist/tex/latex/tools/verbatim.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tools/verbatim.sty	2022-11-01 19:52:35 UTC (rev 64891)
+++ trunk/Master/texmf-dist/tex/latex/tools/verbatim.sty	2022-11-01 19:57:17 UTC (rev 64892)
@@ -39,7 +39,7 @@
 %% Copyright (C) 1989--2003 by Rainer Sch\"opf. All rights reserved.
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{verbatim}
-     [2020-07-07 v1.5u LaTeX2e package for verbatim enhancements]
+     [2022-07-02 v1.5u LaTeX2e package for verbatim enhancements]
 \@ifundefined{verbatim@@@}{}{\endinput}
 \newtoks\every at verbatim
 \every at verbatim={}



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