texlive[68730] trunk: latex-dev (2nov23)

commits+karl at tug.org commits+karl at tug.org
Thu Nov 2 20:56:03 CET 2023


Revision: 68730
          https://tug.org/svn/texlive?view=revision&revision=68730
Author:   karl
Date:     2023-11-02 20:56:02 +0100 (Thu, 02 Nov 2023)
Log Message:
-----------
latex-dev (2nov23)

Modified Paths:
--------------
    trunk/Build/source/texk/texlive/linked_scripts/texlive/fmtutil.pl
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/README.md
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/amsbsy.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/amscd.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/amsgen.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/amsmath.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/amsopn.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/amstext.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/amsxtra.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/changes.txt
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/subeqn.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/technote.pdf
    trunk/Master/texmf-dist/doc/latex-dev/amsmath/testmath.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/README.md
    trunk/Master/texmf-dist/doc/latex-dev/base/alltt.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/cfgguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/changes.txt
    trunk/Master/texmf-dist/doc/latex-dev/base/classes.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/clsguide-historic.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/clsguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/clsguide.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/cmfonts.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/cyrguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/doc-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/docstrip.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/encguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/exscale.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/fix-cm.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/fntguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/fntguide.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/graphpap.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ifthen.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/inputenc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/lamport-manual.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/latexrelease.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/latexsym.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/lb2.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/letter.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/lgc2.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/lppl.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltfilehook-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltfilehook-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/lthooks-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/lthooks-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltluatex.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltmarks-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltmarks-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews01.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews02.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews03.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews04.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews05.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews06.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews07.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews08.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews09.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews10.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews11.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews12.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews13.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews14.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews15.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews16.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews17.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews18.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews19.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews20.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews21.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews22.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews23.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews24.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews25.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews26.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews27.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews28.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews29.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews30.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews31.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews32.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews33.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews34.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews35.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews36.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews37.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews37.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews38.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews38.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltpara-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltpara-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltproperties-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltproperties-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltshipout-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltshipout-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltsockets-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltsockets-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltx3info.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltxdoc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/makeindx.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/modguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/nfssfont.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/proc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/slides.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/slifonts.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/source2e.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/syntonly.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/tlc2.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/tlc3.err
    trunk/Master/texmf-dist/doc/latex-dev/base/tlc3.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/tulm.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/usrguide-historic.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/usrguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/utf8ienc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/webcomp.pdf
    trunk/Master/texmf-dist/doc/latex-dev/firstaid/changes.txt
    trunk/Master/texmf-dist/doc/latex-dev/firstaid/latex2e-first-aid-for-external-files.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/README.md
    trunk/Master/texmf-dist/doc/latex-dev/graphics/color.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/drivers.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/epsfig.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/graphics.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/graphicx.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/grfguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/keyval.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/lscape.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/mathcolor.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/rotating.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/rotex.pdf
    trunk/Master/texmf-dist/doc/latex-dev/graphics/trig.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/README.md
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/blocks-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/blocks-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/changes.txt
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/documentmetadata-support-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/documentmetadata-support-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-amsmath.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-bib.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-block.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-firstaid.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-float.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-footnotes.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-graphic.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-math.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-mathpkg.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-mathtools.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-minipage.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-namespace.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-new-or-1.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-new-or-2.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-sec.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-testphase.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-text.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-toc-hyperref-changes.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-toc-kernel-changes.pdf
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-toc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/README.md
    trunk/Master/texmf-dist/doc/latex-dev/tools/afterpage.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/array.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/bm.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/calc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/changes.txt
    trunk/Master/texmf-dist/doc/latex-dev/tools/dcolumn.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/delarray.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/enumerate.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/fileerr.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/fontsmpl.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/ftnright.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/hhline.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/indentfirst.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/layout.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/longtable.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/multicol.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/rawfonts.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/shellesc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/showkeys.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/somedefs.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/tabularx.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/theorem.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/tools-overview.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/trace.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/varioref.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/verbatim.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/xr.pdf
    trunk/Master/texmf-dist/doc/latex-dev/tools/xspace.pdf
    trunk/Master/texmf-dist/source/latex-dev/base/docstrip.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltboxes.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltexpl.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltfssaxes.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltfssbas.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/lthooks.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltplain.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltproperties.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltspace.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltvers.dtx
    trunk/Master/texmf-dist/source/latex-dev/firstaid/firstaid.ins
    trunk/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx
    trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-block.dtx
    trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-footnotes.dtx
    trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-graphic.dtx
    trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-math.dtx
    trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-minipage.dtx
    trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-sec.dtx
    trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-toc-kernel-changes.dtx
    trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-toc.dtx
    trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab.ins
    trunk/Master/texmf-dist/source/latex-dev/tools/afterpage.dtx
    trunk/Master/texmf-dist/source/latex-dev/tools/array.dtx
    trunk/Master/texmf-dist/source/latex-dev/tools/bm.dtx
    trunk/Master/texmf-dist/source/latex-dev/tools/calc.dtx
    trunk/Master/texmf-dist/source/latex-dev/tools/dcolumn.dtx
    trunk/Master/texmf-dist/source/latex-dev/tools/enumerate.dtx
    trunk/Master/texmf-dist/source/latex-dev/tools/ftnright.dtx
    trunk/Master/texmf-dist/source/latex-dev/tools/indentfirst.dtx
    trunk/Master/texmf-dist/source/latex-dev/tools/layout.dtx
    trunk/Master/texmf-dist/source/latex-dev/tools/longtable.dtx
    trunk/Master/texmf-dist/source/latex-dev/tools/shellesc.dtx
    trunk/Master/texmf-dist/source/latex-dev/tools/showkeys.dtx
    trunk/Master/texmf-dist/source/latex-dev/tools/tabularx.dtx
    trunk/Master/texmf-dist/source/latex-dev/tools/theorem.dtx
    trunk/Master/texmf-dist/source/latex-dev/tools/verbatim.dtx
    trunk/Master/texmf-dist/source/latex-dev/tools/xr.dtx
    trunk/Master/texmf-dist/tex/latex-dev/base/docstrip.tex
    trunk/Master/texmf-dist/tex/latex-dev/base/latex.ltx
    trunk/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/source2edoc.cls
    trunk/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx
    trunk/Master/texmf-dist/tex/latex-dev/latex-lab/graphic-latex-lab-testphase.ltx
    trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx
    trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-kernel-changes.sty
    trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-math.ltx
    trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-graphic.sty
    trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-minipage.sty
    trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-sec.sty
    trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-toc.sty
    trunk/Master/texmf-dist/tex/latex-dev/latex-lab/minipage-latex-lab-testphase.ltx
    trunk/Master/texmf-dist/tex/latex-dev/latex-lab/sec-latex-lab-testphase.ltx
    trunk/Master/texmf-dist/tex/latex-dev/latex-lab/toc-latex-lab-testphase.ltx
    trunk/Master/texmf-dist/tex/latex-dev/tools/afterpage.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/array.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/bm.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/calc.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/dcolumn.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/enumerate.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/ftnright.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/indentfirst.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/layout.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/longtable.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/shellesc.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/showkeys.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/tabularx.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/thb.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/thc.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/thcb.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/theorem.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/thm.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/thmb.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/thp.sty
    trunk/Master/texmf-dist/tex/latex-dev/tools/xr.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-table.pdf
    trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-table.dtx
    trunk/Master/texmf-dist/tex/latex-dev/firstaid/underscore-ltx.sty
    trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-table.sty
    trunk/Master/texmf-dist/tex/latex-dev/latex-lab/table-latex-lab-testphase.ltx

Modified: trunk/Build/source/texk/texlive/linked_scripts/texlive/fmtutil.pl
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/texlive/fmtutil.pl	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Build/source/texk/texlive/linked_scripts/texlive/fmtutil.pl	2023-11-02 19:56:02 UTC (rev 68730)
@@ -1,5 +1,5 @@
 #!/usr/bin/env perl
-# $Id: fmtutil.pl 65989 2023-02-20 21:52:59Z karl $
+# $Id: fmtutil.pl 68715 2023-11-01 17:28:01Z karl $
 # fmtutil - utility to maintain format files.
 # (Maintained in TeX Live:Master/texmf-dist/scripts/texlive.)
 # 
@@ -24,11 +24,11 @@
   TeX::Update->import();
 }
 
-my $svnid = '$Id: fmtutil.pl 65989 2023-02-20 21:52:59Z karl $';
-my $lastchdate = '$Date: 2023-02-20 22:52:59 +0100 (Mon, 20 Feb 2023) $';
+my $svnid = '$Id: fmtutil.pl 68715 2023-11-01 17:28:01Z karl $';
+my $lastchdate = '$Date: 2023-11-01 18:28:01 +0100 (Wed, 01 Nov 2023) $';
 $lastchdate =~ s/^\$Date:\s*//;
 $lastchdate =~ s/ \(.*$//;
-my $svnrev = '$Revision: 65989 $';
+my $svnrev = '$Revision: 68715 $';
 $svnrev =~ s/^\$Revision:\s*//;
 $svnrev =~ s/\s*\$$//;
 my $version = "r$svnrev ($lastchdate)";
@@ -383,6 +383,11 @@
 sub callback_build_formats {
   my ($what, $whatarg) = @_;
 
+  # sometimes (missing, all) there is no argument passed.
+  # Avoid warning from undef value being logged.
+  # https://tug.org/pipermail/tex-live/2023-September/049526.html
+  $whatarg = "" if ! defined $whatarg;
+
   # set up a tmp dir
   # On W32 it seems that File::Temp creates restrictive permissions (ok)
   # that are copied over with the files created inside it (not ok).
@@ -1478,7 +1483,7 @@
   --force                 (does nothing, exists for compatibility)
   --test                  (does nothing, exists for compatibility)
 
-Commands:
+Commands (exactly one must be specified):
   --all                   recreate all format files
   --missing               create all missing format files
   --byengine ENGINE       (re)create formats built with ENGINE

Modified: trunk/Master/texmf-dist/doc/latex-dev/amsmath/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/amsmath/README.md	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/doc/latex-dev/amsmath/README.md	2023-11-02 19:56:02 UTC (rev 68730)
@@ -1,7 +1,7 @@
 The amsmath bundle for LaTeX
 ============================
 
-Release 2023-11-01 pre-release 1
+Release 2024-06-01 pre-release 0
 
 Overview
 --------

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

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

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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/amsmath/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/amsmath/changes.txt	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/doc/latex-dev/amsmath/changes.txt	2023-11-02 19:56:02 UTC (rev 68730)
@@ -1,12 +1,16 @@
-2023-08-24  David Carlisle  <David.Carlisle at latex-project.org>
-
-	* testmath.tex: remove spaces before ~,
-
 ================================================================================
 All changes above are only part of the development branch for the next release.
 ================================================================================
 
 #########################
+# 2023-11-01 Release
+#########################
+
+2023-08-24  David Carlisle  <David.Carlisle at latex-project.org>
+
+	* testmath.tex: remove spaces before ~,
+
+#########################
 # 2023-06-01 Release
 #########################
 

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/README.md	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/README.md	2023-11-02 19:56:02 UTC (rev 68730)
@@ -1,7 +1,7 @@
 The LaTeX kernel
 ================
 
-Release 2023-11-01 pre-release 1
+Release 2024-06-01 pre-release 0
 
 Overview
 --------

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

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/changes.txt	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/changes.txt	2023-11-02 19:56:02 UTC (rev 68730)
@@ -1,24 +1,71 @@
+================================================================================ 
+This file lists changes to the LaTeX2e files in reverse chronological order 
+of publication (therefore the dates might be out of sequence if there are 
+hotfixes). It is provided for convenience only.  It therefore makes no claims 
+to completeness or accuracy and it contains some references to files that are 
+not part of the distribution. 
+================================================================================ 
+
 ================================================================================
-This file lists changes to the LaTeX2e files in reverse chronological order of
-publication (therefore the dates might be out of sequence if there are hotfixes).
-It is provided for convenience only.  It therefore makes no claims to
-completeness or accuracy and it contains some references to files that
-are not part of the distribution.
+All changes above are only part of the development branch for the next release.
 ================================================================================
+
+#########################
+# 2023-11-01 Release
+#########################
+
+2023-10-15 Ulrike Fischer <Ulrike.Fischer at latex-project.org> 
+	* ltproperties.dtx: 
+	Add support for pagetarget property.  
+
+2023-10-26  David Carlisle  <David.Carlisle at latex-project.org>
+	* ltboxes.dtx:
+	add check so \makebox[4cm][?]{abc} does not discard text (gh1072)
+
+2023-10-26 Joseph Wright  <Joseph.Wright at latex-project.org>
+	* ltspace.tex:
+	Use a protected definition for tilde which is safe in csnames
+
+2023-10-21 Yukai Chou  <muzimuzhi at gmai.com>
+	* ltfssbas.dtx, ltplain.dtx, ltspace.dtx:
+	Correct typos
+
+2023-10-14 Joseph Wright  <Joseph.Wright at latex-project.org>
+	* clsguide.tex:
+	Additional documentation
+
+2023-10-14 Joseph Wright  <Joseph.Wright at latex-project.org>
+	* clsguide.tex:
+	Add that \CurrentOption is available in \DeclareUnknownKeyHandler
+
+2023-10-13 Joseph Wright  <Joseph.Wright at latex-project.org>
+	* ltexpl.dtx:
+	Add \IfExplAtLeastTF
+
+2023-10-10  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* docstrip.dtx (section{Internal functions and variables}):
+	Explain the steps carried out by the replacement algorithm for @@.
+
 2023-09-13 Ulrike Fischer <Ulrike.Fischer at latex-project.org>
 	* ltproperties.dtx: 
-      expand consistently the label/property names in the LaTeX2e commands.
+      Use \protected at edef for expansion in the LaTeX2e commands.
+      
+2023-09-13 Ulrike Fischer <Ulrike.Fischer at latex-project.org>
+	* ltproperties.dtx:
+	Expand consistently the label/property names in the LaTeX2e commands.
 
 2023-09-13 Joseph Wright  <Joseph.Wright at latex-project.org>
-    * ltmiscen.dtx:
-      add test to \enddocument for changes in property values.
+	* ltmiscen.dtx:
+	Correct typo
 
 2023-09-05 Ulrike Fischer <Ulrike.Fischer at latex-project.org>
-	* ltproperties.dtx: 
-      First implementation of properties module
-    * ltmiscen.dtx:
-      Correct typo
+	* ltproperties.dtx:
+	First implementation of properties module
 
+	* ltmiscen.dtx:
+	Add test to \enddocument for changes in property values.
+
 2023-09-01  Joseph Wright  <Joseph.Wright at latex-project.org>
 
 	* ltmiscen.dtx
@@ -36,8 +83,6 @@
 
 2023-08-19 Joseph Wright  <Joseph.Wright at latex-project.org>
 
-2023-08-19 Joseph Wright  <Joseph.Wright at latex-project.org> 
-
 	* ltcmd.dtx, usrguide.tex
 	Remove \GetDocumentCommandArgSpec,
 	  \GetDocumentEnvironmentArgSpec,
@@ -75,10 +120,6 @@
 	* usrguide.tex
 	Various refinements to descriptions of \NewDocumentCommand, etc.
 
-================================================================================
-All changes above are only part of the development branch for the next release.
-================================================================================
-
 #########################
 # 2023-06-01 PL1 Release
 #########################

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/clsguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/clsguide.tex	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/clsguide.tex	2023-11-02 19:56:02 UTC (rev 68730)
@@ -42,7 +42,7 @@
     \texttt{clsguide.tex} for full details.}%
 }
 
-\date{2023-01-12}
+\date{2023-10-24}
 
 \NewDocumentCommand\cs{m}{\texttt{\textbackslash\detokenize{#1}}}
 \NewDocumentCommand\marg{m}{\arg{#1}}
@@ -143,7 +143,7 @@
 files.
 \begin{itemize}
 \item
-  However misguided, the current behaviour is clearly what was
+  However misguided, the current behavior is clearly what was
   intended when these classes were designed.
 \item
   It is not good practice to change such aspects of `standard classes'
@@ -188,7 +188,7 @@
 
 However, this rule of thumb is still useful: if a command has |@| in
 its name then it is not part of the supported \LaTeX{} language---and
-its behaviour may change in future releases!  If a command is
+its behavior may change in future releases!  If a command is
 mixed-case, or is described in \emph{\LaTeXbook}, then you can rely on
 future releases of \LaTeX{} supporting the command.
 
@@ -489,7 +489,7 @@
 \end{verbatim}
 Sometimes a user will request an option which the class or package has not
 explicitly declared. By default this will produce a warning (for classes) or
-error (for packages); this behaviour can be altered as follows:
+error (for packages); this behavior can be altered as follows:
 \begin{verbatim}
    \DeclareOption*{<code>}
 \end{verbatim}
@@ -847,7 +847,7 @@
     has no limitation on scope (\texttt{general})
 \end{itemize}
 The part of the \meta{key} before the \m{property} is the \m{name}, with the
-\m{value} working with the \m{property} to define the behaviour of the option.
+\m{value} working with the \m{property} to define the behavior of the option.
 
 For example, with
 \begin{verbatim}
@@ -875,7 +875,15 @@
 The command |\DeclareUnknownKeyHandler| may be used to define the behavior when
 an undefined key is encountered. The \m{code} will receive the unknown key name
 as |#1| and the value as |#2|. These can then be processed as appropriate,
-e.g.~by forwarding to another package.
+e.g.~by forwarding to another package. The entire option is available as
+\cs{CurrentOption}, should it be necessary to pass on options which may or
+may not contain an |=|~sign. For example, this may be used to pass an
+unknown option on to a non-keyval class such as \pkg{article}:
+\begin{verbatim}
+\DeclareUnknownKeyHandler{%
+  \PassOptionsToClass{\CurrentOption}{article}
+}
+\end{verbatim}
 
 \begin{decl}
   |\ProcessKeyOptions| \oarg{family}
@@ -883,6 +891,8 @@
 The |\ProcessKeyOptions| function is used to check the current option list
 against the keys defined for \m{family}. Global (class) options and local
 (package) options are checked when this function is called in a package.
+The command will process \emph{all} options given the the current
+package or class: there is no need to also apply \cs{ProcessOptions}.
 
 \begin{decl}
   |\SetKeys| \oarg{family} \arg{keyvals}
@@ -1181,12 +1191,184 @@
 where |#1| is the user input and the first argument to
 \cs{MakeUppercaseAux} takes two arguments, the locale and input text.
 
+\subsection{Extended and expandable references of properties}
+
+A property is something that \LaTeX{} can track while processing
+the document, such as a page
+number, a heading number, other counter values, a heading title, 
+a position on the page, etc.
+The current value of such properties can be labeled and
+written to the \texttt{aux}-file. It can then be referenced in
+the next compilation, similar to the way the standard \cs{label}/\cs{ref}
+commands work (they record/reference a fixed set of properties: 
+label, page, title, and target).
+
+\begin{decl}
+  |\RecordProperties|\arg{label}\arg{list of properties} 
+\end{decl}
+This command writes the value(s) of the \meta{list of properties}
+\texttt{aux}-file labeled by \meta{label}.  Recorded are either the
+values current when \cs{RecordProperties} is called or the value
+current when the next shipout happens---which depends on the
+declaration for each property.
+%
+The arguments \meta{label} and \meta{list of properties} can contain
+commands that are expanded. \meta{label} can expand to an arbitrary
+string (as long as it can safely be written to the \texttt{aux}-file)
+but note that the label names of \cs{label} and \cs{RecordProperties}
+share a singe namespace. This means that you get a \texttt{Label `A'
+  multiply defined} warning with the following code:
+\begin{verbatim}
+\label{A}\RecordProperties{A}{abspage}
+\end{verbatim}
+
+
+\begin{decl}
+ |\RefProperty|\arg{label}\arg{property}
+\end{decl}
+This command allows to reference the value of the property
+\meta{property} recorded in the previous run and labeled by \meta{label}.
+Differently to the standard
+\cs{ref} command the command is expandable and the value can for
+example---if it is a number---be used in an assignment.\footnote{For
+this to work the default value for the property would need to be a number too,
+because recorded values aren't known in the first \LaTeX{} run.}
+
+\begin{verbatim}
+\section{A section}
+\RecordProperties{mylabel}{pagenum,counter}
+\RefProperty{mylabel}{counter} % outputs section
+\setcounter{mycounter}{\RefProperty{mylabel}{pagenum}} 
+\end{verbatim}
+
+
+
+As \cs{RefProperty} is expandable it can not issue a rerun warning if
+a label is not found. If needed such a warning can be forced by the
+following command:
+\begin{decl}
+ |\RefUndefinedWarn|\arg{label}\arg{property}
+\end{decl}
+
+\LaTeX{} predefines a set of properties, this set contains also the
+properties stored by the standard \cs{label} command. In the list
+below \enquote{default} indicates the value returned when the value is
+not yet known (i.e., if it wasn't recorded in the previous run and
+\enquote{at shipout} means that this property is not recorded
+immediately when \cs{RecordProperties} is used but during the next
+\cs{shipout}.
+
+\begin{description}
+ \item[\texttt{abspage} (default: \texttt{0}, at shipout)] The absolute value of the current page:
+   starts at $1$ and increases monotonically at each shipout.
+   
+ \item[\texttt{page} (default: \texttt{0}, at shipout)] The current page as given by \cs{thepage}: this may or
+   may not be a numerical value, depending on the current
+   style. Contrast with \texttt{abspage}. You get this value also with
+   the standard \cs{label}/\cs{pageref}.
+
+ \item[\texttt{pagenum} (default: \texttt{0}, at shipout)] The current page as arabic number. This is
+   suitable for integer operations and comparisions.
+
+ \item[\texttt{label} (default: \texttt{??})] The content of \cs{@currentlabel}. This is the value 
+     that you get also with the standard \cs{label}/\cs{ref}. 
+
+ \item[\texttt{title} (default: \texttt{\cs{textbf}\{??\}})] The content of \cs{@currentlabelname}.  This
+   command is filled beside others by the \pkg{nameref} package and
+   some classes (e.g.~\pkg{memoir}) and typically gives 
+   the title defined in the document by some sectioning command
+
+ \item[\texttt{target} (default: \meta{\mdseries empty})] The content of \cs{@currentHref}.  This
+   command is normally filled by \pkg{hyperref} and holds the name of
+   the last destination it created.
+
+\item[\texttt{pagetarget} (default: \meta{\mdseries empty}, at shipout)] 
+    The content of \cs{@currentHpage}.  This command is filled by 
+    \pkg{hyperref} (version v7.01c or newer) and holds the name of the last 
+    page anchor it created. 
+
+ \item[\texttt{counter} (default: \meta{\mdseries empty})] The content of \cs{@currentcounter}.  This
+   command contains after a \cs{refstepcounter} the name of the
+   counter.
+
+ \item[\texttt{xpos}, \texttt{ypos} (default: \texttt{0}, at shipout)] These properties records the
+   $x$~and $y$ coordinates of a point previously stored with
+   \cs{pdfsavepos}/\cs{savepos}.  E.g.~(if \pkg{bidi} is used it can
+   be necessary to save the position before and after the label):
+   \begin{verbatim}
+     \pdfsavepos 
+     \RecordProperties{myposition}{xpos,ypos}%
+     \pdfsavepos
+   \end{verbatim}  
+\end{description} 
+ 
+Class and package authors can define more properties to store other
+values they are interested in.
+\begin{decl}
+  |\NewProperty|\arg{name}\arg{setpoint}\arg{default}\arg{code}\\
+  |\SetProperty|\arg{name}\arg{setpoint}\arg{default}\arg{code}
+\end{decl}
+These commands declare or change a property \meta{name}\footnote{Only change 
+properties that you have declared. The declarations of standard properties of \LaTeX{} and 
+properties of other packages should never be altered!}. If a new property is 
+declared within a package it is suggested that its name is always structured 
+as follows: \meta{package-name}\texttt{/}\meta{property-name}. 
+\meta{setpoint} is either |now| or |shipout| and decides if the value is 
+written directly or at the next shipout. \meta{default} is used if the 
+property is referenced but not yet known, e.g., in the first run.  
+\meta{code} is the code executed when storing the value. For example, the 
+\texttt{pagenum} property is declared as 
+\begin{verbatim}
+\NewProperty{pagenum}{shipout}{0}{\the\value{page}}
+\end{verbatim}
+
+The commands related to properties are offered as a set of CamelCase
+commands for traditional \LaTeXe{} packages (and for use in the
+document preamble if needed) as well as \texttt{expl3} commands for
+modern packages, that use the L3 programming layer of \LaTeX{}. The
+\texttt{expl3} commands and more details can be found in
+\texttt{ltproperties-doc.pdf}.
+
+\subsection{Preparing link targets}
+
+Active links in a document need targets to which they can jump to. Such
+targets are often created automatically (if the package \pkg{hyperref}
+is loaded) by the \cs{refstepcounter} command but there are also cases
+where class or package authors need to add a target manually, for
+example, in unnumbered sectioning commands or in environments. For this
+\LaTeX{} provides the following commands. \emph{Without}
+\pkg{hyperref} they do nothing or insert only a whatsits 
+(to ensure that spacing doesn't change when hyperref is loaded), \emph{with}
+\pkg{hyperref} they add the necessary targets. Details about the
+behavior and the arguments of the following commands can by found in
+the \pkg{hyperref} package in \texttt{hyperref-linktarget.pdf}.
+
+\begin{decl}
+ |\MakeLinkTarget|\oarg{prefix}\arg{counter}\\
+ |\MakeLinkTarget|\oarg{prefix}\{\}\\
+ |\MakeLinkTarget|*\arg{target name}
+\end{decl}
+This command prepares the creations of targets. 
+
+\begin{decl}
+ |\LinkTargetOn|\\
+ |\LinkTargetOff|
+\end{decl}
+These commands allow to enable and disable locally the creation of
+targets. This can be useful to suppress targets otherwise created automatically
+by \cs{refstepcounter}.
+
+\begin{decl}
+ |\NextLinkTarget|\arg{target name}
+\end{decl}
+This changes the name of the next target that will be created.
+
 \section{Commands superseded for new material}
 
 A small number of commands were introduced as part of \LaTeXe{} in the
-mid-1990s, are widely used but have been superseded by more modern methods.
-These are covered here as they are likely to be encountered routinely in
-existing classes and packages.
+mid-1990s, are widely used but have been superseded by more modern
+methods.  These are covered here as they are likely to be encountered
+routinely in existing classes and packages.
 
 \subsection{Defining commands}
 

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

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

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

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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/fntguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/fntguide.tex	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/fntguide.tex	2023-11-02 19:56:02 UTC (rev 68730)
@@ -52,7 +52,7 @@
    \texttt{fntguide.tex} for full details.}%
 }
 
-\date{May 2023}
+\date{October 2023}
 
 \begin{document}
 
@@ -1463,7 +1463,7 @@
 in the |T1| encoding is:
 \begin{verbatim}
    \DeclareTextCommand{\k}{T1}[1]
-      {\oalign{\null#1\crcr\hidewidth\char12}}
+      {\hmode at bgroup\ooalign{\null#1\crcr\hidewidth\char12}\egroup}
 \end{verbatim}
 |\DeclareTextCommand| takes the same optional arguments as
 |\newcommand|.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews37.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews37.tex	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews37.tex	2023-11-02 19:56:02 UTC (rev 68730)
@@ -585,7 +585,7 @@
 
 
 
-\subsection{Improve spacing at top of \env{minipages}}
+\subsection{Improve spacing at top of \env{minipage}s}
 
 A list and several other document elements add some vertical space in
 front of them. However this should not happen at the beginning of a

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews38.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews38.tex	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews38.tex	2023-11-02 19:56:02 UTC (rev 68730)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright 2021-2023
+% Copyright 2023
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -101,6 +101,8 @@
 \vbadness=1400  % accept slightly empty columns
 
 
+\let\finalpagebreak\pagebreak % for TUB (if they use it)
+
 \makeatletter
 % maybe not the greatest design but normally we wouldn't have subsubsections
 \renewcommand{\subsubsection}{%
@@ -123,7 +125,8 @@
 \tubcommand{\input{tubltmac}}
 
 \publicationmonth{November}
-\publicationyear{2023  --- DRAFT version for upcoming release}
+%\publicationyear{2023  --- DRAFT version for upcoming release}
+\publicationyear{2023}
 
 \publicationissue{38}
 
@@ -139,91 +142,311 @@
 
 \medskip
 
-\section{Introduction}
+%\section{Introduction}
 
 
-\section{Sockets and plugs}
+\section{News from the \enquote{\LaTeX{} Tagged PDF} project}
 
-\emph{write}
+The multi-year project to automatically tag \LaTeX{} documents in
+order to make them accessible~\cite{38:blueprint} is progressing
+steadily (at this point in time mainly as experimental
+\texttt{latex-lab} code).
 
-For documentation see \texttt{texdoc ltsockets-doc} for now.
+Just recently we added support for automatic tagging of tabular
+structures including environments from \pkg{tabularx} and
+\pkg{longtable}. The code is still in its early stages and lacks
+configuration possibilities\Dash these will be added in the future.
 
-\section{Extended cross-referencing of document properties}
+\subsection{Approaching an important milestone}
 
-Traditionally \LaTeX{} allowed with \cs{label} to record two \enquote{local} 
-properties of the document: the representation of the current page number and 
-of the current counter. Their values could then be referenced with the 
-(non-expandable)  commands \cs{ref} and \cs{pageref} in arbitrary places of a 
-document.  With the summer 2023 release the \cs{label} was enhanced to record 
-also if set by packages like \pkg{nameref} or \pkg{hyperref} the title and 
-the name of the link target. 
+Nevertheless, with this new addition we are more or less able to
+automatically tag any document that confines itself to the commands
+and environments described in Leslie Lamport's \emph{\LaTeX{}
+Manual}~\cite{38:Lamport} by simply adding a single configuration line
+at the top.
 
-Over the years packages extended the label-ref system in various ways. 
-Examples are for example the \pkg{refcount} package to reference the values 
-expandably, the \pkg{smartref} package, which allows to store more counter 
-values and so to reference the current chapter together with the current 
-equation, the \pkg{cleveref} package, which stores in a second internal label 
-beside other the name of the counter,  the \pkg{hyperref} package whose 
-\cs{autoref} command tries to retrieve the name of the counter from the name 
-of the link target, the \pkg{tikzmarks} which records absolute positions on 
-the page, and the \pkg{zref} package which implements a general method to 
-record and reference properties. 
+In addition, a number of extension packages that go beyond Lamport are
+already supported, most importantly perhaps \pkg{amsmath} (providing
+extended math capabilities) and \pkg{hyperref} (enhancing \LaTeX{}
+with interactive hyperlinking features).
+\finalpagebreak
+Also already supported are
+some of the major bibliography support packages such as \pkg{natbib}
+and \pkg{biblatex}.
 
-Starting with this release the \LaTeX{} kernel contains now its own 
-extension. It is loosely based on \pkg{zref}. It allows to declare new 
-properties, to record arbitrary combinations of properties. The values are 
-retrieved expandably. 
+For now activation is done through the line
+\begin{verbatim}
+\DocumentMetadata
+   {testphase={phase-III,math,tabular}}
+\end{verbatim}
+The math and the tabular support are not yet incorporated into
+\texttt{phase-III} but need their own activation, so that we can
+better experiment with additions and code adjustments.
 
-As an example to setup a new property which records the current chapter 
-number the following declaration could be used: 
+The \texttt{latex-lab} bundle contains various (still untagged)
+documentation files about the new code that can be accessed with
+\verb|texdoc -l latex-lab|.
+
+\subsection{A GitHub repository dedicated to the project}
+
+We have also started a new GitHub repository mainly intended for
+reporting issues, and offering a platform for discussions. For
+example, there is one discussion on ways to extend the \LaTeX{}
+\env{tabular} syntax to allow describing the logical structure of
+tables (e.g., which cells are header cells, etc.).
+
+Having all issues and discussions related to the project in a single
+place instead of being spread across multiple repositories such as
+\pkg{latex2e}, \pkg{latex3}, \pkg{tagpdf}, \pkg{hyperref},
+\pkg{pdfresources}, etc., helps people to find information easily
+and report any issue related to the project without needing to know in which
+code repository the problematic code resides.
+
+You find this repository at
+\url{https://github.com/latex3/tagging-project} and the mentioned
+discussion on \env{tabular} syntax at
+\url{https://github.com/latex3/tagging-project/discussions/1}.
+
+Your feedback is important and reporting what doesn't yet work is
+beneficial to all users, so we hope to see you there and thank you for
+any contribution, whether it is an issue or a post on a discussion
+thread.
+
+
+\section{Hooks, sockets and plugs}
+
+In previous releases of \LaTeX{} we introduced the general concept of
+hooks (both specific and generic ones). These are places in the
+code into which different packages (or the user in the document
+preamble) can safely add their own code to extend the functionality of
+existing commands and environments without the need to overwrite or
+patch them in incompatible ways. An important feature of such hooks is
+that the code chunks added by different packages can be ordered by
+rules, if necessary,
+\finalpagebreak
+thereby avoiding problems arising from
+differences in package loading order. See \LaTeX{} News issues
+32--34~\cite{38:ltnews} for more information.
+
+However, sometimes you need a kind of \enquote{hook} into which only a
+single chunk of code is placed at any time.\footnote{While this is in
+theory possible to model with the existing hook mechanism, it is
+inefficient and cumbersome.}  For example, there is code that
+implements footnote placement in relation to bottom floats (above or
+below them). But at any time in the document only one such placement
+code can be in force. Or consider the extra code needed for making
+\LaTeX{} documents accessible (e.g., adding tags to the PDF
+output). Such code is either there (perhaps in alternative versions)
+or not at all, but it cannot have code from other packages added at
+the same point interfering with the algorithm.
+
+For these use cases we now introduce the concept of sockets and plugs.
+A socket is a place in the code into which one can put a plug (a
+chunk of code with a name) after which the socket is in use; to put in
+a different plug, the former one has to be taken out
+first.\footnote{Think of electric outlets and plugging something into
+them.} A socket may or may not have inputs that can then be used by
+the plugs.
+%
+While this is technically not much different to putting a command in
+the code and at some point alter its definition, the advantage is that
+this offers a consistent interface, allows for status information,
+supports tracing, etc.
+
+You declare a new socket and possibly some plugs for it with
+\begin{flushleft}
+  \cs{NewSocket}\Arg{socket name}\Arg{\# of inputs} \\
+  \cs{NewSocketPlug}\Arg{socket name}\Arg{plug name}\Arg{code}
+\end{flushleft}
+For example, after the declaration \verb=\NewSocket{foo}{0}= you can
+immediately use this socket in your code with \verb=\UseSocket{foo}=.
+The \cs{NewSocket} declaration automatically defines a simple plug
+with the name \texttt{noop} for the socket and assigns it to the socket
+(plugs it in), thus your \cs{UseSocket} sits idle doing
+nothing\footnote{Sockets with one input also define an
+\texttt{identity} plug and initially assign that to the socket\Dash
+this means that their input is simply returned without processing.}
+until you assign it a different plug, which is done with
+\cs{AssignSocketPlug}. This takes the current plug out and puts the
+new one in.
+%
+All the declarations and commands are also available in the \LaTeX3
+programming layer as \cs{socket\_new:nn}, \cs{socket\_new\_plug:nnn},
+etc.
+
+With this concept we can, for example, add tagging support for the
+\enquote{\LaTeX{} Tagged PDF} project to various packages without
+altering their behavior if the tagging code is inactive. Activating
+one or the other form of tagging then just means to assign named plugs
+to the different sockets.
+
+This is just a brief introduction to the mechanism; for more detailed
+documentation see \texttt{texdoc ltsockets-doc}.
+
+
+\finalpagebreak
+
+\section{Document properties and cross-referencing}
+
+Traditional \LaTeX{} uses \cs{label}\Arg{key} to record the values of two
+\enquote{local} properties of the document: the textual
+representations of the \emph{current page number} and the
+\emph{current \textup{\cs{ref}} value} set by \cs{refstepcounter}
+declarations~\cite[p.~209]{38:Lamport}.  (These declarations are
+issued, for example, by sectioning commands, by numbered environments
+like \env{equation}, and by \cs{item} in an \env{enumerate} or
+similar environment.)
+
+These two recorded values can then be accessed and typeset (from
+anywhere in the next run of the document) by use of the
+(non-expandable) commands \cs{ref} and \cs{pageref} using the
+\emph{key} that was specified as the argument to \cs{label} when
+recording these values.  This supported basic cross-referencing
+(within a document), using these recorded values to provide both
+page-related and counter-related information (such as the page xvii or
+the subsection number 4.5.2).\footnote{In the Spring 2023 release of
+\LaTeX{}, the \cs{label} command was extended to record, in addition,
+both a title (such as the text used in a section head) and the
+\emph{logical name} used for an associated link target provided these
+have been set by packages such as \pkg{nameref} or \pkg{hyperref}.}
+
+
+Over the years \LaTeX{} packages have appeared that extend
+this basic \enquote{label-ref system} in various ways.
+%
+For example, the \pkg{refcount} package made a small but significant change
+to the functions used to access recorded values, by making them expandable.
+And the \pkg{smart-ref} package supports the storage of a larger
+collection of counter values so that, for example, a cross-reference
+can refer to the relevant chapter together with an equation tag.
+The \pkg{cleveref} package stores (by means of a second, internal
+\enquote{logical label}) extra information such as the name of the counter.
+The \pkg{hyperref} package adds the \cs{autoref} command, which
+tries to retrieve the name of a counter from the  \emph{logical name}
+used for a link target.
+The \pkg{tikzmarks} library records information about
+ \emph{labelled positions} on the page when using \pkg{tikz}.
+Finally, the \pkg{zref} package implements many related ideas, including a general
+idea of properties and lists of properties, with methods to record, and
+subsequently access, the value of any declared property.
+
+
+Starting with this release, the \LaTeX{} kernel provides handling of
+general document properties as a core functionality with standard
+interfaces.
+%
+This is based on concepts introduced by the \pkg{zref} package but
+with some differences in detail, particularly in the implementation.
+It supports the declaration of new properties, and the recording of
+the values of any list of properties. These values are retrieved
+expandably.
+
+To set up a new property that is the current chapter
+number, for example, here is the declaration to use.
 \begin{verbatim}
-\NewProperty{chapter}{now}{?}{\thechapter}
+  \NewProperty{chapter}{now}{?}{\thechapter}
 \end{verbatim}
-The second argument means that the property is recorded immediately 
-(\enquote{now}) and not at shipout. The third argument sets a default if a 
-label is unknown. It is then possible to record a list of properties with 
-\cs{RecordProperties}: 
+\par\finalpagebreak\noindent
+The second argument means that the property value will be recorded
+immediately (\enquote{now}), and not \enquote{during the next
+  \cs{shipout}}.  The third argument sets a default to be used when,
+for example, an unknown label is supplied.
+%
+The final argument contains the code that will, as part of the
+recording process, be expanded to obtain the value to record for this
+property.
+
+Then, to record the value of this new property,
+together with others, use this command.
 \begin{verbatim}
-\RecordProperties{mylabel}{chapter,page,currentlabel}
+  \RecordProperties{mylabel}
+                   {chapter,page,label}
 \end{verbatim}
-To reference the value the \cs{RefProperty} command is provided which takes 
-two arguments, the label and the property: 
+This records the current values for the properties \texttt{chapter},
+\texttt{page}, and \texttt{label}, using \texttt{mylabel} as the
+label, or \emph{key}, for the record.
+
+To \emph{reference} (i.e., retrieve) this recorded value for use in a
+cross-reference to this chapter, use the \cs{RefProperty} command with
+two arguments: the label, or \emph{key}, and the property.
 \begin{verbatim}
-\RefProperty{mylabel}{chapter}
+  \RefProperty{mylabel}{chapter}
 \end{verbatim}
- 
-The new module predeclares a set of generally useful properties: 
-\texttt{currentlabel} (the standard counter representation), \texttt{page} 
-(the page representation), \texttt{title} (the title if set e.g.~by 
-\pkg{nameref}), \texttt{target} (the name of the link target if set e.g.~by 
-\pkg{hyperref}), \texttt{pagenum} (the page as an arabic number), 
-\texttt{abspage} (the absolute page number), \texttt{counter} (the name of 
-the current counter), \texttt{xpos} and \texttt{ypos} the position on the 
-page as set by a previous \cs{pdfsavepos}. 
-  
-The module provides both \LaTeXe{} camel case commands and expl3 commands.    
 
-For documentation see \texttt{texdoc ltproperties-doc}. 
+The
+\LaTeX{} kernel itself contains
+declarations for some generally useful properties,
+including these:
+\begin{description}
+\item[\texttt{label}] the textual representation of the \emph{current
+\textup{\cs{ref}} value}, see above;
 
+\item[\texttt{page}] the textual representation of the page number for
+  the page currently under construction;
+
+\item[\texttt{title}] the title, if set by, e.g.,~\pkg{nameref};
+
+\item[\texttt{target}] the logical name of the associated link target,
+  if set by, e.g.,~\pkg{hyperref};
+
+\item[\texttt{pagetarget}] the logical name of the target added by
+  \pkg{hyperref} at the origin of each shipped out page;
+
+\item[\texttt{pagenum}] the value of the \LaTeX{} counter
+  \texttt{page} in Arabic numerals;
+
+\item[\texttt{abspage}] the absolute page number of the page under
+  construction, i.e., one more than the number of pages shipped out so
+  far (thus it starts at 1 and is increased by 1 whenever a page is
+  shipped out);
+
+\item[\texttt{counter}] the name of the counter that produced the
+  \emph{current \textup{\cs{ref}} value}, i.e., the counter that was
+  stepped in the most recent \cs{refstepcounter} within the current
+  scope;
+
+\item[\texttt{xpos}, \texttt{ypos}] the position on the shipped out
+  page as set by the most recent \cs{pdfsavepos}: recording these
+  properties should be done as soon as possible after saving the
+  position.
+\end{description}
+
+Both \LaTeXe{} commands (using camel-case names) and
+\LaTeX3 programming layer commands are provided.
+%
+For a more complete documentation, see \texttt{texdoc ltproperties-doc}.
+
+
+
+\finalpagebreak
+
 \section{New or improved commands}
 
+\subsection{Testing for the \LaTeX3 programming layer version: \cs{IfExplAtLeastTF}}
+
+The integration of \pkg{expl3} (the \LaTeX3 programming layer)
+into the kernel means that programmers can use all of the features
+available without needing to load it explicitly. However, as \pkg{expl3}
+is upgraded separately from \LaTeXe{} and is not a separate package, its
+version is different from that of \LaTeXe{} and cannot be tested using
+\cs{IfPackageAtLeastTF}. To date, low-level methods have therefore
+been needed to check for the availability of features in
+\pkg{expl3}. We have now added \cs{IfExplAtLeastTF} as a test working
+in the same way as \cs{IfPackageAtLeastTF} but focused on the
+pre-loaded programming layer.  Programmers can check the date of
+\pkg{expl3} they are using in the \texttt{.log}, as it appears both at
+the start and end in the format
+\begin{verbatim}
+  L3 programming layer <YYYY-MM-DD>
+\end{verbatim}
+just after the line which identifies the format (\texttt{LaTeX2e}, etc.).
 %
-\githubissue{xxx}
+\githubissue{1004}
 
-\section{\emph{Removed} commands}
 
-It is very rare that commands are removed from the \LaTeX{} kernel. However, in
-this release we have elected to remove \cs{GetDocumentCommandArgSpec},
-\cs{GetDocumentEnvironmentArgSpec}, \cs{ShowDocumentCommandArgSpec} and
-\cs{ShowDocumentEnvironmentArgSpec} from the kernel. These commands have been
-moved back to the \enquote{stub} \pkg{xparse} provided in \pkg{l3packages}. The
-reason for this change is that the commands were essentially part of debugging
-early forms of the kernel code, and expose implementation detail in a way that
-was not helpful.
-
 \section{Code improvements}
 
-\subsection{Support for tabs in \cs{verb*} and \texttt{verbatim*}}
+\subsection{Support for tabs in \cs{verb*} and \env{verbatim*}}
 
 \LaTeX{} converts a single tab to a single space, which is then treated like a
 \enquote{real} space in typesetting. The same has been true to date inside
@@ -230,28 +453,150 @@
 \cs{verb}, but was done in a way that meant that they remained as normal spaces
 even in \cs{verb*}, etc. We have now adjusted the code so that tabs are
 retained within the argument to \cs{verb} and \cs{verb*}, and the
-\texttt{verbatim} and \texttt{verbatim*} environments independently from
+\env{verbatim} and \env{verbatim*} environments, independently from
 spaces, and are set up to print in the same way spaces do. This means that they
-now generate visible spaces inside \cs{verb*} and \texttt{verbatim*}, and their
+now generate visible spaces inside \cs{verb*} and \env{verbatim*}, and their
 behavior can be adjusted if required to be different from that of spaces.
 %
 \githubissue{1085}
 
-\section{Bug fixes}
 
-\section{Changes to packages in the \pkg{amsmath} category}
+\subsection{Improved argument checking for box commands}
+Previously if an alignment option had an unexpected value, such as
+\verb|\makebox[4cm][x]{text}|,
+no warning was given but the box content was silently discarded.
+This will now produce a warning and act like the default \texttt{c} alignment.
+\cs{framebox} and \cs{parbox} have a similar change.
+%
+\githubissue{1072}
 
-\section{Changes to packages in the \pkg{graphics} category}
 
+\subsection{Aligning status of tilde with other active characters}
+
+Some time ago we revised the definition of active characters in \pdfTeX{} to
+allow the full range of UTF-8 codepoints to be used in for example labels,
+file names, etc. However, \verb|~| was not changed at that point as it is active
+independent of the engine in use. This has now been corrected: the definition
+of \verb|~| is an engine-protected one which gives the string version of the
+character if used inside a csname.
+
+\finalpagebreak
+
+\subsection{In the programming layer}
+
+In the programming layer (\pkg{expl3}), we have revised the behavior of the
+titlecasing function to enable this to either titlecase only the first word of
+the input, or to titlecase every word. This should be transparent at the
+document level but will be useful for programmers.
+
+We have also added the ability to define variables and functions inside
+\cs{fpeval} (at the \pkg{expl3} level this is \cs{fp\_eval:n}). This allows
+programmers to create non-standard functions that can then be used inside
+\cs{fpeval}. For example, this could be used to create a new function
+\texttt{dinner}:
+\begin{verbatim}
+\ExplSyntaxOn
+\fp_new_variable:n{duck}
+\fp_new_function:n{dinner}
+\fp_set_function:nnn{dinner}{duck}
+                    {duck - 0.25 * duck}
+\fp_set_variable:nn{duck}{1}
+$\fp_eval:n{duck}
+ >\fp_eval:n{dinner(duck)}
+  \fp_set_variable:nn{duck}{dinner(duck)}
+ >\fp_eval:n{dinner(duck)}
+  \fp_set_variable:nn{duck}{dinner(duck)}
+ >\fp_eval:n{dinner(duck)}
+  \fp_set_variable:nn{duck}{dinner(duck)}
+ >\fp_eval:n{dinner(duck)}
+$
+\ExplSyntaxOff
+\end{verbatim}
+
+The computation above would then generate
+\begin{quote}
+\ExplSyntaxOn
+\fp_new_variable:n{duck}
+\fp_new_function:n{dinner}
+\fp_set_function:nnn{dinner}{duck}
+                    {duck - 0.25 * duck}
+\fp_set_variable:nn{duck}{1}
+$\fp_eval:n{duck}
+ >\fp_eval:n{dinner(duck)}
+  \fp_set_variable:nn{duck}{dinner(duck)}
+ >\fp_eval:n{dinner(duck)}
+  \fp_set_variable:nn{duck}{dinner(duck)}
+ >\fp_eval:n{dinner(duck)}
+  \fp_set_variable:nn{duck}{dinner(duck)}
+ >\fp_eval:n{dinner(duck)}
+$
+\ExplSyntaxOff
+\end{quote}
+
+Users will be able to access added functions without needing to use the
+\pkg{expl3} layer. It is possible that a future release of \LaTeX{} will
+add the ability to create and set floating point variables at the
+document level: this will be examined based on feedback on the
+utility of the programming layer change.
+
+
+\section{\emph{Removed} kernel commands}
+
+It is very rare that commands are removed from the \LaTeX{} kernel. However, in
+this release we have elected to remove \cs{GetDocumentCommandArgSpec},
+\cs{GetDocumentEnvironmentArgSpec}, \cs{ShowDocumentCommandArgSpec} and
+\cs{ShowDocumentEnvironmentArgSpec} from the kernel. These commands have been
+moved back to the \enquote{stub} \pkg{xparse} provided in \pkg{l3packages}. The
+reason for this change is that the removed commands exposed implementation
+details. They were essentially debugging tools which with hindsight should
+not have been made available directly in the kernel.
+
+
+% \section{Bug fixes}
+
+\finalpagebreak
+
 \section{Changes to packages in the \pkg{tools} category}
 
+\subsection{\pkg{longtable}: correct p-column definition}
 
-%\medskip
+In general the \pkg{longtable} implementation follows the \pkg{array}
+usage but the package didn't take over a change made 1992 in
+\pkg{array} which adjusted the handling of the strut inserted at the
+begin of p-columns. As a consequence there are a number of
+inconsistencies in the output of p-columns between \pkg{tabular} and
+\pkg{longtable}. This has been corrected; \pkg{longtable} now uses for
+the strut the same definition as \pkg{array}.
+%
+\githubissue{1128}
 
+\medskip
+\tubcommand{\newpage}
+
 \begin{thebibliography}{9}
 
-\fontsize{9.3}{11.3}\selectfont
+%\fontsize{9.3}{11.3}\selectfont
 
+
+\bibitem{38:Lamport}
+Leslie Lamport.
+\newblock \emph{{\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{38:ltnews} \LaTeX{} Project Team.
+  \emph{\LaTeXe{} news 1--38}.\\
+  \url{https://latex-project.org/news/latex2e-news/ltnews.pdf}
+
+\bibitem{38: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/}
+
+
+
 \end{thebibliography}
 
 \end{document}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/tlc3.err
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/tlc3.err	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/tlc3.err	2023-11-02 19:56:02 UTC (rev 68730)
@@ -1,4 +1,4 @@
-\newcommand\erratafiledate{2023/09/01}        % needs / not -
+\newcommand\erratafiledate{2023/10/30}        % needs / and not -
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % To produce a printed version of this errata file run this file through
@@ -259,8 +259,9 @@
 % printing are typeset.
 %
 
-\renewcommand\erratastartdate{2023/04/01}
+\renewcommand\erratastartdate{2023/04/01}    % ALL ENTRIES
 %\renewcommand\erratastartdate{2023/05/30}   % for the first digital edition
+%\renewcommand\erratastartdate{2023/09/01}   % 
 
 
 % If you own a digital edition (which is more often updated than the
@@ -466,8 +467,12 @@
 \erroronpage{I-xx\ldots I-xxi}{}{FMi}{2023/04/04}{s}
 Dot leaders have been changed on all sections.
 
+
 \CHAPTER{Bibliography (Part I)} 
 
+\erroronpage{I-779}{[24], l.-1}{FMi}{2023/10/28}{s}
+Link should use \texttt{https://}
+
 \erroronpage{I-783}{[55], l.-2}{FMi}{2023/04/04}{s}
 all \> \u{them} all
 
@@ -543,17 +548,24 @@
 
 \section{Errata for the digital version (not applicable to the print version)}
 
-All known errors to the digital version have already been incorporated in the product as distributed.
+Most known errors to the digital version have already been
+incorporated in the product as distributed, here are the remaining
+ones.
 
-%\begin{erratalist}
-%
+\begin{erratalist}
+
 %\CHAPTER{General}
 %
 %\CHAPTER{Front matter}
-%
-%\end{erratalist}
 
+\CHAPTER{Bibliography} 
 
+\erroronpage{II-800}{[50], l.-1}{FMi}{2023/10/28}{s}
+Link should use \texttt{https://}
+
+\end{erratalist}
+
+
 %<--------------------------
 
 
@@ -636,7 +648,19 @@
 
 \CHAPTER{Chapter 5 --- The Layout of the Page}
 
+\erroronpage{I-386}{exa 5-3-1, l.7}{EOl}{2023/09/09}{s}
+Change:
+paragraph over \u{two} pages. \> paragraph over \u{three} pages.
 
+\textit{Reason: The third page contains just the word ``pages.'' (which would be page 8)
+is not shown.}
+
+\erroronpage{I-389}{syntax box -1}{DC}{2023/10/06}{s}
+
+\u{\cs{right}} \> \u{\cs{rightmark}}
+
+
+
 \CHAPTER{Chapter 6 --- Tabular  Material}
 
 \erroronpage{I-489}{para 1, l.3}{EOl}{2023/07/30}{s}
@@ -654,6 +678,9 @@
 
 \CHAPTER{Chapter 7 --- Mastering Floats}
 
+\erroronpage{I-520}{paragraph 4, l.3}{EOl}{2023/09/09}{s}
+Change:
+For \u{a} example \> For example
 
 \CHAPTER{Chapter 8 --- Graphics Generation and Manipulation}
 
@@ -1245,6 +1272,11 @@
 %and stay with one .bib file (in UTF8-encoding).
 
 
+\erroronpage{II-396}{in box: para 2, l.2}{MJo}{2023/10/30}{s}
+the \cs{MakeUpper}\texttt{\u{C}ase} trick \>
+the \cs{MakeUpper}\texttt{\u{c}ase} trick
+
+
 \erroronpage{II-435}{code}{FMi}{2023/05/26}{s}
 \verb=\textcolor{See= \> \cs{textcolor}\u{\texttt{\{blue\}}}\texttt{\{See}
 
@@ -1278,10 +1310,12 @@
 \CHAPTER{Chapter 17 --- \LaTeX{} Package Documentation Tools}
 
 \erroronpage{II-599}{para 3, l.1}{EOl}{2023/07/30}{s}
-
 \u{Whencreating automatically} the driver \> \u{When} the driver
 
+\erroronpage{II-605}{para 1, l.10}{CAR}{2023/10/10}{s}
+\u{right numbers} of underscores \> \u{correct number} of underscores
 
+
 \CHAPTER{Appendix A --- \LaTeX{} Overview for Preamble, \ldots}
 
 \erroronpage{II-624--629}{}{BeB/FMi}{2023/08/31}{s}
@@ -1325,6 +1359,8 @@
 \begin{multicols}{3}[Thanks to all who have found errors or
    omissions. Listed are the people who found an errata entry first.]
 \contributor{BeB}{Bernd Burghardt}
+\contributor{CAR}{Chris Rowley}
+\contributor{DC}{Davide Campagnari}
 \contributor{DFl}{Daniel Flipo}
 \contributor{EOl}{Edgar Olthof}
 \contributor{FMi}{Frank Mittelbach}

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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/firstaid/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/firstaid/changes.txt	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/doc/latex-dev/firstaid/changes.txt	2023-11-02 19:56:02 UTC (rev 68730)
@@ -1,8 +1,13 @@
+2023-09-20  Ulrike Fischer  <Ulrike.Fischer at latex-project.org>
+
+	* latex2e-first-aid-for-external-files.dtx: add firstaid for underscore to 
+      make the active char protected and safe for use in csnames.
+      
 2023-07-18  Ulrike Fischer  <Ulrike.Fischer at latex-project.org>
-    * latex2e-first-aid-for-external-files.dtx: remove no longer needed code for 
+	* latex2e-first-aid-for-external-files.dtx: remove no longer needed code for 
       everysel
-    * latex2e-first-aid-for-external-files.dtx: remove no longer needed code for bidi 
-    * latex2e-first-aid-for-external-files.dtx: 
+	* latex2e-first-aid-for-external-files.dtx: remove no longer needed code for bidi 
+	* latex2e-first-aid-for-external-files.dtx: 
       remove no longer needed code for memoir/stockheight 
      
 2023-05-20  Ulrike Fischer  <Ulrike.Fischer at latex-project.org>

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/graphics/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/graphics/README.md	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/doc/latex-dev/graphics/README.md	2023-11-02 19:56:02 UTC (rev 68730)
@@ -1,7 +1,7 @@
 The LaTeX `graphics` bundle
 ===========================
 
-Release 2023-11-01 pre-release 0
+Release 2024-06-01 pre-release 0
 
 Overview
 --------

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

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

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

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

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

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

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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/latex-lab/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/latex-lab/README.md	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/doc/latex-dev/latex-lab/README.md	2023-11-02 19:56:02 UTC (rev 68730)
@@ -1,6 +1,6 @@
 # LaTeX laboratory
 
-Release 2023-11-01 pre-release 1
+Release 2024-06-01 pre-release 0
 
 ## Overview
 

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

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/latex-lab/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/latex-lab/changes.txt	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/doc/latex-dev/latex-lab/changes.txt	2023-11-02 19:56:02 UTC (rev 68730)
@@ -1,3 +1,18 @@
+2023-10-30 Ulrike Fischer <Ulrike.Fischer at latex-project.org>
+	* added latex-lab-table.dtx for basic table tagging. 
+
+2023-10-21 Ulrike Fischer <Ulrike.Fischer at latex-project.org>
+	* latex-lab-minipage.dtx: use sockets to allow local changes
+
+2023-10-13 Ulrike Fischer <Ulrike.Fischer at latex-project.org>
+	* latex-lab-toc.dtx, latex-lab-sec.dtx, latex-lab-toc-kernel-changes: extend 
+      \MakeLinkTarget to store the target-structure relationship too, see tagging issue #20 
+
+2023-10-13 Ulrike Fischer <Ulrike.Fischer at latex-project.org>
+	* latex-lab-graphic.dtx: fix handling of scale factor, tagging issue #16
+	* latex-lab-graphic.dtx, latex-lab-footnote.dtx: switch to new property referencing code.
+	* latex-lab-math.dtx: fix grabbing of \(..\), tagging issue #19
+
 2023-09-04 Ulrike Fischer <Ulrike.Fischer at latex-project.org>
 	* latex-lab-math.dtx: fix below display skip, tagging issue #11
 	* latex-lab-math.dtx: allow to use it without tagging.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Index: trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-table.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-table.pdf	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-table.pdf	2023-11-02 19:56:02 UTC (rev 68730)

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

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/tools/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/tools/README.md	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/doc/latex-dev/tools/README.md	2023-11-02 19:56:02 UTC (rev 68730)
@@ -1,7 +1,7 @@
 The LaTeX `tools` bundle
 ========================
 
-Release 2023-11-01 pre-release 0
+Release 2024-06-01 pre-release 0
 
 Overview
 --------

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

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex-dev/tools/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/tools/changes.txt	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/doc/latex-dev/tools/changes.txt	2023-11-02 19:56:02 UTC (rev 68730)
@@ -10,6 +10,23 @@
 ================================================================================
 
 #########################
+# 2023-11-01b Release
+#########################
+
+2023-11-01  David Carlisle  <David.Carlisle at latex-project.org>
+
+	* longtable.dtx: corrrect year in date
+
+#########################
+# 2023-11-01 Release
+#########################
+
+2023-08-25  Ulrike Fischer  <Ulrike.Fischer at latex-project.org>
+
+	* longtable.dtx: use \everypar to insert the strut in \LT at startpbox 
+      to match the array use, github/1128 
+
+#########################
 # 2023-06-01 Release
 #########################
 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/source/latex-dev/base/docstrip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/docstrip.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/base/docstrip.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -31,7 +31,7 @@
 \def\filename{docstrip.dtx}
 \def\fileversion{v2.6b}
 \def\filedate{2022-09-03}
-\def\docdate {2022-09-03}
+\def\docdate {2023-10-10}
 %%
 %
 %\iffalse
@@ -838,6 +838,29 @@
 %    suppressed by giving an empty module name, namely using the
 %    syntax \texttt{\%<@@=>}.
 %
+%    The exact steps that are carried out by this replacement
+%    algorithm are the following:
+%    \begin{enumerate}
+%    \item First, deal with \texttt{@@@@} as a special case (by using a
+%    temporary disguise).
+%
+%    \item Then change all |__@@| to |__|\meta{module}.
+%
+%    \item Then change all remaining |_@@| to
+%      |__|\meta{module}.
+%
+%    \item Then change all remaining \texttt{@@} to
+%      |__|\meta{module}.
+%
+%    \item Finally, tidy up by changing each ``disguised
+%      \texttt{@@@@}'' to \texttt{@@}.
+%    \end{enumerate}
+%    Thus, replacement means that \texttt{@@} is replaced by the
+%    \meta{module} name and that 0, 1, or 2 underscores in front of
+%    \texttt{@@} are replaced by exactly 2 underscores (whilst any
+%    larger number of underscores is preserved).
+%
+%
 % \section{Those other languages}
 %    Since \TeX\ is an open system some of \TeX\ packages include
 %    non-\TeX\ files. Some authors use \ds\ to generate PostScript

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltboxes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltboxes.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltboxes.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltboxes.dtx}
-             [2022/09/07 v1.4d LaTeX Kernel (Box Commands)]
+             [2023/10/26 v1.4e LaTeX Kernel (Box Commands)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltboxes.dtx}
@@ -342,13 +342,36 @@
 % \begin{macro}{\@imakebox}
 % \changes{v0.1a}{1993/12/03}
 %         {macro modified}
+% \changes{v1.4e}{2023/10/26}
+%         {Guard against unknown alignment gh/1072}
 % Internal form of |\makebox|.
 %    \begin{macrocode}
+%</2ekernel>
+%<latexrelease>\IncludeInRelease{2023/11/01}%
+%<latexrelease>                 {\@imakebox}{Unknown alignment warning}%
+%<*2ekernel|latexrelease>
 \long\def\@imakebox[#1][#2]#3{%
   \@begin at tempboxa\hbox{#3}%
     \setlength\@tempdima{#1}%       support calc
-    \hb at xt@\@tempdima{\csname bm@#2\endcsname}%
+    \hb at xt@\@tempdima{%
+     \expandafter\ifx\csname bm@#2\endcsname\relax
+       \bm at c
+       \@latex at warning{Unexpected alignment #2}%
+     \else
+       \csname bm@#2\endcsname
+     \fi}%
   \@end at tempboxa}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>                 {\@imakebox}{Unknown alignment warning}%
+%<latexrelease>\long\def\@imakebox[#1][#2]#3{%
+%<latexrelease>  \@begin at tempboxa\hbox{#3}%
+%<latexrelease>    \setlength\@tempdima{#1}%       support calc
+%<latexrelease>    \hb at xt@\@tempdima{\csname bm@#2\endcsname}%
+%<latexrelease>  \@end at tempboxa}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
 %    \end{macrocode}
 % \end{macro}
 %
@@ -748,19 +771,46 @@
 %         {\cs{leavevmode} moved to \cs{@frameb at x}}
 % \changes{v1.0s}{1995/04/27}
 %         {Move \cs{leavevmode} for graphics/1512}
+% \changes{v1.4e}{2023/10/26}
+%         {Guard against unknown alignment gh/1072}
 %    In order to set the whole box, including the frame to the
 %    specified dimension, we first determine that dimension
 %    from the natural size of the text, |#3|.
 %    calculated width.
 %    \begin{macrocode}
+%</2ekernel>
+%<latexrelease>\IncludeInRelease{2023/11/01}%
+%<latexrelease>                 {\@iframebox}{Unknown alignment warning}%
+%<*2ekernel|latexrelease>
 \long\def\@iframebox[#1][#2]#3{%
   \leavevmode
   \@begin at tempboxa\hbox{#3}%
     \setlength\@tempdima{#1}%
     \setbox\@tempboxa\hb at xt@\@tempdima
-         {\kern\fboxsep\csname bm@#2\endcsname\kern\fboxsep}%
+         {\kern\fboxsep
+          \expandafter\ifx\csname bm@#2\endcsname\relax
+            \bm at c
+            \@latex at warning{Unexpected alignment #2}%
+          \else
+            \csname bm@#2\endcsname
+          \fi
+          \kern\fboxsep}%
     \@frameb at x{\kern-\fboxrule}%
   \@end at tempboxa}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>                 {\@iframebox}{Unknown alignment warning}%
+%<latexrelease>\long\def\@iframebox[#1][#2]#3{%
+%<latexrelease>  \leavevmode
+%<latexrelease>  \@begin at tempboxa\hbox{#3}%
+%<latexrelease>    \setlength\@tempdima{#1}%
+%<latexrelease>    \setbox\@tempboxa\hb at xt@\@tempdima
+%<latexrelease>         {\kern\fboxsep\csname bm@#2\endcsname\kern\fboxsep}%
+%<latexrelease>    \@frameb at x{\kern-\fboxrule}%
+%<latexrelease>  \@end at tempboxa}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
 %    \end{macrocode}
 % \end{macro}
 %
@@ -881,9 +931,17 @@
 % \changes{v1.1g}{2006/05/18}
 %         {Ensure \cs{@parboxto} holds the value of \cs{@tempdimb} not the
 %          register itself (pr/3867)}
+% \changes{v1.4e}{2023/10/26}
+%         {Guard against unknown alignment gh/1072}
 % The internal version of |\parbox|.
 %    \begin{macrocode}
 \let\@parboxto\@empty
+%    \end{macrocode}
+%    \begin{macrocode}
+%</2ekernel>
+%<latexrelease>\IncludeInRelease{2023/11/01}%
+%<latexrelease>                 {\@iiiparbox}{Unknown alignment warning}%
+%<*2ekernel|latexrelease>
 \long\def\@iiiparbox#1#2[#3]#4#5{%
   \leavevmode
   \@pboxswfalse
@@ -899,9 +957,38 @@
     \else\@pboxswtrue $\vcenter
     \fi\fi\fi
     \@parboxto{\let\hss\vss\let\unhbox\unvbox
-       \csname bm@#3\endcsname}%
+     \expandafter\ifx\csname bm@#3\endcsname\relax
+       \bm at c
+       \@latex at warning{Unexpected alignment #3}%
+     \else
+       \csname bm@#3\endcsname
+     \fi}%
     \if at pboxsw \m at th$\fi
   \@end at tempboxa}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>                 {\@iiiparbox}{Unknown alignment warning}%
+%<latexrelease>\long\def\@iiiparbox#1#2[#3]#4#5{%
+%<latexrelease>  \leavevmode
+%<latexrelease>  \@pboxswfalse
+%<latexrelease>  \setlength\@tempdima{#4}%
+%<latexrelease>  \@begin at tempboxa\vbox{\hsize\@tempdima\@parboxrestore#5\@@par}%
+%<latexrelease>    \ifx\relax#2\else
+%<latexrelease>      \setlength\@tempdimb{#2}%
+%<latexrelease>      \edef\@parboxto{to\the\@tempdimb}%
+%<latexrelease>    \fi
+%<latexrelease>    \if#1b\vbox
+%<latexrelease>    \else\if #1t\vtop
+%<latexrelease>    \else\ifmmode\vcenter
+%<latexrelease>    \else\@pboxswtrue $\vcenter
+%<latexrelease>    \fi\fi\fi
+%<latexrelease>    \@parboxto{\let\hss\vss\let\unhbox\unvbox
+%<latexrelease>       \csname bm@#3\endcsname}%
+%<latexrelease>    \if at pboxsw \m at th$\fi
+%<latexrelease>  \@end at tempboxa}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltexpl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltexpl.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltexpl.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltexpl.dtx}
-             [2022/02/28 v1.3f LaTeX Kernel (expl3-dependent code)]
+             [2023/10/13 v1.3g LaTeX Kernel (expl3-dependent code)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltexpl.dtx}
@@ -516,4 +516,27 @@
 %<latexrelease>\EndIncludeInRelease
 %    \end{macrocode}
 %
+% \DescribeMacro\IfExplAtLeastTF
+%   A pretty simple wrapper.
+%
+% \begin{macro}{\IfExplAtLeastTF}
+% \changes{v1.3g}{2023/10/13}{Provide a test for \pkg{expl3} date (gh/1004)}
+%    \begin{macrocode}
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2023/11/01}%
+%<latexrelease>                 {\IfExplAtLeastTF}{Test for expl3 date}%
+\def\IfExplAtLeastTF{\@ifl at t@r\ExplLoaderFileDate}
+%    \end{macrocode}
+% \end{macro}
+% We make sure the command is always available.
+%    \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>                 {\IfExplAtLeastTF}{Test for expl3 date}%
+%<latexrelease>
+%<latexrelease>\def\IfExplAtLeastTF{\@ifl at t@r\ExplLoaderFileDate}
+%<latexrelease>\EndIncludeInRelease
+%    \end{macrocode}
+%
 % \Finale

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltfssaxes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltfssaxes.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltfssaxes.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -35,7 +35,7 @@
 %
 %
 \ProvidesFile{ltfssaxes.dtx}
-             [2021/03/18 v1.0i LaTeX Kernel (NFSS Axes handing)]
+             [2023/10/30 v1.0i LaTeX Kernel (NFSS Axes handing)]
 % \iffalse
 \documentclass{ltxdoc}
 \begin{document}
@@ -1240,9 +1240,9 @@
 %    The next rule might be a bit surprising and rightly so. Correct
 %    would be that \texttt{sc} is not affected by \texttt{up}, i.e.,
 %    remains \texttt{sc} as showed in the commented out rule. However,
-%    for nearly three decades commands such as \upshape{sc} or
+%    for nearly three decades commands such as \cs{sc} or
 %    \cs{textup} changed small caps back to the ``normal'' shape. So
-%    for backward compatibility we keep hat behavior.
+%    for backward compatibility we keep that behavior.
 %
 %    As a result you are currently typesetting in \texttt{scit} or
 %    \texttt{scsl} using \cs{upshape} twice will return you to the

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltfssbas.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltfssbas.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltfssbas.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -35,7 +35,7 @@
 %
 %
 \ProvidesFile{ltfssbas.dtx}
-             [2023/04/01 v3.2l LaTeX Kernel (NFSS Basic Macros)]
+             [2023/10/21 v3.2l LaTeX Kernel (NFSS Basic Macros)]
 % \iffalse
 \documentclass{ltxdoc}
 \begin{document}
@@ -279,7 +279,7 @@
 %    For this we compare the given value \verb=#3= with one where we
 %    may have dropped an ``m''. If nothing has changes,
 %    fine. Otherwise there was a wrong value which is now corrected in
-%    \cs{reservedb} so we use that and also issue a warning.
+%    \cs{reserved at b} so we use that and also issue a warning.
 % \changes{v3.2j}{2021/06/09}{Improve information message}
 %    \begin{macrocode}
      \edef\reserved at a{#3}%

Modified: trunk/Master/texmf-dist/source/latex-dev/base/lthooks.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/lthooks.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/base/lthooks.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -32,7 +32,7 @@
 %
 %    \begin{macrocode}
 \def\lthooksversion{v1.1f}
-\def\lthooksdate{2023/08/11}
+\def\lthooksdate{2023/10/02}
 %    \end{macrocode}
 %
 %<*driver>
@@ -795,7 +795,7 @@
 %    \end{itemize}
 %    There can only be a single relation between two labels for a
 %    given hook,
-%    i.e., a later \cs{DeclareHookrule} overwrites any previous
+%    i.e., a later \cs{DeclareHookRule} overwrites any previous
 %    declaration.
 %
 %    The \meta{hook} and \meta{label} can be specified using the
@@ -1566,8 +1566,8 @@
 %
 %    Generic hooks defined in this way are always normal hooks (i.e.,
 %    you can't implement reversed hooks this way). This is a
-%    deliberate limitation, because it speeds up the processessing
-%    conciderably.
+%    deliberate limitation, because it speeds up the processing
+%    considerably.
 %
 %
 % \subsection{Hooks with arguments}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltplain.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltplain.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltplain.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -32,7 +32,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltplain.dtx}
-             [2023/04/15 v2.3i LaTeX Kernel (Plain TeX)]
+             [2023/10/21 v2.3i LaTeX Kernel (Plain TeX)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltplain.dtx}
@@ -1281,7 +1281,7 @@
 %    \cs{par} with whatever definition \cs{par} has when it is
 %    executed. It can, however, be
 %    redefined (before calling \cs{obeylines}!) to achieve some
-%    special effects. If you want to alter is definition when already
+%    special effects. If you want to alter this definition when already
 %    in the scope of \cs{obeylines}, it has no effect (because
 %    \cs{let} is used above).
 %    In that case simply make another call to \cs{obeylines}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltproperties.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltproperties.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltproperties.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -22,8 +22,8 @@
 %
 % for those people who are interested.
 %    \begin{macrocode}
-\def\ltpropertiesversion{1.0b}
-\def\ltpropertiesdate{2023-09-13}
+\def\ltpropertiesversion{1.0c}
+\def\ltpropertiesdate{2023-10-15}
 %    \end{macrocode}
 
 %<*driver>
@@ -177,7 +177,7 @@
 % \begin{function}
 %   {
 %     \property_record:nN,
-%     \property_record:nn, \property_record:nV, \property_record:xx
+%     \property_record:nn, \property_record:nV, \property_record:ee
 %   }
 %   \begin{syntax}
 %      \cs{property_record:nN} \Arg{label} \Arg{clist var}
@@ -227,7 +227,7 @@
 %  or in some outer group!
 % \end{function}
 %
-% \begin{function}{\property_ref_undefined_warn:n,\property_ref_undefined_warn:x}
+% \begin{function}{\property_ref_undefined_warn:n,\property_ref_undefined_warn:e}
 %   \begin{syntax}
 %     \cs{property_ref_undefined_warn:n} \Arg{label}
 %   \end{syntax}
@@ -241,7 +241,7 @@
 %  \texttt{Reference~`\meta{label}'~on~page~\meta{page}\space undefined}.
 % \end{function}
 % 
-% \begin{function}{\property_ref_undefined_warn:nn,\property_ref_undefined_warn:xx}
+% \begin{function}{\property_ref_undefined_warn:nn,\property_ref_undefined_warn:ee}
 %   \begin{syntax}
 %     \cs{property_ref_undefined_warn:nn} \Arg{label} \Arg{property}
 %   \end{syntax}
@@ -302,6 +302,8 @@
 % \section{\LaTeXe{} interface}
 % 
 % The LaTeXe{} interfaces always expand label and property arguments. 
+% This means that one must be careful when using active chars or commands in the
+% names. UTF8-chars are protected and should be safe, similar most babel shorthands.
 % 
 % \begin{function}{\NewProperty,\SetProperty}
 %   \begin{syntax}
@@ -397,7 +399,7 @@
 %   comparisions.
 % \end{variable}
 % 
-% \begin{variable}{currentlabel}
+% \begin{variable}{label}
 %   (now) The content of \cs{@currentlabel}. This is the value that
 %   you get also with the standard \cs{label}/\cs{ref}. 
 % \end{variable}
@@ -410,10 +412,17 @@
 % 
 % \begin{variable}{target}
 %   (now)  The content of \cs{@currentHref}. 
-%   This command is normally filled by for example by
+%   This command is normally filled by for example 
 %   \pkg{hyperref} and gives the name of the last destination it created. 
 % \end{variable}
 % 
+% \begin{variable}{pagetarget}
+%   (shipout)  The content of \cs{@currentHpage}. 
+%   This command is filled for example by a recent version of 
+%   \pkg{hyperref} and then gives the name of the last page 
+%   destination it created. 
+% \end{variable}
+% 
 % \begin{variable}{counter}
 %   (now) The content of \cs{@currentcounter}. 
 %   This command contains after a \cs{refstepcounter} the name of the counter.
@@ -486,7 +495,7 @@
   }
 \cs_new_protected:Npn \property_gset:nnnn #1#2#3#4
   {
-    \@@_gset:xnnn { \tl_to_str:n {#1} }
+    \@@_gset:ennn { \tl_to_str:n {#1} }
       {#2} {#3} {#4}
   }
 \cs_new_protected:Npn \@@_gset:nnnn #1#2#3#4
@@ -504,7 +513,7 @@
       }
       { \msg_error:nnnn { property } { unknown-setpoint } {#1} {#2} }
   }
-\cs_generate_variant:Nn \@@_gset:nnnn {xnnn}  
+\cs_generate_variant:Nn \@@_gset:nnnn {ennn}
 %    \end{macrocode}
 % \end{macro}
 % 
@@ -511,14 +520,17 @@
 % \begin{macro}{\NewProperty,\SetProperty}
 % For consistency we expand the property name, but this doesn't warant a 
 % variant of the L3-commands.
+% \changes{v1.0c}{2023-09-20}{use \cs{protected at edef}} 
 %    \begin{macrocode}
 \cs_new_protected:Npn \NewProperty #1#2#3#4
   {
-    \exp_args:Nx \property_new:nnnn {#1}{#2}{#3}{#4}
+    \protected at edef\reserved at a{#1}
+    \exp_args:No \property_new:nnnn {\reserved at a} {#2}{#3}{#4}
   }  
 \cs_new_protected:Npn \SetProperty #1#2#3#4
   {
-    \exp_args:Nx \property_gset:nnnn {#1}{#2}{#3}{#4}
+    \protected at edef\reserved at a{#1}
+    \exp_args:No \property_gset:nnnn {\reserved at a} {#2}{#3}{#4}
   }    
 %    \end{macrocode}
 % \end{macro}
@@ -528,9 +540,10 @@
 %   {
 %     \property_record:nn,
 %     \property_record:nV,
-%     \property_record:xx,
+%     \property_record:ee,
+%     \property_record:oo,
 %     \@@_record:nn,
-%     \@@_record:xn
+%     \@@_record:en
 %   }
 % \begin{macro}[EXP]
 %   {\@@_record_value:n, \@@_record_value_aux:n, \@@_record_value_aux:e}
@@ -542,8 +555,8 @@
 \cs_new_protected:Npn \property_record:nN #1#2
   { \property_record:nV {#1} #2 }
 \cs_new_protected:Npn \property_record:nn #1#2
-  { \@@_record:xn { \tl_to_str:n {#1} } {#2} }
-\cs_generate_variant:Nn \property_record:nn { nV , xx }
+  { \@@_record:en { \tl_to_str:n {#1} } {#2} }
+\cs_generate_variant:Nn \property_record:nn { nV , ee, oo }
 \cs_new_protected:Npn \@@_record:nn #1#2
   {
     \legacy_if:nT { @filesw }
@@ -556,7 +569,7 @@
           }
       }
   }
-\cs_generate_variant:Nn \@@_record:nn { x }
+\cs_generate_variant:Nn \@@_record:nn { e }
 \cs_new:Npn \@@_record_value:n #1
   { \@@_record_value_aux:e { \tl_to_str:n {#1} } }
 \cs_new:Npn \@@_record_value_aux:n #1
@@ -580,11 +593,14 @@
 % \end{macro}
 %
 % \begin{macro}{\RecordProperties}
+% \changes{v1.0c}{2023-09-20}{use \cs{protected at edef} for safer handling of active chars.} % 
 %    \begin{macrocode}
 \NewDocumentCommand\RecordProperties { m m }
   {
     \@bsphack
-    \property_record:xx {#1}{#2}
+    \protected at edef\reserved at a{#1}
+    \protected at edef\reserved at b{#2}
+    \property_record:oo {\reserved at a}{\reserved at b}
     \@esphack
   }  
 %    \end{macrocode}
@@ -803,8 +819,8 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\property_ref_undefined_warn:nn, 
-%               \property_ref_undefined_warn:xx,
+% \begin{macro}{\property_ref_undefined_warn:nn,
+%               \property_ref_undefined_warn:ee,
 %               \RefUndefinedWarn}
 %    \begin{macrocode}
 \cs_new_protected:Npn \property_ref_undefined_warn:nn #1#2 %#1 label, #2 property
@@ -823,8 +839,8 @@
        \@latex at warning { Reference~`#1'~on~page~\thepage\space undefined }%
     }         
  }
-\cs_generate_variant:Nn \property_ref_undefined_warn:nn {xx}    
-\cs_set_eq:NN \RefUndefinedWarn \property_ref_undefined_warn:xx
+\cs_generate_variant:Nn \property_ref_undefined_warn:nn {ee}
+\cs_set_eq:NN \RefUndefinedWarn \property_ref_undefined_warn:ee
 %    \end{macrocode}
 % \end{macro}
 %
@@ -849,9 +865,9 @@
 %    \end{macrocode}
 % \end{variable}
 % 
-% \begin{variable}{currentlabel}
+% \begin{variable}{label}
 %    \begin{macrocode}
-\property_new:nnnn  { currentlabel } { now } { ?? } { \@currentlabel }
+\property_new:nnnn  { label } { now } { ?? } { \@currentlabel }
 %    \end{macrocode}
 % \end{variable}
 % 
@@ -868,6 +884,13 @@
 %    \end{macrocode}
 % \end{variable}
 %
+% \begin{variable}{target}
+%    \begin{macrocode}
+\newcommand\@currentHpage{}
+\property_new:nnnn  { pagetarget } { shipout } { } { \@currentHpage }
+%    \end{macrocode}
+% \end{variable}
+
 % \begin{variable}{counter}
 %    \begin{macrocode}
 \property_new:nnnn  { counter } { now }  { } { \@currentcounter }

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltspace.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltspace.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltspace.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -32,7 +32,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltspace.dtx}
-             [2023/06/14 v1.3q LaTeX Kernel (spacing)]
+             [2023/10/26 v1.3r LaTeX Kernel (spacing)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltspace.dtx}
@@ -742,7 +742,7 @@
 %     true (as |\@esphack| used to do previously).
 % This is currently used only for floats and similar environments.
 % \changes{v1.2s}{1996/08/02}{Remove \cs{global} before \cs{@ignore...}}
-% \changes{v1.3d}{2015/01/11}{Allow hyphenation (Donald Arseneau pr/3498) (latexrelease)}w
+% \changes{v1.3d}{2015/01/11}{Allow hyphenation (Donald Arseneau pr/3498) (latexrelease)}
 %    \begin{macrocode}
 %</2ekernel>
 %<latexrelease>\IncludeInRelease{2015/01/01}%
@@ -1195,6 +1195,7 @@
 %
 % \begin{macro}{\nobreakspace}
 % \changes{v1.2k}{1995/12/04}{(Macro added}
+% \changes{v1.3r}{2023/10/26}{Protected definition for tilde}
 % \begin{macro}{\@xobeysp}
 % \changes{v1.2t}{1996/09/28}{Moved from ltmiscen.dtx and redefined to
 %                 use \cs{nobreakspace }}
@@ -1213,11 +1214,31 @@
 %   We need to keep \cs{@xobeysp} as it is widely used; so here it is
 %   let to the non-robust command \cs{nobreakspace }.
 %
+%   The fragile version of |~| needs a brace group after \cs{nobreakspace}
+%   to prevent loss of spaces if it occurs in an expansion context. That's
+%   not an issue with the updated \cs{protected} definition, so we keep the
+%   code shorter and avoid that.
 %    \begin{macrocode}
 \DeclareRobustCommand{\nobreakspace}{%
    \leavevmode\nobreak\ }
 \catcode `\~=13
-\def~{\nobreakspace{}}
+%</2ekernel>
+%<latexrelease>\IncludeInRelease{2023/11/01}%
+%<latexrelease>                 {\tilde}{Protected tilde}%
+%<*2ekernel|latexrelease>
+\protected\edef~{%
+  \noexpand\ifincsname\noexpand\expandafter\string~%
+  \noexpand\else
+    \noexpand\expandafter\noexpand\nobreakspace
+  \noexpand\fi
+}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>                 {\tilde}{Protected tilde}%
+%<latexrelease>\def~{\nobreakspace{}}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
 \expandafter\let\expandafter\@xobeysp\csname nobreakspace \endcsname
 %    \end{macrocode}
 % \end{macro}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltvers.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltvers.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltvers.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -112,10 +112,10 @@
 %</2ekernel>
 %<latexrelease>\edef\latexreleaseversion
 %<*2ekernel|latexrelease>
-   {2023-11-01}
+   {2024-06-01}
 %</2ekernel|latexrelease>
 %<*2ekernel>
-\def\patch at level{-1}
+\def\patch at level{0}
 %    \end{macrocode}
 %
 % \begin{macro}{\development at branch@name}

Modified: trunk/Master/texmf-dist/source/latex-dev/firstaid/firstaid.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/firstaid/firstaid.ins	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/firstaid/firstaid.ins	2023-11-02 19:56:02 UTC (rev 68730)
@@ -72,4 +72,7 @@
 \generate{\file{filehook-ltx.sty}
                {\from{latex2e-first-aid-for-external-files.dtx}{filehook-ltx}}}
 
+\generate{\file{underscore-ltx.sty}
+               {\from{latex2e-first-aid-for-external-files.dtx}{underscore-ltx}}}
+
 \endbatchfile

Modified: trunk/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -111,8 +111,8 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\def\LaTeXFirstAidDate{2023/07/18}
-\def\LaTeXFirstAidVersion{v1.1a}
+\def\LaTeXFirstAidDate{2023/09/20}
+\def\LaTeXFirstAidVersion{v1.1b}
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -563,6 +563,44 @@
 %    \begin{macrocode}
 %</kernel>
 %    \end{macrocode}
+% \subsection{The \pkg{underscore} first aid}
+% 
+% The \pkg{underscore} package makes the underscore active. This means that the
+% underscore can not be used in label and references unless the package option \texttt{strings} is used
+% (which patches a selection of problematic commands like \cs{label} and \cs{ref}) 
+% or \pkg{babel} is used which redefines\footnote{unless the recommended option \texttt{safe=none} is used} 
+% a selection of problematic commands like \cs{@testdef} or \cs{@newl at bel}.
+% 
+% With the new property commands the work-around do not work. We therefore make the 
+% underscore protected and use \cs{ifincsname} to allow its use in csnames.
+% 
+%    \begin{macrocode}
+%<*underscore-ltx>
+\ProvidesPackage{underscore-ltx}[2023/09/20 LaTeX firstaid to make underscore protected ]
+\begingroup
+ \catcode`\_=\active
+ \protected\gdef _{%   
+   \ifincsname % 
+      \string_%
+   \else
+      \ifx\protect\@typeset at protect
+         \ifmmode \sb \else \BreakableUnderscore \fi
+      \else
+         \ifx\protect\@unexpandable at protect \noexpand_%
+         \else \protect_%
+      \fi\fi
+    \fi
+    }
+  \global\let\ActiveUnderscore=_
+\endgroup
+%</underscore-ltx>
+%    \end{macrocode}
+%    \begin{macrocode}
+%<*kernel>
+\AddToHook{file/underscore.sty/after}[firstaid]{%
+  \FirstAidNeededT{underscore}{sty}{2006/09/13}{\RequirePackage{underscore-ltx}}}
+%</kernel>
+%    \end{macrocode}
 %
 % \Finale
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-block.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-block.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-block.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -2314,7 +2314,7 @@
 %    \end{macrocode}
 % \end{variable}
 %
-% \begin{macro}{\@@_make_label_box:n, \@@_label_format:x}
+% \begin{macro}{\@@_make_label_box:n, \@@_label_format:e}
 %   Make one label, wrapped in \cs{@@_label_format:n}, with an
 %   appropriate \tn{strut} and possibly \tn{makelabel} in compatibility
 %   mode (used for the \env{list} environment).

Modified: trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-footnotes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-footnotes.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-footnotes.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -899,8 +899,6 @@
 % \subsection{Variants}
 %
 %    \begin{macrocode}
-\cs_generate_variant:Nn \ref_value:nn { Vn }
-\cs_generate_variant:Nn \prop_gput:Nnn {cxn}
 \cs_generate_variant:Nn \hook_gput_code:nnn{nne}
 \cs_generate_variant:Nn \tag_struct_use:n {e}
 %    \end{macrocode}
@@ -1711,14 +1709,14 @@
 % At first we define a suitable attribute, it uses as value the structure
 % number of the note as stored in \cs{l__fnote_currentstruct_tl}
 %    \begin{macrocode}
-\ref_attribute_gset:nnnn {fnote/struct}{1}{now}{\l_@@_currentstruct_tl}
+\property_new:nnnn {fnote/struct}{now}{1}{\l_@@_currentstruct_tl}
 %    \end{macrocode}
 %
 % We add a hook to the label hook. By default it does nothing
-% \begin{macro}{\@@_label_hook:n}
+% \begin{macro}{\@@_label_hook:e}
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_label_hook:n #1 {}
-\AddToHookWithArguments{label}{ \@@_label_hook:n{#1}}
+\cs_new_protected:Npn \@@_label_hook:e #1 {}
+\AddToHookWithArguments{label}{ \@@_label_hook:e{#1}}
 %    \end{macrocode}
 % \end{macro}
 % Inside a footnotetext we change the hook to store the structure number too.
@@ -1726,9 +1724,9 @@
 %    \begin{macrocode}
 \AddToHook{fntext/begin}
  {
-   \cs_set_protected:Npn \@@_label_hook:n #1
+   \cs_set_protected:Npn \@@_label_hook:e #1
     {
-      \ref_label:nn {#1} {fnote/struct}
+      \property_record:ee {@@/#1} {fnote/struct}
     }
  }
 %    \end{macrocode}
@@ -1766,7 +1764,7 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \fnote_mark_gput:nn #1 #2 % #1 the representation of the mark, #2 type
  {
-   \prop_gput:cxn { g_@@_currentmarks_ #2 _prop }
+   \prop_gput:cen { g_@@_currentmarks_ #2 _prop }
      { \tag_get:n{struct_num} }
      { #1 }
  }
@@ -1839,7 +1837,7 @@
 %    which means the name of the prop shouldn't be fix.
 %    \begin{macrocode}
         \fnote_mark_gput:oo {\@thefnmark}{\l_fnote_type_tl}
-        \tl_set:Nx \l_@@_linktarget_tl {footnote*.\tag_get:n{struct_num}}
+        \tl_set:Ne \l_@@_linktarget_tl {footnote*.\tag_get:n{struct_num}}
       }
 %    \end{macrocode}
 %  If there is no autodetecting we need some id,
@@ -1854,13 +1852,13 @@
          {
            \exp_not:N\fnote_gput_refs:ee
             { \tag_get:n{struct_num} }
-            { \ref_value:Vn\l_@@_currentlabel_tl {fnote/struct} }
+            { \property_ref:ee{ @@/\l_@@_currentlabel_tl } {fnote/struct} }
          }
 %    \end{macrocode}
 %    in this case we set the name of the linktarget in the note
 %    to the structure number of the text mark.
 %    \begin{macrocode}
-        \tl_set:Nx \l_@@_linktarget_tl {footnote*.\ref_value:Vn\l_@@_currentlabel_tl {fnote/struct}}
+        \tl_set:Ne \l_@@_linktarget_tl {footnote*.\property_ref:ee {@@/\l_@@_currentlabel_tl} {fnote/struct}}
       }
 %    \end{macrocode}
 % And now the actual content
@@ -1938,7 +1936,7 @@
 %    \end{macrocode}
 % Store the current structure number for labels.
 %    \begin{macrocode}
-    \tl_set:Nx \l_@@_currentstruct_tl { \tag_get:n{struct_num} }
+    \tl_set:Ne \l_@@_currentstruct_tl { \tag_get:n{struct_num} }
 %    \end{macrocode}
 % We want to move the label structure here. So we provide a container
 % It number is |\l__fnote_currentstruct_tl| plus 1.

Modified: trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-graphic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-graphic.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-graphic.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -15,8 +15,8 @@
 %    https://github.com/latex3/latex2e/required/latex-lab
 %
 % for those people who are interested or want to report an issue.
-\def\ltlabgraphicdate{2023-07-20}
-\def\ltlabgraphicversion{0.80a}
+\def\ltlabgraphicdate{2023-10-13}
+\def\ltlabgraphicversion{0.80b}
 %
 %<*driver>
 \documentclass{l3doc}
@@ -184,25 +184,16 @@
 \RequirePackage{l3opacity}
 %    \end{macrocode}
 %
-%\subsection{Saving the position}
-% We need a replacement for zref-savepos. This uses l3ref which loaded 
-% by the pdfmanagement/tagpdf.
 %
-% TODO: this is perhaps needed in other places too and should be moved to
-% l3ref!!
-%    \begin{macrocode}
-\ref_attribute_gset:nnnn{xpos}{0}{shipout}{\int_use:N\tex_lastxpos:D}
-\ref_attribute_gset:nnnn{ypos}{0}{shipout}{\int_use:N\tex_lastypos:D}
-%    \end{macrocode}
-
 % \begin{macro}{\@@_graphic_savepos:n}
-% this is the command which stores the position. It uses 
-% two savepos in case bidi needs it (see zref-savepos).
+% this is the command which stores the position. Similar to 
+% zref-savepos it uses two savepos commands 
+% for the case that bidi changes the processing order.
 %    \begin{macrocode}
 \cs_new_protected:Npn\@@_graphic_savepos:n #1
  {
   \tex_savepos:D 
-  \ref_label:nn{#1}{xpos,ypos,abspage}
+  \property_record:nn{#1}{xpos,ypos,abspage}
   \tex_savepos:D 
  }
 \cs_generate_variant:Nn \@@_graphic_savepos:n {e}
@@ -310,8 +301,7 @@
 \fp_new:N\l_@@_graphic_lx_fp
 \fp_new:N\l_@@_graphic_uy_fp
 %    \end{macrocode}
-% this holds the scale value. Currently this only the one from
-% \cs{Gin at scalex} 
+% this holds the scale value. Either \cs{Gin at scalex} or (if that is !) \cs{Gin at scaley}
 %    \begin{macrocode}
 \fp_new:N\l_@@_graphic_scale_fp
 %    \end{macrocode}
@@ -353,8 +343,8 @@
            {
              \tl_if_empty:NT\l_@@_graphic_alt_tl         
                {
-                 \msg_warning:nnx{tag}{alt-text-missing}{\l_@@_graphic_alt_dflt_tl}
-                 \tl_set:Nx\l_@@_graphic_alt_tl {\l_@@_graphic_alt_dflt_tl}
+                 \msg_warning:nne{tag}{alt-text-missing}{\l_@@_graphic_alt_dflt_tl}
+                 \tl_set:Ne\l_@@_graphic_alt_tl {\l_@@_graphic_alt_dflt_tl}
                }
              \tag_struct_begin:n
                {
@@ -470,7 +460,7 @@
 %    \begin{macrocode}
 \AddToHook{package/graphicx/after}[latex-lab]
   {
-    \define at key{Gin}{alt}       {\tl_set:Nx\l_@@_graphic_alt_tl{\text_purify:n{#1}}}
+    \define at key{Gin}{alt}       {\tl_set:Ne\l_@@_graphic_alt_tl{\text_purify:n{#1}}}
     \define at key{Gin}{artifact}[]
       {
         \bool_set_true:N \l_@@_graphic_artifact_bool
@@ -478,7 +468,7 @@
       }
     \define at key{Gin}{actualtext}
      {
-       \tl_set:Nx\l_@@_graphic_actual_tl{\text_purify:n{#1}}
+       \tl_set:Ne\l_@@_graphic_actual_tl{\text_purify:n{#1}}
        \bool_set_false:N \l_@@_graphic_BBox_bool
      }
     \define at key{Gin}{correct-BBox}
@@ -509,7 +499,7 @@
 \keys_define:nn{tag/picture}
    {
      ,alt .code:n =  
-        {\tl_set:Nx\l_@@_graphic_alt_tl{\text_purify:n{#1}}}
+        {\tl_set:Ne\l_@@_graphic_alt_tl{\text_purify:n{#1}}}
      ,artifact .code:n = 
         {
           \bool_set_true:N \l_@@_graphic_artifact_bool
@@ -517,7 +507,7 @@
         }
      ,actualtext .code:n = 
         {
-          \tl_set:Nx\l_@@_graphic_actual_tl{\text_purify:n{#1}}
+          \tl_set:Ne\l_@@_graphic_actual_tl{\text_purify:n{#1}}
           \bool_set_false:N \l_@@_graphic_BBox_bool
         }
      ,correct-BBox .code:n = 
@@ -581,7 +571,12 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_graphic_get_scale: 
  {
-   \fp_set:Nn \l_@@_graphic_scale_fp { \Gin at scalex }
+   \fp_set:Nn \l_@@_graphic_scale_fp
+     {
+       \str_if_eq:eeTF {\Gin at scalex} { ! }
+        { \Gin at scaley }
+        { \Gin at scalex }
+     }
  }
 %    \end{macrocode}
 % \end{macro}
@@ -636,7 +631,7 @@
           (\l_@@_graphic_uy_fp-\l_@@_graphic_ly_fp-\l_@@_graphic_trim_ly_fp) 
             * (-\l_@@_graphic_sin_fp) 
         }  
-       \tl_gset:Nx\g_@@_graphic_lx_tl 
+       \tl_gset:Ne\g_@@_graphic_lx_tl 
          { 
           \fp_eval:n
             {
@@ -651,7 +646,7 @@
                +\l_@@_graphic_trim_lx_fp
             }
          }    
-       \tl_gset:Nx\g_@@_graphic_ux_tl 
+       \tl_gset:Ne\g_@@_graphic_ux_tl 
          { 
            \fp_eval:n
              {
@@ -695,7 +690,7 @@
           (\l_@@_graphic_uy_fp-\l_@@_graphic_ly_fp-\l_@@_graphic_trim_ly_fp) 
             * \l_@@_graphic_cos_fp 
         }   
-       \tl_gset:Nx\g_@@_graphic_ly_tl 
+       \tl_gset:Ne\g_@@_graphic_ly_tl 
          { 
           \fp_eval:n
             {
@@ -709,7 +704,7 @@
               + \l_@@_graphic_ly_fp + \l_@@_graphic_trim_ly_fp 
             }
          }        
-       \tl_gset:Nx\g_@@_graphic_uy_tl 
+       \tl_gset:Ne\g_@@_graphic_uy_tl 
          { 
            \fp_eval:n
              {
@@ -735,7 +730,7 @@
  {
   \bool_if:NT\l_@@_graphic_bboxcorr_bool
     {
-     \tl_set:Nx #1
+     \tl_set:Ne #1
        { 
          \fp_eval:n 
           {
@@ -744,7 +739,7 @@
            \dim_to_decimal_in_bp:n {\seq_item:Nn \l_@@_graphic_bboxcorr_seq {1} } 
           }
        }
-     \tl_set:Nx #2
+     \tl_set:Ne #2
        { 
          \fp_eval:n 
           {
@@ -753,7 +748,7 @@
            \dim_to_decimal_in_bp:n {\seq_item:Nn \l_@@_graphic_bboxcorr_seq {2} } 
           }
        }
-     \tl_set:Nx #3
+     \tl_set:Ne #3
        { 
          \fp_eval:n 
           {
@@ -762,7 +757,7 @@
            \dim_to_decimal_in_bp:n {\seq_item:Nn \l_@@_graphic_bboxcorr_seq {3} } 
           }
        }
-     \tl_set:Nx #4
+     \tl_set:Ne #4
        { 
          \fp_eval:n 
           {
@@ -791,22 +786,22 @@
       {\l_@@_graphic_BBox_bool}
     }
     {
-      \fp_set:Nn \l_@@_graphic_scale_fp { \Gin at scalex }
+      \__tag_graphic_get_scale:
       \@@_graphic_get_trim:
       \int_gincr:N\g_@@_graphic_int
-      \tl_set:Nx\l_@@_graphic_currentlabel_tl {_@@_graphic_\int_use:N \g_@@_graphic_int}
+      \tl_set:Ne\l_@@_graphic_currentlabel_tl {_@@_graphic_\int_use:N \g_@@_graphic_int}
       \@@_graphic_savepos:e { \l_@@_graphic_currentlabel_tl }
-      \tl_gset:Nx\g_@@_graphic_lx_tl
+      \tl_gset:Ne\g_@@_graphic_lx_tl
         {
           \dim_to_decimal_in_bp:n 
-            { \@@_ref_value:enn {\l_@@_graphic_currentlabel_tl}{xpos}{0}sp }
+            { \property_ref:een {\l_@@_graphic_currentlabel_tl}{xpos}{0}sp }
         }  
-      \tl_gset:Nx\g_@@_graphic_ly_tl
+      \tl_gset:Ne\g_@@_graphic_ly_tl
         {
           \dim_to_decimal_in_bp:n 
-            { \@@_ref_value:enn {\l_@@_graphic_currentlabel_tl}{ypos}{0}sp }
+            { \property_ref:een {\l_@@_graphic_currentlabel_tl}{ypos}{0}sp }
         } 
-      \tl_gset:Nx\g_@@_graphic_ux_tl
+      \tl_gset:Ne\g_@@_graphic_ux_tl
           {
             \fp_eval:n 
              { 
@@ -815,7 +810,7 @@
                \dim_to_decimal_in_bp:n { \Gin at req@width }
              }  
           }         
-       \tl_gset:Nx\g_@@_graphic_uy_tl
+       \tl_gset:Ne\g_@@_graphic_uy_tl
           {
             \fp_eval:n 
              {
@@ -829,7 +824,7 @@
 %    \begin{macrocode}     
       \legacy_if:nF {Gin at clip}          
         {            
-          \tl_gset:Nx\g_@@_graphic_ux_tl
+          \tl_gset:Ne\g_@@_graphic_ux_tl
             {
               \fp_eval:n 
                 {
@@ -838,7 +833,7 @@
                   \l_@@_graphic_trim_ux_fp
                 }  
             }
-          \tl_gset:Nx\g_@@_graphic_lx_tl
+          \tl_gset:Ne\g_@@_graphic_lx_tl
             {
               \fp_eval:n 
                 {
@@ -847,7 +842,7 @@
                   \l_@@_graphic_trim_lx_fp
                 }  
             }  
-          \tl_gset:Nx\g_@@_graphic_uy_tl
+          \tl_gset:Ne\g_@@_graphic_uy_tl
             {
               \fp_eval:n 
                 {
@@ -856,7 +851,7 @@
                   \l_@@_graphic_trim_uy_fp
                 }  
             }                                   
-          \tl_gset:Nx\g_@@_graphic_ly_tl
+          \tl_gset:Ne\g_@@_graphic_ly_tl
             {
               \fp_eval:n 
                 {
@@ -934,19 +929,19 @@
     }
     {
       \int_gincr:N\g_@@_graphic_int
-      \tl_set:Nx\l_@@_graphic_currentlabel_tl {_@@_graphic_\int_use:N \g_@@_graphic_int}
+      \tl_set:Ne\l_@@_graphic_currentlabel_tl {_@@_graphic_\int_use:N \g_@@_graphic_int}
       \@@_graphic_savepos:e { \l_@@_graphic_currentlabel_tl }
-      \tl_gset:Nx \g_@@_graphic_lx_tl 
+      \tl_gset:Ne \g_@@_graphic_lx_tl 
         { 
           \dim_to_decimal_in_bp:n 
-          { \@@_ref_value:enn {\l_@@_graphic_currentlabel_tl}{xpos}{0}sp  } 
+          { \property_ref:een {\l_@@_graphic_currentlabel_tl}{xpos}{0}sp  } 
         }
-      \tl_gset:Nx \g_@@_graphic_ly_tl 
+      \tl_gset:Ne \g_@@_graphic_ly_tl 
         { 
           \dim_to_decimal_in_bp:n 
-          { \@@_ref_value:enn {\l_@@_graphic_currentlabel_tl}{ypos}{0}sp - \dp\@picbox } 
+          { \property_ref:een {\l_@@_graphic_currentlabel_tl}{ypos}{0}sp - \dp\@picbox } 
         }  
-      \tl_gset:Nx \g_@@_graphic_ux_tl 
+      \tl_gset:Ne \g_@@_graphic_ux_tl 
         { 
           \dim_to_decimal_in_bp:n 
            {
@@ -953,7 +948,7 @@
              \g_@@_graphic_lx_tl bp + \wd\@picbox        
            }  
         }     
-      \tl_gset:Nx \g_@@_graphic_uy_tl 
+      \tl_gset:Ne \g_@@_graphic_uy_tl 
         { 
           \dim_to_decimal_in_bp:n 
            {
@@ -1044,7 +1039,7 @@
       \int_compare:nNnT 
        {\g_shipout_readonly_int}
        =
-       {\@@_ref_value:enn{_@@_graphic_#6}{abspage}{0}}
+       {\property_ref:een{_@@_graphic_#6}{abspage}{0}}
        {
         \put
          (#1 bp,\dim_eval:n{-\paperheight + \dim_eval:n{#2 bp}})

Modified: trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-math.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-math.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-math.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -164,8 +164,6 @@
 %    presumably)\\
 %    - Math environments created with \pkg{ltcmd} [commands] should not be copied, . . .\\
 %    - Package authors should be able to manually set up math environments with a public boolean.}
-%
-%   \item 
 % \end{enumerate} 
 %
 %
@@ -243,6 +241,8 @@
 %        Or do we need an extra storage tl?}
 %
 % \begin{variable}{\g_@@_grabbed_env_tl, \g_@@_grabbed_math_tl}
+% \cs{g_@@_grabbed_env_tl} contains the name of the math environment (\texttt{math} in the case 
+% of inline math, \cs{g_@@_grabbed_math_tl} the math content.
 %    \begin{macrocode}
 \tl_new:N \g_@@_grabbed_env_tl
 \tl_new:N \g_@@_grabbed_math_tl
@@ -312,8 +312,9 @@
 % fairly simple this one
 %    \end{macrocode}
 % We do not want math tagging in fakemath or when measuring, 
-% so we imitate the test inside
-% \cs{@@_process:nn} for now, see https://github.com/latex3/tagging-project/issues/5
+% so we imitate the test inside \cs{@@_process:nn} for now, 
+% see https://github.com/latex3/tagging-project/issues/5
+% TODO: use socket to get more control about typesetting variants (tagged, drop etc)?
 %    \begin{macrocode}
         \legacy_if:nTF { measuring@ }
           { #1 $ }
@@ -327,8 +328,7 @@
                 \@kernel at math@end
                 \tagmcbegin{}  % restart P-chunk (whatsits in pdftex)
               }
-          }
-        
+          }        
       }
   }
 %    \end{macrocode}
@@ -715,7 +715,6 @@
           { $ }
       }
       {
-        \bool_set_true:N \l_@@_collected_bool
         \@@_grab_inline:w
       }
   } % \(
@@ -796,16 +795,16 @@
   \tl_gset:Nx\tmpmathcontent
      {
        LaTeX~ formula~ starts~
-       \exp_not:N\begin{\g__math_grabbed_env_tl}
+       \exp_not:N\begin{\g_@@_grabbed_env_tl}
        \space
-       \exp_not:V\g__math_grabbed_math_tl
+       \exp_not:V\g_@@_grabbed_math_tl
        \space
-       \exp_not:N\end{\g__math_grabbed_env_tl} 
+       \exp_not:N\end{\g_@@_grabbed_env_tl} 
        \space LaTeX~ formula~ ends~
     }
   \tagstructbegin{tag=Formula,
     AFinline-o=\tmpmathcontent,
-    title-o=\g__math_grabbed_env_tl,
+    title-o=\g_@@_grabbed_env_tl,
     actualtext=\tmpmathcontent
 %    alt=\tmpmathcontent
   }
@@ -1220,10 +1219,10 @@
 \tl_new:N \result  
   
 \cs_new_protected:Npn\grabaformulapartandstart {
-  \@@_split_at_nl:NN  \g__math_grabbed_math_tl \result
+  \@@_split_at_nl:NN  \g_@@_grabbed_math_tl \result
   \typeout{====>first-result=\meaning\result}
-  \typeout{====>first-tmpmathcontent=\meaning\g__math_grabbed_math_tl}
-  \tl_if_empty:NTF \g__math_grabbed_math_tl
+  \typeout{====>first-tmpmathcontent=\meaning\g_@@_grabbed_math_tl}
+  \tl_if_empty:NTF \g_@@_grabbed_math_tl
      {
        \typeout{====>formula~ has~ no~ subparts}
        \global\@subformulasfalse
@@ -1231,7 +1230,7 @@
      {
        \typeout{====>formula~ has~ subparts}
        \global\@subformulastrue
-       \edef\resulttitle{\g__math_grabbed_env_tl\space (part)}
+       \edef\resulttitle{\g_@@_grabbed_env_tl\space (part)}
        \tagstructbegin{tag=Formula,
 %    \end{macrocode}
 %    For now we don't put anything in /alt or /ActualText on subformulas
@@ -1244,16 +1243,16 @@
 }
 
 \cs_new_protected:Npn\grabaformulapartandmayberestart {
-  \@@_split_at_nl:NN  \g__math_grabbed_math_tl \result
+  \@@_split_at_nl:NN  \g_@@_grabbed_math_tl \result
   \typeout{====>result=\meaning\result}
-  \typeout{====>tmpmathcontent=\meaning\g__math_grabbed_math_tl}
-%  \tl_if_empty:NTF \g__math_grabbed_math_tl
+  \typeout{====>tmpmathcontent=\meaning\g_@@_grabbed_math_tl}
+%  \tl_if_empty:NTF \g_@@_grabbed_math_tl
 %     {
 %       \typeout{====>tmpmathcontent=empty}
 %     }
 %     {
 %       \typeout{====>tmpmathcontent=not-empty}
-       \edef\resulttitle{\g__math_grabbed_env_tl\space (part)}
+       \edef\resulttitle{\g_@@_grabbed_env_tl\space (part)}
        \tagstructbegin{tag=Formula,
          alt=\result,
          title-o=\resulttitle
@@ -1272,7 +1271,7 @@
 \if at subformulas
  \ifmeasuring@\else
 %
-  \tl_if_empty:NF \g__math_grabbed_math_tl
+  \tl_if_empty:NF \g_@@_grabbed_math_tl
      {
        \tagmcend 
        \tagstructend

Modified: trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-minipage.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-minipage.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-minipage.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -16,8 +16,8 @@
 %
 % for those people who are interested or want to report an issue.
 %
-\def\ltlabminipagedate{2023-08-20}
-\def\ltlabminipageversion{0.81b}
+\def\ltlabminipagedate{2023-10-30}
+\def\ltlabminipageversion{0.81c}
 %<*driver>
 \documentclass{l3doc}
 \EnableCrossrefs
@@ -49,13 +49,22 @@
 % 
 % \section{Introduction}
 % 
-%  How to tag minipages and parboxes is still under discussion. 
+%  How to best tag minipages and parboxes is still under discussion. 
 %  But as they start and contain paragraphs it is clear that 
-%  hooks are needed to interrupt and restart the tagging. 
+%  some sockets are needed to interrupt and restart the tagging. 
 %  
-%  The tagging added is currently quite simple minded. See the todo-testfiles and the
-%  code comments for some open points. 
+%  The tagging added is currently quite simple-minded. See the
+%  todo-testfiles and the code comments for some open points.
 %  
+%  One of the main problems is how to properly embed them in the
+%  surrounding.  When used in normal text (in a paragraph) they
+%  typically should close the \texttt{text} structure and reopen one
+%  at the end. But when used inside low-level \cs{vbox} or \cs{hbox}
+%  this is often wrong. The code uses now there two sockets
+%  \texttt{tagsupport/parbox/before} and
+%  \texttt{tagsupport/parbox/after} which can be set to noop, if
+%  necessary.
+%  
 %    \begin{macrocode}
 %<*package>
 %    \end{macrocode}
@@ -82,12 +91,13 @@
 \def\@kernel at init@minipage{}
 \def\@kernel at init@parbox{}
 %    \end{macrocode}
-% We need a few hooks.
+% We use sockets for the tag support code, as there will be cases where we want
+% to exchange the content or disable it.
 %    \begin{macrocode}
-\def\@kernel at before@minipage{}
-\def\@kernel at after@minipage{}
-\def\@kernel at before@parbox{}
-\def\@kernel at after@parbox{}
+\socket_new:nn {tagsupport/minipage/before}{0}
+\socket_new:nn {tagsupport/minipage/after} {0}
+\socket_new:nn {tagsupport/parbox/before}  {0}
+\socket_new:nn {tagsupport/parbox/after}{0}
 %    \end{macrocode}
 %
 % \subsection{Patch minipage}
@@ -106,9 +116,9 @@
   \setlength\@tempdima{#4}%
   \def\@mpargs{{#1}{#2}[#3]{#4}}%
 %    \end{macrocode}
-% insert the hook
+% insert the socket
 %    \begin{macrocode}
-  \@kernel at before@minipage% new
+  \socket_use:n{tagsupport/minipage/before}% new
   \setbox\@tempboxa\vbox\bgroup
     \color at begingroup
       \hsize\@tempdima
@@ -115,7 +125,7 @@
       \textwidth\hsize \columnwidth\hsize
       \@parboxrestore
       \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c at mpfootnote\z@
-      \AssignSocketPlug{fntext/process}{mp}%
+      \socket_assign_plug:nn{fntext/process}{mp}%
       \let\@listdepth\@mplistdepth \@mplistdepth\z@
       \@minipagerestore
       \@setminipage}
@@ -135,13 +145,13 @@
   \color at endgroup
   \egroup
 %    \end{macrocode}
-% as the parbox command is called, we must prevent that it adds its additional
-% tagging commands:
+%    As the parbox command is called, we must prevent that it adds its
+%    additional tagging commands:
 %    \begin{macrocode}
   \tag_stop:n{minipage}
   \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}%
   \tag_start:n{minipage}
-  \@kernel at after@minipage%new end ...
+  \socket_use:n{tagsupport/minipage/after} %new end ...
   }
 %    \end{macrocode}
 %
@@ -152,7 +162,7 @@
   \leavevmode
   \@pboxswfalse
   \setlength\@tempdima{#4}%
-  \@kernel at before@parbox% new
+  \socket_use:n{tagsupport/parbox/before}
   \@begin at tempboxa\vbox{\hsize\@tempdima\@parboxrestore#5\@@par}%
     \ifx\relax#2\else
       \setlength\@tempdimb{#2}%
@@ -167,7 +177,7 @@
        \csname bm@#3\endcsname}%
     \if at pboxsw \m at th$\fi
   \@end at tempboxa%
-  \@kernel at after@parbox%new end
+  \socket_use:n{tagsupport/parbox/after}
   }
 %    \end{macrocode}
 %
@@ -176,7 +186,7 @@
 %    \begin{macrocode}
 \tl_new:N  \l__ltboxes_tag_tl
 \tl_set:Nn \l__ltboxes_tag_tl {Div}
-\cs_set_protected:Npn\@kernel at before@minipage
+\socket_new_plug:nnn{tagsupport/minipage/before}{tag/dflt}
   {
 %    \end{macrocode}
 % As there was a \cs{leavevmode} before that is a P/text open that we have to close.
@@ -185,15 +195,28 @@
 %    \end{macrocode}
 % TODO: the P can be further up, we need a proper method to test and handle this. 
 %    \begin{macrocode}   
-    \tag_struct_begin:n{tag=\l__ltboxes_tag_tl}}
-\cs_set_protected:Npn\@kernel at after@minipage
+    \tag_struct_begin:n{tag=\l__ltboxes_tag_tl}
+  }
+%    \end{macrocode}
+% similar for the other sockets:
+%    \begin{macrocode}
+\socket_new_plug:nnn{tagsupport/minipage/after}{tag/dflt}
   {\tag_struct_end:\tag_struct_begin:n{tag=\l__tag_para_tag_tl}\tag_mc_begin_pop:n{}}
-\cs_set_protected:Npn\@kernel at before@parbox
+  
+\socket_new_plug:nnn{tagsupport/parbox/before}{tag/dflt}
   {\tag_mc_end_push:\tag_struct_end:\tag_struct_begin:n{tag=\l__ltboxes_tag_tl}}
-\cs_set_protected:Npn\@kernel at after@parbox
+  
+\socket_new_plug:nnn{tagsupport/parbox/after}{tag/dflt}
   {\tag_struct_end:\tag_struct_begin:n{tag=\l__tag_para_tag_tl}\tag_mc_begin_pop:n{}}
 %    \end{macrocode}
+% Activate the default tagging plug
 %    \begin{macrocode}
+\socket_assign_plug:nn{tagsupport/minipage/before}{tag/dflt}
+\socket_assign_plug:nn{tagsupport/minipage/after} {tag/dflt}
+\socket_assign_plug:nn{tagsupport/parbox/before}  {tag/dflt}
+\socket_assign_plug:nn{tagsupport/parbox/after}   {tag/dflt}
+%    \end{macrocode}
+%    \begin{macrocode}
 %</package>  
 %    \end{macrocode}
 

Modified: trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-sec.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-sec.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-sec.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -16,8 +16,8 @@
 %
 % for those people who are interested or want to report an issue.
 %
-\def\ltlabsecdate{2023-07-20}
-\def\ltlabsecversion{0.84a}
+\def\ltlabsecdate{2023-10-16}
+\def\ltlabsecversion{0.84b}
 %<*driver>
 \documentclass{l3doc}
 \EnableCrossrefs
@@ -517,12 +517,10 @@
             }
           }  
           {
+%    \end{macrocode}
+% The relation target-struct is stored internally by the MakeLinkTarget commands
+%    \begin{macrocode}
             \MakeLinkTarget[chapter]{}
-            %todo public function for this update!
-            \tl_if_blank:VF \@currentHref
-              {
-                \prop_gput:Nxx \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
-              }
           }   
 %    \end{macrocode}
 % The main call to the underlying commands. 
@@ -578,10 +576,6 @@
           }  
           {
             \MakeLinkTarget[part]{}
-            \tl_if_blank:VF \@currentHref
-             {
-               \prop_gput:Nxx \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
-             }
           }
 %    \end{macrocode}
 % The main call to the underlying commands. 
@@ -633,18 +627,14 @@
 % probably need something slightly different based on \cs{MakeLinkTarget}. 
 %    \begin{macrocode}
 \cs_new_protected:Npn \@hyp at section@target at nnn #1 #2 #3 %#1 optarg #2 name/counter, #3 indent
- {
-   \makebox[0pt][l]
+  {
+    \makebox[0pt][l]
      { 
        \skip_set:Nn \@tempskipa {#3}
        \dim_compare:nNnF {\@tempskipa}<{0pt}{\kern-\@tempskipa}
        \MakeLinkTarget#1{#2}
      }
-   \tl_if_blank:VF \@currentHref
-    {
-      \prop_gput:Nxx \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
-    }  
- }
+  }
 %    \end{macrocode}
 % \end{macro}
 % 

Added: trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-table.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-table.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-table.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -0,0 +1,1975 @@
+% \iffalse meta-comment
+%
+%% File: latex-lab-table.dtx (C) Copyright 2023 LaTeX Project
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version.  The latest version
+% of this license is in the file
+%
+%    https://www.latex-project.org/lppl.txt
+%
+%
+% The development version of the bundle can be found below
+%
+%    https://github.com/latex3/latex2e/required/latex-lab
+%
+% for those people who are interested or want to report an issue.
+%
+\def\ltlabtbldate{2023-10-30}
+\def\ltlabtblversion{0.85d}
+%<*driver>
+\documentclass{l3doc}
+\EnableCrossrefs
+\CodelineIndex
+\begin{document}
+  \DocInput{latex-lab-table.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+% \providecommand\hook[1]{\texttt{#1\DescribeHook[noprint]{#1}}}
+% \providecommand\socket[1]{\texttt{#1\DescribeSocket[noprint]{#1}}}
+% \providecommand\plug[1]{\texttt{#1\DescribePlug[noprint]{#1}}}
+%
+% \NewDocElement[printtype=\textit{socket},idxtype=socket,idxgroup=Sockets]{Socket}{socketdecl}
+% \NewDocElement[printtype=\textit{hook},idxtype=hook,idxgroup=Hooks]{Hook}{hookdecl}
+% \NewDocElement[printtype=\textit{plug},idxtype=plug,idxgroup=Plugs]{Plug}{plugdecl}
+%
+%
+%
+%
+% \title{The \textsf{latex-lab-table} package\\
+%        Changes related to the tagging of tables}
+% \author{Frank \& Ulrike, \LaTeX{} Project\thanks{Initial implementation done by Frank Mittelbach}}
+% \date{v\ltlabtblversion\ \ltlabtbldate}
+%
+% \maketitle
+%
+% \newcommand{\xt}[1]{\textsl{\textsf{#1}}}
+% \newcommand{\TODO}[1]{\textbf{[TODO:} #1\textbf{]}}
+% \newcommand{\docclass}{document class \marginpar{\raggedright document class
+% customizations}}
+%
+%
+% \begin{abstract}
+%   The following code implements a first draft for the tagging of
+%   tables. It still has a large number of limitations and restrictions!
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Documentation}
+%
+% In \LaTeX{} the word \texttt{table} is used as the name of the float environment that can contain
+% a data table\footnote{But it does not really have to, you can put
+% other material into such environments.} along with a caption and some additional text. The environments for
+% actual data tables have various names like \texttt{tabular}, \texttt{tabular*},
+% \texttt{tabularx} and \texttt{longtable}---the last should not be used inside a float
+% and supports its own caption command.
+%
+% In this documentation \enquote{table} always means such data tables and not the float
+% environment.
+%
+% Tagging of tables is on one side doesn't look very difficult: one only has to
+% surround rows and cells by TR and TH or TD structures.
+% But there are difficulties:
+% \begin{itemize}
+% \item
+%   One is that over the years various packages related to tables have
+%   been written that all change some of the internals. Inserting the
+%   tagging commands and testing all the variants and various nestings
+%   is not trivial.
+%
+% \item
+%   The other difficulty is that most of the existing environments to
+%   create tables do not know the concept of headers as a semantic
+%   structures.
+%
+% \item
+%   Headers are only produced through visual formatting, e.g., by
+%   making them bold or by underlying some color. But accessible
+%   tables need headers (and the PDF/UA standards requires them) and
+%   this means that additional syntax to declare headers (when they
+%   can't be guessed) must be developed. This is still an area for
+%   research.
+% \end{itemize}
+%
+% Right now, this module therefore does implement only some basic
+% support for the tagging of tables. A list of the known limitations
+% is shown below.
+%
+% The module is not loaded automatically (i.e., not yet integrated
+% into any \texttt{phase-XX})  and by itself it doesn't activate
+% tagging. For experimenting with table tagging it is therefore best
+% to load it in combination
+% with phase-III in \cs{DocumentMetadata}, i.e.:
+%
+% \begin{verbatim}
+% \DocumentMetadata{testphase={phase-III,table}}
+% \end{verbatim}
+%
+% It will then automatically tag all table environments it already supports with
+% the exception of tables in the header and footer of the page (where tagging is disabled).
+% Such tables can be nested. 
+%
+% If a table should not be tagged as table, for example because it is merely used
+% to produce a layout or because it is a not yet (fully) supported table structure, 
+% the tagging can be disabled with
+%  \verb|\tagpdfsetup{table-tagging=false}|.
+%
+% Inside cells the automatic tagging of paragraphs is disabled with the exception of
+% p/m/b-type cells. 
+%
+% Rows do not need to contain a full number of \&, missing cells are automatically
+% added with an empty TD-structure.
+%
+% There is some basic support\footnote{This is not meant to be the
+% final interface, though.} for headers. With
+% \begin{quote}
+%   \verb|\tagpdfsetup{table-header-rows={|\meta{list of row numbers}\verb|}|
+% \end{quote}
+% you can
+% declare which (absolute) row numbers should be tagged as header rows.
+% It applies to all tables until it is changed to a different list of row numbers or undone by setting
+% the key to \meta{empty}.
+% A row number can be
+% negative, then the counting starts from the end of the table. There is no support
+% for header columns yet. In a \env{longtable} the code will currently use the \cs{endhead} or
+% \cs{endfirsthead} rows as header if one of these commands has been
+% used and in that case the code
+% ignores a \texttt{table-header-rows} setting.
+%
+% You should not insert meaningful text with \verb+!{...}+ or \verb+@{...}+ or \cs{noalign}
+% between the rows or columns of the table.
+% With pdflatex such text will be unmarked, with lualatex it will be marked as artifact.
+% Either case means that it will be currently ignored in the
+% structure.\footnote{While it is theoretically possible
+% to collect such text and move it into a structure it would require manual markup
+% from the author to clarify where this text belongs too.}
+% 
+% As mentioned below the \pkg{colortbl} doesn't yet work properly with the tagging,
+% but once it does, then colors inside the table will probably be
+% simply ignored (at least initially). If such a color
+% has a semantic meaning (like \enquote{important value}) this meaning will be lost.
+% 
+% Feedback and problems with the code can be reported at
+% \url{https://github.com/latex3/tagging-project} either in form of
+% explicit issues or as a \enquote{discussion topic}, whatever works best.
+%
+%
+% \section{Limitations}
+%
+% \begin{itemize}
+% \item The code loads the \pkg{array} package and so does not work without it (that is
+% not really a limitation, but can affect existing tables).
+%
+% \item It supports only a restricted number of tables types. Currently
+% \env{tabular}, \env{tabular*}, \env{tabularx}, and \env{longtable}.
+%
+% \item the \env{array} environment is assumed to be part of math and tagging as a table is disabled for
+% it.
+%
+% \item Row spans are not yet supported (and the \pkg{multirow} package is untested).
+%
+% \item The \pkg{colortbl} package breaks tagging if there are nested tables. It also breaks
+% the filling up of incomplete rows.
+% 
+% \item The \pkg{tabularray} package use a completed different
+% method to create tables and will not be supported by this code.
+% 
+% \item The \pkg{nicematrix} package is currently incompatible. 
+% 
+% \item Most other packages related to tables in \LaTeX{} are not yet tested,
+% that includes packages that change rules like \pkg{booktabs}, \pkg{hhline},
+% \pkg{arydshln}, \pkg{hvdashln}.
+%
+% \item \env{longtable} currently only works with lualatex.
+%  With other engines it breaks as its output
+%  routine clashes with the code which closes open MC-chunks at pagebreaks and
+%  if this is resolved there will probably be problems with the head and foot boxes
+%  (but this can't be tested currently).
+%
+% \item Not every table should be tagged as a Table structure, often they are
+% only used as layout help, e.g. to align authors in a title pages. In such uses
+% the tagging of the table must be deactivated with \verb|\tagpdfsetup{table-tagging=false}|.
+%
+% \item Only simple header rows are currently supported. Columns and complex headers with
+% subheaders will be handled later as that needs some syntax changes. Tables
+% with more than one header row are probably not pdf/UA as the headers array in
+% the cells is missing.
+%
+% \item A \pkg{longtable} \cs{caption} is currently simply formatted as a multicolumn and
+% not tagged as a \texttt{Caption} structure.
+%
+% \item The \pkg{caption} package will quite probably break the \pkg{longtable} caption.
+%
+% \item The setup for \pkg{longtable} requires lots of patches to internal \pkg{longtable}
+% commands and so can easily break if other packages try to patch \pkg{longtable} too.
+% 
+% \item The \env{longtable} environment supports footnotes in p-type columns, but it hasn't been
+% tested yet if this works also with the tagging code. 
+%
+% \item The code is quite noisy and fills the log with lots of
+%   messages.\footnote{Helpful for us at this stage.}
+% \end{itemize}
+%
+%
+%
+% \section{Introduction}
+%
+%
+% \section{Technical details and problems}
+%
+%  The implementation has to take care of various details.
+%
+%  \subsection{TODOs}
+%
+%  \begin{itemize}
+%  \item
+%     Test \texttt{array-006-longtable.lvt} and
+%     \texttt{array-007-longtable.lvt} have errors with pdftex (para
+%    tagging)
+%
+%  \item
+%     Instead of before/after hooks we should add sockets directly
+%     into the code.
+%
+%  \item Debugging code and messages must be improved.
+%
+%  \item Cells need an \texttt{Headers} array.
+%
+%  \item Row spans should be supported (but perhaps need syntax support)
+%
+%  \item Longtable captions should be properly supported.
+%
+%  \item Handle p-cells better. para-tagging should probably be enabled,
+%  but Part can't be a child of TD, so this should probably be changed to Div here.
+%  Also there is a stray MC somewhere.
+%
+%  \item More packages must be tested.
+%  \end{itemize}
+%
+%
+% \section{Implementation}
+%    \begin{macrocode}
+%<@@=tbl>
+%<*package>
+%    \end{macrocode}
+%    \begin{macrocode}
+\ProvidesExplPackage {latex-lab-testphase-table} {\ltlabtbldate} {\ltlabtblversion}
+  {Code related to the tagging of tables}
+%    \end{macrocode}
+% This builds on \pkg{array} so we load it by default:
+%    \begin{macrocode}
+\RequirePackage{array}
+%    \end{macrocode}
+%
+%
+% \subsection{Variables}
+% \begin{macro}
+%  {
+%    \l_@@_celltag_tl
+%   ,\l_@@_rowtag_tl
+%   ,\l_@@_cellattribute_tl
+%   ,\l_@@_rowattribute_tl
+%   ,\g_@@_missingcells_int
+%   ,\l_@@_tmpa_clist
+%   ,\l_@@_tmpa_seq
+%   ,\l_@@_tmpa_tl
+%  }
+%    This is for the celltag, e.g. TD or TH:
+%    \begin{macrocode}
+\tl_new:N  \l_@@_celltag_tl
+\tl_set:Nn \l_@@_celltag_tl {TD}
+%    \end{macrocode}
+%    For the rowtag, probably always TR:
+%    \begin{macrocode}
+\tl_new:N  \l_@@_rowtag_tl
+\tl_set:Nn \l_@@_rowtag_tl {TR}
+%    \end{macrocode}
+%    And here cell and row attributes:
+%    \begin{macrocode}
+\tl_new:N  \l_@@_cellattribute_tl
+\tl_set:Nn \l_@@_cellattribute_tl {}
+\tl_new:N  \l_@@_rowattribute_tl
+\tl_set:Nn \l_@@_rowattribute_tl {}
+%    \end{macrocode}
+% This will contain the number of missing cells used:
+%    \begin{macrocode}
+\int_new:N \g_@@_missing_cells_int
+%    \end{macrocode}
+% Temp variables
+%    \begin{macrocode}
+\clist_new:N \l_@@_tmpa_clist
+\seq_new:N \l_@@_tmpa_seq
+\tl_new:N \l_@@_tmpa_tl
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Sockets}
+%
+% The code uses a number of sockets to inject the tagging
+% commands. These can be easily set to a noop-plug in case the
+% automated tagging is not wanted At first sockets for the begin and
+% end of cells and rows
+%
+% \begin{socketdecl}{tagsupport/tblcell/begin,
+%                    tagsupport/tblcell/end,
+%                    tagsupport/tblrow/begin,
+%                    tagsupport/tblrow/end,
+%                   }
+%    \begin{macrocode}
+\NewSocket{tagsupport/tblcell/begin}{0}
+\NewSocket{tagsupport/tblcell/end}{0}
+\NewSocket{tagsupport/tblrow/begin}{0}
+\NewSocket{tagsupport/tblrow/end}{0}
+%    \end{macrocode}
+% \end{socketdecl}
+%
+% \begin{socketdecl}{tagsupport/tbl/init}
+%    This socket should be at the begin of the table, inside a group.
+%    It is meant for settings like disabling paratagging.  This socket
+%    can perhaps be merged later into the begin-sockets when they are
+%    no longer added as hooks but in the environment definitions.
+%    \begin{macrocode}
+\NewSocket{tagsupport/tbl/init}{0}
+%    \end{macrocode}
+% \end{socketdecl}
+%
+%
+% \begin{socketdecl}{tagsupport/tbl/finalize}
+%    To fine tune the structure (change cells to header cells, remove
+%    unwanted structures, move a foot to the end, etc.) we also need a
+%    socket that is executed at the end of the table but \emph{before}
+%    all the variables are restored to the outer or default values.
+%    The code in the socket can make assignments, but probably
+%    shouldn't do typesetting and not write whatsits.
+%    \begin{macrocode}
+\NewSocket{tagsupport/tbl/finalize}{0}
+%    \end{macrocode}
+% \end{socketdecl}
+%
+% \begin{socketdecl}{tagsupport/tbl/finalize/longtable}
+%    \env{longtable} needs its own socket to fine tune the structure.
+%    Simply switching the plug in the previous socket interferes with
+%    enabling/disabling the tagging.
+%    \begin{macrocode}
+\NewSocket{tagsupport/tbl/finalize/longtable}{0}
+%    \end{macrocode}
+% \end{socketdecl}
+%
+% \begin{socketdecl}{tagsupport/tblhmode/begin,
+%                    tagsupport/tblhmode/end,
+%                    tagsupport/tblvmode/begin,
+%                    tagsupport/tblvmode/end
+%                   }
+%
+%    These sockets are used in the begin and end code of environments,
+%    to allow a fast enabling and disabling of the tagging. We
+%    distinguish between tables that can be used inside paragraphs and
+%    standalone tables like longtable.
+%    \begin{macrocode}
+\NewSocket{tagsupport/tblhmode/begin}{0}
+\NewSocket{tagsupport/tblhmode/end}{0}
+\NewSocket{tagsupport/tblvmode/begin}{0}
+\NewSocket{tagsupport/tblvmode/end}{0}
+%    \end{macrocode}
+% \end{socketdecl}
+%
+% This are the standard plugs for tagging of cells and rows.
+%
+% \begin{plugdecl}{TD}
+%    \begin{macrocode}
+\NewSocketPlug{tagsupport/tblcell/begin}{TD}
+  {
+    \tag_struct_begin:n
+      {
+        tag             =\l_@@_celltag_tl,
+        attribute-class =\l_@@_cellattribute_tl
+      }
+    \seq_gput_right:Ne \g_@@_struct_cur_seq { \tag_get:n {struct_num} }
+%    \end{macrocode}
+%   we store the cells of multicolumns as negative number. This allow to skip them
+%   or to use them as needed.
+%    \begin{macrocode}
+    \int_step_inline:nn { \g_@@_span_tl - 1 }
+      {
+        \seq_gput_right:Ne \g_@@_struct_cur_seq { -\tag_get:n {struct_num} }
+      }
+    \tag_mc_begin:n{}
+  }
+%    \end{macrocode}
+% \end{plugdecl}
+%
+% \begin{plugdecl}{TD}
+%    \begin{macrocode}
+\NewSocketPlug{tagsupport/tblcell/end}{TD}
+  {
+    \tag_mc_end:
+    \tag_struct_end:
+  }
+%    \end{macrocode}
+% \end{plugdecl}
+% 
+%    In p-columns we need a slightly different plug which reactivates the
+%    paragraph tagging.
+% tagging
+% \begin{plugdecl}{TD}
+%    \begin{macrocode}
+\NewSocketPlug{tagsupport/tblcell/begin}{TDpbox}
+  {
+    \tag_struct_begin:n
+      {
+        tag             =\l__tbl_celltag_tl,
+        attribute-class =\l__tbl_cellattribute_tl
+      }
+    \seq_gput_right:Ne \g__tbl_struct_cur_seq { \tag_get:n {struct_num} }
+    \int_step_inline:nn { \g__tbl_span_tl - 1 }
+      {
+        \seq_gput_right:Ne \g__tbl_struct_cur_seq { -\tag_get:n {struct_num} }
+      }
+    \tagpdfparaOn
+    \tl_set:Nn \l__tag_para_main_tag_tl {Div}
+  }
+%    \end{macrocode}
+% \end{plugdecl}
+% 
+% \begin{plugdecl}{TD}
+%    \begin{macrocode}
+\NewSocketPlug{tagsupport/tblcell/end}{TDpbox}
+  {
+    \tag_struct_end:
+  }  
+%    \end{macrocode}
+% \end{plugdecl}
+%
+% \begin{plugdecl}{TR}
+%    \begin{macrocode}
+\NewSocketPlug{tagsupport/tblrow/begin}{TR}
+  {
+    \seq_gclear:N \g_@@_struct_cur_seq
+    \tag_struct_begin:n
+     {
+       tag            =\l_@@_rowtag_tl,
+       attribute-class=\l_@@_rowattribute_tl
+     }
+   \seq_gput_right:Ne \g_@@_struct_rows_seq { \tag_get:n {struct_num} }
+  }
+%    \end{macrocode}
+% \end{plugdecl}
+%
+% \begin{plugdecl}{TR}
+%    \begin{macrocode}
+\NewSocketPlug{tagsupport/tblrow/end}{TR}
+  {
+    \__tag_tbl_add_missing_cells:n { \g_@@_missing_cells_int }
+    \seq_gput_right:Ne \g_@@_struct_cells_seq
+      {
+        \seq_use:Nn \g_@@_struct_cur_seq {,}
+      }
+    \int_compare:nNnTF { \g_@@_row_int } = { \seq_count:N\g_@@_struct_cells_seq }
+      {
+        \typeout
+          {==>~
+            stucture~stored~for~row~\int_use:N\g_@@_row_int :~
+            \seq_use:Nn \g_@@_struct_cur_seq {,}
+          }
+      }
+      { \ERROR } % should not happen ...
+    \tag_struct_end:
+  }
+%    \end{macrocode}
+% \end{plugdecl}
+%
+% And the plugs for the table as whole. The code can be different for
+% normal tables which can also be used inline and nested and
+% \enquote{vmode} tables like longtable.
+%
+% \begin{plugdecl}{Table}
+%    Inside a table we currently only disable paratagging. We assume
+%    that these sockets are in an environment group, so there is no
+%    need to reenable paratagging.
+%    \begin{macrocode}
+\NewSocketPlug{tagsupport/tbl/init}{Table}
+  {
+    \tag_if_active:T
+      {
+        \bool_set_false:N \l__tag_para_bool
+      }
+  }
+%    \end{macrocode}
+% \end{plugdecl}
+%
+%
+% \begin{plugdecl}{Table}
+%  This plug will fine tune the structure.
+%    \begin{macrocode}
+\NewSocketPlug{tagsupport/tbl/finalize}{Table}
+  {
+    \@@_set_header_rows:
+  }
+%    \end{macrocode}
+% \end{plugdecl}
+%
+% \begin{plugdecl}{Table}
+%  This plug will fine tune the structure of longtable.
+%    \begin{macrocode}
+\NewSocketPlug{tagsupport/tbl/finalize/longtable}{Table}
+  {
+%    \end{macrocode}
+%    If neither \cs{endhead} nor \cs{endfirsthead} has been used
+%    we use the standard header command:
+%    \begin{macrocode}
+     \bool_lazy_and:nnTF
+       { \seq_if_empty_p:N \g_@@_LT at head_rows_seq  }
+       { \seq_if_empty_p:N \g_@@_LT at firsthead_rows_seq }
+       { \@@_set_header_rows: }
+%    \end{macrocode}
+%    Otherwise, if firsthead has not been used we use head. For this
+%    we simple retrieve the row numbers and then call the header
+%    command.
+%    \begin{macrocode}
+       {
+         \seq_if_empty:NTF \g_@@_LT at firsthead_rows_seq
+           {
+             \clist_set:Ne \l_@@_header_rows_clist
+               {\seq_use:Nn \g_@@_LT at head_rows_seq {,}}
+             \@@_set_header_rows:
+           }
+%    \end{macrocode}
+%    In the other case we use firsthead.
+%    \begin{macrocode}
+           {
+             \clist_set:Ne \l_@@_header_rows_clist
+               { \seq_use:Nn \g_@@_LT at firsthead_rows_seq {,} }
+             \@@_set_header_rows:
+%    \end{macrocode}
+%    Additionally we have to remove the head to avoid duplication. The
+%    one option here is to remove the rows from the kid sequence of
+%    the table (which will lead to orphaned structure elements), the
+%    other to make them artifact.  For now we use the first option for
+%    pdf 1.7 and the second for pdf 2.0.
+%    \begin{macrocode}
+             \pdf_version_compare:NnTF < {2.0}
+              {
+                \seq_map_inline:Nn \g_@@_LT at head_rows_seq
+                  {
+                    \seq_gset_item:cnn
+                      {g__tag_struct_kids_ \g_@@_struct_table_tl _seq}
+                      { ##1 }
+                      {}
+%    \end{macrocode}
+%    Not sure if needed, but if needed we can remove also the P tag.
+%    This is currently disabled as it produce warnings.  TODO: This
+%    needs also a tagpdf command which takes care of debug code.
+%    \begin{macrocode}
+                    \tl_set:Ne \l_@@_tmpa_tl
+                      { \seq_item:Nn\g_@@_struct_rows_seq {##1} }
+                    \prop_if_exist:cT
+                      { g__tag_struct_ \l_@@_tmpa_tl _prop }
+                      {
+                        %\prop_gremove:cn {g__tag_struct_ \l_@@_tmpa_tl _prop} {P}
+                      }
+                  }
+              }
+              {
+                \seq_map_inline:Nn \g_@@_LT at head_rows_seq
+                  {
+                    \tl_set:Ne \l_@@_tmpa_tl
+                      { \seq_item:Nn\g_@@_struct_rows_seq {##1} }
+                    \prop_if_exist:cT
+                      { g__tag_struct_ \l_@@_tmpa_tl _prop }
+                      {
+                        \@@_struct_prop_gput:Vnn \l_@@_tmpa_tl {S}{/Artifact}
+                      }
+                   }
+               }
+            }
+       }
+%    \end{macrocode}
+%    The foot is handled similar, the difference is
+%    that we have to move it to the end one of them
+%    is not empty, but do nothing if they aren't there.
+%    \begin{macrocode}
+     \bool_lazy_and:nnF
+       { \seq_if_empty_p:N \g_@@_LT at foot_rows_seq  }
+       { \seq_if_empty_p:N \g_@@_LT at lastfoot_rows_seq }
+       {
+%    \end{macrocode}
+%    If lastfoot is empty move foot to the end.
+%    \begin{macrocode}
+         \seq_if_empty:NTF \g_@@_LT at lastfoot_rows_seq
+           {
+             \seq_map_inline:Nn \g_@@_LT at foot_rows_seq
+               {
+                 \tl_set:Ne \l_@@_tmpa_tl
+                   {
+                     \seq_item:cn
+                       {g__tag_struct_kids_ \g_@@_struct_table_tl _seq}
+                       {##1}
+                   }
+                 \seq_gset_item:cnn
+                   {g__tag_struct_kids_ \g_@@_struct_table_tl _seq}
+                   { ##1 }
+                   {}
+                 \seq_gput_right:cV
+                   {g__tag_struct_kids_ \g_@@_struct_table_tl _seq}
+                   \l_@@_tmpa_tl
+               }
+           }
+%    \end{macrocode}
+%    If lastfoot is not empty we move that.
+%    \begin{macrocode}
+           {
+             \seq_map_inline:Nn \g_@@_LT at lastfoot_rows_seq
+               {
+                 \tl_set:Ne \l_@@_tmpa_tl
+                   {
+                     \seq_item:cn
+                       {g__tag_struct_kids_ \g_@@_struct_table_tl _seq}
+                       {##1}
+                   }
+                 \seq_gset_item:cnn
+                   {g__tag_struct_kids_ \g_@@_struct_table_tl _seq}
+                   { ##1 }
+                   {}
+                 \seq_gput_right:cV
+                   {g__tag_struct_kids_ \g_@@_struct_table_tl _seq}
+                   \l_@@_tmpa_tl
+               }
+%    \end{macrocode}
+%    and we hide foot
+%    \begin{macrocode}
+            \pdf_version_compare:NnTF < {2.0}
+              {
+                \seq_map_inline:Nn \g_@@_LT at foot_rows_seq
+                  {
+                    \seq_gset_item:cnn
+                      {g__tag_struct_kids_ \g_@@_struct_table_tl _seq}
+                      { ##1 }
+                      {}
+%    \end{macrocode}
+%    Not sure if needed, but if needed we can remove also the P tag.
+%    This is currently disabled as it produce warnings.
+%    TODO: This needs also
+%    a tagpdf command which takes care of debug code.
+%    \begin{macrocode}
+                    \tl_set:Ne \l_@@_tmpa_tl
+                      { \seq_item:Nn\g_@@_struct_rows_seq {##1} }
+                    \prop_if_exist:cT
+                      { g__tag_struct_ \l_@@_tmpa_tl _prop }
+                      {
+                        %\prop_gremove:cn {g__tag_struct_ \l_@@_tmpa_tl _prop} {P}
+                      }
+                  }
+              }
+              {
+                \seq_map_inline:Nn \g_@@_LT at foot_rows_seq
+                  {
+                    \tl_set:Ne \l_@@_tmpa_tl
+                      { \seq_item:Nn\g_@@_struct_rows_seq {##1} }
+                    \prop_if_exist:cT
+                      { g__tag_struct_ \l_@@_tmpa_tl _prop }
+                      {
+                        \@@_struct_prop_gput:Vnn \l_@@_tmpa_tl {S}{/Artifact}
+                      }
+                   }
+               }
+           }
+       }
+  }
+%    \end{macrocode}
+% \end{plugdecl}
+%
+% \begin{plugdecl}{Table}
+%    \begin{macrocode}
+\NewSocketPlug{tagsupport/tblhmode/begin}{Table}
+  {
+    \mode_leave_vertical:
+    \tag_mc_end_push:
+%    \end{macrocode}
+%    Close the P-chunk. This assumes that para-tagging is active.
+%    For nested tables that is not necessarly true, so we test for it.
+%    \begin{macrocode}
+     \bool_lazy_and:nnT
+      { \bool_if_exist_p:N \l__tag_para_bool } { \l__tag_para_bool }
+      { \tag_struct_end:n { text } }
+    \tag_struct_begin:n {tag=Table}
+    \tl_gset:Ne \g_@@_struct_table_tl { \tag_get:n {struct_num} }
+  }
+%    \end{macrocode}
+% \end{plugdecl}
+%
+% \begin{plugdecl}{Table}
+%    \begin{macrocode}
+\NewSocketPlug{tagsupport/tblhmode/end}{Table}
+  {
+    \tag_struct_end:
+%    \end{macrocode}
+% reopen the P-chunk. This assumes that para-tagging is active.
+% For nested tables that is not necessarly true, so we test for it.
+%    \begin{macrocode}
+    \bool_lazy_and:nnT
+      { \bool_if_exist_p:N \l__tag_para_bool } { \l__tag_para_bool }
+      { \tag_struct_begin:n { tag=\l__tag_para_tag_tl } }
+    \tag_mc_begin_pop:n{}
+  }
+%    \end{macrocode}
+% \end{plugdecl}
+%
+% \begin{plugdecl}{Table}
+%    \begin{macrocode}
+\NewSocketPlug{tagsupport/tblvmode/begin}{Table}
+  {
+    \tag_struct_begin:n {tag=Table}
+    \tl_gset:Ne \g_@@_struct_table_tl { \tag_get:n {struct_num} }
+  }
+%    \end{macrocode}
+% \end{plugdecl}
+%
+% \begin{plugdecl}{Table}
+%    \begin{macrocode}
+\NewSocketPlug{tagsupport/tblvmode/end}{Table}
+  {
+    \tag_struct_end:
+    \par
+  }
+%    \end{macrocode}
+% \end{plugdecl}
+%
+%
+%
+%
+%
+%\subsection{Environments}
+%
+% Currently only tabular, tabular*, tabularx and longtable.
+% We must use the \texttt{before} and \texttt{after} hooks as the \texttt{end}
+% hook is executed before the end of the last row and then MC are messed up.
+% This means that this sockets should only contain code that doesn't needs to be
+% grouped!
+%    \begin{macrocode}
+\AddToHook{env/tabular/before}  {\UseSocket{tagsupport/tblhmode/begin}}
+\AddToHook{env/tabular/after}   {\UseSocket{tagsupport/tblhmode/end}}
+\AddToHook{env/tabular*/before} {\UseSocket{tagsupport/tblhmode/begin}}
+\AddToHook{env/tabular*/after}  {\UseSocket{tagsupport/tblhmode/end}}
+\AddToHook{env/tabularx/before} {\UseSocket{tagsupport/tblhmode/begin}}
+\AddToHook{env/tabularx/after}  {\UseSocket{tagsupport/tblhmode/end}}
+\AddToHook{env/longtable/before}{\UseSocket{tagsupport/tblvmode/begin}}
+\AddToHook{env/longtable/after} {\UseSocket{tagsupport/tblvmode/end}}
+%    \end{macrocode}
+%
+% The \env{array} environment is math. So we disable table tagging for now.
+%    \begin{macrocode}
+\AddToHook{env/array/begin} {\__tag_tbl_disable:}
+%    \end{macrocode}
+%
+%
+% \subsection{Interfaces to tagging}
+%
+% \subsubsection{Tagging helper commands}
+%
+% \begin{macro}{\@@_set_colspan:n}
+%    This commands takes a number, checks if is larger than one,
+%    checks if the colspan attribute exists (we can't predefine an
+%    arbitrary number), and updates \cs{l_@@_cellattribute_tl}.
+%    \begin{macrocode}
+\tag_if_active:T
+  { \cs_generate_variant:Nn \__tag_attr_new_entry:nn {ee} }
+\cs_new_protected:Npn \@@_set_colspan:n #1
+  {
+    \tag_if_active:T
+      {
+        \int_compare:nNnT {#1}>{1}
+         {
+           \prop_get:NeNF \g__tag_attr_entries_prop
+              {colspan-\int_eval:n{#1}}
+              \l_@@_tmpa_tl
+              {
+                \__tag_attr_new_entry:ee
+                  {colspan-\int_eval:n{#1}}
+                  {/O /Table /ColSpan~\int_eval:n{#1}}
+              }
+           \tl_set:Ne \l_@@_cellattribute_tl
+              {colspan-\int_eval:n{#1}}
+         }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Disabling/enabling}
+%
+%  For now we have only the option true/false but this will probably be extended
+%  to allow different setups like first row header etc.
+
+%  \begin{macro}{\__tag_tbl_disable:}
+%
+%    \begin{macrocode}
+\cs_new_protected:Npn \__tag_tbl_disable:
+ {
+   \AssignSocketPlug{tagsupport/tblcell/begin}{noop}
+   \AssignSocketPlug{tagsupport/tblcell/end}{noop}
+   \AssignSocketPlug{tagsupport/tblrow/begin}{noop}
+   \AssignSocketPlug{tagsupport/tblrow/end}{noop}
+   \AssignSocketPlug{tagsupport/tbl/init}{noop}
+   \AssignSocketPlug{tagsupport/tbl/finalize}{noop}
+   \AssignSocketPlug{tagsupport/tbl/finalize/longtable}{noop}
+   \AssignSocketPlug{tagsupport/tblhmode/begin}{noop}
+   \AssignSocketPlug{tagsupport/tblhmode/end}{noop}
+   \AssignSocketPlug{tagsupport/tblvmode/begin}{noop}
+   \AssignSocketPlug{tagsupport/tblvmode/end}{noop}
+ }
+%    \end{macrocode}
+%  \end{macro}
+
+
+%  \begin{macro}{\__tag_tbl_enable:}
+%
+%    \begin{macrocode}
+\cs_new_protected:Npn \__tag_tbl_enable:
+ {
+   \AssignSocketPlug{tagsupport/tblcell/begin}{TD}
+   \AssignSocketPlug{tagsupport/tblcell/end}{TD}
+   \AssignSocketPlug{tagsupport/tblrow/begin}{TR}
+   \AssignSocketPlug{tagsupport/tblrow/end}{TR}
+   \AssignSocketPlug{tagsupport/tbl/init}{Table}
+   \AssignSocketPlug{tagsupport/tbl/finalize}{Table}
+   \AssignSocketPlug{tagsupport/tbl/finalize/longtable}{Table}
+   \AssignSocketPlug{tagsupport/tblhmode/begin}{Table}
+   \AssignSocketPlug{tagsupport/tblhmode/end}{Table}
+   \AssignSocketPlug{tagsupport/tblvmode/begin}{Table}
+   \AssignSocketPlug{tagsupport/tblvmode/end}{Table}
+ }
+%    \end{macrocode}
+%  \end{macro}
+
+%    \begin{macrocode}
+% TODO decide about key name
+\keys_define:nn { __tag / setup }
+  {
+    table-tagging .choices:nn = { true, on }
+      { \__tag_tbl_enable: },
+    table-tagging .choices:nn = { false, off }
+      { \__tag_tbl_disable: },
+    table-tagging .default:n = true,
+    table-tagging .initial:n = true
+  }
+%    \end{macrocode}
+%
+% Table tagging should be disabled in the head and foot.
+%    \begin{macrocode}
+\AddToHook{begindocument}
+ {
+  \cs_if_exist:NT \@kernel at before@head
+   {
+     \tl_put_right:Nn \@kernel at before@head {\__tag_tbl_disable:}
+     \tl_put_right:Nn \@kernel at before@foot {\__tag_tbl_disable:}
+   }
+ }
+%    \end{macrocode}
+%
+% \subsubsection{Header support}
+%
+% Accessible table must have header cells declaring the meaning of the
+% data in a row or column. To allow a data cell to find it header cell(s)
+% a number of things must be done:
+% \begin{itemize}
+% \item every cell meant as a header should use the tag \texttt{TH}.
+%
+% \item header cells should have a \texttt{Scope} attribute with the
+%   value \texttt{Column}, \texttt{Row} or \texttt{Both}.  This is not
+%   needed in the first row or column of a table.
+% 
+% \item For more complex cases both \texttt{TD} and \texttt{TH} cell
+%   can contain a \texttt{Headers} attribute, that is an array of
+%   \texttt{ID}s of \texttt{TH} cell.
+% \end{itemize}
+%
+% For now we support only header rows.
+%
+% At first we define attributes for the three standard cases:
+% We delay to begin document
+% as we can't know if tagpdf is already loaded.
+%    \begin{macrocode}
+\AddToHook{begindocument}
+  {
+   \tag_if_active:T
+     {
+       \tagpdfsetup
+         {
+           newattribute =
+            {TH-col}{/O /Table /Scope /Column},
+           newattribute =
+             {TH-row}{/O /Table /Scope /Row},
+           newattribute =
+             {TH-both}{/O /Table /Scope /Both},
+         }
+%    \end{macrocode}
+%
+% And we put all three into the class map (perhaps the next tagpdf
+% should do that directly with newattribute):
+%
+%    \begin{macrocode}
+         \seq_gput_left:Ne\g__tag_attr_class_used_seq
+           {\pdf_name_from_unicode_e:n{TH-col}}
+         \seq_gput_left:Ne\g__tag_attr_class_used_seq
+           {\pdf_name_from_unicode_e:n{TH-row}}
+         \seq_gput_left:Ne\g__tag_attr_class_used_seq
+           {\pdf_name_from_unicode_e:n{TH-both}}
+     }
+  }
+
+%    \end{macrocode}
+%
+% \begin{variable}{\l_@@_header_rows_clist}
+%    This holds the numbers of the header rows. Negative numbers are
+%    possible and count from the back.
+%    \begin{macrocode}
+\clist_new:N  \l_@@_header_rows_clist
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\@@_set_header_rows:}
+%    TEMP: Next tagpdf will have the right command which also updates
+%    the debug info.
+%    For now a temporary command:
+%    \begin{macrocode}
+\cs_if_free:NTF \__tag_struct_prop_gput:nnn
+   {
+     \cs_new_protected:Npn \@@_struct_prop_gput:nnn #1#2#3
+       { \prop_gput:cnn { g__tag_struct_#1_prop }{#2}{#3} }
+   }
+   { \cs_new_protected:Npn  \@@_struct_prop_gput:nnn #1#2#3
+       { \__tag_struct_prop_gput:nnn {#1}{#2}{#3} }
+   }
+\cs_generate_variant:Nn \@@_struct_prop_gput:nnn {nne,Vnn}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_set_header_rows:
+  {
+    \clist_map_inline:Nn \l_@@_header_rows_clist
+      {
+        \clist_set:Ne\l_@@_tmpa_clist
+          {
+            \seq_item:Nn \g_@@_struct_cells_seq {##1}
+          }
+        \clist_map_inline:Nn \l_@@_tmpa_clist
+          {
+%    \end{macrocode}
+%    We can have negative numbers in the list from the multicolumn.
+%    \begin{macrocode}
+            \prop_if_exist:cT { g__tag_struct_####1_prop }
+              {
+                \@@_struct_prop_gput:nnn{ ####1 }{S}{/TH}
+%    \end{macrocode}
+%    This need refinement once row headers (and perhaps other attributes)
+%    are used too, but for now it should be ok.
+%    \begin{macrocode}
+                \prop_get:cnNTF
+                  { g__tag_struct_####1_prop }
+                  { C }
+                  \l_@@_tmpa_tl
+                  {\@@_struct_prop_gput:nne{ ####1 }{C}{[/TH-col~\l_@@_tmpa_tl]} }
+                  {\@@_struct_prop_gput:nnn{ ####1 }{C}{/TH-col}}
+             }
+          }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%  
+% And some key support:
+%    \begin{macrocode}
+% TODO decide about key name
+\keys_define:nn { __tag / setup }
+  {
+    table-header-rows .clist_set:N = \l_@@_header_rows_clist
+  }
+%    \end{macrocode}
+%
+% \subsection{Changes to \pkg{array} commands}
+%
+%
+%
+%  \begin{macro}{\@@_show_curr_cell_data:}
+%    Show the row/column index and span count for current table cell
+%    for debugging.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_show_curr_cell_data: {
+   \typeout { ==>~ current~cell~data:~
+              \int_use:N \g_@@_row_int ,
+              \int_use:N \g_@@_col_int ,
+              \g_@@_span_tl
+            }
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+%
+% \begin{macro}{\insert at column}
+%    \cs{insert at column} is defined in \pkg{array}, here only the two
+%    sockets are inserted.
+%    \begin{macrocode}
+\def\insert at column{%
+  \@@_show_curr_cell_data:
+  \UseSocket{tagsupport/tblcell/begin}%
+  \the at toks \the \@tempcnta
+  \ignorespaces \@sharp \unskip
+  \the at toks \the \count@ \relax
+  \UseSocket{tagsupport/tblcell/end}%
+}
+%    \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@classz}
+%    \begin{macrocode}
+\def\@classz{\@classx
+   \@tempcnta \count@
+   \prepnext at tok
+   \@addtopreamble{\ifcase \@chnum
+      \hfil
+      \hskip1sp%
+      \d at llarbegin
+      \insert at column
+      \d at llarend \do at row@strut \hfil \or
+      \hskip1sp\d at llarbegin \insert at column \d at llarend \do at row@strut \hfil \or
+      \hfil\hskip1sp\d at llarbegin \insert at column \d at llarend \do at row@strut \or
+    \setbox\ar at mcellbox\vbox
+    \@startpbox{\@nextchar}
+    \AssignSocketPlug{tagsupport/tblcell/begin}{TDpbox}
+    \AssignSocketPlug{tagsupport/tblcell/end}{TDpbox}
+    \insert at column \@endpbox
+    \ar at align@mcell
+    \do at row@strut \or
+   \vtop \@startpbox{\@nextchar}
+    \AssignSocketPlug{tagsupport/tblcell/begin}{TDpbox}
+    \AssignSocketPlug{tagsupport/tblcell/end}{TDpbox}
+    \insert at column \@endpbox\do at row@strut \or
+   \vbox \@startpbox{\@nextchar}
+    \AssignSocketPlug{tagsupport/tblcell/begin}{TDpbox}
+    \AssignSocketPlug{tagsupport/tblcell/end}{TDpbox}
+    \insert at column \@endpbox\do at row@strut
+  \fi}\prepnext at tok}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@array,\@@@@array}
+%    We modificate the \cs{@array} from \pkg{array}.
+%    \begin{macrocode}
+\def\@array[#1]#2{%
+  \@tempdima \ht \strutbox
+  \advance \@tempdima by\extrarowheight
+  \setbox \@arstrutbox \hbox{\vrule
+             \@height \arraystretch \@tempdima
+             \@depth \arraystretch \dp \strutbox
+             \@width \z@}%
+%    \end{macrocode}
+%    The total number of table columns of the current table is
+%    determined in \cs{@@_determine_table_cols:} but this is called in
+%    a group, so local settings do not survive. Thus, to save away the
+%    outer value of \cs{g_@@_table_cols_tl} we do it before the group.
+%    \begin{macrocode}
+  \tl_set_eq:NN \l_@@_saved_table_cols_tl  \g_@@_table_cols_tl
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \begingroup
+  \@mkpream{#2}
+%    \end{macrocode}
+%    Next call has to happen immediately after \cs{@mkpream} because
+%    it uses implementation details from that.
+%    \begin{macrocode}
+  \@@_determine_table_cols:
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \xdef\@preamble{%
+    \noexpand
+%    \end{macrocode}
+%    \cs{ialign} in the original definition is replaced by
+%    \cs{ar at ialign} defined below.
+%    \begin{macrocode}
+     \ar at ialign
+     \@halignto
+     \bgroup \@arstrut
+%    \end{macrocode}
+%    A socket is inserted
+%    \begin{macrocode}
+      \UseSocket{tagsupport/tblrow/begin}%
+%    \end{macrocode}
+%    At the start of the preamble for the first column we set
+%    \cs{g_@@_col_int} to \texttt{1} as we are no longer "at" but "in"
+%    the first column. This is done in \cs{@@_init_cell_data:}. In
+%    later columns this data is updated via \cs{@@_update_cell_data:}.
+%    \begin{macrocode}
+      \@@_init_cell_data:
+      \@preamble
+      \tabskip \z@ \cr}%
+  \endgroup
+  \@arrayleft
+%    \end{macrocode}
+%    Another socket for tagging. TODO: what about \cs{arrayleft}?
+%    \begin{macrocode}
+  \UseSocket{tagsupport/tbl/init}
+  \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi \fi
+  \bgroup
+  \let \@sharp ##\let \protect \relax
+  \lineskip \z@
+  \baselineskip \z@
+  \m at th
+  \let\\\@arraycr \let\tabularnewline\\\let\par\@empty
+%\show\@preamble
+  \@preamble}
+%    \end{macrocode}
+%    Finally, also set \cs{@@@@array} to the new definition:
+%    \begin{macrocode}
+\let\@@@@array\@array
+%    \end{macrocode}
+% \end{macro}
+%
+%
+%  \begin{macro}{\@@_init_cell_data:}
+%
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_init_cell_data: {
+        \int_gset:Nn \g_@@_col_int {1}
+        \tl_gset:Nn  \g_@@_span_tl {1}
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \begin{macro}{\@@_update_cell_data:}
+%    Updating cell data in columns after the first means we have to
+%    increment the \cs{g_@@_col_int} by the span count of the previous
+%    cell (in case it was a \cs{multicolumn} and then reset the
+%    \cs{g_@@_span_tl} to one (as the default).
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_update_cell_data: {
+        \int_gadd:Nn \g_@@_col_int { \g_@@_span_tl }
+        \tl_gset:Nn  \g_@@_span_tl {1}
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+%  \begin{macro}{\@@_determine_table_cols:}
+%    Current implementation of \cs{@mkpream} uses the scratch counter
+%    \cs{count@} to keep track of the number of toks registers it needs
+%    (2 per column), but this can't be used as it counts also
+%    insertings made with \verb+!{}+ and \verb+@{}+.
+%    So similar as does longtable for \cs{LT at cols} we count the
+%    numbers of ambersands instead.
+%    \begin{macrocode}
+\cs_new:Npn \@@_determine_table_cols:  {
+  \seq_set_split:NnV\l_@@_tmpa_seq {&}\@preamble
+  \tl_gset:Ne \g_@@_table_cols_tl { \seq_count:N \l_@@_tmpa_seq }
+  \typeout{ ==>~ Table~ has~ \g_@@_table_cols_tl \space columns }
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%  \begin{macro}{\@arraycr}
+%    Add code that figures out if the current table row is incomplete
+%    (not enough \verb=&=s). It can then do extra actions, such as
+%    inserting missing cell tags.
+%    \begin{macrocode}
+\protected\def\@arraycr{
+  \relax
+  \@@_store_missing_cells:n{@arraycr}
+  %
+  \iffalse{\fi\ifnum 0=`}\fi
+  \@ifstar \@xarraycr \@xarraycr}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+%  \begin{macro}{\@@_store_missing_cells:n,
+%                \__tag_tbl_add_missing_cells:n}
+%    The storing and use of the number of missing cells
+%    must happen at different places  as the testing happens at
+%    the end of the last cell of a row, but
+%    still inside that cell, so we use two commands. The second is used in
+%    the endrow socket.
+%    \begin{macrocode}
+\cs_new:Npn \@@_store_missing_cells:n #1 {
+  \int_compare:nNnT \g_@@_col_int > 0
+      {
+        \int_gset:Nn \g_@@_missing_cells_int
+            {
+              \g_@@_table_cols_tl
+            - \g_@@_col_int
+            - \g_@@_span_tl
+            + 1
+            }
+        \int_compare:nNnT \g_@@_missing_cells_int < 0 \ERROR % should not happen
+        \typeout{==>~
+          (#1)~
+          This~ row~ needs~
+          \int_use:N \g_@@_missing_cells_int \space
+          additional~ cell(s)
+        }
+      }
+}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\cs_new:Npn \__tag_tbl_add_missing_cells:n #1
+  {
+%    \end{macrocode}
+% The TD-socket messages are issued after the message about the end-row socket,
+% but the structure is ok, so better issue a message for now to avoid confusion:
+%    \begin{macrocode}
+    \int_compare:nNnT {#1}>{0}
+      {
+       \typeout{==>~
+          ~Inserting~\int_eval:n{#1}~additional~cell(s)~into~previous~row:}
+      }
+    \int_step_inline:nn { #1 }
+      {
+        \UseSocket{tagsupport/tblcell/begin}
+        \UseSocket{tagsupport/tblcell/end}
+      }
+  }
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+% \begin{macro}{\endarray}
+%    If tables are nested into another then  it is necessary to
+%    restore information about the cell the inner table started
+%    in. Otherwise, \cs{g_@@_row_int}, \cs{g_@@_col_int}, and
+%    \cs{g_@@_span_tl} reflect the status in the outer table as they
+%    are globally manipulated. We restore in all cases even if we are
+%    not in a nesting situation as that makes the code simpler (and
+%    probably faster).
+%
+%    \cs{endtabular} and \cs{endtabular*} inherit from \cs{endarray}
+%    so we only need to change that. \texttt{tabularx} is handled
+%    below.
+%    \begin{macrocode}
+\def\endarray{
+  \@@_store_missing_cells:n{endarray}
+  \crcr \egroup
+  \UseSocket{tagsupport/tbl/finalize}
+  \int_gset:Nn \g_@@_col_int { \l_@@_saved_col_tl }
+  \int_gset:Nn \g_@@_row_int { \l_@@_saved_row_tl }
+  \tl_gset_eq:NN \g_@@_span_tl \l_@@_saved_span_tl
+  \tl_gset_eq:NN \g_@@_table_cols_tl   \l_@@_saved_table_cols_tl
+  \tl_gset_eq:NN \g_@@_struct_table_tl  \l_@@_saved_struct_table_tl
+  \seq_gset_eq:NN \g_@@_struct_rows_seq \l_@@_saved_struct_rows_seq
+  \seq_gset_eq:NN \g_@@_struct_cells_seq\l_@@_saved_struct_cells_seq
+  \seq_gset_eq:NN \g_@@_struct_cur_seq  \l_@@_saved_struct_cur_seq
+  \typeout{==>~ restored~cell~data:~
+                \int_use:N \g_@@_row_int,
+                \int_use:N \g_@@_col_int,
+                \l_@@_saved_span_tl \space
+                (
+                \int_compare:nNnTF \g_@@_table_cols_tl = 0
+                    { outer~ level }
+                    { max:~ \g_@@_table_cols_tl }
+                )
+          }
+  \egroup
+  \@arrayright \gdef\@preamble{}%
+}
+%    \end{macrocode}
+% \end{macro}
+%
+%
+%  \begin{macro}{\@addamp}
+%    If we are after the first column we have to insert a \verb=&= and
+%    also update the cell data.
+%    \begin{macrocode}
+\def\@addamp {
+  \if at firstamp
+    \@firstampfalse
+  \else
+    \edef\@preamble{\@preamble &
+        \@@_update_cell_data:
+    }
+  \fi
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+%  \begin{macro}{
+%     \g_@@_col_int,
+%     \g_@@_row_int,
+%     \g_@@_span_tl,
+%     \g_@@_table_cols_tl}
+%    \cs{g_@@_row_int} holds the current row number in the table. The value
+%    \texttt{0} means we haven't yet processed the table preamble. It
+%    is incremented by every \cs{cr} including the one ending the
+%    table preamble.
+%
+%    \cs{g_@@_col_int} holds the current column number. The value
+%    \texttt{0} means we have not yet started the table or just finished a table row
+%    (with \verb=\\= typically); any other positive value means we
+%    are currently typesetting a cell in that column in some row
+%    (denoted by the \cs{g_@@_row_int}.
+%
+%    In a \cs{multicolumn} it holds the column number of the first
+%    spanned column and \cs{g_@@_span_tl} the info how many cells are
+%    spanned.
+%
+%    \cs{g_@@_span_tl} is normally \texttt{1} except in a
+%    \cs{multicolumn} cell.
+%    \begin{macrocode}
+\int_new:N \g_@@_col_int
+\int_new:N \g_@@_row_int
+\tl_new:N  \g_@@_span_tl
+\tl_new:N  \g_@@_table_cols_tl
+
+\tl_gset:Nn \g_@@_span_tl {1}
+\tl_gset:Nn \g_@@_table_cols_tl {0}  % indicates outer level
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%  \begin{macro}{\l_@@_saved_col_tl,\l_@@_saved_row_tl,
+%                \l_@@_saved_span_tl,\l_@@_saved_table_cols_tl}
+%
+%    Saving the outer values if we are nesting tables is necessary (as
+%    the above variables are globally altered. For this we use always
+%    token lists because they don't change and we do not need to blow
+%    additional integer registers.
+%    \begin{macrocode}
+\tl_new:N \l_@@_saved_col_tl
+\tl_new:N \l_@@_saved_row_tl
+\tl_new:N \l_@@_saved_span_tl
+\tl_new:N \l_@@_saved_table_cols_tl
+
+\tl_set:Nn \l_@@_saved_col_tl{0}
+\tl_set:Nn \l_@@_saved_row_tl{0}
+\tl_set:Nn \l_@@_saved_span_tl{1}
+\tl_set:Nn \l_@@_saved_table_cols_tl{0}  % indicates outer level
+%    \end{macrocode}
+%  \end{macro}
+%
+% \begin{macro}
+%   {
+%     \g_@@_struct_table_tl, \l_@@_saved_struct_table_tl,
+%     \g_@@_struct_rows_seq,\l_@@_saved_struct_rows_seq,
+%     \g_@@_struct_cells_seq,\l_@@_saved_struct_cells_seq,
+%     \g_@@_struct_cur_seq,\l_@@_saved_struct_cur_seq
+%   }
+%    We need to store the structure numbers for the fine tuning in the
+%    finalize socket.  For now we use a rather simple system: A
+%    sequence that hold the numbers for the row structures, and one
+%    that holds comma lists for the cells.
+%
+%    \cs{g_@@_struct_table_tl} will hold the structure number of the
+%    table, \cs{g_@@_struct_rows_seq} will hold at index i the
+%    structure number of row i, \cs{g_@@_struct_cells_seq} will hold
+%    at index i a comma list of the cell structure numbers of row i.
+%    \cs{g_@@_struct_cur_seq} is used as a temporary store for the
+%    cell structures of the current row.  We need also local version
+%    to store and restore the values.
+%
+%    \begin{macrocode}
+\tl_new:N  \g_@@_struct_table_tl
+\tl_new:N  \l_@@_saved_struct_table_tl
+\seq_new:N \g_@@_struct_rows_seq
+\seq_new:N \l_@@_saved_struct_rows_seq
+\seq_new:N \g_@@_struct_cells_seq
+\seq_new:N \l_@@_saved_struct_cells_seq
+\seq_new:N \g_@@_struct_cur_seq
+\seq_new:N \l_@@_saved_struct_cur_seq
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ar at ialign}
+%    A new command that replaces \cs{ialign} above.  \cs{everycr} is
+%    also applied to the \cs{cr} ending the preamble so we have to
+%    program around that.
+%    \begin{macrocode}
+\def\ar at ialign{%
+%    \end{macrocode}
+%    Before starting a table we locally stored the information related
+%    to the current cell (if any) so that we can restore it once the
+%    table is finished.
+%    \begin{macrocode}
+  \tl_set:No \l_@@_saved_col_tl {\int_use:N \g_@@_col_int }
+  \tl_set:No \l_@@_saved_row_tl {\int_use:N \g_@@_row_int }
+  \tl_set_eq:NN \l_@@_saved_span_tl  \g_@@_span_tl
+  \tl_set_eq:NN  \l_@@_saved_struct_table_tl \g_@@_struct_table_tl
+  \seq_set_eq:NN \l_@@_saved_struct_rows_seq \g_@@_struct_rows_seq
+  \seq_set_eq:NN \l_@@_saved_struct_cells_seq \g_@@_struct_cells_seq
+  \seq_set_eq:NN \l_@@_saved_struct_cur_seq \g_@@_struct_cur_seq
+%
+  \typeout{==>~ saved~cell~data:~
+                \l_@@_saved_row_tl,
+                \l_@@_saved_col_tl,
+                \l_@@_saved_span_tl \space
+                (
+                \int_compare:nNnTF \l_@@_saved_table_cols_tl = 0
+                    { outer~ level }
+                    { max:~ \l_@@_saved_table_cols_tl }
+                )
+          }
+%    \end{macrocode}
+%    These are the initial values when starting a table:
+%    \begin{macrocode}
+  \int_gzero:N \g_@@_row_int
+  \int_gzero:N \g_@@_col_int
+  \tl_gset:Nn  \g_@@_span_tl {1}
+  \seq_gclear:N\g_@@_struct_rows_seq
+  \seq_gclear:N\g_@@_struct_cells_seq
+  \seq_gclear:N\g_@@_struct_cur_seq
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \everycr{%
+    \noalign{%
+%    \end{macrocode}
+%    We use \cs{g_@@_col_int} equal zero to indicate that we are just
+%    after a TR (or at the very beginning of the table). Using the row
+%    count is not so good as longtable may split the table in chunks.
+%    \begin{macrocode}
+      \int_compare:nNnT \g_@@_col_int > 0
+         { \UseSocket{tagsupport/tblrow/end} }
+      \int_gincr:N \g_@@_row_int          % this row about to start
+      \int_gzero:N \g_@@_col_int          % we are before first col
+    }%
+  }%
+  \tabskip\z at skip\halign}
+%    \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\multicolumn}
+%
+%    \cs{multicolumn} is also defined in \pkg{array}. The redefinition
+%    has to solve two problems: it must handle the row begin if it is
+%    used there, and it must save the numbers of cells it spans so
+%    that we can add a suitable ColSpan attribute.\footnote{FMi: This can
+%    now perhaps cleaned up somewhat}
+%    \begin{macrocode}
+\long\def\multicolumn#1#2#3{%
+  % alternative: determine first col with vmode test ...
+  %  \ifvmode
+  %    \multispan{#1}\typeout{A==> vmode}%
+  %  \else
+  %    \multispan{#1}\typeout{A==> not vmode}
+  %  \fi
+  % but this makes the \crcr handling really complicated which would
+  % then need to become something like
+  %    \ifvmode \expandafter \@gobble
+  %    \else \expandafter \@iden \fi {\cr\noalign{do something}}%
+  % so not used.
+  % Instead:
+   \multispan{#1}\begingroup
+%    \end{macrocode}
+%    Insert rowbegin socket only if this multicolumn
+%    replaces the preamble of the first column. In that case we have
+%    to set \cs{g_@@_col_int} to 1 since this is no longer done in the
+%    preamble for the cell.
+%    \begin{macrocode}
+   \int_compare:nNnTF \g_@@_col_int = 0
+       {
+         \UseSocket{tagsupport/tblrow/begin}
+         \int_gset:Nn \g_@@_col_int {1}
+       }
+%    \end{macrocode}
+%    If we are in a later column we use \cs{g_@@_span_tl} from the
+%    previous column to update.
+%    \begin{macrocode}
+       {
+         \int_gadd:Nn \g_@@_col_int { \g_@@_span_tl }
+       }
+%    \end{macrocode}
+%    Then we set the span value so that it can be use in the next column.
+%    \begin{macrocode}
+   \tl_gset:Nn \g_@@_span_tl {#1}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \def\@addamp{\if at firstamp\@firstampfalse \else
+                \@preamerr 5\fi}%
+   \@mkpream{#2}\@addtopreamble\@empty
+   \endgroup
+%    \end{macrocode}
+%    Now we update the colspan attribute.  This needs setting after
+%    the group as it is hidden inside the plug in \cs{insert at column}.
+%    \begin{macrocode}
+   \@@_set_colspan:n {#1}
+%    \end{macrocode}
+%    \begin{macrocode}
+   \def\@sharp{#3}%
+   \@arstrut \@preamble
+   \null
+   \ignorespaces}
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{longtable}
+%
+% Longtable is complicated. When at the begin the \cs{endhead},
+% \cs{endfirsthead}, \cs{endfoot} and \cs{endlastfoot} are used to
+% setup head and foot they create each a structure subtree with one or
+% more rows. From this structures we want to keep at most two (head
+% and foot) and move the foot to the end of the table. When the head
+% and foot boxes are (re)inserted on following pages we want to mark
+% them up as artifact with the exception of the head at the begin and
+% the foot box at the end.
+%
+% TODO: When a line is killed the structure subtree is there already
+% too and must be removed.
+% 
+% Hyperref patches longtable. This must be disabled and replace with
+% genuine code
+%    \begin{macrocode}
+\let\@kernel at refstepcounter\refstepcounter
+\def\hyper at nopatch@longtable{}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\@@_patch_LT at array[#1]#2{%
+%    \end{macrocode}
+% \cs{LT at array} is executed in a group, so we can disable para-tagging here.
+%    \begin{macrocode}
+  \UseSocket{tagsupport/tbl/init}%
+  \@kernel at refstepcounter{table}\stepcounter{LT at tables}%
+%    \end{macrocode}
+% The target is created rather late and a \cs{label} can come earlier, 
+% so we have to define \cs{@currentHref} explicitly. We can't currently
+% assume that \cs{theHtable} is defined always.   
+%    \begin{macrocode}
+  \tl_gset:Ne \@currentHref {table.\cs_if_exist_use:N\theHtable}
+  \int_gzero:N \g_@@_row_int
+  \seq_gclear:N\g_@@_struct_rows_seq
+  \seq_gclear:N\g_@@_struct_cells_seq
+  \seq_gclear:N\g_@@_struct_cur_seq
+  \seq_gclear:N\g_@@_LT at firsthead_rows_seq
+  \seq_gclear:N\g_@@_LT at head_rows_seq
+  \seq_gclear:N\g_@@_LT at lastfoot_rows_seq
+  \seq_gclear:N\g_@@_LT at foot_rows_seq
+  \if l#1%
+    \LTleft\z@ \LTright\fill
+  \else\if r#1%
+    \LTleft\fill \LTright\z@
+  \else\if c#1%
+    \LTleft\fill \LTright\fill
+  \fi\fi\fi
+  \let\LT at mcol\multicolumn
+  \let\LT@@@@tabarray\@tabarray
+  \let\LT@@@@hl\hline
+  \def\@tabarray{%
+    \let\hline\LT@@@@hl
+    \LT@@@@tabarray}%
+  \let\\\LT at tabularcr
+  \let\tabularnewline\\%
+  \def\newpage{\noalign{\break}}%
+  \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT at no@pgbk-}4}%
+  \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT at no@pgbk4}%
+  \let\hline\LT at hline \let\kill\LT at kill\let\caption\LT at caption
+  \@tempdima\ht\strutbox
+  \let\@endpbox\LT at endpbox
+  \ifx\extrarowheight\@undefined
+    \let\@acol\@tabacol
+    \let\@classz\@tabclassz \let\@classiv\@tabclassiv
+    \def\@startpbox{\vtop\LT at startpbox}%
+    \let\@@@@startpbox\@startpbox
+    \let\@@@@endpbox\@endpbox
+    \let\LT at LL@FM at cr\@tabularcr
+  \else
+    \advance\@tempdima\extrarowheight
+    \col at sep\tabcolsep
+    \let\@startpbox\LT at startpbox\let\LT at LL@FM at cr\@arraycr
+  \fi
+  \setbox\@arstrutbox\hbox{\vrule
+    \@height \arraystretch \@tempdima
+    \@depth \arraystretch \dp \strutbox
+    \@width \z@}%
+  \let\@sharp##\let\protect\relax
+   \begingroup
+    \@mkpream{#2}%
+    \@@_determine_table_cols:
+    \xdef\LT at bchunk{%
+%    \end{macrocode}
+%    At the start of a chunk we set \cs{g_@@_col_int} to zero to make
+%    sure that we aren't generating /TR with the \cs{cr} ending the
+%    chunk preamble.
+%    \begin{macrocode}
+       \int_gzero:N \g_@@_col_int
+       \global\advance\c at LT@chunks\@ne
+       \global\LT at rows\z@\setbox\z@\vbox\bgroup
+       \LT at setprevdepth
+       \tabskip\LTleft \noexpand\halign to\hsize\bgroup
+       \tabskip\z@ \@arstrut
+%    \end{macrocode}
+% Insert the socket and the setting of the conditional
+%    \begin{macrocode}
+       \UseSocket{tagsupport/tblrow/begin}%
+       \@@_init_cell_data:
+%    \end{macrocode}
+%    \begin{macrocode}
+       \@preamble \tabskip\LTright \cr}%
+  \endgroup
+  \expandafter\LT at nofcols\LT at bchunk&\LT at nofcols
+  \LT at make@row
+  \m at th\let\par\@empty
+%    \end{macrocode}
+% Socket and conditional
+%    \begin{macrocode}
+  \everycr{%
+    \noalign{%
+%    \end{macrocode}
+%    In \pkg{longtable} we have a bunch of extra \cs{cr}s that are
+%    executed whenever a chunk ends. In that case they should not
+%    increment the main row counter, sigh.
+%    \begin{macrocode}
+      \typeout{--longtable-->~chunk~row:~ \the\LT at rows \space
+               row:~ \the\g_@@_row_int   \space
+               column:~ \the\g_@@_col_int
+      }
+      \int_compare:nNnT \g_@@_col_int > 0
+          {
+            \UseSocket{tagsupport/tblrow/end}
+          }
+%    \end{macrocode}
+%    This prevents any of the additional \cs{cr}s at the end of the
+%    chunk to add another /TR. Then once we really start a new chunk
+%    it gets incremented so\ldots
+%    \begin{macrocode}
+      \int_gzero:N \g_@@_col_int           % before first col
+%    \end{macrocode}
+%    And for the same reason such \cs{cr}s should not increment the
+%    main row counter (but it has to be incremented after the preamble
+%    of a chunk), so here we test against \cs{LT at rows} which is
+%    \cs{LTchunksize} at the end of a chunk.
+%    \begin{macrocode}
+      \int_compare:nNnT \LT at rows < \LTchunksize
+         { \int_gincr:N \g_@@_row_int  }   % this row about to start
+    }%
+  }%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \lineskip\z@\baselineskip\z@
+  \LT at bchunk}
+%    \end{macrocode}
+% The end code most stop to insert the endrow too.
+%    \begin{macrocode}
+\def\@@_patch_endlongtable{%
+  \@@_store_missing_cells:n{endlongtable}
+  \crcr
+  \noalign{%
+    \UseSocket{tagsupport/tbl/finalize/longtable}
+    \int_gzero:N \g_@@_row_int      % this prevents considering the next
+                                    % \crcr as another row end.
+    \let\LT at entry\LT at entry@chop
+    \xdef\LT at save@row{\LT at save@row}}%
+  \LT at echunk
+  \LT at start
+  \unvbox\z@
+  \LT at get@widths
+  \if at filesw
+    {\let\LT at entry\LT at entry@write\immediate\write\@auxout{%
+      \gdef\expandafter\noexpand
+        \csname LT@\romannumeral\c at LT@tables\endcsname
+          {\LT at save@row}}}%
+  \fi
+  \ifx\LT at save@row\LT@@@@save at row
+  \else
+    \LT at warn{Column~\@width s~have~changed\MessageBreak
+             in~table~\thetable}%
+    \LT at final@warn
+  \fi
+  \endgraf\penalty -\LT at end@pen
+  \ifvoid\LT at foot\else
+    \global\advance\vsize\ht\LT at foot
+    \global\advance\@colroom\ht\LT at foot
+    \dimen@\pagegoal\advance\dimen@\ht\LT at foot\pagegoal\dimen@
+  \fi
+  \endgroup
+  \global\@mparbottom\z@
+  \endgraf\penalty\z@\addvspace\LTpost
+  \ifvoid\footins\else\insert\footins{}\fi}
+%    \end{macrocode}
+%
+%
+%
+%  \begin{macro}{\@@_patch_LT at t@bularcr}
+%
+%    \begin{macrocode}
+\def\@@_patch_LT at t@bularcr{%
+  \global\advance\LT at rows\@ne
+  \ifnum\LT at rows=\LTchunksize
+%    \end{macrocode}
+%    At the end of the chunk \verb=\\= is doing something special and
+%    so we loose \cs{@@_store_missing_cells:n}. Below is about the
+%    right place to add it do this code branch.
+%    \begin{macrocode}
+    \@@_store_missing_cells:n{echunk}
+    \gdef\LT at setprevdepth{%
+      \prevdepth\z@
+      \global\let\LT at setprevdepth\relax}%
+    \expandafter\LT at xtabularcr
+  \else
+    \ifnum0=`{}\fi
+    \expandafter\LT at LL@FM at cr
+  \fi}
+
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+%  \begin{macro}{\@@_patch_LT at end@hd at ft}
+%    This command is used to store the head and foot boxes.
+%    We need to retrieve and store the row so that we can clean
+%    up the structure in the finalize code.
+%    \begin{macrocode}
+\def\@@_patch_LT at end@hd at ft#1{%
+%    \end{macrocode}
+%    To handle missing columns in the header we need this:
+%    \begin{macrocode}
+  \__tbl_store_missing_cells:n{head/foot}
+  \int_step_inline:nn
+   { \LT at rows + 1 }
+   {
+     \seq_gput_left:ce
+       {g_@@_\cs_to_str:N #1 _rows_seq }
+       { \int_eval:n {\g_@@_row_int + 1 - ##1 } }
+   }
+%    \end{macrocode}
+%    We also have to set the chunk rows to its max value before
+%    calling \cs{LTechunk} so that we don't get extra increments of
+%    the main row counter due to \cs{everycr}.
+%    \begin{macrocode}
+  \int_gset:Nn \LT at rows { \LTchunksize }
+  \LT at echunk
+  \ifx\LT at start\endgraf
+    \LT at err
+     {Longtable head or foot not at start of table}%
+     {Increase LTchunksize}%
+  \fi
+  \setbox#1\box\z@
+  \LT at get@widths
+  \LT at bchunk}
+%    \end{macrocode}
+%  \end{macro}
+
+% \begin{macro}{\@@_patch_LT at start}
+%    \begin{macrocode}
+\def\@@_patch_LT at start{%
+  \let\LT at start\endgraf
+  \endgraf\penalty\z@\vskip\LTpre\endgraf
+   \ifdim \pagetotal<\pagegoal \else
+      \dimen@=\pageshrink
+      \advance \dimen@ 1sp %
+      \kern\dimen@\penalty 9999\endgraf \kern-\dimen@
+   \fi
+  \dimen@\pagetotal
+  \advance\dimen@ \ht\ifvoid\LT at firsthead\LT at head\else\LT at firsthead\fi
+  \advance\dimen@ \dp\ifvoid\LT at firsthead\LT at head\else\LT at firsthead\fi
+  \advance\dimen@ \ht\LT at foot
+  \edef\LT at reset@vfuzz{\vfuzz\the\vfuzz\vbadness\the\vbadness\relax}%
+  \vfuzz\maxdimen
+  \vbadness\@M
+  \setbox\tw@\copy\z@
+  \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox
+  \setbox\tw@\vbox{\unvbox\tw@}%
+  \LT at reset@vfuzz
+  \advance\dimen@ \ht
+        \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi
+  \advance\dimen@\dp
+        \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi
+  \advance\dimen@ -\pagegoal
+  \ifdim \dimen@>\z@
+    \vfil\break
+  \else
+    \ifdim\pageshrink>\z@\pageshrink\z@\fi
+  \fi
+      \global\@colroom\@colht
+  \ifvoid\LT at foot\else
+    \global\advance\vsize-\ht\LT at foot
+    \global\advance\@colroom-\ht\LT at foot
+    \dimen@\pagegoal\advance\dimen at -\ht\LT at foot\pagegoal\dimen@
+    \maxdepth\z@
+  \fi
+  \MakeLinkTarget{table}
+  \ifvoid\LT at firsthead\copy\LT at head\else\box\LT at firsthead\fi\nobreak
+%    \end{macrocode}
+% Avoid that following uses of the box add content:
+%    \begin{macrocode}
+  \tagmcbegin{artifact}
+   \tag_mc_reset_box:N\LT at head
+  \tagmcend
+  \output{\LT at output}}
+%    \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_patch_LT at output}
+%    We must also avoid that the reuse of the foot box leads to
+%    duplicated content:
+%    \begin{macrocode}
+\def\@@_patch_LT at output{%
+  \ifnum\outputpenalty <-\@Mi
+    \ifnum\outputpenalty > -\LT at end@pen
+      \LT at err{floats and marginpars not allowed in a longtable}\@ehc
+    \else
+      \setbox\z@\vbox{\unvbox\@cclv}%
+      \ifdim \ht\LT at lastfoot>\ht\LT at foot
+        \dimen@\pagegoal
+        \advance\dimen@\ht\LT at foot
+        \advance\dimen at -\ht\LT at lastfoot
+        \ifdim\dimen@<\ht\z@
+          \setbox\@cclv\vbox{\unvbox\z@\copy\LT at foot\vss}%
+          \@makecol
+          \@outputpage
+          \global\vsize\@colroom
+          \setbox\z@\vbox{\box\LT at head}%
+        \fi
+      \fi
+        \unvbox\z@\box\ifvoid\LT at lastfoot\LT at foot\else\LT at lastfoot\fi
+%    \end{macrocode}
+%    Reset attribute of foot box:
+%    \begin{macrocode}
+        \tagmcbegin{artifact}
+        \tag_mc_reset_box:N \LT at foot
+        \tagmcend
+    \fi
+  \else
+    \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT at foot\vss}%
+%    \end{macrocode}
+%    Reset attribute of foot box:
+%    \begin{macrocode}
+    \tagmcbegin{artifact}
+    \tag_mc_reset_box:N \LT at foot
+    \tagmcend
+    \@makecol
+    \@outputpage
+      \global\vsize\@colroom
+    \copy\LT at head\nobreak
+  \fi}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_patch_\LT at makecaption}
+%     This patch is quite similar to the one for LaTeX's \cs{@makecaption}
+%     we also have to change the parbox sockets.
+%    \begin{macrocode}
+\def\@@_patch_LT at makecaption#1#2#3{%
+  \LT at mcol\LT at cols c{%
+  % test can go after merge
+    \str_if_exist:cT { l__socket_tagsupport/parbox/before_plug_str }
+      {
+        \AssignSocketPlug{tagsupport/parbox/before}{noop}
+        \AssignSocketPlug{tagsupport/parbox/after}{noop}
+      }
+    \hbox to\z@{\hss\parbox[t]\LTcapwidth{%
+    \reset at font
+    \tag_stop:n{caption}
+    \sbox\@tempboxa{#1{#2:~}#3}%
+    \tag_start:n{caption}
+    \ifdim\wd\@tempboxa>\hsize
+      #1{#2:~}#3%
+    \else
+      \hbox to\hsize{\hfil#1{#2:~}#3\hfil}%
+    \fi
+    \endgraf\vskip\baselineskip}%
+  \hss}}}
+%    \end{macrocode}
+% \end{macro}
+%
+%
+%
+% Overwrite the longtable definition. That will probably break somewhere as
+% they are various package which patch too.
+%    \begin{macrocode}
+\AddToHook{package/longtable/after}
+  {
+   \seq_new:N \g_@@_LT at firsthead_rows_seq
+   \seq_new:N \g_@@_LT at head_rows_seq
+   \seq_new:N \g_@@_LT at lastfoot_rows_seq
+   \seq_new:N \g_@@_LT at foot_rows_seq
+   \cs_set_eq:NN \LT at array\@@_patch_LT at array
+   \cs_set_eq:NN \endlongtable\@@_patch_endlongtable
+   \cs_set_eq:NN \LT at start\@@_patch_LT at start
+   \cs_set_eq:NN \LT at output\@@_patch_LT at output
+   \cs_set_eq:NN \LT at t@bularcr\@@_patch_LT at t@bularcr
+   \cs_set_eq:NN \LT at end@hd at ft\@@_patch_LT at end@hd at ft
+   \cs_set_eq:NN \LT at makecaption\@@_patch_LT at makecaption
+  }
+%    \end{macrocode}
+
+
+
+
+
+% \subsection{tabularx}
+%
+% In tabularx we mainly need to ensure that no tagging is done during
+% the trial.
+%
+%    \begin{macrocode}
+\def\@@_patch_TX at endtabularx{%
+   \expandafter\expandafter\expandafter
+     \TX at find@endtabularxa\csname end\TX@\endcsname
+     \endtabularx\TX@\endtabularx\TX at find@endtabularxa
+  \expandafter\TX at newcol\expandafter{\tabularxcolumn{\TX at col@width}}%
+  \let\verb\TX at verb
+  \def\@elt##1{\global\value{##1}\the\value{##1}\relax}%
+  \edef\TX at ckpt{\cl@@@@ckpt}%
+  \let\@elt\relax
+  \TX at old@table\maxdimen
+  \TX at col@width\TX at target
+  \global\TX at cols\@ne
+  \TX at typeout@
+    {\@spaces Table Width\@spaces Column Width\@spaces X Columns}%
+%    \end{macrocode}
+%    Here we stop tagging:
+%    \begin{macrocode}
+  \tag_stop:n{tabularx}
+  \TX at trial{\def\NC at rewrite@X{%
+          \global\advance\TX at cols\@ne\NC at find p{\TX at col@width}}}%
+  \loop
+    \TX at arith
+    \ifTX@
+    \TX at trial{}%
+  \repeat
+%    \end{macrocode}
+%    And now we restart it again.
+%    \begin{macrocode}
+  \tag_start:n{tabularx}
+  {\let\@footnotetext\TX at ftntext\let\@xfootnotenext\TX at xftntext
+    \csname tabular*\expandafter\endcsname\expandafter\TX at target
+      \the\toks@
+    \csname endtabular*\endcsname}%
+  \global\TX at ftn\expandafter{\expandafter}\the\TX at ftn
+  \ifnum0=`{\fi}%
+   \expandafter\expandafter\expandafter
+   \TX at find@endtabularxbb
+    \expandafter\end\expandafter{\TX@}%
+    \endtabularx\TX@\endtabularx\TX at find@endtabularxb
+}
+
+\AddToHook{package/tabularx/after}
+  {\cs_set_eq:NN \TX at endtabularx\@@_patch_TX at endtabularx }
+%    \end{macrocode}
+%    \begin{macrocode}
+%</package>
+%    \end{macrocode}
+%
+%
+%    \begin{macrocode}
+%<*latex-lab>
+\ProvidesFile{table-latex-lab-testphase.ltx}
+        [\ltlabtbldate\space v\ltlabtblversion\space latex-lab wrapper table]
+\RequirePackage{latex-lab-testphase-table}
+%</latex-lab>
+%    \end{macrocode}


Property changes on: trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-table.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-toc-kernel-changes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-toc-kernel-changes.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-toc-kernel-changes.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -17,8 +17,8 @@
 % for those people who are interested or want to report an issue.
 %
 % dates for latex-lab-kernel-changes.sty (pulled from various sources, see ins)
-\def\ltlabkerneldate{2023-07-20}
-\def\ltlabkernelversion{0.85a}
+\def\ltlabkerneldate{2023-10-16}
+\def\ltlabkernelversion{0.85b}
 %<*driver>
 \documentclass{l3doc}
 \EnableCrossrefs
@@ -66,6 +66,7 @@
         [\ltlabkerneldate\space v\ltlabkernelversion\space 
          General kernel and class changes]
 %    \end{macrocode}
+%
 % \subsection{Providing the counter representation \cs{theHxx} generally}
 % [kernel?]
 %
@@ -151,8 +152,32 @@
 \def\toclevel at subparagraph{5}
 \def\toclevel at figure{1}
 \def\toclevel at table{1}
+%    \end{macrocode}
+%
+%\subsection{Storing the relation between target names and structure numbers}
+% To be able to add a /Ref key to structures the tagging makes use of target names
+% and stores the relationship in a property. We add a hook to \cs{MakeLinkTarget} to 
+% catch as much as possible, see also tagging issue \#20. This should work also
+% without hyperref. The property is defined in tagpdf-base, so the code would 
+% work also without tagging but we add a test anyway, this is probably faster.
+%    \begin{macrocode}
+\ExplSyntaxOn
+\AddToHookWithArguments{cmd/MakeLinkTarget/after}
+  {
+    \tag_if_active:T
+      {    
+        \tl_if_blank:VF \@currentHref
+          {
+            \prop_gput:Nee \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
+          }
+      }    
+  }
+\ExplSyntaxOff  
+%    \end{macrocode}
+%    \begin{macrocode}
 %</kernelchange>
 %    \end{macrocode}
+%
 % \subsection{load kernel changes}
 %    \begin{macrocode}
 %<*package>

Modified: trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-toc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-toc.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-toc.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -16,8 +16,8 @@
 %
 % for those people who are interested or want to report an issue.
 %
-\def\ltlabtocdate{2023-07-20}
-\def\ltlabtocversion{0.85a}
+\def\ltlabtocdate{2023-10-16}
+\def\ltlabtocversion{0.85b}
 %<*driver>
 \documentclass{l3doc}
 \EnableCrossrefs
@@ -54,12 +54,42 @@
   { Code related to the tagging of toc-like lists}
 %</header>  
 %    \end{macrocode}
-%
+% \begin{documentation}
 % \section{Introduction}
 %
 % The followings contains various functions related to the tagging of the
-% table of contents and similar list. The functions will at some time
-% be moved inside the tagpdf code.
+% table of contents and similar list. 
+% 
+% The structure of tocs consist of nested TOC and TOCI structures. 
+% The code uses the first argument of the \cs{contentsline} command to detect the
+% level and to decided if a structure should be closed. The structure that 
+% should be used in \texttt{/Ref} key to link to the heading is detected from the
+% target name in the fourth argument -- because of this with this code such a target 
+% name is created and stored also if hyperref is not loaded. 
+% 
+% \subsection{Manual toc additions}
+% As the \texttt{/Ref} key relies on the target name, 
+% manual \cs{addcontentsline} commands must ensure that they reference the right 
+% structure. If an unnumbered heading command is used before this is normally the case, 
+% so the following should work fine:
+% 
+%  \begin{verbatim}
+%  \chapter*{Unnumbered}
+%  \addcontentsline{toc}{chapter}{Unnumbered}
+%  \end{verbatim}
+%  
+%  If there is no heading command a target name must be created manually \emph{inside the
+%  right structure} with \cs{MakeLinkTarget}:
+%  
+%  \begin{verbatim}
+%  \noindent % start e.g. P-structure
+%  \MakeLinkTarget*{unnumbered}% target inside the P-structure
+%  Unnumbered
+%  \addcontentsline{toc}{chapter}{Unnumbered}
+%  \end{verbatim}   
+% 
+% \end{documentation}
+% \begin{implementation}
 %    \begin{macrocode}
 %<*package>
 %<@@=tag>
@@ -78,23 +108,21 @@
 % This variable records for (some or all, not clear yet)
 % destination names the related structure number to allow
 % to reference them in a Ref. The key is the destination.
-% Moved into tagpdf!
+% Defined by tagpdf.
 % \end{variable}
 %
-% We use \cs{refstepcounter} to store the relation between
+% \cs{refstepcounter} doesn't use \cs{MakeLinkTarget} (yet) so
+% we have to patch it too to store the relation between
 % destination names/\cs{@currentHref} and structure numbers
 %
-% TODO: the functions should be moved into tagpdf so that one
-% doesn't has to test if the prop exists or not.
+% The property is set up in tagpdf-test so that one
+% doesn't has to check if the prop exists or not.
 %    \begin{macrocode}
 \AddToHook{cmd/refstepcounter/after}
  {
    \tl_if_blank:VF \@currentHref
     {
-      \prop_if_exist:NT \g_@@_struct_dest_num_prop
-        {
-         \prop_gput:Nxx \g_@@_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
-        } 
+      \prop_gput:Nee \g_@@_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}      
     }
  }
 \AddToHook{cmd/H at refstepcounter/after}
@@ -101,10 +129,7 @@
  {
    \tl_if_blank:VF \@currentHref
     {
-      \prop_if_exist:NT \g_@@_struct_dest_num_prop
-        {
-          \prop_gput:Nxx \g_@@_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
-        }  
+      \prop_gput:Nee \g_@@_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
     }
  }
 %    \end{macrocode}
@@ -375,3 +400,4 @@
 
 %</latex-lab>
 %    \end{macrocode}
+% \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab.ins	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab.ins	2023-11-02 19:56:02 UTC (rev 68730)
@@ -152,6 +152,11 @@
 \generate{\file{firstaid-latex-lab-testphase.ltx}{\from{latex-lab-firstaid.dtx}{latex-lab}}}
 \generate{\file{latex-lab-testphase-firstaid.sty}{\from{latex-lab-firstaid.dtx}{package}}}
 
+%table
+\generate{\file{table-latex-lab-testphase.ltx}{\from{latex-lab-table.dtx}{latex-lab}}}
+\generate{\file{latex-lab-testphase-table.sty}{\from{latex-lab-table.dtx}{package}}}
+
+
 % stop docstrip adding \endinput
 \preamble
 \endpreamble

Modified: trunk/Master/texmf-dist/source/latex-dev/tools/afterpage.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/tools/afterpage.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/tools/afterpage.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -25,7 +25,7 @@
 %
 %<package>\NeedsTeXFormat{LaTeX2e}
 %<package>\ProvidesPackage{afterpage}
-%<package>         [2014/10/28 v1.08 After-Page Package (DPC)]
+%<package>         [2023/07/04 v1.08 After-Page Package (DPC)]
 %
 %<*driver>
 \documentclass{ltxdoc}
@@ -199,7 +199,7 @@
          \global\setbox\@ne\lastbox}%
 %    \end{macrocode}
 % If the text that is saved in |\AP at partial| had footnotes, we'd
-% better grab them as well otherwise they may come out on a page
+% better grab them as well, otherwise they may come out on a page
 % with the `afterpage' text, before the page that has the
 % footnote mark! (Added at v1.08.)
 %    \begin{macrocode}
@@ -218,7 +218,7 @@
 %    \end{macrocode}
 %
 % Restore the |\everydisplay| register. |\ignorespaces| prevents a space
-% or newline after |$$| creating rogue a indentation or paragraph.
+% or newline after |$$| creating a rogue indentation or paragraph.
 %    \begin{macrocode}
 \def\AP at ed{\everydisplay\expandafter{\the\toks@}\ignorespaces}
 %    \end{macrocode}
@@ -264,7 +264,7 @@
 % `afterpage' commands, so just add the new commands to the end of the
 % list. Otherwise save the commands in |\AP@|. (within a local group),
 % and switch the output routine. (The new output routine just calls the
-% old one if it is invoked by a \LaTeX{} float.
+% old one if it is invoked by a \LaTeX{} float.)
 %    \begin{macrocode}
 \long\def\afterpage#1{%
   \ifx\AP@\relax
@@ -291,7 +291,7 @@
     \global\output\expandafter{\the\AP at output}%
     \AP at clearpage
 %    \end{macrocode}
-% At this point (since v1.08) Need to clear |\AP@| \emph{before}
+% At this point (since v1.08) need to clear |\AP@| \emph{before}
 % using its expansion, as otherwise hit an infinite loop. Sigh.
 %    \begin{macrocode}
     \global\expandafter\let\expandafter\AP@\expandafter\relax
@@ -350,7 +350,7 @@
 %    \end{macrocode}
 % Subtract the new height of |#1| from |\skip@|, and add back on
 % |\splittopskip|, so |\skip@| is now the height of the first row of
-% |#1| This may still be 0pt if (eg) a mark or whatsit is between the
+% |#1|. This may still be 0pt if (eg) a mark or whatsit is between the
 % top glue and the first box. Save (this height${}-{}$|\splittopskip|)
 % in |\skip\tw@|.
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex-dev/tools/array.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/tools/array.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/tools/array.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -33,7 +33,7 @@
 %<+package>\DeclareCurrentRelease{}{2020-10-01}
 %<+package>
 %<+package>\ProvidesPackage{array}
-%<+package>         [2022/09/04 v2.5g Tabular extension package (FMi)]
+%<+package>         [2023/10/16 v2.5g Tabular extension package (FMi)]
 %
 % \fi
 %
@@ -2272,7 +2272,7 @@
 %    insert the row strut now as it isn't inside the template (as that
 %    got =\omit=ted).
 % \changes{v2.4h}{2018/04/30}{Fixing issue 42}
- %    \begin{macrocode}
+%    \begin{macrocode}
    \ifnum\@multicnt >\z@ \do at row@strut \fi
    \cr}
 \let\do at row@strut\relax

Modified: trunk/Master/texmf-dist/source/latex-dev/tools/bm.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/tools/bm.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/tools/bm.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -36,7 +36,7 @@
 %<driver>\ProvidesFile{bm.drv}
 % \fi
 %         \ProvidesFile{bm.dtx}
-          [2022/01/05 v1.2f Bold Symbol Support (DPC/FMi)]
+          [2023/07/08 v1.2f Bold Symbol Support (DPC/FMi)]
 %
 % \iffalse
 %<*driver>
@@ -97,7 +97,7 @@
 %
 % If there is a `heavy' math version defined (usually accessed by a
 % user-command |\heavymath|) then a similar command |\hm|
-% is defined which access these `ultra bold' fonts. Currently this is
+% is defined which accesses these `ultra bold' fonts. Currently this is
 % probably only useful with the `mathtime plus' font collection.
 % Definitions of commands that use these fonts may be made by
 % specifying the optional argument `heavy' to |\DeclareBoldMathCommand|.
@@ -140,7 +140,7 @@
 % your font set.
 %
 % \section{Features}
-% In most cases this package should work in a fairly self explanatory
+% In most cases this package should work in a fairly self-explanatory
 % way, but there are some things that might not be obvious.
 %
 % \subsection{Interaction with Math Alphabet Commands}
@@ -209,7 +209,7 @@
 % Normally if a command takes arguments the full command, including
 % any arguments, should be included in |\bm|.
 %
-% So |\bm{\overbrace{abc}}| (producing \smash{$\bm{\overbrace{abc}}$})
+% So |\bm{\overbrace{abc}}| (producing \smash{$\bm{\overbrace{abc}}$}),
 % not
 % |\bm{\overbrace}{abc}|. If you do not include all the arguments you
 % will typically get the error message:\\
@@ -245,7 +245,7 @@
 % allocations.
 %
 % If no bold font appears to be available for a particular symbol,
-% |\bm| will use `poor man's bold' that is, overprinting the same
+% |\bm| will use `poor man's bold', which will overprint the same
 % character in slightly offset
 % positions to give an appearance of boldness.
 %
@@ -255,8 +255,8 @@
 % font set there are suitable fonts for bold and heavy math setting,
 % and so |\bm| and |\hm| work well. Similarly in the basic Lucida
 % New Math font set there are no bold math fonts, so |\bm| will
-% use `poor man's bold. However if the Lucida Expert set is used,
-% Then |\bm| will detect, and use the bold math fonts that are
+% use `poor man's bold'. However, if the Lucida Expert set is used,
+% then |\bm| will detect, and use, the bold math fonts that are
 % available.
 %
 % As discussed above, one may set |\bmmax| higher or lower than its
@@ -310,7 +310,7 @@
 % ``poor man's bold''. That is, over-printing the character with slight offsets.
 % Since version 1.2e, the package now warns if a font is set up to use this over-printing and
 % the package option |nopbm|  is available which prevents its use in which case |\bm| will
-% use the non-bold for characters from the affected font,
+% use the non-bold for characters from the affected font.
 %
 % \MaybeStop{}
 %
@@ -339,7 +339,7 @@
 %
 % \changes{v1.2e}{2021/04/25}
 %      {Package options gh/71}
-% Options to use or not use poor mans bold (over-printing)
+% Options to use or not use poor man's bold (over-printing)
 % and level of warning messages.
 %    \begin{macrocode}
 %<*package>
@@ -399,7 +399,7 @@
 % code, which is temporarily defined to |\bm|, to save wasting a csname.
 % Similarly |\bm at pmb|\ldots\ (which will be defined later) are used
 % as scratch macros.
-% (This csname saving no longer used, setup command is |\bm at setup| not |\bm|).
+% (This csname saving no longer used, setup command is |\bm at setup|, not |\bm|.)
 %
 % The general plan. Run through the fonts allocated to the normal math
 % version. Ignore \meta{math alphabet} allocations\footnote{For now?}
@@ -505,11 +505,11 @@
                \ifx\bm at pmb@\@firstofone\else, using \string\pmb\fi}%
     \else
 %    \end{macrocode}
-% Else make a new name by adjoining |#1| to the name of the symbol font
+% Else make a new name by adjoining |#1| to the name of the symbol font,
 % eg, |\symboldsymbols| to match |\symsymbols|. If that font has already
 % been allocated, or if |\@tempcnta| is positive so we can allocate a
 % new slot for this font, then the table will be
-% set with the offset between the two fonts. otherwise set the offset to
+% set with the offset between the two fonts. Otherwise set the offset to
 % zero (so |\boldmath| will be used to access the font).
 %    \begin{macrocode}
       \edef\@tempa{sym#1\expandafter\@gobblefour\string##1}%
@@ -673,8 +673,8 @@
 \fi
 %    \end{macrocode}
 %
-% If there is no bold math version, It is very easy to set up
-% the table, no need to use all the tricky code above.
+% If there is no bold math version, it is very easy to set up
+% the table since there is no need to use all the tricky code above.
 % Also, at the end of the package redefine the internal macro
 % that |\bm| uses to call |\boldmath|, to use poor man's bold
 % instead.
@@ -711,7 +711,7 @@
 %
 % \begin{macro}{\hmmax}
 %
-% Same for heavy (but default to three this time (enough for mathtime
+% Same for heavy, but default to three this time (enough for mathtime
 % plus, as no heavy operators font).
 %    \begin{macrocode}
 \ifx\hmmax\@undefined
@@ -777,7 +777,7 @@
     \let\protect\@empty
     \let\@typeset at protect\@empty
 %    \end{macrocode}
-% Set up either bold or heavy
+% Set up either bold or heavy.
 %    \begin{macrocode}
     \def\bm at mathchoice{\bm at m@thchoice#1}%
     \def\bm at group{\bm at gr@up#1}%
@@ -848,9 +848,9 @@
     \let\next@\copy
     \global\let\bm at first\@empty
 %    \end{macrocode}
-%   For AMS version of |\sqrt|: don't expand just wrap in brace group
-%   so that it can be made bold in a safe but slow way. Do the same for
-%   internal accent command
+%   For AMS version of |\sqrt|: don't expand, just wrap it in a brace
+%   group so that it can be made bold in a safe but slow way. Do the same
+%   for internal accent command.
 % \changes{v1.1b}{2003/10/05}{AMS \cs{sqrt} not working}
 %
 % \changes{v1.1c}{2004/02/26}{\cs{accentV} made safe (pr/3625)}
@@ -886,7 +886,7 @@
 %    |\mv at bold| or |\mv at heavy| and we execute that after redefining
 %    |\install at mathalphabet| and |\getanddefine at fonts| suitably.
 %    The definitions are reverted back to their original the moment
-%    the scanning is done
+%    the scanning is done.
 % \changes{v1.0h}{2002/11/22}{Get math alphabets right (pr/3476)}
 %    \begin{macrocode}
      \let\install at mathalphabet\def
@@ -972,7 +972,7 @@
 % |\bm| is empty within the definition, so that either\\
 % |\bmdefine\balpha{\bm\alpha}| or  |\bmdefine\balpha{\alpha}| \\
 % may be used. (The former just for compatibility with the original
-% version for plain \TeX).
+% version for plain \TeX.)
 %    \begin{macrocode}
 \def\bmdefine{\DeclareBoldMathCommand[bold]}
 %    \end{macrocode}
@@ -1092,8 +1092,8 @@
 % \begin{macro}{\bm at gr@up}
 % \changes{v1.0c}{1997/10/09}
 %      {Extra brace around argument for \cs{over}}
-% If faced with a group,
-% If we are in math mode, stick it in a |\boldsymbol| like construct
+% If faced with a group
+% when we are in math mode, put it in a |\boldsymbol|-like construct
 % and then recurse on |\bm at expand|.
 % Otherwise just use |\bfseries\boldmath|.
 % The actual test is deferred till `run time'.
@@ -1131,7 +1131,7 @@
 % Other things just copy straight over to the command being built.
 % (Anything inside a |\mathop| or similar will end up being made bold
 % as the |\mathop| will be copied over, but its argument will be made
-% bold by the group code above.
+% bold by the group code above.)
 %    \begin{macrocode}
 \def\bm at test@token#1{%
   \let\bm at next\@empty
@@ -1139,7 +1139,7 @@
 %
 % Stop here. Note that it is vital that the terminating token
 % is non-expandable and defined, rather than the usual \LaTeX\
-% terminators |\@nil| or |\@@|. (Worse still would be a `quark'
+% terminators |\@nil| and |\@@|. (Worse still would be a `quark'
 % like |docstrip|'s |\qStop|.)
 %    \begin{macrocode}
   \ifx#1\@@end
@@ -1166,7 +1166,7 @@
     \afterassignment\bm at radical\count@
 %    \end{macrocode}
 %
-% Need to trap spaces otherwise digits will get turned to bold
+% Need to trap spaces, otherwise digits will get turned to bold
 % mathchars.
 % \changes{v1.1a}{2003/09/01}{Forgotten to check for \cs{hskip} (pr/3572)}
 %    \begin{macrocode}
@@ -1451,7 +1451,7 @@
 % \begin{macro}{\bm at pmb@}
 % \changes{v0.10}{1997/01/04}
 %      {Macro added}
-% |\pmb| variant. (See \TeX{}Book, or AMS \textsf{amsbsy} package).
+% |\pmb| variant. (See \TeX{}book, or AMS \textsf{amsbsy} package.)
 % This one takes a bit more care to use smaller offsets in subscripts.
 %    \begin{macrocode}
 \ifx\bm at pmb@\@firstofone\else
@@ -1544,7 +1544,7 @@
 \def\bm at mathaccent{%
  \bm at changefam{}%
 %    \end{macrocode}
-% The next four lines were added a v1.0e. Without them |\bm{\hat{A}}|
+% The next four lines were added in v1.0e. Without them |\bm{\hat{A}}|
 % makes the accent bold using |\bm| but the group |{A}| is made bold
 % via a |\mathchoice| construction as for any other group, as |\bm|
 % does not attempt to parse inside brace groups. While that produces
@@ -1674,9 +1674,10 @@
 % \begin{macro}{\bm at changefam}
 % \changes{v0.10}{1997/01/04}
 %      {Rewrite for new \cs{bm at table} system}
-% Pull out one specified hex digit and passes
-% it to |\bm at modify| to change. argument is empty normally but |000| to
-% access the second math group in a delimiter code.
+% Pull out one specified hex digit and pass
+% it to |\bm at modify| to change. Its one argument is normally empty,
+% but it will be |000| when necessary to access the second math group
+% in a delimiter code.
 %    \begin{macrocode}
 \def\bm at changefam#1{%
   \@tempcnta\count@

Modified: trunk/Master/texmf-dist/source/latex-dev/tools/calc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/tools/calc.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/tools/calc.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -40,7 +40,7 @@
 %<driver> \ProvidesFile{calc.drv}
 % \fi
 %         \ProvidesFile{calc.dtx}
-          [2017/05/25 v4.3 Infix arithmetic (KKT,FJ)]
+          [2023/07/08 v4.3 Infix arithmetic (KKT,FJ)]
 %
 % \iffalse
 %<*driver>
@@ -102,7 +102,7 @@
 % Arithmetic in \TeX\ is done using low-level operations such as
 % |\advance| and |\multiply|.  This may be acceptable when developing
 % a macro package, but it is not an acceptable interface for the
-% end-user.
+% end user.
 %
 % This package introduces proper infix notation arithmetic which is
 % much more familiar to most people.  The infix notation is more
@@ -271,7 +271,7 @@
 % or at the end of the expression being evaluated.
 %
 % When \TeX\ performs arithmetic on integers, any fractional part of
-% the results are discarded.  For example,
+% the result is discarded.  For example,
 %\begin{verbatim}
 %    \setcounter{x}{7/2}
 %    \setcounter{y}{3*\real{1.6}}
@@ -318,7 +318,7 @@
 %  \setlength{\parindent}{%
 %    \minof{3pt}{\parskip}*\real{1.5}*\maxof{2*\real{1.6}}{2-1}}
 %\end{verbatim}
-% will assign $\min(13.5\textrm{pt},4.5\cs{parskip})$ to \cs{parindent}
+% will assign $\min(13.5\textrm{pt},4.5\cs{parskip})$ to \cs{parindent}.
 %
 %
 %
@@ -453,7 +453,7 @@
 % or a parenthesized expression~$(E')$.
 %
 % Since the \TeX\ engine can only execute arithmetic operations in a
-% machine-code like manner, we have to find a way to translate the
+% machine-code-like manner, we have to find a way to translate the
 % infix notation into this `instruction set'.
 %
 % Our goal is to design a translation scheme that translates~$X$ (an
@@ -565,9 +565,9 @@
 % When an \<integer factor> is expected, we must change $A$ and~$B$ to
 % refer to integer type registers.  We can accomplish this by
 % including instructions to change the type of $A$ and~$B$ to integer
-% type as part of the replacement code for~`$*$; if we append such
+% type as part of the replacement code for~`$*$'; if we append such
 % instructions to the replacement code described above, we also ensure
-% that the type-change is local (provided that the type-changing
+% that the type change is local (provided that the type-changing
 % instructions only have local effect).  However, note that the
 % instance of~$A$ referred to in $\savecode{B\lassign B*A}$ is the
 % integer instance of~$A$.
@@ -933,7 +933,7 @@
 % \begin{macro}{\calc at addAtoB}
 % \begin{macro}{\calc at subtractAfromB}
 % The replacement code for the binary operators `\texttt{+}' and
-% `\texttt{-}' follow a common pattern; the only difference is the
+% `\texttt{-}' follows a common pattern; the only difference is the
 % token that is stored away by |\aftergroup|.  After this replacement
 % code, control is transferred to |\calc at pre@scan|.
 %    \begin{macrocode}
@@ -1063,7 +1063,7 @@
 % \begin{macro}{\calc at ratio@multiply}
 % \begin{macro}{\calc at ratio@divide}
 % When |\calc at post@scan| encounters a |\ratio| control sequence, it hands
-% control to one of the macros |\calc at ratio@multiply| or |\calc at ratio@divide|,
+% control to one of the macros |\calc at ratio@multiply| and |\calc at ratio@divide|,
 % depending on the preceding character. Those macros both forward the
 % control to the macro |\calc at ratio@evaluate|, which performs two steps: (1) it
 % calculates the ratio, which is saved in the global macro token
@@ -1109,7 +1109,7 @@
 % Here we calculate the ratio.  First, we check for negative numerator
 % and/or denominator; note that \TeX\ interprets two minus signs the
 % same as a plus sign.  Then, we calculate the integer part.
-% The minus sign(s), the integer part, and a decimal point, form the
+% The minus sign(s), the integer part, and a decimal point form the
 % initial expansion of the |\calc at the@ratio| macro.
 %    \begin{macrocode}
       \gdef\calc at the@ratio{}%
@@ -1305,8 +1305,8 @@
 %    {Use \cs{PackageError} for error messages (DPC)}
 % \changes{v4.0e}{1997/11/11}
 %    {typo fixed}
-% If |\calc at post@scan| reads a character that is not one of `\texttt{+}',
-% `\texttt{-}', `\texttt{*}', `\texttt{/}', or `\texttt{)}', an error
+% If |\calc at post@scan| reads a character that is neither `\texttt{+}',
+% `\texttt{-}', `\texttt{*}', `\texttt{/}', nor `\texttt{)}', an error
 % has occurred, and this is reported to the user.  Violations in the
 % syntax of \<numeric>s will be detected and reported by \TeX.
 % \changes{v4.1a}{1998/06/07}
@@ -1327,7 +1327,7 @@
 % \changes{v4.2}{2005/08/06}
 %    {Added macro}
 % The kernel macro \cs{@settodim} is changed so that it runs through a list
-% containing \cs{ht}, \cs{wd}, and \cs{dp} and than advance the length
+% containing \cs{ht}, \cs{wd}, and \cs{dp} and then advances the length
 % one step at a time. We just have to use a scratch register in case the
 % user decides to put in a \cs{global} prefix on the length register.
 % A search on the internet confirmed that some people do that kind of thing.

Modified: trunk/Master/texmf-dist/source/latex-dev/tools/dcolumn.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/tools/dcolumn.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/tools/dcolumn.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -31,7 +31,7 @@
 %<driver>\ProvidesFile{dcolumn.drv}
 % \fi
 %         \ProvidesFile{dcolumn.dtx}
-          [2014/10/28 v1.06 decimal alignment package (DPC)]
+          [2023/07/08 v1.06 decimal alignment package (DPC)]
 %
 % \iffalse
 %<*driver>
@@ -117,7 +117,7 @@
 %
 % \noindent"\newcolumntype{,}{D{,}{,}{2}}"
 %
-% {\tt ,} specifies takes a column of entries with at most two decimal
+% {\tt ,} specifies a column of entries with at most two decimal
 % places after a~$,$.
 %
 % \newcolumntype{d}[1]{D{.}{\cdot}{#1}}
@@ -138,7 +138,7 @@
 % \end{center}
 %
 % Note that the first column, which had a negative \meta{decimal places}
-% argument is wider than the second column, so that the decimal point
+% argument, is wider than the second column, so that the decimal point
 % appears in the middle of the column.
 % Also note that this package deals correctly with entries with no
 % decimal part, no integer part, and blank entries.
@@ -200,7 +200,7 @@
 %<*package>
 %    \end{macrocode}
 %
-% First we load {\tt array.sty} if it not already loaded.
+% First we load {\tt array.sty} if it is not already loaded.
 %    \begin{macrocode}
 \RequirePackage{array}
 %    \end{macrocode}
@@ -243,10 +243,10 @@
 % \begin{macro}{\DC at x}
 % \changes{v1.03}{1996/02/28}{Macro added}
 % If "\count@" is negative, centre on the decimal point. If it is
-% positive either "#1" will be empty in which case bad out decimal
+% positive either "#1" will be empty in which case pad out decimal
 % part to the number of digits specified by "\count@" or (new feature
 % in v1.03) it is none empty in which case "\count@" contains the
-% number of digits to the left of the point, and "#1" contains a junk
+% number of digits to the left of the point and "#1" contains a junk
 % token (probably ".") followed by the number of digits to the right
 % of the point. In either of these latter cases, "\DC at right" is used.
 %    \begin{macrocode}
@@ -261,7 +261,7 @@
 % \end{macro}
 %
 % \begin{macro}{\DC at centre}
-% If centering on the decimal point, just need to box up the two halves.
+% If centering on the decimal point, just need to box up the two halves:
 %    \begin{macrocode}
 \def\DC at centre#1#2#3{%
   \let\DC at end\DC at endcentre
@@ -293,7 +293,7 @@
   \ifx\relax#3\relax
 %    \end{macrocode}
 % If "#3" is empty, add "\hfill" to right align the column, and
-% Just set "\DC at rl" to begin a group, so nothing fancy is done with
+% just set "\DC at rl" to begin a group, so that nothing fancy is done with
 % the whole number part.
 %    \begin{macrocode}
     \hfill
@@ -300,9 +300,9 @@
     \let\DC at rl\bgroup
   \else
 %    \end{macrocode}
-% Otherwise  set "\DC at rl" so that the whole number part is put in a
+% Otherwise set "\DC at rl" so that the whole number part is put in a
 % box "\count@" times as wide as a digit.
-% In order to share code with the other branch, then move "#3" (the
+% In order to share code with the other branch, move "#3" (the
 % number of decimal places) into "\count@" throwing away the `.' from
 % the user syntax.
 % \changes{v1.04}{1996/09/23}{Add \cs{hfill} so integer part
@@ -318,7 +318,7 @@
 %    \end{macrocode}
 % Box 2 contains the decimal part, set to "\dimen@" which is
 % calculated below to be "\count@" times the width of a digit, plus
-% the with of the `decimal point'.
+% the width of the `decimal point'.
 %    \begin{macrocode}
   \uppercase{\def~}{$\egroup\setbox\tw@\hbox to\dimen@\bgroup${#2}}%
    \setbox\z@\hbox{$1$}\dimen at ii\wd\z@

Modified: trunk/Master/texmf-dist/source/latex-dev/tools/enumerate.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/tools/enumerate.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/tools/enumerate.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -31,7 +31,7 @@
 %<driver> \ProvidesFile{enumerate.drv}
 % \fi
 %         \ProvidesFile{enumerate.dtx}
-          [2015/07/23 v3.00 enumerate extensions (DPC)]
+          [2023/07/04 v3.00 enumerate extensions (DPC)]
 %
 % \iffalse
 %<*driver>
@@ -66,7 +66,7 @@
 % This package gives the enumerate environment an optional argument
 % which determines the style in which the counter is printed.
 %
-% An occurrence of one of the tokens |A a I i| or |1| produces the value
+% An occurrence of one of the tokens |A a I i 1| produces the value
 % of the counter printed with (respectively) |\Alph \alph \Roman \roman|
 % or |\arabic|.
 %
@@ -233,7 +233,7 @@
 %
 % To enable a new counter type based on a letter, you just need
 % to add a new |\ifx| clause by analogy with the code above.
-% So for example to make |*| trigger footnote symbol counting.
+% So for example to make |*| trigger footnote symbol counting,
 % a package should do the following.
 %
 % Initialise the hook, in case the package is loaded before
@@ -255,7 +255,7 @@
 % in this way.
 %
 % At this point we just need initialise the hook, taking care not
-% to over write any definitions another package may already have added.
+% to overwrite any definitions another package may already have added.
 %    \begin{macrocode}
 \providecommand\@enhook{}
 %    \end{macrocode}
@@ -276,7 +276,7 @@
 % \end{macro}
 %
 % \begin{macro}{\@@enum@}
-% Handle the optional argument..
+% Handle the optional argument.
 %    \begin{macrocode}
 \def\@@enum@[#1]{%
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex-dev/tools/ftnright.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/tools/ftnright.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/tools/ftnright.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -26,7 +26,7 @@
 %% Copyright (C) 1989-2004 Frank Mittelbach, all rights reserved.
 %<+package>\NeedsTeXFormat{LaTeX2e}[1995/06/01]
 %<+package>\ProvidesPackage{ftnright}
-%<+package>         [2014/10/28 v1.1f footnote layout package (FMi)]
+%<+package>         [2023/07/08 v1.1f footnote layout package (FMi)]
 %
 % \fi
 %%
@@ -171,7 +171,7 @@
 %
 % I also upgraded the documentation to conform to the \LaTeXe{}
 % terminology, e.g., this is a package since document classes will not
-% know about it. However it is very likely that i have missed some
+% know about it. However it is very likely that I have missed some
 % necessary corrections.
 %
 % \section{Introduction}
@@ -220,7 +220,7 @@
 %
 % The result of this effort is presented in this paper and the reader
 % can judge for himself whether it was successful or
-% not.\footnote{Please note, that this option only changed the
+% not.\footnote{Please note that this option changed only the
 % placement of footnotes. Since this article also makes use of the
 % {\tt doc} package \cite{bk:GMS94}, that assigns tiny numbers to
 % code lines sprinkled throughout the text, the resulting design is
@@ -235,7 +235,7 @@
 % footnote separator rule which is used in most publications prepared
 % with \TeX{}.\footnote{People who prefer the rule can add it by
 % redefining the command {\tt\bslash footnoterule}
-% \cite[p.~156]{book:LLa86}. Please, note, that this command should
+% \cite[p.~156]{book:LLa86}. Please note that this command should
 % occupy no space, so that a negative space should be used to
 % compensate for the width of the rule used.} Furthermore, I decided
 % to place the footnote markers\footnote{\label{thisftn}The tiny
@@ -572,7 +572,7 @@
 %    are only partly typeset on the preceding page are not resolved.
 %    They are held over until \LaTeX{} starts a page (or column)
 %    containing text besides floats again. For our current layout,
-%    this would mean, that if \LaTeX{} decided to make the right
+%    this would mean that if \LaTeX{} decided to make the right
 %    column of a page a float column, footnotes from the left column
 %    would appear on a later page. A real cure for this problem would
 %    be to rewrite two-thirds of \LaTeX{}'s output routine, so I am
@@ -615,8 +615,8 @@
 %    footnotes from the left column. So we have to change the output
 %    routine at least in the part that contributes floats to the next
 %    column. The macro involved is called |\@startcolumn|. The first
-%    thing we do is to check and see whether any deferred floats
-%    exists.
+%    thing we do is to check and see whether there are any deferred
+%    floats.
 %    \begin{macrocode}
 \def\@startcolumn{%
  \ifx\@deferlist\@empty
@@ -764,7 +764,7 @@
 %    and output the footnotes on a separate page in an
 %    emergency.\footnote{Otherwise, the footnotes are held over for
 %    ever, preventing \TeX{} from finishing the document successfully.
-%    Instead, \TeX{} will produce infinity many empty pages at the end
+%    Instead, \TeX{} will produce infinitely many empty pages at the end
 %    of the document, trying in vain to output the held over
 %    footnotes.  This problem was found by Rainer Sch\"opf when we
 %    prepared the paper for the Cork conference.}
@@ -790,7 +790,7 @@
 %    moment we simply detect it here, perhaps some better scheme can be
 %    implemented. One way to avoid this is to allow more than |\textheight| of
 %    footnotes in |\preparefootins|. However, that isn't such a good idea
-%    either as that means that a footnote from column one, might end up
+%    either since it means that a footnote from column one might end up
 %    completely on a later page.
 % \changes{v1.1f}{2010/02/25}{Check for split footnotes (pr/4099)}
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex-dev/tools/indentfirst.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/tools/indentfirst.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/tools/indentfirst.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -25,7 +25,7 @@
 %
 %<package>\NeedsTeXFormat{LaTeX2e}
 %<package>\ProvidesPackage{indentfirst}
-%<package>         [1995/11/23 v1.03 Indent first paragraph (DPC)]
+%<package>         [2023/07/02 v1.03 Indent first paragraph (DPC)]
 %
 %<*driver>
 \documentclass{ltxdoc}
@@ -52,7 +52,7 @@
 % \changes{v1.03}{1995/11/23}{Typo fixes in documentation}
 %
 % \begin{abstract}
-% Make the first line of all sections etc., be indented by the usual
+% Make the first line of all sections etc. be indented by the usual
 % paragraph indentation. This should work with all the standard document
 % classes.
 % \end{abstract}

Modified: trunk/Master/texmf-dist/source/latex-dev/tools/layout.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/tools/layout.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/tools/layout.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -30,7 +30,7 @@
 %<+package>\ProvidesPackage{layout}
 %<+driver>\ProvidesFile{layout.drv}
 %\ProvidesFile{layout.dtx}
-                [2021-03-10 v1.2e Show layout parameters]
+                [2023-08-20 v1.2e Show layout parameters]
 %
 %    A short driver is provided that can be extracted if necessary by
 %    the \textsf{DocStrip} program provided with \LaTeXe.
@@ -409,7 +409,7 @@
 %
 % \begin{macro}{\cnt at paperwidth}
 % \begin{macro}{\cnt at paperheight}
-%    The dimensions of the paper
+%    The dimensions of the paper,
 %    \begin{macrocode}
 \newcount\cnt at paperwidth
 \newcount\cnt at paperheight
@@ -514,7 +514,7 @@
 \newcount\ref at hoffset
 \newcount\ref at voffset
 %    \end{macrocode}
-%    The |\hoffset| and |\voffset| values are added to the default
+%    the |\hoffset| and |\voffset| values are added to the default
 %    offset of one inch.
 %    \begin{macrocode}
 \ref at hoffset=\cnt at hoffset  \advance\cnt at hoffset by \oneinch
@@ -531,7 +531,7 @@
 % \end{macro}
 %
 % \begin{macro}{\ref at head}
-%    and the text areas, running heads,
+%    And the text areas, running heads,
 %    \begin{macrocode}
 \newcount\ref at head
 %    \end{macrocode}
@@ -566,7 +566,7 @@
 % \end{macro}
 %
 %    The following are a number of scratch registers, used in the
-%    positioning of the various pices of the picture.
+%    positioning of the various pieces of the picture.
 %    \begin{macrocode}
 \newcount\Interval
 \newcount\ExtraYPos
@@ -639,7 +639,7 @@
     \ifodd\count\z@
 %    \end{macrocode}
 %
-%    Here we deal with an odd page in the twosided case.
+%    Here we deal with an odd page in the two-sided case.
 %
 %    \begin{macrocode}
       \typeout{Two-sided document style, odd page.}
@@ -667,7 +667,7 @@
     \else
 %    \end{macrocode}
 %
-%    Here we deal with an even page in the twosided case.
+%    Here we deal with an even page in the two-sided case.
 %
 %    \begin{macrocode}
   \typeout{Two-sided document style, even page.}
@@ -696,7 +696,7 @@
   \else
 %    \end{macrocode}
 %
-%    Finally we the case for single sided printing.
+%    Finally we deal with the case for single-sided printing.
 %
 % \changes{v1.1}{1994/02/23}{Added check for reversemargin}
 %    \begin{macrocode}
@@ -718,7 +718,7 @@
 %
 %
 %  Now we begin the picture environment; dividing all the lengths by
-%  two is done by setting |\unitlength| to \texttt{0.5pt}
+%  two is done by setting |\unitlength| to \texttt{0.5pt}.
 %    \begin{macrocode}
   \setlength{\unitlength}{.5pt}
   \begin{picture}(\cnt at paperwidth,\cnt at paperheight)
@@ -790,7 +790,7 @@
     \InsideHArrow\cnt at textwidth
 %    \end{macrocode}
 %
-%    Now the |\textheight|
+%    Now the |\textheight|.
 %    \begin{macrocode}
     \SetToHalf\PositionY\cnt at textheight
     \advance\PositionY by \ref at body
@@ -812,7 +812,7 @@
 %    \end{macrocode}
 %
 %
-%    The |\hoffset|,
+%    The |\hoffset|.
 % \changes{v1.2}{1998/04/13}{\cs{PositionY} for label 1 is
 %    fixed at 50}
 %    \begin{macrocode}
@@ -840,12 +840,12 @@
     \Identify{3}
 %    \end{macrocode}
 %
-%    the |\marginparwidth|,
+%    The |\marginparwidth|.
 %    \begin{macrocode}
     \SetToQuart\PositionY\cnt at textheight
     \advance\PositionY by \ref at body
 %    \end{macrocode}
-%    This arrow has to be bit below the one for the |\oddsidemargin|
+%    This arrow has to be a bit below the one for the |\oddsidemargin|
 %    or\\ |\evensidemargin|.
 %    \begin{macrocode}
     \advance\PositionY by 30
@@ -856,7 +856,7 @@
 %    \end{macrocode}
 %
 %
-%    The |\marginparsep|, this depends on single or double sided
+%    The |\marginparsep|, this depends on single- or double-sided
 %    printing.
 %    \begin{macrocode}
     \advance\PositionY by 30
@@ -863,7 +863,7 @@
     \if at twoside
 %    \end{macrocode}
 %
-%    Twosided mode, reversemargin;
+%    Two-sided mode, reversemargin:
 % \changes{v1.1b}{1994/03/23}{\cs{OutSideHArrow} should be
 %    \cs{OutsideHArrow}}
 % \changes{v1.2}{1998/04/13}{Added check for reversemargin}
@@ -878,7 +878,7 @@
         \fi
       \else
 %    \end{macrocode}
-%    Not reversemargin;
+%    Not reversemargin:
 %    \begin{macrocode}
         \ifodd\count\z@
           \OutsideHArrow\ref at marginpar\cnt at marginparsep{20}
@@ -891,7 +891,7 @@
     \else
 %    \end{macrocode}
 %
-%    Single sided mode.
+%    Single-sided mode.
 % \changes{v1.2}{1998/04/13}{Added check for reversemargin}
 %    \begin{macrocode}
       \if at reversemargin
@@ -911,7 +911,7 @@
     \Identify{9}
 %    \end{macrocode}
 %
-%    Identify the |\footskip|. The arrow will be located on $1/8$th of
+%    Identify the |\footskip|. The arrow will be located on $1/8$ of
 %    the |\textwidth|.
 % \changes{v1.2}{1998/04/13}{The \cs{PositionY} of the label 11 is
 %    changed to the upper side of the arrows}
@@ -942,7 +942,7 @@
 %
 %    Identify |\topmargin|, |\headheight| and |\headsep|.
 %
-%    The arrows will be located on $1/8$th of the |\textwidth|, with
+%    The arrows will be located on $1/8$ of the |\textwidth|, with
 %    intervals of the same size, stored in |\Interval|.
 %    \begin{macrocode}
     \Interval = \cnt at textwidth
@@ -983,7 +983,7 @@
     \Identify{5}
     \advance\PositionX by \Interval
 %    \end{macrocode}
-%    and finally the |\headsep|
+%    and finally the |\headsep|.
 % \changes{v1.2}{1998/04/13}{The \cs{PositionY} of the label 6 is
 %    fixed}
 %    \begin{macrocode}
@@ -1006,7 +1006,7 @@
 %
 %    Below the picture we put a table to show the actual values of the
 %    parameters.  Note that fractional points are truncated, i.e.,
-%    \texttt{72.27pt} is displayed as \texttt{72pt}
+%    \texttt{72.27pt} is displayed as \texttt{72pt}.
 %
 %    The table is typeset inside a box with a depth of 0 to always
 %    keep it on the same page as the picture.

Modified: trunk/Master/texmf-dist/source/latex-dev/tools/longtable.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/tools/longtable.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/tools/longtable.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -37,7 +37,7 @@
 %<driver> \ProvidesFile{longtable.drv}
 % \fi
 %         \ProvidesFile{longtable.dtx}
-          [2021-09-01 v4.17 Multi-page Table package (DPC)]
+          [2023-11-01 v4.19 Multi-page Table package (DPC)]
 %
 % \iffalse
 %<*driver>
@@ -54,7 +54,7 @@
 %        has version number \fileversion, last
 %        revised \filedate.}}
 % \author{David Carlisle\thanks{The new algorithm for aligning `chunks'
-% of a table used in version 4 of this package was devised coded
+% of a table used in version 4 of this package was devised, coded
 % and documented by David Kastrup.}}
 % \date{\filedate}
 %
@@ -317,7 +317,7 @@
 % ".aux" file, so that it can line up the different chunks.
 % Prior to version~4 of this package, this information was not used
 % unless a "\setlongtables" command was issued,  however, now the
-% information is always used, using a new algorithm\footnote{Due to
+% information is always used, via a new algorithm,\footnote{Due to
 % David Kastrup.} and so "\setlongtables" is no longer needed. It is
 % defined (but does nothing) for the benefit of old documents that
 % use it.
@@ -396,7 +396,7 @@
 % are modified in a compatible manner.
 %
 % You may use the "\label" command so that you can cross reference
-% \env{longtable}s with "\ref". Note however, that the "\label" command
+% \env{longtable}s with "\ref". Note, however, that the "\label" command
 % should not be used in a heading that may appear more than once. Place
 % it either in the \env{firsthead}, or in the body of the table. It
 % should not be the \emph{first} command in any entry.
@@ -493,7 +493,7 @@
 % always converged in three passes as described above, but in examples
 % such as the ones in Tables \ref{pass1}--\ref{pass4}, the final
 % widths were not optimal as the width of column~2, which is
-% determined by a "\multicolumn" entry was not known when the final
+% determined by a "\multicolumn" entry, was not known when the final
 % width for column~3 was fixed, due to the fact that \emph{both}
 % "\multicolumn" commands were switched from `draft' mode to `normal'
 % mode at the same time.
@@ -511,7 +511,7 @@
 % many overlapping "\multicolumn" entries, all being wider than the
 % natural widths of the columns they span, and all occurring in
 % different chunks. In the typical case the algorithm will converge
-% after three or four passes, and, the benefits of not needing to edit
+% after three or four passes, and the benefits of not needing to edit
 % the document before the final run to add "\setlongtables", and the
 % better choice of final column widths in the case of multiple
 % "\multicolumn" entries  will hopefully more than pay for the extra
@@ -576,7 +576,7 @@
 % \item The mechanism for adding the head and foot of the table has been
 % completely rewritten. With this new mechanism, \env{longtable} does
 % not need to issue a "\clearpage" at the start of the table, and so the
-% table may start half way down a page. Also the "\endlastfoot" command
+% table may start half way down a page. Also the "\endlastfoot" command,
 % which could not safely be implemented under the old scheme, has been
 % added.
 % \item \env{longtable} now issues an error if started in the scope of
@@ -673,7 +673,7 @@
 % "\endhead"&
 %     Specifies rows to appear at the top of every page.\\
 % "\endfirsthead"&
-%     Specifies rows to appear at the top the first page.\\
+%     Specifies rows to appear at the top of the first page.\\
 % "\endfoot"&
 %     Specifies rows to appear at the bottom of every page.\\
 % "\endlastfoot"&
@@ -885,7 +885,7 @@
 % \begin{macro}{\LTchunksize}
 % \changes{v4.14}{2020/02/07}
 %      {Increase default chunksize from 20 to 200}
-% Chunk size (The number of rows taken per "\halign"). Default 200.
+% Chunk size (the number of rows taken per "\halign"). Default 200.
 %    \begin{macrocode}
 \newcount\LTchunksize \LTchunksize=200
 %    \end{macrocode}
@@ -1189,12 +1189,12 @@
 % \changes{v4.05}{1996/11/12}
 %      {\cs{LT at setprevdepth} added}
 % The following line was added in v4.05.
-% In order to get the "\penalties" to work at chunk boundaries
-% Need to take more care about where and when "\lineskip" glue
+% In order to get the "\penalties" to work at chunk boundaries,
+% we need to take more care about where and when "\lineskip" glue
 % is added. The following does nothing at top of table, and in
 % header chunks, but in normal body chunks it sets "\prevdepth"
 % (to 0pt, but any value would do) so that "\lineskip" glue will
-% be added. the important thing to note is that the glue will be
+% be added. The important thing to note is that the glue will be
 % added \emph{after} any vertical material coming from "\noalign".
 %    \begin{macrocode}
        \LT at setprevdepth
@@ -1257,7 +1257,7 @@
 %    \end{macrocode}
 % \changes{v4.14}{2020/02/07}
 %      {Guard against shrink glue on current page tools/3396 and github 183}
-% This next block was suggested by Lars Hellström in pr tools/3396
+% This next block was suggested by Lars Hellström in pr tools/3396.
 % He documents it as:
 %
 % The original problem occurs because TeX has not yet found an awfully bad
@@ -1325,7 +1325,7 @@
 % \changes{v4.14}{2020/02/07}
 %      {Guard against shrink glue on current page see github 183}
 % The LT output routine does not handle shrink on the page, which can cause
-% The first page to be over-long, so forget it is there.
+% the first page to be over-long, so forget it is there.
 %    \begin{macrocode}
     \ifdim\pageshrink>\z@\pageshrink\z@\fi
   \fi
@@ -1551,7 +1551,7 @@
 % Increment the counter, and do  \env{tabular}'s "\\" or finish the
 % chunk.\\ The "\expandafter" trick was added in Version~3.
 % Set the "\prevdepth" at the start of a new chunk. (Done here
-% so not set in header chunks).
+% so not set in header chunks.)
 %    \begin{macrocode}
   \global\advance\LT at rows\@ne
   \ifnum\LT at rows=\LTchunksize
@@ -2206,12 +2206,16 @@
   \bgroup
 %    \end{macrocode}
 % \changes{v4.12}{2019/02/06}{Color group to match array package}
+% \changes{v4.18}{2023/08/25}{Use \cs{everypar} to match array package, github 1128}% 
 %    \begin{macrocode}
     \color at begingroup
     \let\@footnotetext\LT at p@ftntext
     \setlength\hsize{#1}%
     \@arrayparboxrestore
-    \vrule \@height \ht\@arstrutbox \@width \z@}
+    \everypar{%
+      \vrule \@height \ht\@arstrutbox \@width \z@
+      \everypar{}}%    
+    }
 %    \end{macrocode}
 % \end{macro}
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/tools/shellesc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/tools/shellesc.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/tools/shellesc.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -20,7 +20,7 @@
 %<driver> \ProvidesFile{shellesc.drv}
 % \fi
 %         \ProvidesFile{shellesc.dtx}
-       [2023/04/15 v1.0d unified shell escape interface for LaTeX]
+       [2023/07/08 v1.0d unified shell escape interface for LaTeX]
 %
 % \iffalse
 %<*driver>
@@ -50,7 +50,7 @@
 % \section{Introduction}
 %
 %
-% For many years web2c based \TeX\ implementations have used the syntax
+% For many years web2c-based \TeX\ implementations have used the syntax
 % of the \verb|\write| command to access  system commands by using a
 % special stream 18 (streams above 15 can not be allocated to files in
 % classical \TeX\ so stream 18 would otherwise just print to the
@@ -59,9 +59,9 @@
 % This is a useful extension that did not break the strict rules on
 % extensions in classical \TeX.  This package provides a simple
 % macro level interface hiding the \verb|write18| implementation
-% so a command to remove a file on a unix-like system could be
+% so a command to remove a file on a Unix-like system could be
 % specified  using \verb|\ShellEscape{rm file.txt}| (or \verb|del| in
-% windows). Note that by default system access is not allowed and
+% Windows). Note that by default system access is not allowed and
 % \LaTeX\ will typically need to be called with the \verb|--shell-escape|
 % command line option.
 %
@@ -77,7 +77,7 @@
 % \verb|\ShellEscape| in fact corresponds to \verb|\immediate\write18|
 % (or \verb|\directlua|). Very rarely you may need to delay a system
 % command until the current page is output (when page numbers are
-% known) for this classically you could use \verb|\write18| (or
+% known), for this you could classically use \verb|\write18| (or
 % (\verb|\latelua|). This package provides \verb|\DelayedShellEscape|
 % as a common syntax for this use.
 %
@@ -92,7 +92,7 @@
 % \verb|\immediate| will work as normal when writing to file streams
 % or the terminal but the special case of stream 18 which is defined to
 % use \verb|os.execute| always uses \verb|\directlua| (so corresponds
-% to \verb|\immediate\write18|. In the rare situations that you need
+% to \verb|\immediate\write18|). In the rare situations that you need
 % non-immediate \verb|\write18| in a document being ported to current
 % Lua\TeX, you will need to change to use the
 % \verb|\DelayedShellEscape| command.
@@ -118,7 +118,7 @@
 %
 % \begin{macro}{\ShellEscapeStatus}
 % \changes{v1.0a}{2019/10/13}{Command Introduced}
-% Integer value with meanings 0 (shell escape disabled), 1 (shell escape allowed), 2 (Restricted shell escape).
+% Integer value with meanings 0 (shell escape disabled), 1 (shell escape allowed), 2 (restricted shell escape).
 %
 %    \begin{macrocode}
 \chardef\ShellEscapeStatus
@@ -215,8 +215,8 @@
 %
 % \subsection{The write18 package interface}
 %
-% In web2c based engines other than Lua\TeX, |\write18| may be used
-% directly.  The same was true in older LuaTeX, but from version 0.85
+% In web2c-based engines other than Lua\TeX, |\write18| may be used
+% directly.  The same was true in older Lua\TeX, but from version 0.85
 % onwards that is not available.
 %
 % The above |shellesc| package interface is recommended for new code,

Modified: trunk/Master/texmf-dist/source/latex-dev/tools/showkeys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/tools/showkeys.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/tools/showkeys.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -39,7 +39,7 @@
 %<driver> \ProvidesFile{showkeys.drv}
 % \fi
 %         \ProvidesFile{showkeys.dtx}
-          [2023/05/11 v3.19 Show cite and label keys (DPC, MH)]
+          [2023/07/08 v3.19 Show cite and label keys (DPC, MH)]
 %
 % \iffalse
 %<*driver>
@@ -112,13 +112,13 @@
 % print its key argument (usually in the margin).
 %
 % If you find the printed keys distracting, but don't want to use the
-% above options to stop them altogether you may use:
+% above options to stop them altogether, you may use:
 % \begin{description}
 % \item[color] Print the keys in a distinguishing colour. The default
 %  value is a light grey.
 % \end{description}
 % The colours may be changed by redefining the following two colours
-% after the package is loaded.
+% after the package is loaded:
 % |refkey| (also used for |\cite|) and
 % |labelkey| (also used for |\bibitem|).
 % The defaults are:
@@ -131,7 +131,7 @@
 %
 % The package accepts two further options.
 % \begin{description}
-% \item[final] to suporess the action of this package, for `final'
+% \item[final] to suppress the action of this package, for `final'
 % versions.
 % \item[draft] the normal behaviour of this package.
 % \end{description}
@@ -437,7 +437,7 @@
 % change |\prevdepth| as that would affect vertical spacing in the
 % document. (The box itself should not cause any difference in break
 % points as there is a node there anyway coming from the |\write| to
-% the aux file.
+% the aux file.)
 %    \begin{macrocode}
       \dimen@\prevdepth
       \nointerlineskip
@@ -451,8 +451,8 @@
 % In inner vertical mode, attach the label to the right of the
 % immediately preceding box, if it is a box before the current point.
 % Otherwise just put it in a box of zero dimensions, with no interline
-% skip. (This may slightly move the surrounding text (but perhaps not
-% now that |\prevdepth| is restored.)
+% skip. This may slightly move the surrounding text (but perhaps not
+% now that |\prevdepth| is restored).
 % \changes{v3.00}{1994/09/07}
 %      {Back up over a previous skip because of the new
 %       \cs{belowcaptionskip}}
@@ -502,7 +502,7 @@
     \fi
   \else
 %    \end{macrocode}
-% If we are in an numbered equation-style environment, do nothing as the
+% If we are in a numbered equation-style environment, do nothing as the
 % code to print the number will also print the label, otherwise just
 % stick the label at the current point, in a box of zero dimensions.
 % \changes{v3.02}{1995/03/17}
@@ -650,7 +650,7 @@
 % The following environments print an equation number, so |\label|
 % should not print its argument at the point where it appears.
 % Note this will fail to show the label if you are in an |eqnarray|
-% environment, and use |\label| together with |\nonumber| This might
+% environment, and use |\label| together with |\nonumber|. This might
 % just about make sense if you are going to use |\pageref|, but that is
 % too bad\ldots
 %    \begin{macrocode}
@@ -665,7 +665,7 @@
 % \changes{v3.09}{1996/08/30}
 %      {Fix eqnarray AMS incompatibility. tools/2252}
 % When the AMS packages are loaded |showkeys| assumes environments
-% work `The AMS way' However |eqnarray| (unlike |equation|) is not
+% work `The AMS way'. However, |eqnarray| (unlike |equation|) is not
 % redefined, so here we need to remove some of the AMS hacks.
 %    \begin{macrocode}
 \toks@\expandafter{\eqnarray}

Modified: trunk/Master/texmf-dist/source/latex-dev/tools/tabularx.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/tools/tabularx.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/tools/tabularx.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -31,7 +31,7 @@
 %<driver> \ProvidesFile{tabularx.drv}
 % \fi
 %         \ProvidesFile{tabularx.dtx}
-          [2020/01/15 v2.11c `tabularx' package (DPC)]
+          [2023/07/08 v2.11c `tabularx' package (DPC)]
 % \iffalse
 %<*driver>
 \documentclass{ltxdoc}
@@ -164,7 +164,7 @@
 % \item The body of the {\ttfamily tabularx} environment is in fact the
 % argument to a command, and so certain constructions which are not
 % allowed in command arguments (like "\verb") may not be used.\footnote
-% {Since Version 1.02, {\ttfamily\bslash verb and \ttfamily\bslash
+% {Since Version 1.02, {\ttfamily\bslash verb} and {\ttfamily\bslash
 % verb*} may be used, but they may treat spaces incorrectly, and the
 % argument can not contain an unmatched {\ttfamily\char`\{} or
 % {\ttfamily\char`\}}, or a  {\ttfamily\char`\%} character.}
@@ -207,7 +207,7 @@
 %
 % \DescribeMacro{\newcolumntype}
 % These preamble specifications may of course be saved using the
-% command, "\newcolumntype", defined in {\ttfamily array.sty}. Thus we
+% command "\newcolumntype" defined in {\ttfamily array.sty}. Thus we
 % may say\\
 % "\newcolumntype{Y}{>{\small\raggedright\arraybackslash}X}"\\
 % and then use {\ttfamily Y} in the {\ttfamily tabularx} preamble
@@ -314,7 +314,7 @@
 % \footnote{This adds an extra level of grouping,
 % which is not really needed. Instead, I could use \box0\ here, and
 % \box2\ below, however the code here would then have to be moved after
-% the first line, because of the footnote to page 386 of the \TeX{}Book,
+% the first line, because of the footnote to page 386 of the \TeX{}book,
 % and I do not think I should be writing code that is so obscure as to
 % be documented in a footnote in an appendix called ``Dirty Tricks''!}
 %
@@ -331,9 +331,9 @@
 %\newenvironment{foo}{\tabularx{XX}}{\endtabularx}
 %\end{verbatim}
 % The scanner now looks for the end of the current environment ("foo" in
-% this example.) There are some restrictions on this usage, the
-% principal one being that "\endtabularx" must not be inside any "{ }" pairs
-% ao that the code before "\endtabularx"  may be extracted and added to the table body
+% this example). There are some restrictions on this usage, the
+% principal one being that "\endtabularx" must not be inside any "{ }" pairs,
+% so that the code before "\endtabularx"  may be extracted and added to the table body
 % (prior to version 2.09  "\endtabularx" had to be
 % the \emph{first} token of the `end code' of the environment).
 %    \begin{macrocode}
@@ -396,7 +396,7 @@
 % \changes{v2.09}{2014/04/22}{macro added}
 % \changes{v2.10}{2014/05/13}{macro modified to test for missing \cs{endtabularx}}
 % \changes{v2.11}{2016/01/03}{Fix to previous change to guard against empty arg 2. (Ulrike Fischer)}
-% split up the end code, and extract the part that lives in the table body.
+% Split up the end code, and extract the part that lives in the table body.
 %    \begin{macrocode}
 \long\def\TX at find@endtabularxa
        #1\endtabularx#2\endtabularx#3\TX at find@endtabularxa{%
@@ -408,7 +408,7 @@
 % \begin{macro}{\TX at find@endtabularxb}
 % \changes{v2.09}{2014/04/22}{macro added}
 % \changes{v2.10}{2014/05/13}{macro modified to test for missing \cs{endtabularx}}
-% split up the end code, and extract the part that lives outside the table body.
+% Split up the end code, and extract the part that lives outside the table body.
 %    \begin{macrocode}
 \long\def\TX at find@endtabularxb
        #1\endtabularx#2\endtabularx#3\TX at find@endtabularxb{%
@@ -502,7 +502,7 @@
   \TX at col@width\TX at target
   \global\TX at cols\@ne
 %    \end{macrocode}
-% Typeout some headings (unless this is disabled).
+% Type out some headings (unless this is disabled).
 %    \begin{macrocode}
   \TX at typeout@
     {\@spaces Table Width\@spaces Column Width\@spaces X Columns}%
@@ -514,7 +514,7 @@
           \global\advance\TX at cols\@ne\NC at find p{\TX at col@width}}}%
 %    \end{macrocode}
 % Repeatedly decrease column width until table is the correct width,
-% or stops shrinking, or the columns become two narrow.
+% or stops shrinking, or the columns become too narrow.
 % If there are no multicolumn entries, this will only take one attempt.
 %    \begin{macrocode}
   \loop
@@ -601,7 +601,7 @@
     \ifdim\dimen@<\TX at delta
 %    \end{macrocode}
 % If this amount is less than "\TX at delta", stop. ("\TX at delta"
-% should be non-zero otherwise we may miss the target due to rounding
+% should be non-zero, otherwise we may miss the target due to rounding
 % error.)
 %    \begin{macrocode}
       \TX at typeout@{Reached target.}%
@@ -621,7 +621,7 @@
       \ifdim \dimen@ >\z@
 %    \end{macrocode}
 % If the new width would be too narrow, abort the loop. At the moment
-% too narrow, means less than 0\,pt!
+% too narrow means less than 0\,pt!
 %
 % Prior to v2.03, if the loop was aborted here, the X columns were left
 % with the width of the previous run, but this may make the table far
@@ -715,7 +715,7 @@
    \expandafter\let\expandafter\endtabularx\csname endtabular*\endcsname
 %    \end{macrocode}
 % Added at v1.05: disable "\write"s during a trial run. This trick is
-% from the \TeX{}Book.\footnote{Actually the \TeX{}Book trick does
+% from the \TeX{}book.\footnote{Actually the \TeX{}book trick does
 % not work correctly, so changed for v2.05.}
 % \changes{v2.05}{1997/09/18}
 %    {New \cs{write} trick. tools/2607}
@@ -789,7 +789,7 @@
 % \end{macro}
 %
 % \begin{macro}{\TX at typeout}
-% The default is to be to be quiet
+% The default is to be quiet.
 %    \begin{macrocode}
 \let\TX at typeout\@gobble
 \let\TX at typeout@\@gobble
@@ -830,7 +830,7 @@
 % tabularx}, but that did not stop people using it! This usually put
 % \LaTeX\ into an irrecoverable error position, with error messages that
 % did not mention the cause of the error. The `poor man's "\verb"' (and
-% "\verb*") defined here is based on page 382 of the \TeX{}Book. As
+% "\verb*") defined here is based on page 382 of the \TeX{}book. As
 % explained there, doing verbatim this way means that spaces are not
 % treated correctly, and so "\verb*" may well be useless, however I
 % consider this section of code to be error-recovery, rather than a real
@@ -882,10 +882,10 @@
 % does not consist of a single "{ }" group. \TeX\ would strip the outer
 % braces from such a group. The `"!"' will be removed later.
 %
-% Originally I followed Knuth, and had "\def\@tempa{##1}", however this
+% Originally I followed Knuth, and had "\def\@tempa{##1}", however, this
 % did not allow "#" to appear in the argument. So in v1.04, I changed
-% this to use a token register, and "\edef". This allows "#" appear,
-% but makes each one appear twice!, so later we loop through, replacing
+% this to use a token register, and "\edef". This allows "#" to appear
+% but makes each one appear twice, so later we loop through, replacing
 % "##" by "#".
 %    \begin{macrocode}
 \def\TX at vb#1{\def\@tempa##1#1{\toks@{##1}\edef\@tempa{\the\toks@}%

Modified: trunk/Master/texmf-dist/source/latex-dev/tools/theorem.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/tools/theorem.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/tools/theorem.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -24,7 +24,7 @@
 %%
 %
 %
-\def\FMithmInfo{2014/10/28 v2.2c Theorem extension package (FMi)}
+\def\FMithmInfo{2023/07/05 v2.2c Theorem extension package (FMi)}
 %
 % \ProvidesFile{theorem.dtx}[\FMithmInfo]
 %\iffalse   % this is a METACOMMENT !
@@ -100,7 +100,7 @@
 %
 % \begin{abstract}
 %    The macros described in this paper yield an extension of the
-%    \LaTeX{} theorem mechanism. It is designed is to satisfy the
+%    \LaTeX{} theorem mechanism. It is designed to satisfy the
 %    different requirements of various journals. Thus, the
 %    layout of the ``theorems'' can be manipulated by determining a
 %    ``style''. This article describes not only the use, but
@@ -226,7 +226,7 @@
 % |\theorempreskipamount| and |\theorempostskipamount| define,
 % respectively, the spacing before and after such an environment.
 % These parameters apply for all theorem sets and can be manipulated
-% with the ordinary length macros.  They are rubber lengths,
+% with the ordinary length macros.  They are rubber lengths
 % (`\textsf{skips}'), and therefore can contain \texttt{plus} and
 % \texttt{minus} parts.
 %
@@ -385,7 +385,7 @@
 % \section{Definition of the Macros}
 %
 % If the file has been loaded before, we abort immediately. If not the
-% package announces itself (this is actually done at the very top if
+% package announces itself (this is actually done at the very top of
 % the file---the way it is done isn't good style so don't copy it).
 % \changes{v2.0e}{89/07/19}{Spaces removed from `typeout'.}
 % \changes{v2.2b}{95/11/19}{Announce moved to top of file}
@@ -546,8 +546,8 @@
 %    ``non-Big-versions'', we have to avoid offering too many unused
 %    definitions.  Therefore we define these styles in separate files
 %    that can be loaded on demand.  Thus the commands themselves only
-%    load these files. We use |\@input@| a \LaTeXe{} internal command
-%    that ensures that the file will be listed with |\listfiles|
+%    load these files. We use |\@input@|, a \LaTeXe{} internal command
+%    that ensures that the file will be listed with |\listfiles|.
 % \changes{v2.2a}{94/02/02}{Use `@input@ to load theorem layout files}
 %    \begin{macrocode}
 \gdef\th at plain{\@input@{thp.sty}}

Modified: trunk/Master/texmf-dist/source/latex-dev/tools/verbatim.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/tools/verbatim.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/tools/verbatim.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -48,7 +48,7 @@
 \pagestyle{myheadings}
 
 \title{A New Implementation of \LaTeX{}'s \\ \texttt{verbatim}
-       and \texttt{verbatim*} Environments.}
+       and \texttt{verbatim*} Environments}
 \author{Rainer Sch\"opf\\
         \and
         Bernd Raichle\\
@@ -55,7 +55,7 @@
         \and
         Chris Rowley}
 
-\date{2022/07/02}
+\date{2023/07/08}
 \begin{document}
 \markboth{Verbatim style option}{Verbatim style option}
 \MaintainedByLaTeXTeam{tools}
@@ -434,7 +434,7 @@
 %
 % A further possibility is to define a variant of the |verbatim|
 % environment that boxes and centers the whole verbatim text.
-% Note that the boxed text should be less than a page otherwise you
+% Note that the boxed text should be less than a page, otherwise you
 % have to change this example.
 %
 %\begin{verbatim}
@@ -706,7 +706,7 @@
 %           necessary for correct vertical spacing if \texttt{verbatim}
 %           is nested inside \texttt{quote}.}
 %    The following extra vertical space is for compatibility with the
-%    \LaTeX kernel: otherwise, using the |verbatim| package changes
+%    \LaTeX{} kernel: otherwise, using the |verbatim| package changes
 %    the vertical spacing of a |verbatim| environment nested within a
 %    |quote| environment.
 %    \begin{macrocode}
@@ -790,11 +790,11 @@
   \def\@noitemerr{\@warning{No verbatim text}}%
 %    \end{macrocode}
 %    Now we call |\obeylines| to make the end of line character
-%    active,
+%    active.
 %    \begin{macrocode}
   \obeylines
 %    \end{macrocode}
-%    change the category code of all special characters,
+%    The category code of all special characters is changed,
 %    to $12$ (other).
 %    \changes{v1.5i}{1996/06/04}{Moved \cs{verbatim at font} after
 %           \cs{dospecials}.}
@@ -801,7 +801,7 @@
 %    \begin{macrocode}
   \let\do\@makeother \dospecials
 %    \end{macrocode}
-%    and switch to the font to be used.
+%    We switch to the font to be used.
 %    \begin{macrocode}
   \verbatim at font
 %    \end{macrocode}
@@ -1391,7 +1391,7 @@
 %    (This token list was inserted after the current macro
 %    by |\verbatim@@@|.)
 %    Since we are still in an |\edef| we protect it
-%    by means of|\noexpand|.
+%    by means of |\noexpand|.
 %    \begin{macrocode}
                     \noexpand\verbatim at rescan{\@currenvir}}%
 %    \end{macrocode}
@@ -1493,7 +1493,7 @@
   \else
 %    \end{macrocode}
 %    At this point we pass the name of the file to |\@addtofilelist|
-%    so that its appears in the output of a |\listfiles|
+%    so that it appears in the output of a |\listfiles|
 %    command.
 % \changes{v1.5j}{1996/09/25}{Add \cs{@addtofilelist} and
 %    \cs{ProvidesFile} so that the name of the file
@@ -1579,9 +1579,9 @@
 %    the contents of |\@filef at und|, we need to save it by expanding it
 %    first. The use of |\@swaptwoargs| makes it so that the
 %    \emph{expansion} of |\@filef at und| gets to be the second argument
-%    of |\verbatim at readfile|. 
+%    of |\verbatim at readfile|.
 % \changes{v1.5t}{2020-07-06}{Expand \cs{@filef at und} before the call
-%    of \cs{@verbatim} (gh/222)}m 
+%    of \cs{@verbatim} (gh/222)}
 %    \begin{macrocode}
 \def\verbatim at input#1#2{%
   \IfFileExists {#2}{%
@@ -1606,7 +1606,7 @@
 % \end{macro}
 %
 %
-% \subsection{Getting verbatim text into arguments.}
+% \subsection{Getting verbatim text into arguments}
 %
 % One way of achieving this is to define a macro (command) whose
 % expansion is the required verbatim text.  This command can then be

Modified: trunk/Master/texmf-dist/source/latex-dev/tools/xr.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/tools/xr.dtx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/source/latex-dev/tools/xr.dtx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -25,7 +25,7 @@
 %
 %<package>\NeedsTeXFormat{LaTeX2e}
 %<package>\ProvidesPackage{xr}
-%<package>         [2020-05-10 v5.06 eXternal References (DPC)]
+%<package>         [2023-07-04 v5.06 eXternal References (DPC)]
 %
 %<*driver>
 \documentclass{ltxdoc}
@@ -74,7 +74,7 @@
 % If any of the external documents, or the main document, use the same
 % |\label| then an error will occur as the label will be multiply
 % defined. To overcome this problem |\externaldocument| has an optional
-% argument. If you declare |\externaldocument[A-]{aaa}| Then all
+% argument. If you declare |\externaldocument[A-]{aaa}|, then all
 % references from |aaa| are prefixed by |A-|. So for instance, if a
 % section of |aaa| had |\label{intro}|, then this could be referenced
 % with |\ref{A-intro}|. The prefix need not be |A-|, it can be any

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/docstrip.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/docstrip.tex	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/docstrip.tex	2023-11-02 19:56:02 UTC (rev 68730)
@@ -46,7 +46,7 @@
 \def\filename{docstrip.dtx}
 \def\fileversion{v2.6b}
 \def\filedate{2022-09-03}
-\def\docdate {2022-09-03}
+\def\docdate {2023-10-10}
 %%
 %% The docstrip program for use with TeX.
 %% Copyright (C) 1989-1991 Frank Mittelbach

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/latex.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/latex.ltx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/latex.ltx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -707,8 +707,8 @@
 %%% From File: ltvers.dtx
 \def\fmtname{LaTeX2e}
 \edef\fmtversion
-   {2023-11-01}
-\def\patch at level{-1}
+   {2024-06-01}
+\def\patch at level{0}
 \edef\development at branch@name{develop \the\year-\the\month-\the\day}
 \iffalse
 \def\reserved at a#1/#2/#3\@nil{%
@@ -1179,6 +1179,7 @@
 \msg_new:nnn { kernel } { unknown-arg-expansion }
   { Unknown~arg~expansion~"#1" }
 \ExplSyntaxOff
+\def\IfExplAtLeastTF{\@ifl at t@r\ExplLoaderFileDate}
 %%% From File: ltdefns.dtx
 \def\two at digits#1{\ifnum#1<10 0\fi\number#1}
 \protected\long\def\typeout#1{\begingroup
@@ -4539,7 +4540,7 @@
 
 %%% From File: lthooks.dtx
 \def\lthooksversion{v1.1f}
-\def\lthooksdate{2023/08/11}
+\def\lthooksdate{2023/10/02}
 \ExplSyntaxOn
 \bool_new:N \g__hook_debug_bool
 \cs_new_eq:NN \__hook_debug:n \use_none:n
@@ -7611,7 +7612,12 @@
 \DeclareRobustCommand{\nobreakspace}{%
    \leavevmode\nobreak\ }
 \catcode `\~=13
-\def~{\nobreakspace{}}
+\protected\edef~{%
+  \noexpand\ifincsname\noexpand\expandafter\string~%
+  \noexpand\else
+    \noexpand\expandafter\noexpand\nobreakspace
+  \noexpand\fi
+}
 \expandafter\let\expandafter\@xobeysp\csname nobreakspace \endcsname
 \let\@xobeytab\@xobeysp
 \def\@{\spacefactor\@m{}}%
@@ -11944,8 +11950,8 @@
    {\IfBooleanTF{#1}{\@kernel at sRef}{\@kernel at Ref}}
 \def\@currentlabel{}
 %% File: ltproperties.dtx
-\def\ltpropertiesversion{1.0b}
-\def\ltpropertiesdate{2023-09-13}
+\def\ltpropertiesversion{1.0c}
+\def\ltpropertiesdate{2023-10-15}
 
 
 
@@ -11963,7 +11969,7 @@
   }
 \cs_new_protected:Npn \property_gset:nnnn #1#2#3#4
   {
-    \__property_gset:xnnn { \tl_to_str:n {#1} }
+    \__property_gset:ennn { \tl_to_str:n {#1} }
       {#2} {#3} {#4}
   }
 \cs_new_protected:Npn \__property_gset:nnnn #1#2#3#4
@@ -11981,20 +11987,22 @@
       }
       { \msg_error:nnnn { property } { unknown-setpoint } {#1} {#2} }
   }
-\cs_generate_variant:Nn \__property_gset:nnnn {xnnn}
+\cs_generate_variant:Nn \__property_gset:nnnn {ennn}
 \cs_new_protected:Npn \NewProperty #1#2#3#4
   {
-    \exp_args:Nx \property_new:nnnn {#1}{#2}{#3}{#4}
+    \protected at edef\reserved at a{#1}
+    \exp_args:No \property_new:nnnn {\reserved at a} {#2}{#3}{#4}
   }
 \cs_new_protected:Npn \SetProperty #1#2#3#4
   {
-    \exp_args:Nx \property_gset:nnnn {#1}{#2}{#3}{#4}
+    \protected at edef\reserved at a{#1}
+    \exp_args:No \property_gset:nnnn {\reserved at a} {#2}{#3}{#4}
   }
 \cs_new_protected:Npn \property_record:nN #1#2
   { \property_record:nV {#1} #2 }
 \cs_new_protected:Npn \property_record:nn #1#2
-  { \__property_record:xn { \tl_to_str:n {#1} } {#2} }
-\cs_generate_variant:Nn \property_record:nn { nV , xx }
+  { \__property_record:en { \tl_to_str:n {#1} } {#2} }
+\cs_generate_variant:Nn \property_record:nn { nV , ee, oo }
 \cs_new_protected:Npn \__property_record:nn #1#2
   {
     \legacy_if:nT { @filesw }
@@ -12007,7 +12015,7 @@
           }
       }
   }
-\cs_generate_variant:Nn \__property_record:nn { x }
+\cs_generate_variant:Nn \__property_record:nn { e }
 \cs_new:Npn \__property_record_value:n #1
   { \__property_record_value_aux:e { \tl_to_str:n {#1} } }
 \cs_new:Npn \__property_record_value_aux:n #1
@@ -12028,7 +12036,9 @@
 \NewDocumentCommand\RecordProperties { m m }
   {
     \@bsphack
-    \property_record:xx {#1}{#2}
+    \protected at edef\reserved at a{#1}
+    \protected at edef\reserved at b{#2}
+    \property_record:oo {\reserved at a}{\reserved at b}
     \@esphack
   }
 \flag_new:n { l__property_ref_flag }
@@ -12167,16 +12177,19 @@
        \@latex at warning { Reference~`#1'~on~page~\thepage\space undefined }%
     }
  }
-\cs_generate_variant:Nn \property_ref_undefined_warn:nn {xx}
-\cs_set_eq:NN \RefUndefinedWarn \property_ref_undefined_warn:xx
+\cs_generate_variant:Nn \property_ref_undefined_warn:nn {ee}
+\cs_set_eq:NN \RefUndefinedWarn \property_ref_undefined_warn:ee
 \property_new:nnnn { abspage } { shipout }
   { 0 } { \int_use:N \g_shipout_readonly_int }
 \property_new:nnnn  { page } { shipout } { 0 } { \thepage }
 \property_new:nnnn  { pagenum } { shipout } { 0 } { \the \value { page } }
-\property_new:nnnn  { currentlabel } { now } { ?? } { \@currentlabel }
+\property_new:nnnn  { label } { now } { ?? } { \@currentlabel }
 \property_new:nnnn  { title } { now }
   { \exp_not:n { \textbf { ?? } } } { \@currentlabelname }
 \property_new:nnnn  { target } { now } { } { \@currentHref }
+\newcommand\@currentHpage{}
+\property_new:nnnn  { pagetarget } { shipout } { } { \@currentHpage }
+
 \property_new:nnnn  { counter } { now }  { } { \@currentcounter }
 \property_new:nnnn  { xpos } { shipout } { 0} { \int_use:N \tex_lastxpos:D }
 \property_new:nnnn  { ypos } { shipout } { 0} { \int_use:N \tex_lastypos:D }
@@ -13028,7 +13041,13 @@
 \long\def\@imakebox[#1][#2]#3{%
   \@begin at tempboxa\hbox{#3}%
     \setlength\@tempdima{#1}%       support calc
-    \hb at xt@\@tempdima{\csname bm@#2\endcsname}%
+    \hb at xt@\@tempdima{%
+     \expandafter\ifx\csname bm@#2\endcsname\relax
+       \bm at c
+       \@latex at warning{Unexpected alignment #2}%
+     \else
+       \csname bm@#2\endcsname
+     \fi}%
   \@end at tempboxa}
 \def\@makepicbox(#1,#2){%
   \@ifnextchar[{\@imakepicbox(#1,#2)}{\@imakepicbox(#1,#2)[]}}
@@ -13119,7 +13138,14 @@
   \@begin at tempboxa\hbox{#3}%
     \setlength\@tempdima{#1}%
     \setbox\@tempboxa\hb at xt@\@tempdima
-         {\kern\fboxsep\csname bm@#2\endcsname\kern\fboxsep}%
+         {\kern\fboxsep
+          \expandafter\ifx\csname bm@#2\endcsname\relax
+            \bm at c
+            \@latex at warning{Unexpected alignment #2}%
+          \else
+            \csname bm@#2\endcsname
+          \fi
+          \kern\fboxsep}%
     \@frameb at x{\kern-\fboxrule}%
   \@end at tempboxa}
 \def\@frameb at x#1{%
@@ -13175,7 +13201,12 @@
     \else\@pboxswtrue $\vcenter
     \fi\fi\fi
     \@parboxto{\let\hss\vss\let\unhbox\unvbox
-       \csname bm@#3\endcsname}%
+     \expandafter\ifx\csname bm@#3\endcsname\relax
+       \bm at c
+       \@latex at warning{Unexpected alignment #3}%
+     \else
+       \csname bm@#3\endcsname
+     \fi}%
     \if at pboxsw \m at th$\fi
   \@end at tempboxa}
 \def\@arrayparboxrestore{%

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -292,7 +292,7 @@
 }
 %%% From File: ltvers.dtx
 \edef\latexreleaseversion
-   {2023-11-01}
+   {2024-06-01}
 \newif\if at includeinrelease
 \@includeinreleasefalse
 \def\IncludeInRelease#1{%
@@ -1413,6 +1413,15 @@
 \let\UseName\@undefined
 \let\ExpandArgs\@undefined
 \EndIncludeInRelease
+\IncludeInRelease{2023/11/01}%
+                 {\IfExplAtLeastTF}{Test for expl3 date}%
+\def\IfExplAtLeastTF{\@ifl at t@r\ExplLoaderFileDate}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\IfExplAtLeastTF}{Test for expl3 date}%
+
+\def\IfExplAtLeastTF{\@ifl at t@r\ExplLoaderFileDate}
+\EndIncludeInRelease
 %%% From File: ltdefns.dtx
 \IncludeInRelease{2020/10/01}%
                  {\typeout}{Allow "par" in \typeout}%
@@ -4801,7 +4810,7 @@
 
 %%% From File: lthooks.dtx
 \def\lthooksversion{v1.1f}
-\def\lthooksdate{2023/08/11}
+\def\lthooksdate{2023/10/02}
 \ExplSyntaxOn
 \NewModuleRelease{2020/10/01}{lthooks}
                  {The~hook~management~system}
@@ -9031,6 +9040,19 @@
   \fi}
 \EndIncludeInRelease
 \IncludeInRelease{2023/11/01}%
+                 {\tilde}{Protected tilde}%
+\protected\edef~{%
+  \noexpand\ifincsname\noexpand\expandafter\string~%
+  \noexpand\else
+    \noexpand\expandafter\noexpand\nobreakspace
+  \noexpand\fi
+}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\tilde}{Protected tilde}%
+\def~{\nobreakspace{}}
+\EndIncludeInRelease
+\IncludeInRelease{2023/11/01}%
                  {\@xobeytab}{Obeyed tabs}%
 \let\@xobeytab\@xobeysp
 \EndIncludeInRelease
@@ -13239,8 +13261,8 @@
 
 \EndIncludeInRelease
 %% File: ltproperties.dtx
-\def\ltpropertiesversion{1.0b}
-\def\ltpropertiesdate{2023-09-13}
+\def\ltpropertiesversion{1.0c}
+\def\ltpropertiesdate{2023-10-15}
 
 
 
@@ -13260,7 +13282,7 @@
   }
 \cs_new_protected:Npn \property_gset:nnnn #1#2#3#4
   {
-    \__property_gset:xnnn { \tl_to_str:n {#1} }
+    \__property_gset:ennn { \tl_to_str:n {#1} }
       {#2} {#3} {#4}
   }
 \cs_new_protected:Npn \__property_gset:nnnn #1#2#3#4
@@ -13278,20 +13300,22 @@
       }
       { \msg_error:nnnn { property } { unknown-setpoint } {#1} {#2} }
   }
-\cs_generate_variant:Nn \__property_gset:nnnn {xnnn}
+\cs_generate_variant:Nn \__property_gset:nnnn {ennn}
 \cs_new_protected:Npn \NewProperty #1#2#3#4
   {
-    \exp_args:Nx \property_new:nnnn {#1}{#2}{#3}{#4}
+    \protected at edef\reserved at a{#1}
+    \exp_args:No \property_new:nnnn {\reserved at a} {#2}{#3}{#4}
   }
 \cs_new_protected:Npn \SetProperty #1#2#3#4
   {
-    \exp_args:Nx \property_gset:nnnn {#1}{#2}{#3}{#4}
+    \protected at edef\reserved at a{#1}
+    \exp_args:No \property_gset:nnnn {\reserved at a} {#2}{#3}{#4}
   }
 \cs_new_protected:Npn \property_record:nN #1#2
   { \property_record:nV {#1} #2 }
 \cs_new_protected:Npn \property_record:nn #1#2
-  { \__property_record:xn { \tl_to_str:n {#1} } {#2} }
-\cs_generate_variant:Nn \property_record:nn { nV , xx }
+  { \__property_record:en { \tl_to_str:n {#1} } {#2} }
+\cs_generate_variant:Nn \property_record:nn { nV , ee, oo }
 \cs_new_protected:Npn \__property_record:nn #1#2
   {
     \legacy_if:nT { @filesw }
@@ -13304,7 +13328,7 @@
           }
       }
   }
-\cs_generate_variant:Nn \__property_record:nn { x }
+\cs_generate_variant:Nn \__property_record:nn { e }
 \cs_new:Npn \__property_record_value:n #1
   { \__property_record_value_aux:e { \tl_to_str:n {#1} } }
 \cs_new:Npn \__property_record_value_aux:n #1
@@ -13325,7 +13349,9 @@
 \NewDocumentCommand\RecordProperties { m m }
   {
     \@bsphack
-    \property_record:xx {#1}{#2}
+    \protected at edef\reserved at a{#1}
+    \protected at edef\reserved at b{#2}
+    \property_record:oo {\reserved at a}{\reserved at b}
     \@esphack
   }
 \flag_new:n { l__property_ref_flag }
@@ -13464,16 +13490,19 @@
        \@latex at warning { Reference~`#1'~on~page~\thepage\space undefined }%
     }
  }
-\cs_generate_variant:Nn \property_ref_undefined_warn:nn {xx}
-\cs_set_eq:NN \RefUndefinedWarn \property_ref_undefined_warn:xx
+\cs_generate_variant:Nn \property_ref_undefined_warn:nn {ee}
+\cs_set_eq:NN \RefUndefinedWarn \property_ref_undefined_warn:ee
 \property_new:nnnn { abspage } { shipout }
   { 0 } { \int_use:N \g_shipout_readonly_int }
 \property_new:nnnn  { page } { shipout } { 0 } { \thepage }
 \property_new:nnnn  { pagenum } { shipout } { 0 } { \the \value { page } }
-\property_new:nnnn  { currentlabel } { now } { ?? } { \@currentlabel }
+\property_new:nnnn  { label } { now } { ?? } { \@currentlabel }
 \property_new:nnnn  { title } { now }
   { \exp_not:n { \textbf { ?? } } } { \@currentlabelname }
 \property_new:nnnn  { target } { now } { } { \@currentHref }
+\newcommand\@currentHpage{}
+\property_new:nnnn  { pagetarget } { shipout } { } { \@currentHpage }
+
 \property_new:nnnn  { counter } { now }  { } { \@currentcounter }
 \property_new:nnnn  { xpos } { shipout } { 0} { \int_use:N \tex_lastxpos:D }
 \property_new:nnnn  { ypos } { shipout } { 0} { \int_use:N \tex_lastypos:D }
@@ -14315,6 +14344,28 @@
     {\@ifnextchar[\@makebox\mbox}}%
 \expandafter\let\csname makebox \endcsname\@undefined
 \EndIncludeInRelease
+\IncludeInRelease{2023/11/01}%
+                 {\@imakebox}{Unknown alignment warning}%
+\long\def\@imakebox[#1][#2]#3{%
+  \@begin at tempboxa\hbox{#3}%
+    \setlength\@tempdima{#1}%       support calc
+    \hb at xt@\@tempdima{%
+     \expandafter\ifx\csname bm@#2\endcsname\relax
+       \bm at c
+       \@latex at warning{Unexpected alignment #2}%
+     \else
+       \csname bm@#2\endcsname
+     \fi}%
+  \@end at tempboxa}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@imakebox}{Unknown alignment warning}%
+\long\def\@imakebox[#1][#2]#3{%
+  \@begin at tempboxa\hbox{#3}%
+    \setlength\@tempdima{#1}%       support calc
+    \hb at xt@\@tempdima{\csname bm@#2\endcsname}%
+  \@end at tempboxa}
+\EndIncludeInRelease
 \IncludeInRelease{2020/10/01}%
                  {\@imakepicbox}{default units}%
 \long\def\@imakepicbox(#1,#2)[#3]#4{%
@@ -14399,6 +14450,35 @@
     \@framepicbox{\@ifnextchar[\@framebox\fbox}}%
 \expandafter\let\csname framebox \endcsname\@undefined
 \EndIncludeInRelease
+\IncludeInRelease{2023/11/01}%
+                 {\@iframebox}{Unknown alignment warning}%
+\long\def\@iframebox[#1][#2]#3{%
+  \leavevmode
+  \@begin at tempboxa\hbox{#3}%
+    \setlength\@tempdima{#1}%
+    \setbox\@tempboxa\hb at xt@\@tempdima
+         {\kern\fboxsep
+          \expandafter\ifx\csname bm@#2\endcsname\relax
+            \bm at c
+            \@latex at warning{Unexpected alignment #2}%
+          \else
+            \csname bm@#2\endcsname
+          \fi
+          \kern\fboxsep}%
+    \@frameb at x{\kern-\fboxrule}%
+  \@end at tempboxa}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@iframebox}{Unknown alignment warning}%
+\long\def\@iframebox[#1][#2]#3{%
+  \leavevmode
+  \@begin at tempboxa\hbox{#3}%
+    \setlength\@tempdima{#1}%
+    \setbox\@tempboxa\hb at xt@\@tempdima
+         {\kern\fboxsep\csname bm@#2\endcsname\kern\fboxsep}%
+    \@frameb at x{\kern-\fboxrule}%
+  \@end at tempboxa}
+\EndIncludeInRelease
 \IncludeInRelease{2015/01/01}%
                  {\parbox}{Make \parbox robust}%
 \DeclareRobustCommand\parbox{%
@@ -14414,6 +14494,53 @@
     {\@iiiparbox c\relax[s]}}%
 \expandafter\let\csname parbox \endcsname\@undefined
 \EndIncludeInRelease
+\IncludeInRelease{2023/11/01}%
+                 {\@iiiparbox}{Unknown alignment warning}%
+\long\def\@iiiparbox#1#2[#3]#4#5{%
+  \leavevmode
+  \@pboxswfalse
+  \setlength\@tempdima{#4}%
+  \@begin at tempboxa\vbox{\hsize\@tempdima\@parboxrestore#5\@@par}%
+    \ifx\relax#2\else
+      \setlength\@tempdimb{#2}%
+      \edef\@parboxto{to\the\@tempdimb}%
+    \fi
+    \if#1b\vbox
+    \else\if #1t\vtop
+    \else\ifmmode\vcenter
+    \else\@pboxswtrue $\vcenter
+    \fi\fi\fi
+    \@parboxto{\let\hss\vss\let\unhbox\unvbox
+     \expandafter\ifx\csname bm@#3\endcsname\relax
+       \bm at c
+       \@latex at warning{Unexpected alignment #3}%
+     \else
+       \csname bm@#3\endcsname
+     \fi}%
+    \if at pboxsw \m at th$\fi
+  \@end at tempboxa}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@iiiparbox}{Unknown alignment warning}%
+\long\def\@iiiparbox#1#2[#3]#4#5{%
+  \leavevmode
+  \@pboxswfalse
+  \setlength\@tempdima{#4}%
+  \@begin at tempboxa\vbox{\hsize\@tempdima\@parboxrestore#5\@@par}%
+    \ifx\relax#2\else
+      \setlength\@tempdimb{#2}%
+      \edef\@parboxto{to\the\@tempdimb}%
+    \fi
+    \if#1b\vbox
+    \else\if #1t\vtop
+    \else\ifmmode\vcenter
+    \else\@pboxswtrue $\vcenter
+    \fi\fi\fi
+    \@parboxto{\let\hss\vss\let\unhbox\unvbox
+       \csname bm@#3\endcsname}%
+    \if at pboxsw \m at th$\fi
+  \@end at tempboxa}
+\EndIncludeInRelease
 \IncludeInRelease{2017-04-15}%
                  {\normallineskiplimit}
                  {reset \lineskiplimit}%

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/source2edoc.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/source2edoc.cls	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/source2edoc.cls	2023-11-02 19:56:02 UTC (rev 68730)
@@ -30,7 +30,7 @@
     \seq_if_empty:NF \g__codedoc_nested_names_seq
       {
 % This is a crude change: we grab the first name
-        \__codedoc_get_hyper_target:xN
+        \__codedoc_get_hyper_target:eN
           { \seq_item:Nn \g__codedoc_nested_names_seq { 1 } }
           \l__codedoc_tmpa_tl
 % ... and check if it has a reference

Modified: trunk/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -34,8 +34,8 @@
 %%
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
-\def\LaTeXFirstAidDate{2023/07/18}
-\def\LaTeXFirstAidVersion{v1.1a}
+\def\LaTeXFirstAidDate{2023/09/20}
+\def\LaTeXFirstAidVersion{v1.1b}
 \ProvidesFile{latex2e-first-aid-for-external-files.ltx}
              [\LaTeXFirstAidDate\space \LaTeXFirstAidVersion\space
                LaTeX kernel fixes to external files and packages]
@@ -167,6 +167,8 @@
 \ngermanTeX
 }%
 }
+\AddToHook{file/underscore.sty/after}[firstaid]{%
+  \FirstAidNeededT{underscore}{sty}{2006/09/13}{\RequirePackage{underscore-ltx}}}
 \endinput
 %%
 %% End of file `latex2e-first-aid-for-external-files.ltx'.

Added: trunk/Master/texmf-dist/tex/latex-dev/firstaid/underscore-ltx.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/firstaid/underscore-ltx.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex-dev/firstaid/underscore-ltx.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -0,0 +1,56 @@
+%%
+%% This is file `underscore-ltx.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% latex2e-first-aid-for-external-files.dtx  (with options: `underscore-ltx')
+%% 
+%% The source is maintained by the LaTeX Project team and bug
+%% reports for it can be opened at https://latex-project.org/bugs/
+%% (but please observe conditions on bug reports sent to that address!)
+%% 
+%% 
+%% Copyright (C) 2020-2023
+%% The LaTeX Project and any individual authors listed elsewhere
+%% in this file.
+%% 
+%% This file was generated from file(s) of the Standard LaTeX `First Aid Bundle'.
+%% ------------------------------------------------------------------------------
+%% 
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%    https://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%% 
+%% This file may only be distributed together with a copy of the LaTeX
+%% `First Aid Bundle'. You may however distribute the LaTeX `First Aid Bundle'
+%% without such generated files.
+%% 
+%% File: latex2e-first-aid-for-external-files.dtx (C) Copyright 2020-2023
+%%
+%% The LaTeX Project and any individual authors listed elsewhere
+%% in this file.
+\ProvidesPackage{underscore-ltx}[2023/09/20 LaTeX firstaid to make underscore protected ]
+\begingroup
+ \catcode`\_=\active
+ \protected\gdef _{%
+   \ifincsname %
+      \string_%
+   \else
+      \ifx\protect\@typeset at protect
+         \ifmmode \sb \else \BreakableUnderscore \fi
+      \else
+         \ifx\protect\@unexpandable at protect \noexpand_%
+         \else \protect_%
+      \fi\fi
+    \fi
+    }
+  \global\let\ActiveUnderscore=_
+\endgroup
+\endinput
+%%
+%% End of file `underscore-ltx.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex-dev/firstaid/underscore-ltx.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex-dev/latex-lab/graphic-latex-lab-testphase.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/latex-lab/graphic-latex-lab-testphase.ltx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/latex-lab/graphic-latex-lab-testphase.ltx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -33,8 +33,8 @@
 %% 
 %% 
 %% File: latex-lab-graphic.dtx (C) Copyright 2022-2023 LaTeX Project
-\def\ltlabgraphicdate{2023-07-20}
-\def\ltlabgraphicversion{0.80a}
+\def\ltlabgraphicdate{2023-10-13}
+\def\ltlabgraphicversion{0.80b}
 
 \ProvidesFile{graphic-latex-lab-testphase.ltx}
         [\ltlabgraphicdate\space v\ltlabgraphicversion\space latex-lab wrapper graphic]

Modified: trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -58,8 +58,6 @@
 \bool_set_true:N  \l__fnote_autodetect_bool
 \tl_new:N  \l__fnote_currentstruct_tl
 \tl_set:Nn \l__fnote_currentstruct_tl {1}
-\cs_generate_variant:Nn \ref_value:nn { Vn }
-\cs_generate_variant:Nn \prop_gput:Nnn {cxn}
 \cs_generate_variant:Nn \hook_gput_code:nnn{nne}
 \cs_generate_variant:Nn \tag_struct_use:n {e}
 \cs_new_protected:Npn \fnote_step_fnmark:nn #1#2 {
@@ -371,14 +369,14 @@
        \bool_set_false:N \l_fnote_link_bool
      }
  }
-\ref_attribute_gset:nnnn {fnote/struct}{1}{now}{\l__fnote_currentstruct_tl}
-\cs_new_protected:Npn \__fnote_label_hook:n #1 {}
-\AddToHookWithArguments{label}{ \__fnote_label_hook:n{#1}}
+\property_new:nnnn {fnote/struct}{now}{1}{\l__fnote_currentstruct_tl}
+\cs_new_protected:Npn \__fnote_label_hook:e #1 {}
+\AddToHookWithArguments{label}{ \__fnote_label_hook:e{#1}}
 \AddToHook{fntext/begin}
  {
-   \cs_set_protected:Npn \__fnote_label_hook:n #1
+   \cs_set_protected:Npn \__fnote_label_hook:e #1
     {
-      \ref_label:nn {#1} {fnote/struct}
+      \property_record:ee {__fnote/#1} {fnote/struct}
     }
  }
 \cs_new_protected:Npn \fnote_class_new:nn #1 #2 % #1 name, #2 options
@@ -389,7 +387,7 @@
 \fnote_class_new:nn {default}{}
 \cs_new_protected:Npn \fnote_mark_gput:nn #1 #2 % #1 the representation of the mark, #2 type
  {
-   \prop_gput:cxn { g__fnote_currentmarks_ #2 _prop }
+   \prop_gput:cen { g__fnote_currentmarks_ #2 _prop }
      { \tag_get:n{struct_num} }
      { #1 }
  }
@@ -416,7 +414,7 @@
      \bool_if:NTF \l__fnote_autodetect_bool
       {
         \fnote_mark_gput:oo {\@thefnmark}{\l_fnote_type_tl}
-        \tl_set:Nx \l__fnote_linktarget_tl {footnote*.\tag_get:n{struct_num}}
+        \tl_set:Ne \l__fnote_linktarget_tl {footnote*.\tag_get:n{struct_num}}
       }
       {
         \hook_gput_code:nne {tagpdf/finish/before} {tagpdf/footnote}
@@ -423,9 +421,9 @@
          {
            \exp_not:N\fnote_gput_refs:ee
             { \tag_get:n{struct_num} }
-            { \ref_value:Vn\l__fnote_currentlabel_tl {fnote/struct} }
+            { \property_ref:ee{ __fnote/\l__fnote_currentlabel_tl } {fnote/struct} }
          }
-        \tl_set:Nx \l__fnote_linktarget_tl {footnote*.\ref_value:Vn\l__fnote_currentlabel_tl {fnote/struct}}
+        \tl_set:Ne \l__fnote_linktarget_tl {footnote*.\property_ref:ee {__fnote/\l__fnote_currentlabel_tl} {fnote/struct}}
       }
      \tag_mc_begin:n{tag=Lbl}
      %
@@ -470,7 +468,7 @@
       {
         \tag_struct_begin:n { tag=footnote,parent=\l__fnote_dflt_struct_tl }
       }
-    \tl_set:Nx \l__fnote_currentstruct_tl { \tag_get:n{struct_num} }
+    \tl_set:Ne \l__fnote_currentstruct_tl { \tag_get:n{struct_num} }
     \tag_struct_begin:n { tag=footnotelabel }\tag_struct_end:
     \bool_if:NTF \l__fnote_autodetect_bool
       {

Modified: trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-kernel-changes.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-kernel-changes.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-kernel-changes.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -34,8 +34,8 @@
 %% 
 %% 
 %% File: latex-lab-toc-kernel-changes.dtx (C) Copyright 2022-2023 LaTeX Project
-\def\ltlabkerneldate{2023-07-20}
-\def\ltlabkernelversion{0.85a}
+\def\ltlabkerneldate{2023-10-16}
+\def\ltlabkernelversion{0.85b}
 \ProvidesPackage{latex-lab-kernel-changes}
         [\ltlabkerneldate\space v\ltlabkernelversion\space
          General kernel and class changes]
@@ -77,9 +77,21 @@
 \def\toclevel at subparagraph{5}
 \def\toclevel at figure{1}
 \def\toclevel at table{1}
+\ExplSyntaxOn
+\AddToHookWithArguments{cmd/MakeLinkTarget/after}
+  {
+    \tag_if_active:T
+      {
+        \tl_if_blank:VF \@currentHref
+          {
+            \prop_gput:Nee \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
+          }
+      }
+  }
+\ExplSyntaxOff
 %% File: latex-lab-sec.dtx (C) Copyright 2022-2023 LaTeX Project
-\def\ltlabsecdate{2023-07-20}
-\def\ltlabsecversion{0.84a}
+\def\ltlabsecdate{2023-10-16}
+\def\ltlabsecversion{0.84b}
 \ifdefined\directlua
  \ifnum\outputmode > 0
    \pdfvariable gentounicode =1

Modified: trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-math.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-math.ltx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-math.ltx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -83,7 +83,6 @@
                 \tagmcbegin{}  % restart P-chunk (whatsits in pdftex)
               }
           }
-
       }
   }
 
@@ -299,7 +298,6 @@
           { $ }
       }
       {
-        \bool_set_true:N \l__math_collected_bool
         \__math_grab_inline:w
       }
   } % \(

Modified: trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-graphic.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-graphic.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-graphic.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -33,18 +33,15 @@
 %% 
 %% 
 %% File: latex-lab-graphic.dtx (C) Copyright 2022-2023 LaTeX Project
-\def\ltlabgraphicdate{2023-07-20}
-\def\ltlabgraphicversion{0.80a}
+\def\ltlabgraphicdate{2023-10-13}
+\def\ltlabgraphicversion{0.80b}
 \ProvidesExplPackage {latex-lab-testphase-graphic} {\ltlabgraphicdate} {\ltlabgraphicversion}
   {Code related to the tagging of graphics}
 \RequirePackage{l3opacity}
-\ref_attribute_gset:nnnn{xpos}{0}{shipout}{\int_use:N\tex_lastxpos:D}
-\ref_attribute_gset:nnnn{ypos}{0}{shipout}{\int_use:N\tex_lastypos:D}
-
 \cs_new_protected:Npn\__tag_graphic_savepos:n #1
  {
   \tex_savepos:D
-  \ref_label:nn{#1}{xpos,ypos,abspage}
+  \property_record:nn{#1}{xpos,ypos,abspage}
   \tex_savepos:D
  }
 \cs_generate_variant:Nn \__tag_graphic_savepos:n {e}
@@ -107,8 +104,8 @@
            {
              \tl_if_empty:NT\l__tag_graphic_alt_tl
                {
-                 \msg_warning:nnx{tag}{alt-text-missing}{\l__tag_graphic_alt_dflt_tl}
-                 \tl_set:Nx\l__tag_graphic_alt_tl {\l__tag_graphic_alt_dflt_tl}
+                 \msg_warning:nne{tag}{alt-text-missing}{\l__tag_graphic_alt_dflt_tl}
+                 \tl_set:Ne\l__tag_graphic_alt_tl {\l__tag_graphic_alt_dflt_tl}
                }
              \tag_struct_begin:n
                {
@@ -198,7 +195,7 @@
  }
 \AddToHook{package/graphicx/after}[latex-lab]
   {
-    \define at key{Gin}{alt}       {\tl_set:Nx\l__tag_graphic_alt_tl{\text_purify:n{#1}}}
+    \define at key{Gin}{alt}       {\tl_set:Ne\l__tag_graphic_alt_tl{\text_purify:n{#1}}}
     \define at key{Gin}{artifact}[]
       {
         \bool_set_true:N \l__tag_graphic_artifact_bool
@@ -206,7 +203,7 @@
       }
     \define at key{Gin}{actualtext}
      {
-       \tl_set:Nx\l__tag_graphic_actual_tl{\text_purify:n{#1}}
+       \tl_set:Ne\l__tag_graphic_actual_tl{\text_purify:n{#1}}
        \bool_set_false:N \l__tag_graphic_BBox_bool
      }
     \define at key{Gin}{correct-BBox}
@@ -233,7 +230,7 @@
 \keys_define:nn{tag/picture}
    {
      ,alt .code:n =
-        {\tl_set:Nx\l__tag_graphic_alt_tl{\text_purify:n{#1}}}
+        {\tl_set:Ne\l__tag_graphic_alt_tl{\text_purify:n{#1}}}
      ,artifact .code:n =
         {
           \bool_set_true:N \l__tag_graphic_artifact_bool
@@ -241,7 +238,7 @@
         }
      ,actualtext .code:n =
         {
-          \tl_set:Nx\l__tag_graphic_actual_tl{\text_purify:n{#1}}
+          \tl_set:Ne\l__tag_graphic_actual_tl{\text_purify:n{#1}}
           \bool_set_false:N \l__tag_graphic_BBox_bool
         }
      ,correct-BBox .code:n =
@@ -286,7 +283,12 @@
  }
 \cs_new_protected:Npn \__tag_graphic_get_scale:
  {
-   \fp_set:Nn \l__tag_graphic_scale_fp { \Gin at scalex }
+   \fp_set:Nn \l__tag_graphic_scale_fp
+     {
+       \str_if_eq:eeTF {\Gin at scalex} { ! }
+        { \Gin at scaley }
+        { \Gin at scalex }
+     }
  }
 \cs_new_protected:Npn \__tag_graphic_applyangle:nnnn #1#2#3#4 %lx,ly,ux,uy
  {
@@ -327,7 +329,7 @@
           (\l__tag_graphic_uy_fp-\l__tag_graphic_ly_fp-\l__tag_graphic_trim_ly_fp)
             * (-\l__tag_graphic_sin_fp)
         }
-       \tl_gset:Nx\g__tag_graphic_lx_tl
+       \tl_gset:Ne\g__tag_graphic_lx_tl
          {
           \fp_eval:n
             {
@@ -342,7 +344,7 @@
                +\l__tag_graphic_trim_lx_fp
             }
          }
-       \tl_gset:Nx\g__tag_graphic_ux_tl
+       \tl_gset:Ne\g__tag_graphic_ux_tl
          {
            \fp_eval:n
              {
@@ -383,7 +385,7 @@
           (\l__tag_graphic_uy_fp-\l__tag_graphic_ly_fp-\l__tag_graphic_trim_ly_fp)
             * \l__tag_graphic_cos_fp
         }
-       \tl_gset:Nx\g__tag_graphic_ly_tl
+       \tl_gset:Ne\g__tag_graphic_ly_tl
          {
           \fp_eval:n
             {
@@ -397,7 +399,7 @@
               + \l__tag_graphic_ly_fp + \l__tag_graphic_trim_ly_fp
             }
          }
-       \tl_gset:Nx\g__tag_graphic_uy_tl
+       \tl_gset:Ne\g__tag_graphic_uy_tl
          {
            \fp_eval:n
              {
@@ -418,7 +420,7 @@
  {
   \bool_if:NT\l__tag_graphic_bboxcorr_bool
     {
-     \tl_set:Nx #1
+     \tl_set:Ne #1
        {
          \fp_eval:n
           {
@@ -427,7 +429,7 @@
            \dim_to_decimal_in_bp:n {\seq_item:Nn \l__tag_graphic_bboxcorr_seq {1} }
           }
        }
-     \tl_set:Nx #2
+     \tl_set:Ne #2
        {
          \fp_eval:n
           {
@@ -436,7 +438,7 @@
            \dim_to_decimal_in_bp:n {\seq_item:Nn \l__tag_graphic_bboxcorr_seq {2} }
           }
        }
-     \tl_set:Nx #3
+     \tl_set:Ne #3
        {
          \fp_eval:n
           {
@@ -445,7 +447,7 @@
            \dim_to_decimal_in_bp:n {\seq_item:Nn \l__tag_graphic_bboxcorr_seq {3} }
           }
        }
-     \tl_set:Nx #4
+     \tl_set:Ne #4
        {
          \fp_eval:n
           {
@@ -465,22 +467,22 @@
       {\l__tag_graphic_BBox_bool}
     }
     {
-      \fp_set:Nn \l__tag_graphic_scale_fp { \Gin at scalex }
+      \__tag_graphic_get_scale:
       \__tag_graphic_get_trim:
       \int_gincr:N\g__tag_graphic_int
-      \tl_set:Nx\l__tag_graphic_currentlabel_tl {__tag_graphic_\int_use:N \g__tag_graphic_int}
+      \tl_set:Ne\l__tag_graphic_currentlabel_tl {__tag_graphic_\int_use:N \g__tag_graphic_int}
       \__tag_graphic_savepos:e { \l__tag_graphic_currentlabel_tl }
-      \tl_gset:Nx\g__tag_graphic_lx_tl
+      \tl_gset:Ne\g__tag_graphic_lx_tl
         {
           \dim_to_decimal_in_bp:n
-            { \__tag_ref_value:enn {\l__tag_graphic_currentlabel_tl}{xpos}{0}sp }
+            { \property_ref:een {\l__tag_graphic_currentlabel_tl}{xpos}{0}sp }
         }
-      \tl_gset:Nx\g__tag_graphic_ly_tl
+      \tl_gset:Ne\g__tag_graphic_ly_tl
         {
           \dim_to_decimal_in_bp:n
-            { \__tag_ref_value:enn {\l__tag_graphic_currentlabel_tl}{ypos}{0}sp }
+            { \property_ref:een {\l__tag_graphic_currentlabel_tl}{ypos}{0}sp }
         }
-      \tl_gset:Nx\g__tag_graphic_ux_tl
+      \tl_gset:Ne\g__tag_graphic_ux_tl
           {
             \fp_eval:n
              {
@@ -489,7 +491,7 @@
                \dim_to_decimal_in_bp:n { \Gin at req@width }
              }
           }
-       \tl_gset:Nx\g__tag_graphic_uy_tl
+       \tl_gset:Ne\g__tag_graphic_uy_tl
           {
             \fp_eval:n
              {
@@ -500,7 +502,7 @@
           }
       \legacy_if:nF {Gin at clip}
         {
-          \tl_gset:Nx\g__tag_graphic_ux_tl
+          \tl_gset:Ne\g__tag_graphic_ux_tl
             {
               \fp_eval:n
                 {
@@ -509,7 +511,7 @@
                   \l__tag_graphic_trim_ux_fp
                 }
             }
-          \tl_gset:Nx\g__tag_graphic_lx_tl
+          \tl_gset:Ne\g__tag_graphic_lx_tl
             {
               \fp_eval:n
                 {
@@ -518,7 +520,7 @@
                   \l__tag_graphic_trim_lx_fp
                 }
             }
-          \tl_gset:Nx\g__tag_graphic_uy_tl
+          \tl_gset:Ne\g__tag_graphic_uy_tl
             {
               \fp_eval:n
                 {
@@ -527,7 +529,7 @@
                   \l__tag_graphic_trim_uy_fp
                 }
             }
-          \tl_gset:Nx\g__tag_graphic_ly_tl
+          \tl_gset:Ne\g__tag_graphic_ly_tl
             {
               \fp_eval:n
                 {
@@ -583,19 +585,19 @@
     }
     {
       \int_gincr:N\g__tag_graphic_int
-      \tl_set:Nx\l__tag_graphic_currentlabel_tl {__tag_graphic_\int_use:N \g__tag_graphic_int}
+      \tl_set:Ne\l__tag_graphic_currentlabel_tl {__tag_graphic_\int_use:N \g__tag_graphic_int}
       \__tag_graphic_savepos:e { \l__tag_graphic_currentlabel_tl }
-      \tl_gset:Nx \g__tag_graphic_lx_tl
+      \tl_gset:Ne \g__tag_graphic_lx_tl
         {
           \dim_to_decimal_in_bp:n
-          { \__tag_ref_value:enn {\l__tag_graphic_currentlabel_tl}{xpos}{0}sp  }
+          { \property_ref:een {\l__tag_graphic_currentlabel_tl}{xpos}{0}sp  }
         }
-      \tl_gset:Nx \g__tag_graphic_ly_tl
+      \tl_gset:Ne \g__tag_graphic_ly_tl
         {
           \dim_to_decimal_in_bp:n
-          { \__tag_ref_value:enn {\l__tag_graphic_currentlabel_tl}{ypos}{0}sp - \dp\@picbox }
+          { \property_ref:een {\l__tag_graphic_currentlabel_tl}{ypos}{0}sp - \dp\@picbox }
         }
-      \tl_gset:Nx \g__tag_graphic_ux_tl
+      \tl_gset:Ne \g__tag_graphic_ux_tl
         {
           \dim_to_decimal_in_bp:n
            {
@@ -602,7 +604,7 @@
              \g__tag_graphic_lx_tl bp + \wd\@picbox
            }
         }
-      \tl_gset:Nx \g__tag_graphic_uy_tl
+      \tl_gset:Ne \g__tag_graphic_uy_tl
         {
           \dim_to_decimal_in_bp:n
            {
@@ -675,7 +677,7 @@
       \int_compare:nNnT
        {\g_shipout_readonly_int}
        =
-       {\__tag_ref_value:enn{__tag_graphic_#6}{abspage}{0}}
+       {\property_ref:een{__tag_graphic_#6}{abspage}{0}}
        {
         \put
          (#1 bp,\dim_eval:n{-\paperheight + \dim_eval:n{#2 bp}})

Modified: trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-minipage.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-minipage.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-minipage.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -33,8 +33,8 @@
 %% 
 %% 
 %% File: latex-lab-minipage.dtx (C) Copyright 2023 LaTeX Project
-\def\ltlabminipagedate{2023-08-20}
-\def\ltlabminipageversion{0.81b}
+\def\ltlabminipagedate{2023-10-30}
+\def\ltlabminipageversion{0.81c}
 \ProvidesExplPackage {latex-lab-testphase-minipage}
   {\ltlabminipagedate} {\ltlabminipageversion}
   {Code related to the tagging of minipages and parboxes}
@@ -43,10 +43,10 @@
 
 \def\@kernel at init@minipage{}
 \def\@kernel at init@parbox{}
-\def\@kernel at before@minipage{}
-\def\@kernel at after@minipage{}
-\def\@kernel at before@parbox{}
-\def\@kernel at after@parbox{}
+\socket_new:nn {tagsupport/minipage/before}{0}
+\socket_new:nn {tagsupport/minipage/after} {0}
+\socket_new:nn {tagsupport/parbox/before}  {0}
+\socket_new:nn {tagsupport/parbox/after}{0}
 \def\@iiiminipage#1#2[#3]#4{%
   \@kernel at init@minipage
   \leavevmode
@@ -53,7 +53,7 @@
   \@pboxswfalse
   \setlength\@tempdima{#4}%
   \def\@mpargs{{#1}{#2}[#3]{#4}}%
-  \@kernel at before@minipage% new
+  \socket_use:n{tagsupport/minipage/before}% new
   \setbox\@tempboxa\vbox\bgroup
     \color at begingroup
       \hsize\@tempdima
@@ -60,7 +60,7 @@
       \textwidth\hsize \columnwidth\hsize
       \@parboxrestore
       \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c at mpfootnote\z@
-      \AssignSocketPlug{fntext/process}{mp}%
+      \socket_assign_plug:nn{fntext/process}{mp}%
       \let\@listdepth\@mplistdepth \@mplistdepth\z@
       \@minipagerestore
       \@setminipage}
@@ -79,7 +79,7 @@
   \tag_stop:n{minipage}
   \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}%
   \tag_start:n{minipage}
-  \@kernel at after@minipage%new end ...
+  \socket_use:n{tagsupport/minipage/after} %new end ...
   }
 \long\def\@iiiparbox#1#2[#3]#4#5{%
   \@kernel at init@parbox
@@ -86,7 +86,7 @@
   \leavevmode
   \@pboxswfalse
   \setlength\@tempdima{#4}%
-  \@kernel at before@parbox% new
+  \socket_use:n{tagsupport/parbox/before}
   \@begin at tempboxa\vbox{\hsize\@tempdima\@parboxrestore#5\@@par}%
     \ifx\relax#2\else
       \setlength\@tempdimb{#2}%
@@ -101,20 +101,27 @@
        \csname bm@#3\endcsname}%
     \if at pboxsw \m at th$\fi
   \@end at tempboxa%
-  \@kernel at after@parbox%new end
+  \socket_use:n{tagsupport/parbox/after}
   }
 \tl_new:N  \l__ltboxes_tag_tl
 \tl_set:Nn \l__ltboxes_tag_tl {Div}
-\cs_set_protected:Npn\@kernel at before@minipage
+\socket_new_plug:nnn{tagsupport/minipage/before}{tag/dflt}
   {
     \tag_mc_end_push:\tag_struct_end:
-    \tag_struct_begin:n{tag=\l__ltboxes_tag_tl}}
-\cs_set_protected:Npn\@kernel at after@minipage
+    \tag_struct_begin:n{tag=\l__ltboxes_tag_tl}
+  }
+\socket_new_plug:nnn{tagsupport/minipage/after}{tag/dflt}
   {\tag_struct_end:\tag_struct_begin:n{tag=\l__tag_para_tag_tl}\tag_mc_begin_pop:n{}}
-\cs_set_protected:Npn\@kernel at before@parbox
+
+\socket_new_plug:nnn{tagsupport/parbox/before}{tag/dflt}
   {\tag_mc_end_push:\tag_struct_end:\tag_struct_begin:n{tag=\l__ltboxes_tag_tl}}
-\cs_set_protected:Npn\@kernel at after@parbox
+
+\socket_new_plug:nnn{tagsupport/parbox/after}{tag/dflt}
   {\tag_struct_end:\tag_struct_begin:n{tag=\l__tag_para_tag_tl}\tag_mc_begin_pop:n{}}
+\socket_assign_plug:nn{tagsupport/minipage/before}{tag/dflt}
+\socket_assign_plug:nn{tagsupport/minipage/after} {tag/dflt}
+\socket_assign_plug:nn{tagsupport/parbox/before}  {tag/dflt}
+\socket_assign_plug:nn{tagsupport/parbox/after}   {tag/dflt}
 
 \endinput
 %%

Modified: trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-sec.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-sec.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-sec.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -33,8 +33,8 @@
 %% 
 %% 
 %% File: latex-lab-sec.dtx (C) Copyright 2022-2023 LaTeX Project
-\def\ltlabsecdate{2023-07-20}
-\def\ltlabsecversion{0.84a}
+\def\ltlabsecdate{2023-10-16}
+\def\ltlabsecversion{0.84b}
 \ProvidesExplPackage {latex-lab-testphase-sec} {\ltlabsecdate} {\ltlabsecversion}
   {Code related to the tagging of sectioning commands}
 \RequirePackage{latex-lab-kernel-changes}
@@ -215,11 +215,6 @@
           }
           {
             \MakeLinkTarget[chapter]{}
-            %todo public function for this update!
-            \tl_if_blank:VF \@currentHref
-              {
-                \prop_gput:Nxx \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
-              }
           }
         \IfBooleanTF
           {#1}
@@ -258,10 +253,6 @@
           }
           {
             \MakeLinkTarget[part]{}
-            \tl_if_blank:VF \@currentHref
-             {
-               \prop_gput:Nxx \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
-             }
           }
         \IfBooleanTF
           {#1}
@@ -273,18 +264,14 @@
  }
 \def\hyper at nopatch@sectioning{}
 \cs_new_protected:Npn \@hyp at section@target at nnn #1 #2 #3 %#1 optarg #2 name/counter, #3 indent
- {
-   \makebox[0pt][l]
+  {
+    \makebox[0pt][l]
      {
        \skip_set:Nn \@tempskipa {#3}
        \dim_compare:nNnF {\@tempskipa}<{0pt}{\kern-\@tempskipa}
        \MakeLinkTarget#1{#2}
      }
-   \tl_if_blank:VF \@currentHref
-    {
-      \prop_gput:Nxx \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
-    }
- }
+  }
 \def\@startsection#1#2#3#4#5#6{%
   \if at noskipsec \leavevmode \fi
   \par

Added: trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-table.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-table.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-table.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -0,0 +1,977 @@
+%%
+%% This is file `latex-lab-testphase-table.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% latex-lab-table.dtx  (with options: `package')
+%% 
+%% This is a generated file.
+%% 
+%% Copyright 2021-2023 LaTeX Project
+%% 
+%% This file was generated from file(s) of the  `LaTeX-lab Bundle'.
+%% ------------------------------------------------------------------------------------
+%% 
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008 or later.
+%% 
+%% This file may only be distributed together with a copy of the LaTeX
+%% `LaTeX-lab Bundle'. You may however distribute the `LaTeX-lab Bundle'
+%% without such generated files.
+%% 
+%% The newest sources can be found below
+%% 
+%%    https://github.com/latex3/latex2e/required/latex-lab
+%% 
+%% where one can also log issues in case there are any.
+%% 
+%% 
+%% File: latex-lab-table.dtx (C) Copyright 2023 LaTeX Project
+\def\ltlabtbldate{2023-10-30}
+\def\ltlabtblversion{0.85d}
+\ProvidesExplPackage {latex-lab-testphase-table} {\ltlabtbldate} {\ltlabtblversion}
+  {Code related to the tagging of tables}
+\RequirePackage{array}
+\tl_new:N  \l__tbl_celltag_tl
+\tl_set:Nn \l__tbl_celltag_tl {TD}
+\tl_new:N  \l__tbl_rowtag_tl
+\tl_set:Nn \l__tbl_rowtag_tl {TR}
+\tl_new:N  \l__tbl_cellattribute_tl
+\tl_set:Nn \l__tbl_cellattribute_tl {}
+\tl_new:N  \l__tbl_rowattribute_tl
+\tl_set:Nn \l__tbl_rowattribute_tl {}
+\int_new:N \g__tbl_missing_cells_int
+\clist_new:N \l__tbl_tmpa_clist
+\seq_new:N \l__tbl_tmpa_seq
+\tl_new:N \l__tbl_tmpa_tl
+\NewSocket{tagsupport/tblcell/begin}{0}
+\NewSocket{tagsupport/tblcell/end}{0}
+\NewSocket{tagsupport/tblrow/begin}{0}
+\NewSocket{tagsupport/tblrow/end}{0}
+\NewSocket{tagsupport/tbl/init}{0}
+\NewSocket{tagsupport/tbl/finalize}{0}
+\NewSocket{tagsupport/tbl/finalize/longtable}{0}
+\NewSocket{tagsupport/tblhmode/begin}{0}
+\NewSocket{tagsupport/tblhmode/end}{0}
+\NewSocket{tagsupport/tblvmode/begin}{0}
+\NewSocket{tagsupport/tblvmode/end}{0}
+\NewSocketPlug{tagsupport/tblcell/begin}{TD}
+  {
+    \tag_struct_begin:n
+      {
+        tag             =\l__tbl_celltag_tl,
+        attribute-class =\l__tbl_cellattribute_tl
+      }
+    \seq_gput_right:Ne \g__tbl_struct_cur_seq { \tag_get:n {struct_num} }
+    \int_step_inline:nn { \g__tbl_span_tl - 1 }
+      {
+        \seq_gput_right:Ne \g__tbl_struct_cur_seq { -\tag_get:n {struct_num} }
+      }
+    \tag_mc_begin:n{}
+  }
+\NewSocketPlug{tagsupport/tblcell/end}{TD}
+  {
+    \tag_mc_end:
+    \tag_struct_end:
+  }
+\NewSocketPlug{tagsupport/tblcell/begin}{TDpbox}
+  {
+    \tag_struct_begin:n
+      {
+        tag             =\l__tbl_celltag_tl,
+        attribute-class =\l__tbl_cellattribute_tl
+      }
+    \seq_gput_right:Ne \g__tbl_struct_cur_seq { \tag_get:n {struct_num} }
+    \int_step_inline:nn { \g__tbl_span_tl - 1 }
+      {
+        \seq_gput_right:Ne \g__tbl_struct_cur_seq { -\tag_get:n {struct_num} }
+      }
+    \tagpdfparaOn
+    \tl_set:Nn \l__tag_para_main_tag_tl {Div}
+  }
+\NewSocketPlug{tagsupport/tblcell/end}{TDpbox}
+  {
+    \tag_struct_end:
+  }
+\NewSocketPlug{tagsupport/tblrow/begin}{TR}
+  {
+    \seq_gclear:N \g__tbl_struct_cur_seq
+    \tag_struct_begin:n
+     {
+       tag            =\l__tbl_rowtag_tl,
+       attribute-class=\l__tbl_rowattribute_tl
+     }
+   \seq_gput_right:Ne \g__tbl_struct_rows_seq { \tag_get:n {struct_num} }
+  }
+\NewSocketPlug{tagsupport/tblrow/end}{TR}
+  {
+    \__tag_tbl_add_missing_cells:n { \g__tbl_missing_cells_int }
+    \seq_gput_right:Ne \g__tbl_struct_cells_seq
+      {
+        \seq_use:Nn \g__tbl_struct_cur_seq {,}
+      }
+    \int_compare:nNnTF { \g__tbl_row_int } = { \seq_count:N\g__tbl_struct_cells_seq }
+      {
+        \typeout
+          {==>~
+            stucture~stored~for~row~\int_use:N\g__tbl_row_int :~
+            \seq_use:Nn \g__tbl_struct_cur_seq {,}
+          }
+      }
+      { \ERROR } % should not happen ...
+    \tag_struct_end:
+  }
+\NewSocketPlug{tagsupport/tbl/init}{Table}
+  {
+    \tag_if_active:T
+      {
+        \bool_set_false:N \l__tag_para_bool
+      }
+  }
+\NewSocketPlug{tagsupport/tbl/finalize}{Table}
+  {
+    \__tbl_set_header_rows:
+  }
+\NewSocketPlug{tagsupport/tbl/finalize/longtable}{Table}
+  {
+     \bool_lazy_and:nnTF
+       { \seq_if_empty_p:N \g__tbl_LT at head_rows_seq  }
+       { \seq_if_empty_p:N \g__tbl_LT at firsthead_rows_seq }
+       { \__tbl_set_header_rows: }
+       {
+         \seq_if_empty:NTF \g__tbl_LT at firsthead_rows_seq
+           {
+             \clist_set:Ne \l__tbl_header_rows_clist
+               {\seq_use:Nn \g__tbl_LT at head_rows_seq {,}}
+             \__tbl_set_header_rows:
+           }
+           {
+             \clist_set:Ne \l__tbl_header_rows_clist
+               { \seq_use:Nn \g__tbl_LT at firsthead_rows_seq {,} }
+             \__tbl_set_header_rows:
+             \pdf_version_compare:NnTF < {2.0}
+              {
+                \seq_map_inline:Nn \g__tbl_LT at head_rows_seq
+                  {
+                    \seq_gset_item:cnn
+                      {g__tag_struct_kids_ \g__tbl_struct_table_tl _seq}
+                      { ##1 }
+                      {}
+                    \tl_set:Ne \l__tbl_tmpa_tl
+                      { \seq_item:Nn\g__tbl_struct_rows_seq {##1} }
+                    \prop_if_exist:cT
+                      { g__tag_struct_ \l__tbl_tmpa_tl _prop }
+                      {
+                        %\prop_gremove:cn {g__tag_struct_ \l__tbl_tmpa_tl _prop} {P}
+                      }
+                  }
+              }
+              {
+                \seq_map_inline:Nn \g__tbl_LT at head_rows_seq
+                  {
+                    \tl_set:Ne \l__tbl_tmpa_tl
+                      { \seq_item:Nn\g__tbl_struct_rows_seq {##1} }
+                    \prop_if_exist:cT
+                      { g__tag_struct_ \l__tbl_tmpa_tl _prop }
+                      {
+                        \__tbl_struct_prop_gput:Vnn \l__tbl_tmpa_tl {S}{/Artifact}
+                      }
+                   }
+               }
+            }
+       }
+     \bool_lazy_and:nnF
+       { \seq_if_empty_p:N \g__tbl_LT at foot_rows_seq  }
+       { \seq_if_empty_p:N \g__tbl_LT at lastfoot_rows_seq }
+       {
+         \seq_if_empty:NTF \g__tbl_LT at lastfoot_rows_seq
+           {
+             \seq_map_inline:Nn \g__tbl_LT at foot_rows_seq
+               {
+                 \tl_set:Ne \l__tbl_tmpa_tl
+                   {
+                     \seq_item:cn
+                       {g__tag_struct_kids_ \g__tbl_struct_table_tl _seq}
+                       {##1}
+                   }
+                 \seq_gset_item:cnn
+                   {g__tag_struct_kids_ \g__tbl_struct_table_tl _seq}
+                   { ##1 }
+                   {}
+                 \seq_gput_right:cV
+                   {g__tag_struct_kids_ \g__tbl_struct_table_tl _seq}
+                   \l__tbl_tmpa_tl
+               }
+           }
+           {
+             \seq_map_inline:Nn \g__tbl_LT at lastfoot_rows_seq
+               {
+                 \tl_set:Ne \l__tbl_tmpa_tl
+                   {
+                     \seq_item:cn
+                       {g__tag_struct_kids_ \g__tbl_struct_table_tl _seq}
+                       {##1}
+                   }
+                 \seq_gset_item:cnn
+                   {g__tag_struct_kids_ \g__tbl_struct_table_tl _seq}
+                   { ##1 }
+                   {}
+                 \seq_gput_right:cV
+                   {g__tag_struct_kids_ \g__tbl_struct_table_tl _seq}
+                   \l__tbl_tmpa_tl
+               }
+            \pdf_version_compare:NnTF < {2.0}
+              {
+                \seq_map_inline:Nn \g__tbl_LT at foot_rows_seq
+                  {
+                    \seq_gset_item:cnn
+                      {g__tag_struct_kids_ \g__tbl_struct_table_tl _seq}
+                      { ##1 }
+                      {}
+                    \tl_set:Ne \l__tbl_tmpa_tl
+                      { \seq_item:Nn\g__tbl_struct_rows_seq {##1} }
+                    \prop_if_exist:cT
+                      { g__tag_struct_ \l__tbl_tmpa_tl _prop }
+                      {
+                        %\prop_gremove:cn {g__tag_struct_ \l__tbl_tmpa_tl _prop} {P}
+                      }
+                  }
+              }
+              {
+                \seq_map_inline:Nn \g__tbl_LT at foot_rows_seq
+                  {
+                    \tl_set:Ne \l__tbl_tmpa_tl
+                      { \seq_item:Nn\g__tbl_struct_rows_seq {##1} }
+                    \prop_if_exist:cT
+                      { g__tag_struct_ \l__tbl_tmpa_tl _prop }
+                      {
+                        \__tbl_struct_prop_gput:Vnn \l__tbl_tmpa_tl {S}{/Artifact}
+                      }
+                   }
+               }
+           }
+       }
+  }
+\NewSocketPlug{tagsupport/tblhmode/begin}{Table}
+  {
+    \mode_leave_vertical:
+    \tag_mc_end_push:
+     \bool_lazy_and:nnT
+      { \bool_if_exist_p:N \l__tag_para_bool } { \l__tag_para_bool }
+      { \tag_struct_end:n { text } }
+    \tag_struct_begin:n {tag=Table}
+    \tl_gset:Ne \g__tbl_struct_table_tl { \tag_get:n {struct_num} }
+  }
+\NewSocketPlug{tagsupport/tblhmode/end}{Table}
+  {
+    \tag_struct_end:
+    \bool_lazy_and:nnT
+      { \bool_if_exist_p:N \l__tag_para_bool } { \l__tag_para_bool }
+      { \tag_struct_begin:n { tag=\l__tag_para_tag_tl } }
+    \tag_mc_begin_pop:n{}
+  }
+\NewSocketPlug{tagsupport/tblvmode/begin}{Table}
+  {
+    \tag_struct_begin:n {tag=Table}
+    \tl_gset:Ne \g__tbl_struct_table_tl { \tag_get:n {struct_num} }
+  }
+\NewSocketPlug{tagsupport/tblvmode/end}{Table}
+  {
+    \tag_struct_end:
+    \par
+  }
+\AddToHook{env/tabular/before}  {\UseSocket{tagsupport/tblhmode/begin}}
+\AddToHook{env/tabular/after}   {\UseSocket{tagsupport/tblhmode/end}}
+\AddToHook{env/tabular*/before} {\UseSocket{tagsupport/tblhmode/begin}}
+\AddToHook{env/tabular*/after}  {\UseSocket{tagsupport/tblhmode/end}}
+\AddToHook{env/tabularx/before} {\UseSocket{tagsupport/tblhmode/begin}}
+\AddToHook{env/tabularx/after}  {\UseSocket{tagsupport/tblhmode/end}}
+\AddToHook{env/longtable/before}{\UseSocket{tagsupport/tblvmode/begin}}
+\AddToHook{env/longtable/after} {\UseSocket{tagsupport/tblvmode/end}}
+\AddToHook{env/array/begin} {\__tag_tbl_disable:}
+\tag_if_active:T
+  { \cs_generate_variant:Nn \__tag_attr_new_entry:nn {ee} }
+\cs_new_protected:Npn \__tbl_set_colspan:n #1
+  {
+    \tag_if_active:T
+      {
+        \int_compare:nNnT {#1}>{1}
+         {
+           \prop_get:NeNF \g__tag_attr_entries_prop
+              {colspan-\int_eval:n{#1}}
+              \l__tbl_tmpa_tl
+              {
+                \__tag_attr_new_entry:ee
+                  {colspan-\int_eval:n{#1}}
+                  {/O /Table /ColSpan~\int_eval:n{#1}}
+              }
+           \tl_set:Ne \l__tbl_cellattribute_tl
+              {colspan-\int_eval:n{#1}}
+         }
+      }
+  }
+
+\cs_new_protected:Npn \__tag_tbl_disable:
+ {
+   \AssignSocketPlug{tagsupport/tblcell/begin}{noop}
+   \AssignSocketPlug{tagsupport/tblcell/end}{noop}
+   \AssignSocketPlug{tagsupport/tblrow/begin}{noop}
+   \AssignSocketPlug{tagsupport/tblrow/end}{noop}
+   \AssignSocketPlug{tagsupport/tbl/init}{noop}
+   \AssignSocketPlug{tagsupport/tbl/finalize}{noop}
+   \AssignSocketPlug{tagsupport/tbl/finalize/longtable}{noop}
+   \AssignSocketPlug{tagsupport/tblhmode/begin}{noop}
+   \AssignSocketPlug{tagsupport/tblhmode/end}{noop}
+   \AssignSocketPlug{tagsupport/tblvmode/begin}{noop}
+   \AssignSocketPlug{tagsupport/tblvmode/end}{noop}
+ }
+
+\cs_new_protected:Npn \__tag_tbl_enable:
+ {
+   \AssignSocketPlug{tagsupport/tblcell/begin}{TD}
+   \AssignSocketPlug{tagsupport/tblcell/end}{TD}
+   \AssignSocketPlug{tagsupport/tblrow/begin}{TR}
+   \AssignSocketPlug{tagsupport/tblrow/end}{TR}
+   \AssignSocketPlug{tagsupport/tbl/init}{Table}
+   \AssignSocketPlug{tagsupport/tbl/finalize}{Table}
+   \AssignSocketPlug{tagsupport/tbl/finalize/longtable}{Table}
+   \AssignSocketPlug{tagsupport/tblhmode/begin}{Table}
+   \AssignSocketPlug{tagsupport/tblhmode/end}{Table}
+   \AssignSocketPlug{tagsupport/tblvmode/begin}{Table}
+   \AssignSocketPlug{tagsupport/tblvmode/end}{Table}
+ }
+
+\keys_define:nn { __tag / setup }
+  {
+    table-tagging .choices:nn = { true, on }
+      { \__tag_tbl_enable: },
+    table-tagging .choices:nn = { false, off }
+      { \__tag_tbl_disable: },
+    table-tagging .default:n = true,
+    table-tagging .initial:n = true
+  }
+\AddToHook{begindocument}
+ {
+  \cs_if_exist:NT \@kernel at before@head
+   {
+     \tl_put_right:Nn \@kernel at before@head {\__tag_tbl_disable:}
+     \tl_put_right:Nn \@kernel at before@foot {\__tag_tbl_disable:}
+   }
+ }
+\AddToHook{begindocument}
+  {
+   \tag_if_active:T
+     {
+       \tagpdfsetup
+         {
+           newattribute =
+            {TH-col}{/O /Table /Scope /Column},
+           newattribute =
+             {TH-row}{/O /Table /Scope /Row},
+           newattribute =
+             {TH-both}{/O /Table /Scope /Both},
+         }
+         \seq_gput_left:Ne\g__tag_attr_class_used_seq
+           {\pdf_name_from_unicode_e:n{TH-col}}
+         \seq_gput_left:Ne\g__tag_attr_class_used_seq
+           {\pdf_name_from_unicode_e:n{TH-row}}
+         \seq_gput_left:Ne\g__tag_attr_class_used_seq
+           {\pdf_name_from_unicode_e:n{TH-both}}
+     }
+  }
+
+\clist_new:N  \l__tbl_header_rows_clist
+\cs_if_free:NTF \__tag_struct_prop_gput:nnn
+   {
+     \cs_new_protected:Npn \__tbl_struct_prop_gput:nnn #1#2#3
+       { \prop_gput:cnn { g__tag_struct_#1_prop }{#2}{#3} }
+   }
+   { \cs_new_protected:Npn  \__tbl_struct_prop_gput:nnn #1#2#3
+       { \__tag_struct_prop_gput:nnn {#1}{#2}{#3} }
+   }
+\cs_generate_variant:Nn \__tbl_struct_prop_gput:nnn {nne,Vnn}
+\cs_new_protected:Npn \__tbl_set_header_rows:
+  {
+    \clist_map_inline:Nn \l__tbl_header_rows_clist
+      {
+        \clist_set:Ne\l__tbl_tmpa_clist
+          {
+            \seq_item:Nn \g__tbl_struct_cells_seq {##1}
+          }
+        \clist_map_inline:Nn \l__tbl_tmpa_clist
+          {
+            \prop_if_exist:cT { g__tag_struct_####1_prop }
+              {
+                \__tbl_struct_prop_gput:nnn{ ####1 }{S}{/TH}
+                \prop_get:cnNTF
+                  { g__tag_struct_####1_prop }
+                  { C }
+                  \l__tbl_tmpa_tl
+                  {\__tbl_struct_prop_gput:nne{ ####1 }{C}{[/TH-col~\l__tbl_tmpa_tl]} }
+                  {\__tbl_struct_prop_gput:nnn{ ####1 }{C}{/TH-col}}
+             }
+          }
+      }
+  }
+\keys_define:nn { __tag / setup }
+  {
+    table-header-rows .clist_set:N = \l__tbl_header_rows_clist
+  }
+\cs_new_protected:Npn \__tbl_show_curr_cell_data: {
+   \typeout { ==>~ current~cell~data:~
+              \int_use:N \g__tbl_row_int ,
+              \int_use:N \g__tbl_col_int ,
+              \g__tbl_span_tl
+            }
+}
+\def\insert at column{%
+  \__tbl_show_curr_cell_data:
+  \UseSocket{tagsupport/tblcell/begin}%
+  \the at toks \the \@tempcnta
+  \ignorespaces \@sharp \unskip
+  \the at toks \the \count@ \relax
+  \UseSocket{tagsupport/tblcell/end}%
+}
+\def\@classz{\@classx
+   \@tempcnta \count@
+   \prepnext at tok
+   \@addtopreamble{\ifcase \@chnum
+      \hfil
+      \hskip1sp%
+      \d at llarbegin
+      \insert at column
+      \d at llarend \do at row@strut \hfil \or
+      \hskip1sp\d at llarbegin \insert at column \d at llarend \do at row@strut \hfil \or
+      \hfil\hskip1sp\d at llarbegin \insert at column \d at llarend \do at row@strut \or
+    \setbox\ar at mcellbox\vbox
+    \@startpbox{\@nextchar}
+    \AssignSocketPlug{tagsupport/tblcell/begin}{TDpbox}
+    \AssignSocketPlug{tagsupport/tblcell/end}{TDpbox}
+    \insert at column \@endpbox
+    \ar at align@mcell
+    \do at row@strut \or
+   \vtop \@startpbox{\@nextchar}
+    \AssignSocketPlug{tagsupport/tblcell/begin}{TDpbox}
+    \AssignSocketPlug{tagsupport/tblcell/end}{TDpbox}
+    \insert at column \@endpbox\do at row@strut \or
+   \vbox \@startpbox{\@nextchar}
+    \AssignSocketPlug{tagsupport/tblcell/begin}{TDpbox}
+    \AssignSocketPlug{tagsupport/tblcell/end}{TDpbox}
+    \insert at column \@endpbox\do at row@strut
+  \fi}\prepnext at tok}
+\def\@array[#1]#2{%
+  \@tempdima \ht \strutbox
+  \advance \@tempdima by\extrarowheight
+  \setbox \@arstrutbox \hbox{\vrule
+             \@height \arraystretch \@tempdima
+             \@depth \arraystretch \dp \strutbox
+             \@width \z@}%
+  \tl_set_eq:NN \l__tbl_saved_table_cols_tl  \g__tbl_table_cols_tl
+  \begingroup
+  \@mkpream{#2}
+  \__tbl_determine_table_cols:
+  \xdef\@preamble{%
+    \noexpand
+     \ar at ialign
+     \@halignto
+     \bgroup \@arstrut
+      \UseSocket{tagsupport/tblrow/begin}%
+      \__tbl_init_cell_data:
+      \@preamble
+      \tabskip \z@ \cr}%
+  \endgroup
+  \@arrayleft
+  \UseSocket{tagsupport/tbl/init}
+  \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi \fi
+  \bgroup
+  \let \@sharp ##\let \protect \relax
+  \lineskip \z@
+  \baselineskip \z@
+  \m at th
+  \let\\\@arraycr \let\tabularnewline\\\let\par\@empty
+  \@preamble}
+\let\@@array\@array
+\cs_new_protected:Npn \__tbl_init_cell_data: {
+        \int_gset:Nn \g__tbl_col_int {1}
+        \tl_gset:Nn  \g__tbl_span_tl {1}
+}
+\cs_new_protected:Npn \__tbl_update_cell_data: {
+        \int_gadd:Nn \g__tbl_col_int { \g__tbl_span_tl }
+        \tl_gset:Nn  \g__tbl_span_tl {1}
+}
+\cs_new:Npn \__tbl_determine_table_cols:  {
+  \seq_set_split:NnV\l__tbl_tmpa_seq {&}\@preamble
+  \tl_gset:Ne \g__tbl_table_cols_tl { \seq_count:N \l__tbl_tmpa_seq }
+  \typeout{ ==>~ Table~ has~ \g__tbl_table_cols_tl \space columns }
+}
+\protected\def\@arraycr{
+  \relax
+  \__tbl_store_missing_cells:n{@arraycr}
+  %
+  \iffalse{\fi\ifnum 0=`}\fi
+  \@ifstar \@xarraycr \@xarraycr}
+\cs_new:Npn \__tbl_store_missing_cells:n #1 {
+  \int_compare:nNnT \g__tbl_col_int > 0
+      {
+        \int_gset:Nn \g__tbl_missing_cells_int
+            {
+              \g__tbl_table_cols_tl
+            - \g__tbl_col_int
+            - \g__tbl_span_tl
+            + 1
+            }
+        \int_compare:nNnT \g__tbl_missing_cells_int < 0 \ERROR % should not happen
+        \typeout{==>~
+          (#1)~
+          This~ row~ needs~
+          \int_use:N \g__tbl_missing_cells_int \space
+          additional~ cell(s)
+        }
+      }
+}
+\cs_new:Npn \__tag_tbl_add_missing_cells:n #1
+  {
+    \int_compare:nNnT {#1}>{0}
+      {
+       \typeout{==>~
+          ~Inserting~\int_eval:n{#1}~additional~cell(s)~into~previous~row:}
+      }
+    \int_step_inline:nn { #1 }
+      {
+        \UseSocket{tagsupport/tblcell/begin}
+        \UseSocket{tagsupport/tblcell/end}
+      }
+  }
+\def\endarray{
+  \__tbl_store_missing_cells:n{endarray}
+  \crcr \egroup
+  \UseSocket{tagsupport/tbl/finalize}
+  \int_gset:Nn \g__tbl_col_int { \l__tbl_saved_col_tl }
+  \int_gset:Nn \g__tbl_row_int { \l__tbl_saved_row_tl }
+  \tl_gset_eq:NN \g__tbl_span_tl \l__tbl_saved_span_tl
+  \tl_gset_eq:NN \g__tbl_table_cols_tl   \l__tbl_saved_table_cols_tl
+  \tl_gset_eq:NN \g__tbl_struct_table_tl  \l__tbl_saved_struct_table_tl
+  \seq_gset_eq:NN \g__tbl_struct_rows_seq \l__tbl_saved_struct_rows_seq
+  \seq_gset_eq:NN \g__tbl_struct_cells_seq\l__tbl_saved_struct_cells_seq
+  \seq_gset_eq:NN \g__tbl_struct_cur_seq  \l__tbl_saved_struct_cur_seq
+  \typeout{==>~ restored~cell~data:~
+                \int_use:N \g__tbl_row_int,
+                \int_use:N \g__tbl_col_int,
+                \l__tbl_saved_span_tl \space
+                (
+                \int_compare:nNnTF \g__tbl_table_cols_tl = 0
+                    { outer~ level }
+                    { max:~ \g__tbl_table_cols_tl }
+                )
+          }
+  \egroup
+  \@arrayright \gdef\@preamble{}%
+}
+\def\@addamp {
+  \if at firstamp
+    \@firstampfalse
+  \else
+    \edef\@preamble{\@preamble &
+        \__tbl_update_cell_data:
+    }
+  \fi
+}
+\int_new:N \g__tbl_col_int
+\int_new:N \g__tbl_row_int
+\tl_new:N  \g__tbl_span_tl
+\tl_new:N  \g__tbl_table_cols_tl
+
+\tl_gset:Nn \g__tbl_span_tl {1}
+\tl_gset:Nn \g__tbl_table_cols_tl {0}  % indicates outer level
+\tl_new:N \l__tbl_saved_col_tl
+\tl_new:N \l__tbl_saved_row_tl
+\tl_new:N \l__tbl_saved_span_tl
+\tl_new:N \l__tbl_saved_table_cols_tl
+
+\tl_set:Nn \l__tbl_saved_col_tl{0}
+\tl_set:Nn \l__tbl_saved_row_tl{0}
+\tl_set:Nn \l__tbl_saved_span_tl{1}
+\tl_set:Nn \l__tbl_saved_table_cols_tl{0}  % indicates outer level
+\tl_new:N  \g__tbl_struct_table_tl
+\tl_new:N  \l__tbl_saved_struct_table_tl
+\seq_new:N \g__tbl_struct_rows_seq
+\seq_new:N \l__tbl_saved_struct_rows_seq
+\seq_new:N \g__tbl_struct_cells_seq
+\seq_new:N \l__tbl_saved_struct_cells_seq
+\seq_new:N \g__tbl_struct_cur_seq
+\seq_new:N \l__tbl_saved_struct_cur_seq
+\def\ar at ialign{%
+  \tl_set:No \l__tbl_saved_col_tl {\int_use:N \g__tbl_col_int }
+  \tl_set:No \l__tbl_saved_row_tl {\int_use:N \g__tbl_row_int }
+  \tl_set_eq:NN \l__tbl_saved_span_tl  \g__tbl_span_tl
+  \tl_set_eq:NN  \l__tbl_saved_struct_table_tl \g__tbl_struct_table_tl
+  \seq_set_eq:NN \l__tbl_saved_struct_rows_seq \g__tbl_struct_rows_seq
+  \seq_set_eq:NN \l__tbl_saved_struct_cells_seq \g__tbl_struct_cells_seq
+  \seq_set_eq:NN \l__tbl_saved_struct_cur_seq \g__tbl_struct_cur_seq
+  \typeout{==>~ saved~cell~data:~
+                \l__tbl_saved_row_tl,
+                \l__tbl_saved_col_tl,
+                \l__tbl_saved_span_tl \space
+                (
+                \int_compare:nNnTF \l__tbl_saved_table_cols_tl = 0
+                    { outer~ level }
+                    { max:~ \l__tbl_saved_table_cols_tl }
+                )
+          }
+  \int_gzero:N \g__tbl_row_int
+  \int_gzero:N \g__tbl_col_int
+  \tl_gset:Nn  \g__tbl_span_tl {1}
+  \seq_gclear:N\g__tbl_struct_rows_seq
+  \seq_gclear:N\g__tbl_struct_cells_seq
+  \seq_gclear:N\g__tbl_struct_cur_seq
+  \everycr{%
+    \noalign{%
+      \int_compare:nNnT \g__tbl_col_int > 0
+         { \UseSocket{tagsupport/tblrow/end} }
+      \int_gincr:N \g__tbl_row_int          % this row about to start
+      \int_gzero:N \g__tbl_col_int          % we are before first col
+    }%
+  }%
+  \tabskip\z at skip\halign}
+\long\def\multicolumn#1#2#3{%
+  % alternative: determine first col with vmode test ...
+  %  \ifvmode
+  %    \multispan{#1}\typeout{A==> vmode}%
+  %  \else
+  %    \multispan{#1}\typeout{A==> not vmode}
+  %  \fi
+  % but this makes the \crcr handling really complicated which would
+  % then need to become something like
+  %    \ifvmode \expandafter \@gobble
+  %    \else \expandafter \@iden \fi {\cr\noalign{do something}}%
+  % so not used.
+  % Instead:
+   \multispan{#1}\begingroup
+   \int_compare:nNnTF \g__tbl_col_int = 0
+       {
+         \UseSocket{tagsupport/tblrow/begin}
+         \int_gset:Nn \g__tbl_col_int {1}
+       }
+       {
+         \int_gadd:Nn \g__tbl_col_int { \g__tbl_span_tl }
+       }
+   \tl_gset:Nn \g__tbl_span_tl {#1}
+  \def\@addamp{\if at firstamp\@firstampfalse \else
+                \@preamerr 5\fi}%
+   \@mkpream{#2}\@addtopreamble\@empty
+   \endgroup
+   \__tbl_set_colspan:n {#1}
+   \def\@sharp{#3}%
+   \@arstrut \@preamble
+   \null
+   \ignorespaces}
+\let\@kernel at refstepcounter\refstepcounter
+\def\hyper at nopatch@longtable{}
+\def\__tbl_patch_LT at array[#1]#2{%
+  \UseSocket{tagsupport/tbl/init}%
+  \@kernel at refstepcounter{table}\stepcounter{LT at tables}%
+  \tl_gset:Ne \@currentHref {table.\cs_if_exist_use:N\theHtable}
+  \int_gzero:N \g__tbl_row_int
+  \seq_gclear:N\g__tbl_struct_rows_seq
+  \seq_gclear:N\g__tbl_struct_cells_seq
+  \seq_gclear:N\g__tbl_struct_cur_seq
+  \seq_gclear:N\g__tbl_LT at firsthead_rows_seq
+  \seq_gclear:N\g__tbl_LT at head_rows_seq
+  \seq_gclear:N\g__tbl_LT at lastfoot_rows_seq
+  \seq_gclear:N\g__tbl_LT at foot_rows_seq
+  \if l#1%
+    \LTleft\z@ \LTright\fill
+  \else\if r#1%
+    \LTleft\fill \LTright\z@
+  \else\if c#1%
+    \LTleft\fill \LTright\fill
+  \fi\fi\fi
+  \let\LT at mcol\multicolumn
+  \let\LT@@tabarray\@tabarray
+  \let\LT@@hl\hline
+  \def\@tabarray{%
+    \let\hline\LT@@hl
+    \LT@@tabarray}%
+  \let\\\LT at tabularcr
+  \let\tabularnewline\\%
+  \def\newpage{\noalign{\break}}%
+  \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT at no@pgbk-}4}%
+  \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT at no@pgbk4}%
+  \let\hline\LT at hline \let\kill\LT at kill\let\caption\LT at caption
+  \@tempdima\ht\strutbox
+  \let\@endpbox\LT at endpbox
+  \ifx\extrarowheight\@undefined
+    \let\@acol\@tabacol
+    \let\@classz\@tabclassz \let\@classiv\@tabclassiv
+    \def\@startpbox{\vtop\LT at startpbox}%
+    \let\@@startpbox\@startpbox
+    \let\@@endpbox\@endpbox
+    \let\LT at LL@FM at cr\@tabularcr
+  \else
+    \advance\@tempdima\extrarowheight
+    \col at sep\tabcolsep
+    \let\@startpbox\LT at startpbox\let\LT at LL@FM at cr\@arraycr
+  \fi
+  \setbox\@arstrutbox\hbox{\vrule
+    \@height \arraystretch \@tempdima
+    \@depth \arraystretch \dp \strutbox
+    \@width \z@}%
+  \let\@sharp##\let\protect\relax
+   \begingroup
+    \@mkpream{#2}%
+    \__tbl_determine_table_cols:
+    \xdef\LT at bchunk{%
+       \int_gzero:N \g__tbl_col_int
+       \global\advance\c at LT@chunks\@ne
+       \global\LT at rows\z@\setbox\z@\vbox\bgroup
+       \LT at setprevdepth
+       \tabskip\LTleft \noexpand\halign to\hsize\bgroup
+       \tabskip\z@ \@arstrut
+       \UseSocket{tagsupport/tblrow/begin}%
+       \__tbl_init_cell_data:
+       \@preamble \tabskip\LTright \cr}%
+  \endgroup
+  \expandafter\LT at nofcols\LT at bchunk&\LT at nofcols
+  \LT at make@row
+  \m at th\let\par\@empty
+  \everycr{%
+    \noalign{%
+      \typeout{--longtable-->~chunk~row:~ \the\LT at rows \space
+               row:~ \the\g__tbl_row_int   \space
+               column:~ \the\g__tbl_col_int
+      }
+      \int_compare:nNnT \g__tbl_col_int > 0
+          {
+            \UseSocket{tagsupport/tblrow/end}
+          }
+      \int_gzero:N \g__tbl_col_int           % before first col
+      \int_compare:nNnT \LT at rows < \LTchunksize
+         { \int_gincr:N \g__tbl_row_int  }   % this row about to start
+    }%
+  }%
+  \lineskip\z@\baselineskip\z@
+  \LT at bchunk}
+\def\__tbl_patch_endlongtable{%
+  \__tbl_store_missing_cells:n{endlongtable}
+  \crcr
+  \noalign{%
+    \UseSocket{tagsupport/tbl/finalize/longtable}
+    \int_gzero:N \g__tbl_row_int      % this prevents considering the next
+                                    % \crcr as another row end.
+    \let\LT at entry\LT at entry@chop
+    \xdef\LT at save@row{\LT at save@row}}%
+  \LT at echunk
+  \LT at start
+  \unvbox\z@
+  \LT at get@widths
+  \if at filesw
+    {\let\LT at entry\LT at entry@write\immediate\write\@auxout{%
+      \gdef\expandafter\noexpand
+        \csname LT@\romannumeral\c at LT@tables\endcsname
+          {\LT at save@row}}}%
+  \fi
+  \ifx\LT at save@row\LT@@save at row
+  \else
+    \LT at warn{Column~\@width s~have~changed\MessageBreak
+             in~table~\thetable}%
+    \LT at final@warn
+  \fi
+  \endgraf\penalty -\LT at end@pen
+  \ifvoid\LT at foot\else
+    \global\advance\vsize\ht\LT at foot
+    \global\advance\@colroom\ht\LT at foot
+    \dimen@\pagegoal\advance\dimen@\ht\LT at foot\pagegoal\dimen@
+  \fi
+  \endgroup
+  \global\@mparbottom\z@
+  \endgraf\penalty\z@\addvspace\LTpost
+  \ifvoid\footins\else\insert\footins{}\fi}
+\def\__tbl_patch_LT at t@bularcr{%
+  \global\advance\LT at rows\@ne
+  \ifnum\LT at rows=\LTchunksize
+    \__tbl_store_missing_cells:n{echunk}
+    \gdef\LT at setprevdepth{%
+      \prevdepth\z@
+      \global\let\LT at setprevdepth\relax}%
+    \expandafter\LT at xtabularcr
+  \else
+    \ifnum0=`{}\fi
+    \expandafter\LT at LL@FM at cr
+  \fi}
+
+\def\__tbl_patch_LT at end@hd at ft#1{%
+  \__tbl_store_missing_cells:n{head/foot}
+  \int_step_inline:nn
+   { \LT at rows + 1 }
+   {
+     \seq_gput_left:ce
+       {g__tbl_\cs_to_str:N #1 _rows_seq }
+       { \int_eval:n {\g__tbl_row_int + 1 - ##1 } }
+   }
+  \int_gset:Nn \LT at rows { \LTchunksize }
+  \LT at echunk
+  \ifx\LT at start\endgraf
+    \LT at err
+     {Longtable head or foot not at start of table}%
+     {Increase LTchunksize}%
+  \fi
+  \setbox#1\box\z@
+  \LT at get@widths
+  \LT at bchunk}
+
+\def\__tbl_patch_LT at start{%
+  \let\LT at start\endgraf
+  \endgraf\penalty\z@\vskip\LTpre\endgraf
+   \ifdim \pagetotal<\pagegoal \else
+      \dimen@=\pageshrink
+      \advance \dimen@ 1sp %
+      \kern\dimen@\penalty 9999\endgraf \kern-\dimen@
+   \fi
+  \dimen@\pagetotal
+  \advance\dimen@ \ht\ifvoid\LT at firsthead\LT at head\else\LT at firsthead\fi
+  \advance\dimen@ \dp\ifvoid\LT at firsthead\LT at head\else\LT at firsthead\fi
+  \advance\dimen@ \ht\LT at foot
+  \edef\LT at reset@vfuzz{\vfuzz\the\vfuzz\vbadness\the\vbadness\relax}%
+  \vfuzz\maxdimen
+  \vbadness\@M
+  \setbox\tw@\copy\z@
+  \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox
+  \setbox\tw@\vbox{\unvbox\tw@}%
+  \LT at reset@vfuzz
+  \advance\dimen@ \ht
+        \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi
+  \advance\dimen@\dp
+        \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi
+  \advance\dimen@ -\pagegoal
+  \ifdim \dimen@>\z@
+    \vfil\break
+  \else
+    \ifdim\pageshrink>\z@\pageshrink\z@\fi
+  \fi
+      \global\@colroom\@colht
+  \ifvoid\LT at foot\else
+    \global\advance\vsize-\ht\LT at foot
+    \global\advance\@colroom-\ht\LT at foot
+    \dimen@\pagegoal\advance\dimen at -\ht\LT at foot\pagegoal\dimen@
+    \maxdepth\z@
+  \fi
+  \MakeLinkTarget{table}
+  \ifvoid\LT at firsthead\copy\LT at head\else\box\LT at firsthead\fi\nobreak
+  \tagmcbegin{artifact}
+   \tag_mc_reset_box:N\LT at head
+  \tagmcend
+  \output{\LT at output}}
+\def\__tbl_patch_LT at output{%
+  \ifnum\outputpenalty <-\@Mi
+    \ifnum\outputpenalty > -\LT at end@pen
+      \LT at err{floats and marginpars not allowed in a longtable}\@ehc
+    \else
+      \setbox\z@\vbox{\unvbox\@cclv}%
+      \ifdim \ht\LT at lastfoot>\ht\LT at foot
+        \dimen@\pagegoal
+        \advance\dimen@\ht\LT at foot
+        \advance\dimen at -\ht\LT at lastfoot
+        \ifdim\dimen@<\ht\z@
+          \setbox\@cclv\vbox{\unvbox\z@\copy\LT at foot\vss}%
+          \@makecol
+          \@outputpage
+          \global\vsize\@colroom
+          \setbox\z@\vbox{\box\LT at head}%
+        \fi
+      \fi
+        \unvbox\z@\box\ifvoid\LT at lastfoot\LT at foot\else\LT at lastfoot\fi
+        \tagmcbegin{artifact}
+        \tag_mc_reset_box:N \LT at foot
+        \tagmcend
+    \fi
+  \else
+    \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT at foot\vss}%
+    \tagmcbegin{artifact}
+    \tag_mc_reset_box:N \LT at foot
+    \tagmcend
+    \@makecol
+    \@outputpage
+      \global\vsize\@colroom
+    \copy\LT at head\nobreak
+  \fi}
+\def\__tbl_patch_LT at makecaption#1#2#3{%
+  \LT at mcol\LT at cols c{%
+  % test can go after merge
+    \str_if_exist:cT { l__socket_tagsupport/parbox/before_plug_str }
+      {
+        \AssignSocketPlug{tagsupport/parbox/before}{noop}
+        \AssignSocketPlug{tagsupport/parbox/after}{noop}
+      }
+    \hbox to\z@{\hss\parbox[t]\LTcapwidth{%
+    \reset at font
+    \tag_stop:n{caption}
+    \sbox\@tempboxa{#1{#2:~}#3}%
+    \tag_start:n{caption}
+    \ifdim\wd\@tempboxa>\hsize
+      #1{#2:~}#3%
+    \else
+      \hbox to\hsize{\hfil#1{#2:~}#3\hfil}%
+    \fi
+    \endgraf\vskip\baselineskip}%
+  \hss}}}
+\AddToHook{package/longtable/after}
+  {
+   \seq_new:N \g__tbl_LT at firsthead_rows_seq
+   \seq_new:N \g__tbl_LT at head_rows_seq
+   \seq_new:N \g__tbl_LT at lastfoot_rows_seq
+   \seq_new:N \g__tbl_LT at foot_rows_seq
+   \cs_set_eq:NN \LT at array\__tbl_patch_LT at array
+   \cs_set_eq:NN \endlongtable\__tbl_patch_endlongtable
+   \cs_set_eq:NN \LT at start\__tbl_patch_LT at start
+   \cs_set_eq:NN \LT at output\__tbl_patch_LT at output
+   \cs_set_eq:NN \LT at t@bularcr\__tbl_patch_LT at t@bularcr
+   \cs_set_eq:NN \LT at end@hd at ft\__tbl_patch_LT at end@hd at ft
+   \cs_set_eq:NN \LT at makecaption\__tbl_patch_LT at makecaption
+  }
+
+\def\__tbl_patch_TX at endtabularx{%
+   \expandafter\expandafter\expandafter
+     \TX at find@endtabularxa\csname end\TX@\endcsname
+     \endtabularx\TX@\endtabularx\TX at find@endtabularxa
+  \expandafter\TX at newcol\expandafter{\tabularxcolumn{\TX at col@width}}%
+  \let\verb\TX at verb
+  \def\@elt##1{\global\value{##1}\the\value{##1}\relax}%
+  \edef\TX at ckpt{\cl@@ckpt}%
+  \let\@elt\relax
+  \TX at old@table\maxdimen
+  \TX at col@width\TX at target
+  \global\TX at cols\@ne
+  \TX at typeout@
+    {\@spaces Table Width\@spaces Column Width\@spaces X Columns}%
+  \tag_stop:n{tabularx}
+  \TX at trial{\def\NC at rewrite@X{%
+          \global\advance\TX at cols\@ne\NC at find p{\TX at col@width}}}%
+  \loop
+    \TX at arith
+    \ifTX@
+    \TX at trial{}%
+  \repeat
+  \tag_start:n{tabularx}
+  {\let\@footnotetext\TX at ftntext\let\@xfootnotenext\TX at xftntext
+    \csname tabular*\expandafter\endcsname\expandafter\TX at target
+      \the\toks@
+    \csname endtabular*\endcsname}%
+  \global\TX at ftn\expandafter{\expandafter}\the\TX at ftn
+  \ifnum0=`{\fi}%
+   \expandafter\expandafter\expandafter
+   \TX at find@endtabularxbb
+    \expandafter\end\expandafter{\TX@}%
+    \endtabularx\TX@\endtabularx\TX at find@endtabularxb
+}
+
+\AddToHook{package/tabularx/after}
+  {\cs_set_eq:NN \TX at endtabularx\__tbl_patch_TX at endtabularx }
+\endinput
+%%
+%% End of file `latex-lab-testphase-table.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-table.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-toc.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-toc.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-toc.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -36,13 +36,13 @@
 %% 
 %% 
 %% File: latex-lab-toc.dtx (C) Copyright 2022-2023 LaTeX Project
-\def\ltlabtocdate{2023-07-20}
-\def\ltlabtocversion{0.85a}
+\def\ltlabtocdate{2023-10-16}
+\def\ltlabtocversion{0.85b}
 \ProvidesExplPackage {latex-lab-testphase-toc} {\ltlabtocdate} {\ltlabtocversion}
   { Code related to the tagging of toc-like lists}
 %% File: latex-lab-toc-kernel-changes.dtx (C) Copyright 2022-2023 LaTeX Project
-\def\ltlabkerneldate{2023-07-20}
-\def\ltlabkernelversion{0.85a}
+\def\ltlabkerneldate{2023-10-16}
+\def\ltlabkernelversion{0.85b}
 \RequirePackage{latex-lab-kernel-changes}
 \def\@contentsline at cfgpoint@before#1#2#3#4{}
 \def\@contentsline at cfgpoint@after#1#2#3#4{}
@@ -276,17 +276,14 @@
      \fi}
  }
 %% File: latex-lab-toc.dtx (C) Copyright 2022-2023 LaTeX Project
-\def\ltlabtocdate{2023-07-20}
-\def\ltlabtocversion{0.85a}
+\def\ltlabtocdate{2023-10-16}
+\def\ltlabtocversion{0.85b}
 \tl_new:N \l__tag_toc_tmpa_tl
 \AddToHook{cmd/refstepcounter/after}
  {
    \tl_if_blank:VF \@currentHref
     {
-      \prop_if_exist:NT \g__tag_struct_dest_num_prop
-        {
-         \prop_gput:Nxx \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
-        }
+      \prop_gput:Nee \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
     }
  }
 \AddToHook{cmd/H at refstepcounter/after}
@@ -293,10 +290,7 @@
  {
    \tl_if_blank:VF \@currentHref
     {
-      \prop_if_exist:NT \g__tag_struct_dest_num_prop
-        {
-          \prop_gput:Nxx \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
-        }
+      \prop_gput:Nee \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
     }
  }
 \msg_new:nnn { tag } {struct-dest-unknown}

Modified: trunk/Master/texmf-dist/tex/latex-dev/latex-lab/minipage-latex-lab-testphase.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/latex-lab/minipage-latex-lab-testphase.ltx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/latex-lab/minipage-latex-lab-testphase.ltx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -33,8 +33,8 @@
 %% 
 %% 
 %% File: latex-lab-minipage.dtx (C) Copyright 2023 LaTeX Project
-\def\ltlabminipagedate{2023-08-20}
-\def\ltlabminipageversion{0.81b}
+\def\ltlabminipagedate{2023-10-30}
+\def\ltlabminipageversion{0.81c}
 
 \ProvidesFile{minipage-latex-lab-testphase.ltx}
         [\ltlabminipagedate\space v\ltlabminipageversion

Modified: trunk/Master/texmf-dist/tex/latex-dev/latex-lab/sec-latex-lab-testphase.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/latex-lab/sec-latex-lab-testphase.ltx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/latex-lab/sec-latex-lab-testphase.ltx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -33,8 +33,8 @@
 %% 
 %% 
 %% File: latex-lab-sec.dtx (C) Copyright 2022-2023 LaTeX Project
-\def\ltlabsecdate{2023-07-20}
-\def\ltlabsecversion{0.84a}
+\def\ltlabsecdate{2023-10-16}
+\def\ltlabsecversion{0.84b}
 
 \ProvidesFile{sec-latex-lab-testphase.ltx}
         [\ltlabsecdate\space v\ltlabsecversion\space latex-lab wrapper sec]

Added: trunk/Master/texmf-dist/tex/latex-dev/latex-lab/table-latex-lab-testphase.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/latex-lab/table-latex-lab-testphase.ltx	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex-dev/latex-lab/table-latex-lab-testphase.ltx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -0,0 +1,43 @@
+%%
+%% This is file `table-latex-lab-testphase.ltx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% latex-lab-table.dtx  (with options: `latex-lab')
+%% 
+%% This is a generated file.
+%% 
+%% Copyright 2021-2023 LaTeX Project
+%% 
+%% This file was generated from file(s) of the  `LaTeX-lab Bundle'.
+%% ------------------------------------------------------------------------------------
+%% 
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008 or later.
+%% 
+%% This file may only be distributed together with a copy of the LaTeX
+%% `LaTeX-lab Bundle'. You may however distribute the `LaTeX-lab Bundle'
+%% without such generated files.
+%% 
+%% The newest sources can be found below
+%% 
+%%    https://github.com/latex3/latex2e/required/latex-lab
+%% 
+%% where one can also log issues in case there are any.
+%% 
+%% 
+%% File: latex-lab-table.dtx (C) Copyright 2023 LaTeX Project
+\def\ltlabtbldate{2023-10-30}
+\def\ltlabtblversion{0.85d}
+\ProvidesFile{table-latex-lab-testphase.ltx}
+        [\ltlabtbldate\space v\ltlabtblversion\space latex-lab wrapper table]
+\RequirePackage{latex-lab-testphase-table}
+\endinput
+%%
+%% End of file `table-latex-lab-testphase.ltx'.


Property changes on: trunk/Master/texmf-dist/tex/latex-dev/latex-lab/table-latex-lab-testphase.ltx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex-dev/latex-lab/toc-latex-lab-testphase.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/latex-lab/toc-latex-lab-testphase.ltx	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/latex-lab/toc-latex-lab-testphase.ltx	2023-11-02 19:56:02 UTC (rev 68730)
@@ -33,8 +33,8 @@
 %% 
 %% 
 %% File: latex-lab-toc.dtx (C) Copyright 2022-2023 LaTeX Project
-\def\ltlabtocdate{2023-07-20}
-\def\ltlabtocversion{0.85a}
+\def\ltlabtocdate{2023-10-16}
+\def\ltlabtocversion{0.85b}
 \ProvidesFile{toc-latex-lab-testphase.ltx}
         [\ltlabtocdate\space v\ltlabtocversion latex-lab wrapper toc]
 

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/afterpage.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/afterpage.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/afterpage.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -37,7 +37,7 @@
 %% File: afterpage.dtx Copyright (C) 1994 1994 1995 David Carlisle
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{afterpage}
-         [2014/10/28 v1.08 After-Page Package (DPC)]
+         [2023/07/04 v1.08 After-Page Package (DPC)]
 \newtoks\AP at output
 \global\AP at output\expandafter{\the\output}
 \newbox\AP at partial

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/array.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/array.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/array.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -46,7 +46,7 @@
 \DeclareCurrentRelease{}{2020-10-01}
 
 \ProvidesPackage{array}
-         [2022/09/04 v2.5g Tabular extension package (FMi)]
+         [2023/10/16 v2.5g Tabular extension package (FMi)]
 %%
 
 \def\@addtopreamble#1{\xdef\@preamble{\@preamble #1}}
@@ -194,7 +194,6 @@
 \def\@xargarraycr#1{\unskip\gdef\do at row@strut
  {\@tempdima #1\advance\@tempdima \dp\@arstrutbox
    \vrule \@depth\@tempdima \@width\z@\global\let\do at row@strut\relax}%
- %    \begin{macrocode}
    \ifnum\@multicnt >\z@ \do at row@strut \fi
    \cr}
 \let\do at row@strut\relax

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/bm.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/bm.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/bm.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -40,7 +40,7 @@
 %% Development of this package was commissioned by Y&Y Inc.
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{bm}
-          [2022/01/05 v1.2f Bold Symbol Support (DPC/FMi)]
+          [2023/07/08 v1.2f Bold Symbol Support (DPC/FMi)]
 \DeclareOption{nopmb}{\let\bm at pmb@\@firstofone}
 \DeclareOption{warn}{\def\bm at info{\PackageWarningNoLine{bm}}}
 \DeclareOption{info}{\def\bm at info#1{\PackageInfo{bm}{#1\@gobble}}}

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/calc.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/calc.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/calc.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -47,7 +47,7 @@
 %% the normal LaTeX bug report address.
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{calc}
-          [2017/05/25 v4.3 Infix arithmetic (KKT,FJ)]
+          [2023/07/08 v4.3 Infix arithmetic (KKT,FJ)]
 \def\calc at assign@generic#1#2#3#4{\let\calc at A#1\let\calc at B#2%
     \calc at open(#4!%
     \global\calc at A\calc at B\endgroup#3\calc at B}

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/dcolumn.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/dcolumn.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/dcolumn.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -38,7 +38,7 @@
 %% File: dcolumn.dtx Copyright (C) 1992-1996 1999-2001 David Carlisle
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{dcolumn}
-          [2014/10/28 v1.06 decimal alignment package (DPC)]
+          [2023/07/08 v1.06 decimal alignment package (DPC)]
 \RequirePackage{array}
 \def\DC@#1#2#3{%
   \uccode`\~=`#1\relax

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/enumerate.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/enumerate.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/enumerate.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -38,7 +38,7 @@
 %% File: enumerate.dtx Copyright  1993 1994 1999 David Carlisle
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{enumerate}
-          [2015/07/23 v3.00 enumerate extensions (DPC)]
+          [2023/07/04 v3.00 enumerate extensions (DPC)]
 \newtoks\@enLab
 \def\@enQmark{?}
 \def\@enLabel#1#2{%

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/ftnright.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/ftnright.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/ftnright.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -39,7 +39,7 @@
 %% Copyright (C) 1989-2004 Frank Mittelbach, all rights reserved.
 \NeedsTeXFormat{LaTeX2e}[1995/06/01]
 \ProvidesPackage{ftnright}
-         [2014/10/28 v1.1f footnote layout package (FMi)]
+         [2023/07/08 v1.1f footnote layout package (FMi)]
 %%
 %%
 \def\preparefootins{%

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/indentfirst.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/indentfirst.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/indentfirst.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -38,7 +38,7 @@
 %% File: indent.dtx Copyright (C) 1991-1994 David Carlisle
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{indentfirst}
-         [1995/11/23 v1.03 Indent first paragraph (DPC)]
+         [2023/07/02 v1.03 Indent first paragraph (DPC)]
 \let\@afterindentfalse\@afterindenttrue
 \@afterindenttrue
 \endinput

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/layout.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/layout.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/layout.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -37,7 +37,7 @@
 %% 
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{layout}
-                [2021-03-10 v1.2e Show layout parameters]
+                [2023-08-20 v1.2e Show layout parameters]
 \DeclareOption{dutch}{%
   \def\Headertext{Kopregel}
   \def\Bodytext{Broodtekst}

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/longtable.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/longtable.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/longtable.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -43,7 +43,7 @@
 \DeclareCurrentRelease{}{2020-02-07}
 
 \ProvidesPackage{longtable}
-          [2021-09-01 v4.17 Multi-page Table package (DPC)]
+          [2023-11-01 v4.19 Multi-page Table package (DPC)]
 \def\LT at err{\PackageError{longtable}}
 \def\LT at warn{\PackageWarning{longtable}}
 \def\LT at final@warn{%
@@ -458,7 +458,10 @@
     \let\@footnotetext\LT at p@ftntext
     \setlength\hsize{#1}%
     \@arrayparboxrestore
-    \vrule \@height \ht\@arstrutbox \@width \z@}
+    \everypar{%
+      \vrule \@height \ht\@arstrutbox \@width \z@
+      \everypar{}}%
+    }
 \def\LT at endpbox{%
   \@finalstrut\@arstrutbox
   \color at endgroup

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/shellesc.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/shellesc.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/shellesc.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -49,7 +49,7 @@
 \ifx\PackageWarning\undefined\def\PackageWarning#1#2{\wlog{#1: #2}}\fi
 \expandafter\next\fi
 \ProvidesPackage{shellesc}
-       [2023/04/15 v1.0d unified shell escape interface for LaTeX]
+       [2023/07/08 v1.0d unified shell escape interface for LaTeX]
 \chardef\shellesc at quotecat\catcode`\"
 \chardef\shellesc at underscorecat\catcode`\_
 \@makeother\"

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/showkeys.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/showkeys.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/showkeys.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -46,7 +46,7 @@
 \DeclareCurrentRelease{}{2022-06-01}
 
 \ProvidesPackage{showkeys}
-          [2023/05/11 v3.19 Show cite and label keys (DPC, MH)]
+          [2023/07/08 v3.19 Show cite and label keys (DPC, MH)]
 \DeclareOption{notref}{\let\SK at ref\@empty}
 \DeclareOption{notcite}{\let\SK at cite\@empty}
 \let\SK at refcolor\relax

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/tabularx.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/tabularx.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/tabularx.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -37,7 +37,7 @@
 %% File: tabularx.dtx Copyright (C) 1991-1999 2012 2014 2016 2017 David Carlisle
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{tabularx}
-          [2020/01/15 v2.11c `tabularx' package (DPC)]
+          [2023/07/08 v2.11c `tabularx' package (DPC)]
 \DeclareOption{infoshow}{\AtEndOfPackage\tracingtabularx}
 \DeclareOption{debugshow}{\AtEndOfPackage\tracingtabularx}
 \ProcessOptions

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/thb.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/thb.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/thb.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -36,7 +36,7 @@
 %% given in the file `manifest.txt'.
 %% 
 %%
-\def\FMithmInfo{2014/10/28 v2.2c Theorem extension package (FMi)}
+\def\FMithmInfo{2023/07/05 v2.2c Theorem extension package (FMi)}
 %%
 %% Package `theorem' to use with LaTeX2e
 %% Copyright (C) 1989-1995 Frank Mittelbach, all rights reserved.

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/thc.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/thc.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/thc.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -36,7 +36,7 @@
 %% given in the file `manifest.txt'.
 %% 
 %%
-\def\FMithmInfo{2014/10/28 v2.2c Theorem extension package (FMi)}
+\def\FMithmInfo{2023/07/05 v2.2c Theorem extension package (FMi)}
 %%
 %% Package `theorem' to use with LaTeX2e
 %% Copyright (C) 1989-1995 Frank Mittelbach, all rights reserved.

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/thcb.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/thcb.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/thcb.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -36,7 +36,7 @@
 %% given in the file `manifest.txt'.
 %% 
 %%
-\def\FMithmInfo{2014/10/28 v2.2c Theorem extension package (FMi)}
+\def\FMithmInfo{2023/07/05 v2.2c Theorem extension package (FMi)}
 %%
 %% Package `theorem' to use with LaTeX2e
 %% Copyright (C) 1989-1995 Frank Mittelbach, all rights reserved.

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/theorem.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/theorem.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/theorem.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -36,7 +36,7 @@
 %% given in the file `manifest.txt'.
 %% 
 %%
-\def\FMithmInfo{2014/10/28 v2.2c Theorem extension package (FMi)}
+\def\FMithmInfo{2023/07/05 v2.2c Theorem extension package (FMi)}
 %%
 %% Package `theorem' to use with LaTeX2e
 %% Copyright (C) 1989-1995 Frank Mittelbach, all rights reserved.

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/thm.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/thm.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/thm.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -36,7 +36,7 @@
 %% given in the file `manifest.txt'.
 %% 
 %%
-\def\FMithmInfo{2014/10/28 v2.2c Theorem extension package (FMi)}
+\def\FMithmInfo{2023/07/05 v2.2c Theorem extension package (FMi)}
 %%
 %% Package `theorem' to use with LaTeX2e
 %% Copyright (C) 1989-1995 Frank Mittelbach, all rights reserved.

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/thmb.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/thmb.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/thmb.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -36,7 +36,7 @@
 %% given in the file `manifest.txt'.
 %% 
 %%
-\def\FMithmInfo{2014/10/28 v2.2c Theorem extension package (FMi)}
+\def\FMithmInfo{2023/07/05 v2.2c Theorem extension package (FMi)}
 %%
 %% Package `theorem' to use with LaTeX2e
 %% Copyright (C) 1989-1995 Frank Mittelbach, all rights reserved.

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/thp.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/thp.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/thp.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -36,7 +36,7 @@
 %% given in the file `manifest.txt'.
 %% 
 %%
-\def\FMithmInfo{2014/10/28 v2.2c Theorem extension package (FMi)}
+\def\FMithmInfo{2023/07/05 v2.2c Theorem extension package (FMi)}
 %%
 %% Package `theorem' to use with LaTeX2e
 %% Copyright (C) 1989-1995 Frank Mittelbach, all rights reserved.

Modified: trunk/Master/texmf-dist/tex/latex-dev/tools/xr.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/tools/xr.sty	2023-11-02 19:54:18 UTC (rev 68729)
+++ trunk/Master/texmf-dist/tex/latex-dev/tools/xr.sty	2023-11-02 19:56:02 UTC (rev 68730)
@@ -38,7 +38,7 @@
 %% File: xr.dtx Copyright (C) 1993-2019 David Carlisle
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{xr}
-         [2020-05-10 v5.06 eXternal References (DPC)]
+         [2023-07-04 v5.06 eXternal References (DPC)]
 \def\externaldocument{\@ifnextchar[\XR@{\XR@[]}}
 \let\externalcitedocument\externaldocument
 \def\XR@[#1]#2{{%



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