summaryrefslogtreecommitdiff
path: root/macros/latex-dev/required/tools
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2024-02-15 03:01:30 +0000
committerNorbert Preining <norbert@preining.info>2024-02-15 03:01:30 +0000
commit5b6839a58ea5468b40ebd52b579e680b8e62ff13 (patch)
tree1dfc09f53794115129a07bf566b466cc337606f5 /macros/latex-dev/required/tools
parenta90336c3069c198b41b7b6eb76e3389610ad5eb7 (diff)
CTAN sync 202402150301
Diffstat (limited to 'macros/latex-dev/required/tools')
-rw-r--r--macros/latex-dev/required/tools/README.md2
-rw-r--r--macros/latex-dev/required/tools/afterpage.dtx2
-rw-r--r--macros/latex-dev/required/tools/afterpage.ins4
-rw-r--r--macros/latex-dev/required/tools/afterpage.pdfbin198100 -> 198100 bytes
-rw-r--r--macros/latex-dev/required/tools/array-2023-11-01.sty375
-rw-r--r--macros/latex-dev/required/tools/array.dtx465
-rw-r--r--macros/latex-dev/required/tools/array.pdfbin517410 -> 838028 bytes
-rw-r--r--macros/latex-dev/required/tools/bm.dtx10
-rw-r--r--macros/latex-dev/required/tools/bm.ins4
-rw-r--r--macros/latex-dev/required/tools/bm.pdfbin323929 -> 323640 bytes
-rw-r--r--macros/latex-dev/required/tools/calc.dtx2
-rw-r--r--macros/latex-dev/required/tools/calc.pdfbin370660 -> 370660 bytes
-rw-r--r--macros/latex-dev/required/tools/changes.txt44
-rw-r--r--macros/latex-dev/required/tools/dcolumn.dtx2
-rw-r--r--macros/latex-dev/required/tools/dcolumn.pdfbin221038 -> 221038 bytes
-rw-r--r--macros/latex-dev/required/tools/delarray.dtx2
-rw-r--r--macros/latex-dev/required/tools/delarray.pdfbin191058 -> 191058 bytes
-rw-r--r--macros/latex-dev/required/tools/enumerate.dtx2
-rw-r--r--macros/latex-dev/required/tools/enumerate.pdfbin215077 -> 215077 bytes
-rw-r--r--macros/latex-dev/required/tools/fileerr.dtx2
-rw-r--r--macros/latex-dev/required/tools/fileerr.pdfbin188281 -> 187725 bytes
-rw-r--r--macros/latex-dev/required/tools/fontsmpl.dtx2
-rw-r--r--macros/latex-dev/required/tools/fontsmpl.pdfbin146438 -> 146438 bytes
-rw-r--r--macros/latex-dev/required/tools/ftnright.dtx2
-rw-r--r--macros/latex-dev/required/tools/ftnright.pdfbin387794 -> 387253 bytes
-rw-r--r--macros/latex-dev/required/tools/hhline.dtx2
-rw-r--r--macros/latex-dev/required/tools/hhline.pdfbin189678 -> 189678 bytes
-rw-r--r--macros/latex-dev/required/tools/indentfirst.dtx2
-rw-r--r--macros/latex-dev/required/tools/indentfirst.pdfbin157352 -> 157352 bytes
-rw-r--r--macros/latex-dev/required/tools/layout.dtx2
-rw-r--r--macros/latex-dev/required/tools/layout.pdfbin260278 -> 260278 bytes
-rw-r--r--macros/latex-dev/required/tools/longtable.dtx366
-rw-r--r--macros/latex-dev/required/tools/longtable.ins4
-rw-r--r--macros/latex-dev/required/tools/longtable.pdfbin391258 -> 400149 bytes
-rw-r--r--macros/latex-dev/required/tools/multicol.dtx65
-rw-r--r--macros/latex-dev/required/tools/multicol.ins4
-rw-r--r--macros/latex-dev/required/tools/multicol.pdfbin523618 -> 524502 bytes
-rw-r--r--macros/latex-dev/required/tools/rawfonts.dtx2
-rw-r--r--macros/latex-dev/required/tools/rawfonts.pdfbin138956 -> 138956 bytes
-rw-r--r--macros/latex-dev/required/tools/shellesc.dtx2
-rw-r--r--macros/latex-dev/required/tools/shellesc.pdfbin176171 -> 176171 bytes
-rw-r--r--macros/latex-dev/required/tools/showkeys.dtx10
-rw-r--r--macros/latex-dev/required/tools/showkeys.pdfbin252975 -> 252684 bytes
-rw-r--r--macros/latex-dev/required/tools/somedefs.dtx2
-rw-r--r--macros/latex-dev/required/tools/somedefs.pdfbin167583 -> 167583 bytes
-rw-r--r--macros/latex-dev/required/tools/tabularx.dtx51
-rw-r--r--macros/latex-dev/required/tools/tabularx.ins4
-rw-r--r--macros/latex-dev/required/tools/tabularx.pdfbin287013 -> 289601 bytes
-rw-r--r--macros/latex-dev/required/tools/theorem.dtx2
-rw-r--r--macros/latex-dev/required/tools/theorem.pdfbin352315 -> 351765 bytes
-rw-r--r--macros/latex-dev/required/tools/tools-overview.pdfbin73673 -> 73673 bytes
-rw-r--r--macros/latex-dev/required/tools/tools-overview.tex2
-rw-r--r--macros/latex-dev/required/tools/tools.ins4
-rw-r--r--macros/latex-dev/required/tools/trace.dtx2
-rw-r--r--macros/latex-dev/required/tools/trace.pdfbin222074 -> 222074 bytes
-rw-r--r--macros/latex-dev/required/tools/varioref.dtx2
-rw-r--r--macros/latex-dev/required/tools/varioref.ins4
-rw-r--r--macros/latex-dev/required/tools/varioref.pdfbin393134 -> 393134 bytes
-rw-r--r--macros/latex-dev/required/tools/verbatim.dtx31
-rw-r--r--macros/latex-dev/required/tools/verbatim.pdfbin331003 -> 331587 bytes
-rw-r--r--macros/latex-dev/required/tools/xr.dtx2
-rw-r--r--macros/latex-dev/required/tools/xr.pdfbin170451 -> 170451 bytes
-rw-r--r--macros/latex-dev/required/tools/xspace.dtx2
-rw-r--r--macros/latex-dev/required/tools/xspace.pdfbin257027 -> 257027 bytes
64 files changed, 1328 insertions, 159 deletions
diff --git a/macros/latex-dev/required/tools/README.md b/macros/latex-dev/required/tools/README.md
index c87b522b3c..8c55bf3449 100644
--- a/macros/latex-dev/required/tools/README.md
+++ b/macros/latex-dev/required/tools/README.md
@@ -1,7 +1,7 @@
The LaTeX `tools` bundle
========================
-Release 2024-06-01 pre-release 0
+Release 2024-06-01 pre-release 1
Overview
--------
diff --git a/macros/latex-dev/required/tools/afterpage.dtx b/macros/latex-dev/required/tools/afterpage.dtx
index 518b70761d..72df39402c 100644
--- a/macros/latex-dev/required/tools/afterpage.dtx
+++ b/macros/latex-dev/required/tools/afterpage.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/macros/latex-dev/required/tools/afterpage.ins b/macros/latex-dev/required/tools/afterpage.ins
index 6fec5edc6f..17792ddfa1 100644
--- a/macros/latex-dev/required/tools/afterpage.ins
+++ b/macros/latex-dev/required/tools/afterpage.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2023
+%% Copyright (C) 1993-2024
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -45,7 +45,7 @@ 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) 1993-2023
+Copyright (C) 1993-2024
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/required/tools/afterpage.pdf b/macros/latex-dev/required/tools/afterpage.pdf
index 1e62bd8f2b..a6f340967f 100644
--- a/macros/latex-dev/required/tools/afterpage.pdf
+++ b/macros/latex-dev/required/tools/afterpage.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/array-2023-11-01.sty b/macros/latex-dev/required/tools/array-2023-11-01.sty
new file mode 100644
index 0000000000..cd6eee6a0f
--- /dev/null
+++ b/macros/latex-dev/required/tools/array-2023-11-01.sty
@@ -0,0 +1,375 @@
+%%
+%% This is file `array.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% array.dtx (with options: `package,ncols')
+%%
+%% This is a generated file.
+%%
+%% The source is maintained by the LaTeX Project team and bug
+%% reports for it can be opened at https://latex-project.org/bugs/
+%% (but please observe conditions on bug reports sent to that address!)
+%%
+%%
+%% Copyright (C) 1993-2023
+%% The LaTeX Project and any individual authors listed elsewhere
+%% in this file.
+%%
+%% This file was generated from file(s) of the Standard LaTeX `Tools 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
+%% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle'
+%% without such generated files.
+%%
+%% The list of all files belonging to the LaTeX `Tools Bundle' is
+%% given in the file `manifest.txt'.
+%%
+%% Package `array' to use with LaTeX 2e
+%% Copyright (C) 1989-1998 Frank Mittelbach, all rights reserved.
+\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+\providecommand\DeclareRelease[3]{}
+\providecommand\DeclareCurrentRelease[2]{}
+
+\DeclareRelease{}{2016-10-06}{array-2016-10-06.sty}
+\DeclareRelease{v2.4}{2020-02-10}{array-2020-02-10.sty}
+\DeclareCurrentRelease{}{2020-10-01}
+
+\ProvidesPackage{array}
+ [2023/10/16 v2.5g Tabular extension package (FMi)]
+%%
+
+\def\@addtopreamble#1{\xdef\@preamble{\@preamble #1}}
+\def\@testpach{\@chclass
+ \ifnum \@lastchclass=6 \@ne \@chnum \@ne \else
+ \ifnum \@lastchclass=7 5 \else
+ \ifnum \@lastchclass=8 \tw@ \else
+ \ifnum \@lastchclass=9 \thr@@
+ \else \z@
+ \ifnum \@lastchclass = 10 \else
+ \edef\@nextchar{\expandafter\string\@nextchar}%
+ \@chnum
+ \if \@nextchar c\z@ \else
+ \if \@nextchar l\@ne \else
+ \if \@nextchar r\tw@ \else
+ \z@ \@chclass
+ \if\@nextchar |\@ne \else
+ \if \@nextchar !6 \else
+ \if \@nextchar @7 \else
+ \if \@nextchar <8 \else
+ \if \@nextchar >9 \else
+ 10
+ \@chnum
+ \if \@nextchar m\thr@@\else
+ \if \@nextchar p4 \else
+ \if \@nextchar b5 \else
+ \z@ \@chclass \z@ \@preamerr \z@ \fi \fi \fi \fi
+ \fi \fi \fi \fi \fi \fi \fi \fi \fi \fi \fi \fi}
+\def\@xexpast#1*#2#3#4\@@{%
+ \@tempcnta #2
+ \toks@={#1}\@temptokena={#3}%
+ \let\the@toksz\relax \let\the@toks\relax
+ \def\@tempa{\the@toksz}%
+ \ifnum\@tempcnta >0 \@whilenum\@tempcnta >0\do
+ {\edef\@tempa{\@tempa\the@toks}\advance \@tempcnta \m@ne}%
+ \let \@tempb \@xexpast \else
+ \let \@tempb \@xexnoop \fi
+ \def\the@toksz{\the\toks@}\def\the@toks{\the\@temptokena}%
+ \edef\@tempa{\@tempa}%
+ \expandafter \@tempb \@tempa #4\@@}
+\def\prepnext@tok{\advance \count@ \@ne
+ \toks\count@{}}
+\def\save@decl{\toks\count@ \expandafter{\@nextchar}}
+\def\insert@column{%
+ \the@toks \the \@tempcnta
+ \ignorespaces \@sharp \unskip
+ \the@toks \the \count@ \relax}
+\newdimen\col@sep
+\def\@acol{\@addtopreamble{\hskip\col@sep}}
+\def\@classx{%
+ \ifcase \@lastchclass
+ \@acolampacol \or
+ \@addamp \@acol \or
+ \@acolampacol \or
+ \or
+ \@acol \@firstampfalse \or
+ \@addamp
+ \fi}
+\def\@classz{\@classx
+ \@tempcnta \count@
+ \prepnext@tok
+ \@addtopreamble{\ifcase \@chnum
+ \hfil
+ \hskip1sp%
+ \d@llarbegin
+ \insert@column
+ \d@llarend \do@row@strut \hfil \or
+ \hskip1sp\d@llarbegin \insert@column \d@llarend \do@row@strut \hfil \or
+ \hfil\hskip1sp\d@llarbegin \insert@column \d@llarend \do@row@strut \or
+ \setbox\ar@mcellbox\vbox
+ \@startpbox{\@nextchar}\insert@column \@endpbox
+ \ar@align@mcell
+ \do@row@strut \or
+ \vtop \@startpbox{\@nextchar}\insert@column \@endpbox\do@row@strut \or
+ \vbox \@startpbox{\@nextchar}\insert@column \@endpbox\do@row@strut
+ \fi}\prepnext@tok}
+
+\newbox\ar@mcellbox
+\def\ar@align@mcell{%
+ \ifdim \ht\ar@mcellbox > \ht\strutbox
+ \begingroup
+ \dimen@\ht\ar@mcellbox
+ \advance\dimen@-\ht\@arstrutbox
+ \advance\dimen@\baselineskip
+ \lower.5\dimen@\box\ar@mcellbox
+ \endgroup
+ \else % assume one line and align at baseline
+ \box\ar@mcellbox
+ \fi}
+
+\def\@arrayrule{\@addtopreamble \vline}
+\def\@classvii{\ifnum \@lastchclass = \thr@@
+ \@preamerr \thr@@ \fi}
+\def\@classvi{\ifcase \@lastchclass
+ \@acol \or
+ \@addtopreamble{\hskip \doublerulesep}\or
+ \@acol \or
+ \@classvii
+ \fi}
+\def\@classii{\advance \count@ \m@ne
+ \save@decl\prepnext@tok}
+\def\@classi{\@classvi
+ \ifcase \@chnum \@arrayrule \or
+ \@classv \fi}
+\def\@startpbox#1{\bgroup
+ \color@begingroup
+ \setlength\hsize{#1}\@arrayparboxrestore
+ \everypar{%
+ \vrule \@height \ht\@arstrutbox \@width \z@
+ \everypar{}}%
+ }
+\def\@endpbox{\@finalstrut\@arstrutbox \par \color@endgroup \egroup\hfil}
+\def\@array[#1]#2{%
+ \@tempdima \ht \strutbox
+ \advance \@tempdima by\extrarowheight
+ \setbox \@arstrutbox \hbox{\vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@}%
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\@preamble{\noexpand \ialign \@halignto
+ \bgroup \@arstrut \@preamble
+ \tabskip \z@ \cr}%
+ \endgroup
+ \@arrayleft
+ \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi \fi
+ \bgroup
+ \let \@sharp ##\let \protect \relax
+ \lineskip \z@
+ \baselineskip \z@
+ \m@th
+ \let\\\@arraycr \let\tabularnewline\\\let\par\@empty \@preamble}
+\def\arraybackslash{\let\\\tabularnewline}
+\newdimen \extrarowheight
+\extrarowheight=0pt
+\def\@arstrut{\unhcopy\@arstrutbox}
+\protected\def\@arraycr{\relax\iffalse{\fi\ifnum 0=`}\fi
+ \@ifstar \@xarraycr \@xarraycr}
+\def\@xarraycr{\@ifnextchar [%
+ \@argarraycr {\ifnum 0=`{}\fi\cr}}
+\def\@argarraycr[#1]{\ifnum0=`{}\fi\ifdim #1>\z@
+ \expandafter\@xargarraycr\else
+ \expandafter\@yargarraycr\fi{#1}}
+\def\@xargarraycr#1{\unskip\gdef\do@row@strut
+ {\@tempdima #1\advance\@tempdima \dp\@arstrutbox
+ \vrule \@depth\@tempdima \@width\z@\global\let\do@row@strut\relax}%
+ \ifnum\@multicnt >\z@ \do@row@strut \fi
+ \cr}
+\let\do@row@strut\relax
+\long\def\multicolumn#1#2#3{%
+ \multispan{#1}\begingroup
+ \def\@addamp{\if@firstamp \@firstampfalse \else
+ \@preamerr 5\fi}%
+ \@mkpream{#2}\@addtopreamble\@empty
+ \endgroup
+ \def\@sharp{#3}%
+ \@arstrut \@preamble
+ \null
+ \ignorespaces}
+\let\d@llarbegin\begingroup
+\let\d@llarend\endgroup
+\def\array{\col@sep\arraycolsep
+ \def\d@llarbegin{$}\let\d@llarend\d@llarbegin\def\@halignto{}%
+ \@tabarray}
+\def\tabular{\def\@halignto{}\@tabular}
+\expandafter\def\csname tabular*\endcsname#1{%
+ \setlength\dimen@{#1}%
+ \edef\@halignto{to\the\dimen@}\@tabular}
+\def\@tabular{%
+ \leavevmode
+ \hbox \bgroup $\col@sep\tabcolsep \let\d@llarbegin\begingroup
+ \let\d@llarend\endgroup
+ \@tabarray}
+\def\endtabular{\endarray\m@th $\egroup}
+\expandafter\let\csname endtabular*\endcsname=\endtabular
+\let\@ampacol=\relax \let\@expast=\relax
+\let\@arrayclassiv=\relax \let\@arrayclassz=\relax
+\let\@tabclassiv=\relax \let\@tabclassz=\relax
+\let\@arrayacol=\relax \let\@tabacol=\relax
+\let\@tabularcr=\relax \let\@@endpbox=\relax
+\let\@argtabularcr=\relax \let\@xtabularcr=\relax
+\def\@preamerr#1{\def\@tempd{{..} at wrong position: }%
+ \PackageError{array}{%
+ \ifcase #1 Illegal pream-token (\@nextchar): `c' used\or %0
+ Missing arg: token ignored\or %1
+ Empty preamble: `l' used\or %2
+ >\@tempd token ignored\or %3
+ <\@tempd changed to !{..}\or %4
+ Only one column-spec. allowed.\fi}\@ehc} %5
+\def\newcolumntype#1{%
+ \edef\NC@char{\string#1}%
+ \@ifundefined{NC@find@\NC@char}%
+ {\@tfor\next:=<>clrmbp@!|\do
+ {%
+ \if\expandafter\noexpand\next\NC@char
+ \PackageWarning{array}%
+ {Redefining primitive column \NC@char}\fi}%
+ \NC@list\expandafter{\the\NC@list\NC@do#1}}%
+ {\PackageWarning{array}{Column \NC@char\space is already defined}}%
+ \@namedef{NC@find@\NC@char}##1#1{\NC@{##1}}%
+ \@ifnextchar[{\newcol@{\NC@char}}{\newcol@{\NC@char}[0]}}
+\def\newcol@#1[#2]#3{\expandafter\@reargdef
+ \csname NC@rewrite@#1\endcsname[#2]{\NC@find#3}}
+\def\NC@#1{%
+ \@temptokena\expandafter{\the\@temptokena#1}\futurelet\next\NC@ifend}
+\def\NC@ifend{%
+ \ifx\next\relax
+ \else\@tempswatrue\expandafter\NC@rewrite\fi}
+\def\NC@do#1{%
+ \expandafter\let\expandafter\NC@rewrite
+ \csname NC@rewrite@\string#1\endcsname
+ \expandafter\let\expandafter\NC@find
+ \csname NC@find@\string#1\endcsname
+ \expandafter\@temptokena\expandafter{\expandafter}%
+ \expandafter\NC@find\the\@temptokena#1\relax}
+\def\showcols{{\def\NC@do##1{\let\NC@do\NC@show}\the\NC@list}}
+\def\NC@show#1{%
+ \typeout{Column #1\expandafter\expandafter\expandafter\NC@strip
+ \expandafter\meaning\csname NC@rewrite@#1\endcsname\@@}}
+\def\NC@strip#1:#2->#3 #4\@@{#2 -> #4}
+\newtoks\NC@list
+\newcolumntype{*}[2]{}
+\long\@namedef{NC@rewrite@*}#1#2{%
+ \count@#1\relax
+ \loop
+ \ifnum\count@>\z@
+ \advance\count@\m@ne
+ \@temptokena\expandafter{\the\@temptokena#2}%
+ \repeat
+ \NC@find}
+\let\@xexpast\relax
+\let\@xexnoop\relax
+\def\save@decl{\toks \count@ = \expandafter\expandafter\expandafter
+ {\expandafter\@nextchar\the\toks\count@}}
+\def\@mkpream#1{\gdef\@preamble{}\@lastchclass 4 \@firstamptrue
+ \let\@sharp\relax
+ \def\@startpbox##1{\unexpanded\expandafter{\expandafter
+ \@startpbox\expandafter{##1}}}\let\@endpbox\relax
+ \let\do@row@strut\relax
+ \let\ar@align@mcell\relax
+ \@temptokena{#1}\@tempswatrue
+ \@whilesw\if@tempswa\fi{\@tempswafalse\the\NC@list}%
+ \count@\m@ne
+ \let\the@toks\relax
+ \prepnext@tok
+ \expandafter \@tfor \expandafter \@nextchar
+ \expandafter :\expandafter =\the\@temptokena \do
+ {\@testpach
+ \ifcase \@chclass \@classz \or \@classi \or \@classii
+ \or \save@decl \or \or \@classv \or \@classvi
+ \or \@classvii \or \@classviii
+ \or \@classx
+ \or \@classx \fi
+ \@lastchclass\@chclass}%
+ \ifcase\@lastchclass
+ \@acol \or
+ \or
+ \@acol \or
+ \@preamerr \thr@@ \or
+ \@preamerr \tw@ \@addtopreamble\@sharp \or
+ \or
+ \else \@preamerr \@ne \fi
+ \def\the@toks{\the\toks}}
+\let\@classix\relax
+\def\@classviii{\ifnum \@lastchclass >\z@\ifnum\@lastchclass=\tw@\else
+ \@preamerr 4\@chclass 6 \@classvi \fi\fi}
+\def\@classv{\save@decl
+ \expandafter\NC@ecs\@nextchar\extracolsep{}\extracolsep\@@@
+ \@addtopreamble{\d@llarbegin\the@toks\the\count@\relax\d@llarend}%
+ \prepnext@tok}
+\def\NC@ecs#1\extracolsep#2#3\extracolsep#4\@@@{\def\@tempa{#2}%
+ \ifx\@tempa\@empty\else\toks\count@={#1\tabskip#2\relax#3}\fi}
+\def\@tabarray{\@ifnextchar[{\@@array}{\@@array[c]}}
+\let\@@array\@array
+\def\endarray{\crcr \egroup \egroup \@arrayright \gdef\@preamble{}}
+\let\@arrayleft\@empty
+\let\@arrayright\@empty
+\newlength{\extratabsurround}
+\setlength{\extratabsurround}{2pt}
+\newlength{\backup@length}
+\newcommand{\firsthline}{%
+ \multicolumn1{@{}c@{}}{%
+ \global\backup@length\ht\@arstrutbox
+ \global\advance\backup@length\dp\@arstrutbox
+ \global\advance\backup@length\arrayrulewidth
+ \raise\extratabsurround\copy\@arstrutbox
+ \kern-1sp%
+ }\\[-\backup@length]\hline
+}
+\newcommand{\lasthline}{\hline\multicolumn1{@{}c@{}}{%
+ \global\backup@length2\ht\@arstrutbox
+ \global\advance\backup@length2\dp\@arstrutbox
+ \global\advance\backup@length\arrayrulewidth
+ }\\[-\backup@length]%
+ \multicolumn1{@{}c@{}}{%
+ \lower\extratabsurround\copy\@arstrutbox
+ \kern-1sp%
+ }%
+}
+\CheckCommand*\@xhline{\ifx\reserved@a\hline
+ \vskip\doublerulesep
+ \vskip-\arrayrulewidth
+ \fi
+ \ifnum0=`{\fi}}
+\renewcommand*\@xhline{\ifx\reserved@a\hline
+ \vskip\doublerulesep
+ \fi
+ \ifnum0=`{\fi}}
+
+\newsavebox\ar@cellbox
+\newcolumntype{w}[2]{%
+ >{\begin{lrbox}\ar@cellbox\d@llarbegin}%
+ c%
+ <{\d@llarend \end{lrbox}%
+ \makebox[#2][#1]{\unhbox\ar@cellbox}}}
+
+\newcolumntype{W}[2]
+ {>{\begin{lrbox}\ar@cellbox\d@llarbegin}%
+ c%
+ <{\d@llarend\end{lrbox}%
+ \let\hss\hfil
+ \makebox[#2][#1]{\unhbox\ar@cellbox}}}
+\endinput
+%%
+%% End of file `array.sty'.
diff --git a/macros/latex-dev/required/tools/array.dtx b/macros/latex-dev/required/tools/array.dtx
index 6e4e34ea26..66c40a5267 100644
--- a/macros/latex-dev/required/tools/array.dtx
+++ b/macros/latex-dev/required/tools/array.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
@@ -30,10 +30,15 @@
%<+package>
%<+package>\DeclareRelease{}{2016-10-06}{array-2016-10-06.sty}
%<+package>\DeclareRelease{v2.4}{2020-02-10}{array-2020-02-10.sty}
-%<+package>\DeclareCurrentRelease{}{2020-10-01}
+%<+package>\DeclareRelease{v2.5}{2023-11-01}{array-2023-11-01.sty}
+%<+package>\DeclareCurrentRelease{}{2024-06-01}
%<+package>
+% \end{macrocode}
+% Current version needs a new kernel.
+% \begin{macrocode}
+%<+package>\NeedsTeXFormat{LaTeX2e}[2024/06/01]
%<+package>\ProvidesPackage{array}
-%<+package> [2023/10/16 v2.5g Tabular extension package (FMi)]
+%<+package> [2023/12/11 v2.6a Tabular extension package (FMi)]
%
% \fi
%
@@ -177,6 +182,18 @@
% \DoNotIndex{\xdef}
% \DoNotIndex{\z@}
%
+%
+% \providecommand\env[1]{\texttt{#1}}
+%
+% \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}
+%
+%
% \GetFileInfo{array.sty}
%
% \title{A new implementation of \LaTeX's \textsf{tabular}
@@ -195,6 +212,8 @@
% \MaintainedByLaTeXTeam{tools}
% \maketitle
%
+%
+%
% \MakeShortVerb{\=}
%
% \begin{abstract}
@@ -750,12 +769,29 @@
% \end{itemize}
%
%
+% \section{Support for tagged PDF}
%
-% \changes{v2.2b}{1994/02/04}{Removed interactive prompt}
+% With version 2.6a the package is made tagging aware, which means that
+% it will automatically produce tagged tables (necessary, for example, for
+% accessibility) if tagging is requested via \cs{DocumentMetadata}.
%
-% \MaybeStop{
+% More granular control, e.g., explicitly deciding which cells are
+% header cells, etc., is currently under development, but syntax for
+% this will not appear in this package. Instead it will become
+% available across all tabular-generating packages and then
+% automatically apply here as well.
+%
+% Enabling \LaTeX{} to automatically produce tagged PDF is a long-term
+% project and this is a tiny step in this puzzle. For more information
+% on the project and already available functionality, see
+% \url{https://latex-project.org/publications/indexbytopic/pdf} and
+% \url{https://github.com/latex3/tagging-project}.
%
%
+%
+% \changes{v2.2b}{1994/02/04}{Removed interactive prompt}
+%
+% \MaybeStop{
% \begin{thebibliography}{1}
% \bibitem{bk:GMS94} \textsc{M.~Goossens}, \textsc{F.~Mittelbach}
% and \textsc{A.~Samarin}.
@@ -772,7 +808,6 @@
% \newblock
% Addison-Wesley, Reading, Massachusetts, 1986.
% \end{thebibliography}
-%
% } ^^A end of \MaybeStop
%
%
@@ -786,8 +821,49 @@
% \texttt{docstrip} program.
% \begin{macrocode}
%<*driver>
-\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\documentclass{ltxdoc}
+\NeedsTeXFormat{LaTeX2e}[2024/06/01]
+% \end{macrocode}
+%
+% We switched from \cls{ltxdoc} to \cls{l3doc} to get support for
+% code written in the L3 programming layer. The first is that we
+% are currently missing \cs{MaintainedByLaTeXTeam}, so we have to
+% provide that for now.
+% \begin{macrocode}
+\documentclass{l3doc}
+
+% currently missing in l3doc
+\makeatletter
+\def\MaintainedBy#1{\gdef\@maintainedby{#1}}
+\let\@maintainedby\@empty
+\def\MaintainedByLaTeXTeam#1{%
+{\gdef\@maintainedby{%
+This file is maintained by the \LaTeX{} Project team.\\%
+Bug reports can be opened (category \texttt{#1}) at\\%
+\url{https://latex-project.org/bugs.html}.}}}
+\def\@maketitle{%
+ \newpage
+ \null
+ \vskip 2em%
+ \begin{center}%
+ \let \footnote \thanks
+ {\LARGE \@title \par}%
+ \vskip 1.5em%
+ {\large
+ \lineskip .5em%
+ \begin{tabular}[t]{c}%
+ \@author
+ \end{tabular}\par}%
+ \vskip 1em%
+ {\large \@date}%
+ \ifx\@maintainedby\@empty
+ \else
+ \vskip 1em%
+ \fbox{\fbox{\begin{tabular}{@{}l@{}}\@maintainedby\end{tabular}}}%
+ \fi
+ \end{center}%
+ \par
+ \vskip 1.5em}
+\makeatother
% undo the default is not used:
@@ -817,6 +893,29 @@
% \end{macrocode}
%
%
+% \section{A note on the updates done December 2023}
+%
+% We introduced support for tagged PDf and at the same time we added
+% code to determine row and column numbers for each cell in
+% preparation for supporting formatting or type specifications for individual
+% cells (or group of cells) from the outside, e.g., \enquote{rows 1,
+% 2, and 10 are header rows} (syntax to be decided).
+%
+% This new code is already written with L3 programming layer conventions
+% while most of the legay code is still as it was before. This make the code
+% currently somewhat clattered, unfortunately. Eventually this will all move to L3
+% programming layer but this will take time.
+%
+%
+% \begin{macrocode}
+%<@@=tbl>
+\ExplSyntaxOn
+% \end{macrocode}
+%
+%
+%
+%
+%
% \section{The construction of the preamble}
%
% \DeleteShortVerb{\"}
@@ -972,6 +1071,7 @@
% =\@chclass= and =\@chnum=.
% \changes{v2.0f}{1992/02/29}{Argument removed since implicitly known}
% \begin{macrocode}
+\ExplSyntaxOff
\def\@testpach{\@chclass
% \end{macrocode}
% First we deal with the cases in which the \textsf{token}
@@ -981,7 +1081,7 @@
\ifnum \@lastchclass=6 \@ne \@chnum \@ne \else
\ifnum \@lastchclass=7 5 \else
\ifnum \@lastchclass=8 \tw@ \else
- \ifnum \@lastchclass=9 \thr@@
+ \ifnum \@lastchclass=9 \thr@@@@
% \end{macrocode}
% Otherwise we will assume that the \textsf{token} belongs to the
% class $0$
@@ -1032,7 +1132,7 @@
% \begin{macrocode}
10
\@chnum
- \if \@nextchar m\thr@@\else
+ \if \@nextchar m\thr@@@@ \else
\if \@nextchar p4 \else
\if \@nextchar b5 \else
% \end{macrocode}
@@ -1042,6 +1142,7 @@
% \begin{macrocode}
\z@ \@chclass \z@ \@preamerr \z@ \fi \fi \fi \fi
\fi \fi \fi \fi \fi \fi \fi \fi \fi \fi \fi \fi}
+\ExplSyntaxOn
% \end{macrocode}
% \end{macro}
%
@@ -1062,10 +1163,10 @@
% they are in explicit braces, as in =@{*}=.
%
% This macro is called via
-% =\@xexpast=\meta{preamble}=*0x\@@=.
+% =\@xexpast=\meta{preamble}=*0x\@@@@=.
% The $*$--expression =*0x= is being used to terminate the
% recursion,
-% as we shall see later, and =\@@= serves as an argument
+% as we shall see later, and =\@@@@= serves as an argument
% delimiter. =\@xexpast= has four arguments. The first
% one is the part of the
% user preamble before the first $*$--expression while the second
@@ -1074,7 +1175,7 @@
% above).
% The fourth argument is the rest of the preamble.
% \begin{macrocode}
-\def\@xexpast#1*#2#3#4\@@{%
+\def\@xexpast#1*#2#3#4\@@@@{%
% \end{macrocode}
% The number of copies of \textit{String} (=#2=) that are to be
% produced will be saved in a \textsf{count} register.
@@ -1111,7 +1212,7 @@
% \end{macrocode}
% If \textit{N\/} was greater than zero we prepare for another call
% of =\@xexpast=. Otherwise we assume we have reached the end of
-% the user preamble, because we had appended =*0x\@@= when we first
+% the user preamble, because we had appended =*0x\@@@@= when we first
% called =\@xexpast=. In other words: if the user inserts
% =*{0}{..}= in his preamble, \LaTeX\ ignores the rest of it.
% \begin{macrocode}
@@ -1133,7 +1234,7 @@
% $*$--expression is handled, or to the macro =\@xexnoop=,
% which only ends the recursion by deleting its argument.
% \begin{macrocode}
- \expandafter \@tempb \@tempa #4\@@}
+ \expandafter \@tempb \@tempa #4\@@@@}
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1142,10 +1243,10 @@
% \begin{macro}{\@xexnoop}
% So the first big problem is solved. Now it is easy to
% specify =\@xexnoop=.
-% Its argument is delimited by =\@@= and it simply expands to
+% Its argument is delimited by =\@@@@= and it simply expands to
% nothing.
% \begin{macrocode}
-% \def\@xexnoop#1\@@{}
+% \def\@xexnoop#1\@@@@{}
% \end{macrocode}
% \end{macro}
%
@@ -1275,6 +1376,13 @@
% \begin{macrocode}
\def\insert@column{%
% \end{macrocode}
+%
+% For tagging we insert as special socket, that adds the necessary
+% PDF tag at the beginning of the cell if tagging is enabled.
+% \changes{v2.6a}{2023/12/11}{Support for tagged PDF}
+% \begin{macrocode}
+ \UseTaggingSocket{tbl/cell/begin}%
+% \end{macrocode}
% Here, we assume that the \textsf{count} register
% =\@tempcnta= has saved the value $=\count@= - 1$.
% \begin{macrocode}
@@ -1302,12 +1410,36 @@
% \changes{v2.0c}{1990/08/14}{\cs{relax} added to avoid problem
% \cs{the}\cs{toks0}\cs{the}\cs{toks1}.}
% \begin{macrocode}
- \the@toks \the \count@ \relax}
+ \the@toks \the \count@ \relax
+% \end{macrocode}
+%
+% And another socket for tagging that adds the necessary closing tag
+% if enabled.
+% \changes{v2.6a}{2023/12/11}{Support for tagged PDF}
+% \begin{macrocode}
+ \UseTaggingSocket{tbl/cell/end}%
+}
% \end{macrocode}
% \end{macro}
% \end{macro}
%
%
+% \begin{macro}{\insert@pcolumn}
+% Handling pcolumn-cells needs slightly different handling when
+% doing tagging. Rather than changing the plugs in
+% \cs{insert@column} back and forth, we simply use a different
+% version of \cs{insert@column} that has its own sockets.
+% \changes{v2.6a}{2023/12/11}{Support for tagged PDF}
+% \begin{macrocode}
+\def\insert@pcolumn{%
+ \UseTaggingSocket{tbl/pcell/begin}%
+ \the@toks \the \@tempcnta
+ \ignorespaces \@sharp \unskip
+ \the@toks \the \count@ \relax
+ \UseTaggingSocket{tbl/pcell/end}%
+}
+% \end{macrocode}
+% \end{macro}
%
%
% \subsection{The separation of columns}
@@ -1321,11 +1453,24 @@
% =\@addamp=, the macro that inserts the =&=.
% \begin{macrocode}
% \newif \@iffirstamp
-% \def\@addamp{\if@firstamp \@firstampfalse
-% \else \@addtopreamble &\fi}
+\def\@addamp {
+ \if@firstamp
+ \@firstampfalse
+ \else
+% \end{macrocode}
+% If we are after the first column we have to insert a \verb=&= and
+% also update the cell data.
+% \changes{v2.6a}{2023/12/11}{Managing cell indexes}
+% \begin{macrocode}
+ \edef\@preamble{\@preamble &
+ \noexpand\tbl_update_cell_data: }
+ \fi
+}
% \end{macrocode}
% \end{macro}
%
+%
+%
% \begin{macro}{\@acol}
% \begin{macro}{\@acolampacol}
% \begin{macro}{\col@sep}
@@ -1393,7 +1538,7 @@
% command =\@xexpast=. As we already know, this command saves
% its result in the macro =\@tempa=.
% \begin{macrocode}
-% \@xexpast #1*0x\@@
+% \@xexpast #1*0x\@@@@
% \end{macrocode}
% Afterwards we initialize all registers and macros, that we need
% for the build-up of the preamble.
@@ -1477,7 +1622,7 @@
% \texttt{r}, \texttt{p},\texttt{m} or \texttt{b}. We report an
% error and ignore the declaration given by ={..}=.
% \begin{macrocode}
-% \@preamerr \thr@@ \or
+% \@preamerr \thr@@@@ \or
% \end{macrocode}
% If =\@lastchclass= is $4$ the user preamble has been empty.
% To continue, we insert a =#= in the preamble.
@@ -1671,18 +1816,17 @@
\setbox\ar@mcellbox\vbox
% \end{macrocode}
% The part of the templates which is the same in all three cases
-% (\texttt{p}, \texttt{m} and \texttt{b})
-% is built by the macros =\@startpbox= and
-% =\@endpbox=. =\@startpbox= has an argument:
-% the width of the column which is stored in the current
-% \textsf{token} (i.e.\ =\@nextchar=).
-% Between these two macros we find the well known
-% =\insert@column=.
-% The strut is places after the box
+% (\texttt{p}, \texttt{m} and \texttt{b}) is built by the macros
+% =\@startpbox= and =\@endpbox=. =\@startpbox= has an argument: the
+% width of the column which is stored in the current \textsf{token}
+% (i.e.\ =\@nextchar=). Between these two macros we find the well
+% known =\insert@column= or rather the variant for tagging:
+% \cs{insert@pcolumn}. The strut is placed after the box.
% \changes{v2.4e}{2016/10/07}{Fixing SX68732}
% \changes{v2.4f}{2017/11/04}{Managing m-cells without \cs{vcenter}}
+% \changes{v2.6a}{2023/12/11}{Support for tagged PDF}
% \begin{macrocode}
- \@startpbox{\@nextchar}\insert@column \@endpbox
+ \@startpbox{\@nextchar}\insert@pcolumn \@endpbox
\ar@align@mcell
\do@row@strut \or
% \end{macrocode}
@@ -1690,9 +1834,10 @@
% same way though we do not need the =$= characters because we use
% =\vtop= or =\vbox=.
% \changes{v2.4e}{2016/10/07}{Fixing SX68732}
+% \changes{v2.6a}{2023/12/11}{Support for tagged PDF}
% \begin{macrocode}
- \vtop \@startpbox{\@nextchar}\insert@column \@endpbox\do@row@strut \or
- \vbox \@startpbox{\@nextchar}\insert@column \@endpbox\do@row@strut
+ \vtop \@startpbox{\@nextchar}\insert@pcolumn \@endpbox\do@row@strut \or
+ \vbox \@startpbox{\@nextchar}\insert@pcolumn \@endpbox\do@row@strut
% \end{macrocode}
% Other values for =\@chnum= are impossible. Therefore we
% end the arguments to =\@addtopreamble= and =\ifcase=.
@@ -1783,8 +1928,8 @@
% So the declarations defined by the first =>{...}=
% are ignored.
% \begin{macrocode}
-%\def\@classix{\ifnum \@lastchclass = \thr@@
-% \@preamerr \thr@@ \fi
+%\def\@classix{\ifnum \@lastchclass = \thr@@@@
+% \@preamerr \thr@@@@ \fi
% \end{macrocode}
% Furthermore, we call up =\@class10= because afterwards always a
% new column is started by \texttt{c}, \texttt{l}, \texttt{r},
@@ -1836,14 +1981,14 @@
% We only check if the last \textsf{token} was of class $3$ which is
% forbidden.
% \begin{macrocode}
-\def\@classvii{\ifnum \@lastchclass = \thr@@
+\def\@classvii{\ifnum \@lastchclass = \thr@@@@
% \end{macrocode}
% If this is true we output an error message and
% ignore the declarations stored
% by the last =>{...}=, because these are overwritten
% by the argument of \texttt{@}.
% \begin{macrocode}
- \@preamerr \thr@@ \fi}
+ \@preamerr \thr@@@@ \fi}
% \end{macrocode}
% \end{macro}
%
@@ -2032,7 +2177,7 @@
% second one describes the wanted preamble,
% e.g.\ it has the form =|c|c|c|=.
% \begin{macrocode}
-\def\@array[#1]#2{%
+\def\@array[#1]#2{
% \end{macrocode}
% First we define a \textsf{strut} whose size basically corresponds
% to a normal \textsf{strut} multiplied by the factor
@@ -2051,6 +2196,14 @@
\@depth \arraystretch \dp \strutbox
\@width \z@}%
% \end{macrocode}
+% The total number of table columns of the current table is
+% determined in \cs{tbl_count_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.
+% \changes{v2.6a}{2023/12/11}{Support for tagged PDF}
+% \begin{macrocode}
+ \tbl_save_outer_table_cols:
+% \end{macrocode}
% Then we open a group, in which the user preamble is evaluated by
% the macro =\@mkpream=. As we know this must happen locally.
% This macro creates a preamble for a =\halign= and saves
@@ -2059,6 +2212,11 @@
\begingroup
\@mkpream{#2}%
% \end{macrocode}
+% Figure out how many columns this table has:
+% \changes{v2.6a}{2023/12/11}{Managing cell indexes}
+% \begin{macrocode}
+ \tbl_count_table_cols:
+% \end{macrocode}
% We again redefine =\@preamble= so that a call up of =\@preamble=
% now starts the =\halign=. Thus also the arguments of \texttt{>},
% \texttt{<}, \texttt{@} and \texttt{!}, saved in the
@@ -2085,13 +2243,38 @@
% unsupported redefinition of a \TeX{} primitive for the moment (as people rely
% on that experimental code).
% \begin{macrocode}
- \xdef\@preamble{\noexpand \ialign \@halignto
- \bgroup \@arstrut \@preamble
- \tabskip \z@ \cr}%
+ \xdef\@preamble{
+% \end{macrocode}
+% \cs{ialign} in the original definition is replaced by
+% \cs{ar@ialign} defined below. This does what \cs{ialign} does but
+% additionally handles the tagging structure for the whole table if necessary.
+% \changes{v2.6a}{2023/12/11}{Support for tagged PDF}
+% \begin{macrocode}
+ \noexpand \ar@ialign
+ \@halignto
+ \bgroup \@arstrut
% \end{macrocode}
% What we have not explained yet is the macro =\@halignto=
% that was just used. Depending on its replacement text the
% =\halign= becomes a =\halign= \texttt{to} \meta{dimen}.
+%
+% Next, a tagging support socket is inserted adding the start row tag.
+% \changes{v2.6a}{2023/12/11}{Support for tagged PDF}
+% \begin{macrocode}
+ \UseTaggingSocket{tbl/row/begin}
+% \end{macrocode}
+% At the start of the preamble for the first column we call
+% \cs{tbl_init_cell_data_for_row:} to initialize the cell index data. In
+% later columns this data is updated via \cs{tbl_update_cell_data:}.
+% \changes{v2.6a}{2023/12/11}{Managing cell indexes}
+% \begin{macrocode}
+ \tbl_init_cell_data_for_row:
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \@preamble
+ \tabskip \z@ \cr}
+% \end{macrocode}
% Now we close the group again. Thus
% =\@startpbox= and =\@endpbox= as well as all
% \textsf{token} registers get their former meaning back.
@@ -2128,12 +2311,16 @@
% around every column in the \textsf{array}--environment
% the parameter =\mathsurround= should
% also be set to \textsf{0pt}. This prevents additional space between
-% the rows. The
-% \PlainTeX--macro =\m@th= does this.
+% the rows.
% \begin{macrocode}
\lineskip \z@
\baselineskip \z@
- \m@th
+% \end{macrocode}
+% Don't use \cs{m@th} here as that signals to the math taggingg
+% code that this is fake math that should not be tagged.
+% \changes{v2.6a}{2023/12/11}{Support for tagged PDF}
+% \begin{macrocode}
+ \mathsurround \z@
% \end{macrocode}
% Beside, we have to assign a special meaning (which we still have
% to specify) to the line separator =\\=. We also have to
@@ -2144,10 +2331,61 @@
% start the wanted =\halign=.
% \changes{1994/12/08}{v2.3b}{add \cs{tabularnewline}}
% \begin{macrocode}
- \let\\\@arraycr \let\tabularnewline\\\let\par\@empty \@preamble}
+ \let\\\@arraycr \let\tabularnewline\\\let\par\@empty
+% \end{macrocode}
+% Another socket for tagging. TODO: what about \cs{arrayleft} above?
+% \begin{macrocode}
+ \UseTaggingSocket{tbl/init}
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \@preamble
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\ar@ialign}
+% A new command that replaces \cs{ialign} used previously. \cs{everycr} is
+% also applied to the \cs{cr} ending the preamble so we have to
+% program around that.
+% \changes{v2.6a}{2023/12/11}{Support for tagged PDF}
+% \begin{macrocode}
+\def\ar@ialign{%
+% \end{macrocode}
+% Before starting a table we have to initialize the variables
+% holding row and column information for cells. We also have
+% locally store the information related to the current cell (if we
+% are already inside a table) so that we can restore it once the
+% inner table is finished.
+% \changes{v2.6a}{2023/12/11}{Managing cell indexes}
+% \begin{macrocode}
+ \tbl_init_cell_data_for_table:
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \everycr{%
+ \noalign{%
+% \end{macrocode}
+% If this \cs{cr} was at the end of a real row (e.g., not at the
+% end of the table preamble) we have add a row end tag.
+% \begin{macrocode}
+ \tbl_if_row_was_started:T { \UseTaggingSocket{tbl/row/end} }
+% \end{macrocode}
+% The we prepare for the next row.
+% \begin{macrocode}
+ \tbl_update_cell_data_for_next_row:
+ }%
+ }%
+ \tabskip\z@skip\halign}
% \end{macrocode}
% \end{macro}
%
+%
+%
+%
+%
% \begin{macro}{\arraybackslash}
% \changes{v2.4a}{2003/12/17}{(DPC) Macro added (from tabularx)}
% Restore =\\= for use in array and tabular environment (after
@@ -2182,7 +2420,27 @@
% \begin{macro}{\@arraycr}
% In the macro =\@array= the line separator =\\= is
% =\let= to the command =\@arraycr=.
-% Its definition starts with a special brace which I have directly
+% \changes{v2.3c}{1995/04/23}{Avoid adding an ord atom in math}
+% \changes{v2.5e}{2021/04/20}{Use \cs{protected} for \cs{\bslash} variant (gh/548)}
+% \begin{macrocode}
+\protected\def\@arraycr {
+% \end{macrocode}
+% 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.
+% \changes{v2.6a}{2023/12/11}{Managing cell indexes}
+% \begin{macrocode}
+ \tbl_count_missing_cells:n {@arraycr}
+% \end{macrocode}
+% TODO: maybe this is also the right place to add a socket that
+% could be used to actually enter missing cells instead of just
+% adding tagging structures for them later. This would be optional
+% but in many cases it would be the right thing to do (for example
+% if tables contain vertical lines or similar visual structures
+% that require fully specified rows.
+%
+%
+% We then start a special brace which I have directly
% copied from the original definition. It is
% necessary, because the =\futurlet= in =\@ifnextchar=
% might
@@ -2198,10 +2456,8 @@
% =\halign= while we are looking for a =*= or =[=.
% For further information see
% \cite[Appendix D]{bk:knuth}.
-% \changes{v2.3c}{1995/04/23}{Avoid adding an ord atom in math}
-% \changes{v2.5e}{2021/04/20}{Use \cs{protected} for \cs{\bslash} variant (gh/548)}
% \begin{macrocode}
-\protected\def\@arraycr{\relax\iffalse{\fi\ifnum 0=`}\fi
+ \iffalse{\fi\ifnum 0=`}\fi
% \end{macrocode}
% Then we test whether the user is using the star form and ignore
% a possible star (I also disagree with this procedure, because a
@@ -2210,6 +2466,11 @@
\@ifstar \@xarraycr \@xarraycr}
% \end{macrocode}
% \end{macro}
+
+
+
+
+
%
% \begin{macro}{\@xarraycr}
% In the command =\@xarraycr= we test if an optional argument
@@ -2301,6 +2562,7 @@
% the result column and the actual column entry.
% \changes{v2.3j}{1998/01/29}{Command made \cs{long} to match
% kernel change for pr/2180}
+% \changes{v2.6a}{2023/12/11}{Support for tagged PDF}
% \begin{macrocode}
\long\def\multicolumn#1#2#3{%
% \end{macrocode}
@@ -2310,6 +2572,16 @@
% \begin{macrocode}
\multispan{#1}\begingroup
% \end{macrocode}
+% For tagging support we have to solve two problems:
+% \cs{multicolumn} 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. We do this in the next macro
+% (which in turn calls the \texttt{tbl/row/begin} socket, if
+% necessary).
+% \changes{v2.6a}{2023/12/11}{Managing cell indexes}
+% \begin{macrocode}
+ \tbl_update_multicolumn_cell_data:n {#1}
+% \end{macrocode}
% Since a =\multicolumn= should only describe the format of a
% result column, we redefine =\@addamp= in such a way that one gets
% an error message if one uses more than one \texttt{c},
@@ -2336,6 +2608,12 @@
% \begin{macrocode}
\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@column}.
+% \changes{v2.6a}{2023/12/11}{Support for tagged PDF}
+% \begin{macrocode}
+ \UseTaggingSocket{tbl/colspan}{#1}%
+% \end{macrocode}
% In the special situation of =\multicolumn= =\@preamble=
% is not needed as preamble for a =\halign= but it is directly
% inserted into our table. Thus instead of =\sharp=
@@ -2458,6 +2736,12 @@
% \begin{macrocode}
\leavevmode
% \end{macrocode}
+% Now that we know we are in hmode we can add the start tag for the
+% whole table.
+% \changes{v2.6a}{2023/12/11}{Support for tagged PDF}
+% \begin{macrocode}
+ \UseTaggingSocket{tbl/hmode/begin}%
+% \end{macrocode}
% It should be taken into consideration that the macro =\@array=
% must be called in math mode. Therefore we open a \textsf{box},
% insert a =$= and then assign the correct values to =\col@sep= and
@@ -2486,11 +2770,41 @@
% =\@array=. To save \textsf{token} space we then redefine
% =\@preamble=
% because its replacement text isn't longer needed.
+%
+% To handle cell indexes, we do not use \cs{crcr} but a variant
+% that also handles missing cells as necessary.
+% \changes{v2.6a}{2023/12/11}{Support for tagged PDF}
+% \begin{macrocode}
+\def\endarray {
+ \tbl_crcr:n{endarray} \egroup
+ \UseTaggingSocket{tbl/finalize}
+% \end{macrocode}
+%
+% If tables are nested into another then it is necessary to
+% restore information about the cell the inner table started
+% in. Otherwise, the cell index data structures 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} uses a similar method.
+% \changes{v2.6a}{2023/12/11}{Managing cell indexes}
% \begin{macrocode}
-%\def\endarray{\crcr \egroup \egroup \gdef\@preamble{}}
+ \tbl_restore_outer_cell_data:
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \egroup
+ \@arrayright \gdef\@preamble{}%
+}
% \end{macrocode}
% \end{macro}
%
+%
+%
+%
% \begin{macro}{\endtabular}
% \begin{macro}{\endtabular*}
% To end a \textsf{tabular} or \textsf{tabular$*$} environment we
@@ -2499,7 +2813,13 @@
% any =\mathsurround= so we cancel that with =\m@th=.
% \changes{v2.5f}{2021/07/12}{Cancel any outside \cs{mathsurround} (gh/614)}
% \begin{macrocode}
-\def\endtabular{\endarray\m@th $\egroup}
+\def\endtabular{\endarray\m@th $\egroup
+% \end{macrocode}
+%
+% \changes{v2.6a}{2023/12/11}{Support for tagged PDF}
+% \begin{macrocode}
+ \UseTaggingSocket{tbl/hmode/end}%
+}
\expandafter\let\csname endtabular*\endcsname=\endtabular
% \end{macrocode}
% \end{macro}
@@ -2518,7 +2838,7 @@
\let\@arrayclassiv=\relax \let\@arrayclassz=\relax
\let\@tabclassiv=\relax \let\@tabclassz=\relax
\let\@arrayacol=\relax \let\@tabacol=\relax
-\let\@tabularcr=\relax \let\@@endpbox=\relax
+\let\@tabularcr=\relax \let\@@@@endpbox=\relax
\let\@argtabularcr=\relax \let\@xtabularcr=\relax
% \end{macrocode}
%
@@ -2576,6 +2896,7 @@
% to define letters, to be used in the same way as the primitive
% column specifiers, `c' `p' etc.
% \begin{macrocode}
+\ExplSyntaxOff % this is really oldstyle using \@tfor :=
\def\newcolumntype#1{%
% \end{macrocode}
% "\NC@char" was added in V2.01 so that active characters, like "@" in
@@ -2615,6 +2936,7 @@
% If an optional argument was not given, give a default argument of 0.
% \begin{macrocode}
\@ifnextchar[{\newcol@{\NC@char}}{\newcol@{\NC@char}[0]}}
+\ExplSyntaxOn
% \end{macrocode}
% \end{macro}
% \begin{macro}{\newcol@}
@@ -2710,16 +3032,18 @@
% produced and then "\typeout" the required string.
% \begin{macrocode}
\def\NC@show#1{%
- \typeout{Column #1\expandafter\expandafter\expandafter\NC@strip
- \expandafter\meaning\csname NC@rewrite@#1\endcsname\@@}}
+ \typeout{Column~ #1\expandafter\expandafter\expandafter\NC@strip
+ \expandafter\meaning\csname NC@rewrite@#1\endcsname\@@@@}}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\NC@strip}
% Delimit the arguments to "\NC@strip" with `\texttt{:}', `\texttt{->}',
-% a space, and "\@@" to pull out the required parts of the output from
+% a space, and "\@@@@" to pull out the required parts of the output from
% "\meaning".
% \begin{macrocode}
-\def\NC@strip#1:#2->#3 #4\@@{#2 -> #4}
+\ExplSyntaxOff
+\def\NC@strip#1:#2->#3 #4\@@@@{#2 -> #4}
+\ExplSyntaxOn
% \end{macrocode}
% \end{macro}
% \begin{macro}{\NC@list}
@@ -2807,6 +3131,7 @@
% \changes{v2.4e}{2016/10/07}{Fixing SX68732}
% \changes{v2.4f}{2017/11/04}{Managing m-cells without \cs{vcenter}}
% \begin{macrocode}
+\ExplSyntaxOff % really oldstyle using \@tfor :=
\def\@mkpream#1{\gdef\@preamble{}\@lastchclass 4 \@firstamptrue
\let\@sharp\relax
% \end{macrocode}
@@ -2869,11 +3194,12 @@
\@acol \or
\or
\@acol \or
- \@preamerr \thr@@ \or
+ \@preamerr \thr@@@@ \or
\@preamerr \tw@ \@addtopreamble\@sharp \or
\or
\else \@preamerr \@ne \fi
\def\the@toks{\the\toks}}
+\ExplSyntaxOn
% \end{macrocode}
% \end{macro}
%
@@ -2908,7 +3234,7 @@
% \texttt{array.sty} 2.0h.
% \begin{macrocode}
\def\@classv{\save@decl
- \expandafter\NC@ecs\@nextchar\extracolsep{}\extracolsep\@@@
+ \expandafter\NC@ecs\@nextchar\extracolsep{}\extracolsep\@@@@@@
\@addtopreamble{\d@llarbegin\the@toks\the\count@\relax\d@llarend}%
\prepnext@tok}
% \end{macrocode}
@@ -2920,7 +3246,7 @@
% second "\extracolsep", there is no point in the user entering two of
% these commands anyway, so this is not really a restriction.
% \begin{macrocode}
-\def\NC@ecs#1\extracolsep#2#3\extracolsep#4\@@@{\def\@tempa{#2}%
+\def\NC@ecs#1\extracolsep#2#3\extracolsep#4\@@@@@@{\def\@tempa{#2}%
\ifx\@tempa\@empty\else\toks\count@={#1\tabskip#2\relax#3}\fi}
%</ncols>
% \end{macrocode}
@@ -2936,28 +3262,27 @@
%
% \begin{macro}{\@tabarray}
% This macro tests for an optional bracket and then calls up
-% "\@@array" or "\@@array[c]" (as default).
+% "\@@@@array" or "\@@@@array[c]" (as default).
% \begin{macrocode}
%<*package>
-\def\@tabarray{\@ifnextchar[{\@@array}{\@@array[c]}}
+\def\@tabarray{\@ifnextchar[{\@@@@array}{\@@@@array[c]}}
% \end{macrocode}
% \end{macro}
-% \begin{macro}{\@@array}
+% \begin{macro}{\@@@@array}
% This macro tests could then test an optional delimiter before the
% left brace of the main preamble argument. Here in the main package
% it simply is let to be "\@array".
% \begin{macrocode}
-\let\@@array\@array
+\let\@@@@array\@array
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\endarray}
+% \begin{macro}{\@arrrayleft}
% \begin{macro}{\@arrayright}
% We have to declare the hook we put into "\@array" above.
-% A similar hook `"\@arrayright"' will be inserted into the
+% A similar hook \cs{@arrayright} will be inserted into the
% "\endarray" to gain control. Both defaults to empty.
% \begin{macrocode}
-\def\endarray{\crcr \egroup \egroup \@arrayright \gdef\@preamble{}}
\let\@arrayleft\@empty
\let\@arrayright\@empty
% \end{macrocode}
@@ -3182,6 +3507,14 @@
% \end{macro}
%
%
+%
+%
+%
+% \begin{macrocode}
+\ExplSyntaxOff
+% \end{macrocode}
+%
+%
% \PrintIndex
% \PrintChanges
%
diff --git a/macros/latex-dev/required/tools/array.pdf b/macros/latex-dev/required/tools/array.pdf
index 9cf73a7e98..87880c97fb 100644
--- a/macros/latex-dev/required/tools/array.pdf
+++ b/macros/latex-dev/required/tools/array.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/bm.dtx b/macros/latex-dev/required/tools/bm.dtx
index a608c6aeb5..d7d6eb54ee 100644
--- a/macros/latex-dev/required/tools/bm.dtx
+++ b/macros/latex-dev/required/tools/bm.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
@@ -22,7 +22,7 @@
% \fi
%
% \iffalse
-%% Copyright 1996 1997 1998 1999 2002 2003 2004 2016 2017 2019 2021 2022
+%% Copyright 1996 1997 1998 1999 2002 2003 2004 2016 2017 2019 2021 2022 2023
%% David Carlisle Frank Mittelbach
%%
%% Development of this package was commissioned by Y&Y Inc.
@@ -36,7 +36,7 @@
%<driver>\ProvidesFile{bm.drv}
% \fi
% \ProvidesFile{bm.dtx}
- [2023/07/08 v1.2f Bold Symbol Support (DPC/FMi)]
+ [2023/12/19 v1.2f Bold Symbol Support (DPC/FMi)]
%
% \iffalse
%<*driver>
@@ -178,14 +178,14 @@
% spacing). So the third example produces identical output to the first
% (but \TeX\ takes more time producing it).
%
-% In the fourth example the |\mathrm{\bm{g}}| is essentially
+% In the fourth example the |\mathrm{\bm{{g}}}| is essentially
% equivalent to |\mathrm{\mbox{\boldmath$g$}}|. Currently math alphabet
% settings are not passed down to `nested' math lists, and so in this
% example, the |\mathrm| has no effect, and a bold math italic $\bm g$
% is obtained.
%
% Similarly the last example is equivalent to
-% |$\mbox{\boldmath$\mathrm{g}$}}| and so in this case, one obtains a
+% |$\mbox{\boldmath$\mathrm{g}$}$| and so in this case, one obtains a
% bold roman \textbf{g}.
%
% \subsection{Delimiters}
diff --git a/macros/latex-dev/required/tools/bm.ins b/macros/latex-dev/required/tools/bm.ins
index a7424a0e67..c0c8125d10 100644
--- a/macros/latex-dev/required/tools/bm.ins
+++ b/macros/latex-dev/required/tools/bm.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2023
+%% Copyright (C) 1993-2024
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -45,7 +45,7 @@ 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) 1993-2023
+Copyright (C) 1993-2024
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/required/tools/bm.pdf b/macros/latex-dev/required/tools/bm.pdf
index c39e17aca0..1f9efb0b02 100644
--- a/macros/latex-dev/required/tools/bm.pdf
+++ b/macros/latex-dev/required/tools/bm.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/calc.dtx b/macros/latex-dev/required/tools/calc.dtx
index 2c4cecbf03..154c6ba26a 100644
--- a/macros/latex-dev/required/tools/calc.dtx
+++ b/macros/latex-dev/required/tools/calc.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/macros/latex-dev/required/tools/calc.pdf b/macros/latex-dev/required/tools/calc.pdf
index 4c0230c693..3cff423972 100644
--- a/macros/latex-dev/required/tools/calc.pdf
+++ b/macros/latex-dev/required/tools/calc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/changes.txt b/macros/latex-dev/required/tools/changes.txt
index 7b38392bd4..ebf705e687 100644
--- a/macros/latex-dev/required/tools/changes.txt
+++ b/macros/latex-dev/required/tools/changes.txt
@@ -5,11 +5,51 @@ completeness or accuracy and it contains some references to files that
are not part of the distribution.
=======================================================================
+2024-01-22 Lars Madsen <daleif@math.au.dk>
+
+ * verbatim.dtx: added TAB marking support to \verbatiminput* (gh/1245)
+
+2023-12-16 David Carlisle <David.Carlisle@latex-project.org>
+
+ * showkeys.dtx: avoid adding extra box to \@lables gh/1123
+
+2023-12-16 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * longtable.dtx:
+ Support for tagged PDF
+ Manage and provide cell indexes
+
+2023-12-12 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * array.dtx:
+ Support for tagged PDF
+ Manage and provide cell indexes
+
+2023-12-11 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * tabularx.dtx:
+ Require newer LaTeX kernel (that supports tagging)
+ Suspend any tagging while doing trial typesetting
+
+2023-11-10 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * multicol.dtx (subsection{Maintaining the mark registers}]):
+ Get rid of forced breaks for mark extraction (gh/1130)
+
================================================================================
All changes above are only part of the development branch for the next release.
================================================================================
#########################
+# 2023-11-01c Release
+#########################
+
+2023-11-06 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * verbatim.dtx (subsection{Preliminaries}):
+ Update code so that \verb does not show visible spaces (gh/1160)
+
+#########################
# 2023-11-01b Release
#########################
@@ -23,8 +63,8 @@ All changes above are only part of the development branch for the next release.
2023-08-25 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
- * longtable.dtx: use \everypar to insert the strut in \LT@startpbox
- to match the array use, github/1128
+ * longtable.dtx: use \everypar to insert the strut in \LT@startpbox
+ to match the array use, github/1128
#########################
# 2023-06-01 Release
diff --git a/macros/latex-dev/required/tools/dcolumn.dtx b/macros/latex-dev/required/tools/dcolumn.dtx
index c8ddaf4ce6..feb3096cce 100644
--- a/macros/latex-dev/required/tools/dcolumn.dtx
+++ b/macros/latex-dev/required/tools/dcolumn.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/macros/latex-dev/required/tools/dcolumn.pdf b/macros/latex-dev/required/tools/dcolumn.pdf
index 967e011d28..588505c218 100644
--- a/macros/latex-dev/required/tools/dcolumn.pdf
+++ b/macros/latex-dev/required/tools/dcolumn.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/delarray.dtx b/macros/latex-dev/required/tools/delarray.dtx
index 86a1a6203f..61d40b5c74 100644
--- a/macros/latex-dev/required/tools/delarray.dtx
+++ b/macros/latex-dev/required/tools/delarray.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/macros/latex-dev/required/tools/delarray.pdf b/macros/latex-dev/required/tools/delarray.pdf
index 1a8212075a..1fe65b8c75 100644
--- a/macros/latex-dev/required/tools/delarray.pdf
+++ b/macros/latex-dev/required/tools/delarray.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/enumerate.dtx b/macros/latex-dev/required/tools/enumerate.dtx
index 2818a73a09..c3889a9157 100644
--- a/macros/latex-dev/required/tools/enumerate.dtx
+++ b/macros/latex-dev/required/tools/enumerate.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/macros/latex-dev/required/tools/enumerate.pdf b/macros/latex-dev/required/tools/enumerate.pdf
index 17a894442e..66a10c9002 100644
--- a/macros/latex-dev/required/tools/enumerate.pdf
+++ b/macros/latex-dev/required/tools/enumerate.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/fileerr.dtx b/macros/latex-dev/required/tools/fileerr.dtx
index eef222bb6e..0e8eeb1ffb 100644
--- a/macros/latex-dev/required/tools/fileerr.dtx
+++ b/macros/latex-dev/required/tools/fileerr.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/macros/latex-dev/required/tools/fileerr.pdf b/macros/latex-dev/required/tools/fileerr.pdf
index 3fc612b3d8..102b8c865d 100644
--- a/macros/latex-dev/required/tools/fileerr.pdf
+++ b/macros/latex-dev/required/tools/fileerr.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/fontsmpl.dtx b/macros/latex-dev/required/tools/fontsmpl.dtx
index 525065cde5..6e9835e20e 100644
--- a/macros/latex-dev/required/tools/fontsmpl.dtx
+++ b/macros/latex-dev/required/tools/fontsmpl.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/macros/latex-dev/required/tools/fontsmpl.pdf b/macros/latex-dev/required/tools/fontsmpl.pdf
index 61648a2c33..a40e5d5566 100644
--- a/macros/latex-dev/required/tools/fontsmpl.pdf
+++ b/macros/latex-dev/required/tools/fontsmpl.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/ftnright.dtx b/macros/latex-dev/required/tools/ftnright.dtx
index 663fa304a9..a3826376db 100644
--- a/macros/latex-dev/required/tools/ftnright.dtx
+++ b/macros/latex-dev/required/tools/ftnright.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/macros/latex-dev/required/tools/ftnright.pdf b/macros/latex-dev/required/tools/ftnright.pdf
index 2a4e24a432..e7f13295c7 100644
--- a/macros/latex-dev/required/tools/ftnright.pdf
+++ b/macros/latex-dev/required/tools/ftnright.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/hhline.dtx b/macros/latex-dev/required/tools/hhline.dtx
index 49ac1ae208..b2d833d965 100644
--- a/macros/latex-dev/required/tools/hhline.dtx
+++ b/macros/latex-dev/required/tools/hhline.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/macros/latex-dev/required/tools/hhline.pdf b/macros/latex-dev/required/tools/hhline.pdf
index d8f969b7b0..c8484ff875 100644
--- a/macros/latex-dev/required/tools/hhline.pdf
+++ b/macros/latex-dev/required/tools/hhline.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/indentfirst.dtx b/macros/latex-dev/required/tools/indentfirst.dtx
index 2314db1c70..9bbe1871e1 100644
--- a/macros/latex-dev/required/tools/indentfirst.dtx
+++ b/macros/latex-dev/required/tools/indentfirst.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/macros/latex-dev/required/tools/indentfirst.pdf b/macros/latex-dev/required/tools/indentfirst.pdf
index 235e364993..96440b6c57 100644
--- a/macros/latex-dev/required/tools/indentfirst.pdf
+++ b/macros/latex-dev/required/tools/indentfirst.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/layout.dtx b/macros/latex-dev/required/tools/layout.dtx
index 2798bd4f60..a2fc87a6a5 100644
--- a/macros/latex-dev/required/tools/layout.dtx
+++ b/macros/latex-dev/required/tools/layout.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/macros/latex-dev/required/tools/layout.pdf b/macros/latex-dev/required/tools/layout.pdf
index 4e0722c710..b2d34d40fc 100644
--- a/macros/latex-dev/required/tools/layout.pdf
+++ b/macros/latex-dev/required/tools/layout.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/longtable.dtx b/macros/latex-dev/required/tools/longtable.dtx
index 2a61ab0c87..5a23f3ecb3 100644
--- a/macros/latex-dev/required/tools/longtable.dtx
+++ b/macros/latex-dev/required/tools/longtable.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
@@ -37,7 +37,7 @@
%<driver> \ProvidesFile{longtable.drv}
% \fi
% \ProvidesFile{longtable.dtx}
- [2023-11-01 v4.19 Multi-page Table package (DPC)]
+ [2023-12-16 v4.19 Multi-page Table package (DPC)]
%
% \iffalse
%<*driver>
@@ -1048,6 +1048,14 @@
\if@twocolumn
\LT@err{longtable not in 1-column mode}\@ehc
\fi
+% \end{macrocode}
+%
+% \changes{v4.19}{2023/12/16}{Support for tagged PDF}
+% \begin{macrocode}
+ \UseTaggingSocket{tbl/vmode/begin}%
+% \end{macrocode}
+%
+% \begin{macrocode}
\begingroup
% \end{macrocode}
% Check for an optional argument.
@@ -1056,7 +1064,14 @@
% \end{macrocode}
% \end{macro}
%
+%
+%
% \begin{macro}{\LT@array}
+% \begin{macrocode}
+%<@@=tbl>
+\ExplSyntaxOn
+% \end{macrocode}
+%
% Start setting the alignment.
% Based on "\@array" from the \LaTeX\ kernel
% and the \package{array} package.
@@ -1066,7 +1081,43 @@
% so that "\caption" works correctly.
% \begin{macrocode}
\def\LT@array[#1]#2{%
- \refstepcounter{table}\stepcounter{LT@tables}%
+% \end{macrocode}
+%
+% With respect to tagging we have a complicated situation with
+% longtable. 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 these 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. If hard to do, then maybe at first warn if the
+% construction is used.
+%
+% \cs{LT@array} is executed in a group, so we can disable para-tagging here.
+% \changes{v4.19}{2023/12/16}{Support for tagged PDF}
+% \begin{macrocode}
+ \UseTaggingSocket{tbl/init}
+ \@kernel@refstepcounter{table}\stepcounter{LT@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}
+% \end{macrocode}
+%
+% \changes{v4.19}{2023/12/16}{Managing cell indexes}
+% \begin{macrocode}
+ \tbl_gzero_row_count:
+% \end{macrocode}
+%
+% \changes{v4.19}{2023/12/16}{Support for tagged PDF}
+% \begin{macrocode}
+ \UseTaggingSocket{tbl/longtable/init}
% \end{macrocode}
% Set up the glue around the table if an optional argument given.
% \begin{macrocode}
@@ -1101,17 +1152,18 @@
% here so that you can load the \package{array} package before or after
% \package{longtable}.
% \begin{macrocode}
- \let\LT@@tabarray\@tabarray
- \let\LT@@hl\hline
+ \let\LT@@@@tabarray\@tabarray
+ \let\LT@@@@hl\hline
\def\@tabarray{%
- \let\hline\LT@@hl
+ \let\hline\LT@@@@hl
% \end{macrocode}
%\begin{verbatim}
% \let\multicolumn\LT@mcol
%\end{verbatim}
% \begin{macrocode}
- \LT@@tabarray}%
- \let\\\LT@tabularcr\let\tabularnewline\\%
+ \LT@@@@tabarray}%
+ \let\\\LT@tabularcr
+ \let\tabularnewline\\%
\def\newpage{\noalign{\break}}%
% \end{macrocode}
% \changes{v4.05}{1996/11/12}
@@ -1128,8 +1180,8 @@
% \end{macrocode}
%
% \changes{v4.08}{1998/01/20}
-% {Move \cs{@endpbox} definition earlier and define \cs{@@endpbox}
-% and \cs{@@startpbox} for non-array case. tools/2736}
+% {Move \cs{@endpbox} definition earlier and define \cs{@@@@endpbox}
+% and \cs{@@@@startpbox} for non-array case. tools/2736}
% \begin{macrocode}
\let\@endpbox\LT@endpbox
% \end{macrocode}
@@ -1142,8 +1194,8 @@
\let\@acol\@tabacol
\let\@classz\@tabclassz \let\@classiv\@tabclassiv
\def\@startpbox{\vtop\LT@startpbox}%
- \let\@@startpbox\@startpbox
- \let\@@endpbox\@endpbox
+ \let\@@@@startpbox\@startpbox
+ \let\@@@@endpbox\@endpbox
\let\LT@LL@FM@cr\@tabularcr
\else
% \end{macrocode}
@@ -1172,6 +1224,11 @@
\begingroup
\@mkpream{#2}%
% \end{macrocode}
+%
+% \changes{v4.19}{2023/12/16}{Managing cell indexes}
+% \begin{macrocode}
+ \tbl_count_table_cols:
+% \end{macrocode}
% We need to rename "\@preamble" here as F.M.'s scheme uses
% "\global", and we may need to nest "\@mkpream", eg for
% "\multicolumn"
@@ -1180,6 +1237,11 @@
% \begin{macrocode}
\xdef\LT@bchunk{%
% \end{macrocode}
+% We aren't inside any row when a chunk starts.
+% \changes{v4.19}{2023/12/16}{Managing cell indexes}
+% \begin{macrocode}
+ \tbl_inbetween_rows:
+% \end{macrocode}
% \changes{v4.00}{1996/04/08}
% {(DK) Increment Chunk counter}
% \begin{macrocode}
@@ -1205,7 +1267,21 @@
% \begin{macrocode}
\tabskip\LTleft \noexpand\halign to\hsize\bgroup
% \tabskip\LTleft\halign to\hsize\bgroup
- \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}%
+ \tabskip\z@ \@arstrut
+% \end{macrocode}
+% Insert the tagging socket to start the row and initialize the cell
+% data for the row.
+% \changes{v4.19}{2023/12/16}{Support for tagged PDF}
+% \begin{macrocode}
+ \UseTaggingSocket{tbl/row/begin}%
+% \end{macrocode}
+%
+% \changes{v4.19}{2023/12/16}{Managing cell indexes}
+% \begin{macrocode}
+ \tbl_init_cell_data_for_row:
+% \end{macrocode}
+% \begin{macrocode}
+ \@preamble \tabskip\LTright \cr}%
\endgroup
% \end{macrocode}
% Find out how many columns we have (store in "\LT@cols").
@@ -1220,11 +1296,57 @@
% A few more internal commands for \env{longtable}.
% \begin{macrocode}
\m@th\let\par\@empty
- \everycr{}\lineskip\z@\baselineskip\z@
+% \end{macrocode}
+% Tagging 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.
+%
+% TODO: At the moment this tracing still exposes the internal row counter!
+% \begin{macrocode}
+ \@@_trace:n {--longtable-->~chunk~row:~ \the\LT@rows \space
+ row:~ \the\g_@@_row_int \space
+ column:~ \the\g_@@_col_int
+ }
+% \end{macrocode}
+%
+% \changes{v4.19}{2023/12/16}{Support for tagged PDF}
+% \begin{macrocode}
+ \tbl_if_row_was_started:T
+ {
+ \UseTaggingSocket{tbl/row/end}
+% \end{macrocode}
+% The next setting 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
+% \changes{v4.19}{2023/12/16}{Managing cell indexes}
+% \begin{macrocode}
+ \tbl_inbetween_rows:
+ }
+% \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@rows} which is
+% \cs{LTchunksize} at the end of a chunk.
+% \changes{v4.19}{2023/12/16}{Managing cell indexes}
+% \begin{macrocode}
+ \int_compare:nNnT \LT@rows < \LTchunksize
+ { \tbl_gincr_row_count: } % next is row about to start
+ }%
+ }%
+% \end{macrocode}
+% \begin{macrocode}
+ \lineskip\z@\baselineskip\z@
% \end{macrocode}
% Start the first chunk.
% \begin{macrocode}
\LT@bchunk}
+\ExplSyntaxOff
+%<@@=>
% \end{macrocode}
% \end{macro}
%
@@ -1251,6 +1373,11 @@
% force the page-breaker to wake up. The second "\endgraf" is there so
% that "\pagetotal" is updated and so takes "\LTpre" into account.
% \begin{macrocode}
+%<@@=tbl>
+\ExplSyntaxOn
+% \end{macrocode}
+%
+% \begin{macrocode}
\def\LT@start{%
\let\LT@start\endgraf
\endgraf\penalty\z@\vskip\LTpre\endgraf
@@ -1334,7 +1461,7 @@
% \changes{v3.14}{1995/05/02}
% {Set \cs{@colroom}, for tools/1584}
% \begin{macrocode}
- \global\@colroom\@colht
+ \global\@colroom\@colht
% \end{macrocode}
% If the foot is non empty, reduce the "\vsize" and "\@colroom"
% accordingly.
@@ -1342,24 +1469,46 @@
% {Rearrange vertical space tests for tools/3512 (floats on same page)}
% \begin{macrocode}
\ifvoid\LT@foot\else
-% \advance\vsize-\ht\LT@foot
\global\advance\vsize-\ht\LT@foot
\global\advance\@colroom-\ht\LT@foot
\dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@
\maxdepth\z@
\fi
% \end{macrocode}
+%
+% \begin{macrocode}
+ \MakeLinkTarget{table}
+% \end{macrocode}
% Put the table head on the page, and then switch to the new output
% routine.
% \changes{v4.11}{2004/02/01}
% {\cs{nobreak}, for tools/3484}
% \begin{macrocode}
\ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak
+% \end{macrocode}
+%
+% \changes{v4.19}{2023/12/16}{Support for tagged PDF}
+% \begin{macrocode}
+ \UseTaggingSocket{tbl/longtable/head}
+% \end{macrocode}
+%
+% \begin{macrocode}
\output{\LT@output}}
+\ExplSyntaxOff
+%<@@=>
% \end{macrocode}
% \end{macro}
%
+%
+%
+%
% \begin{macro}{\endlongtable}
+%
+% \begin{macrocode}
+%<@@=tbl>
+\ExplSyntaxOn
+% \end{macrocode}
+%
% Called by "\end{longtable}".
% \begin{macrocode}
\def\endlongtable{%
@@ -1370,11 +1519,23 @@
% been shortened, or the table numbering has gone awry). In that case
% we at least start collecting valid new information with the last
% chunk of this table, by removing the width constraint.
+% \changes{v4.19}{2023/12/16}{Support for tagged PDF}
+% \begin{macrocode}
+ \tbl_crcr:n {endlongtable}
+% \end{macrocode}
+%
% \changes{v4.01}{1996/04/11}
% {(DPC) use \cs{noalign} to sneak in \cs{LT@entry@chop}}
% \begin{macrocode}
- \crcr
\noalign{%
+% \end{macrocode}
+%
+% \changes{v4.19}{2023/12/16}{Support for tagged PDF}
+% \begin{macrocode}
+ \UseTaggingSocket{tbl/longtable/finalize}
+% \end{macrocode}
+%
+% \begin{macrocode}
\let\LT@entry\LT@entry@chop
\xdef\LT@save@row{\LT@save@row}}%
\LT@echunk
@@ -1414,10 +1575,10 @@
% \changes{v4.04}{1996/05/24}
% {Use \cs{LT@final@warn}}
% \begin{macrocode}
- \ifx\LT@save@row\LT@@save@row
+ \ifx\LT@save@row\LT@@@@save@row
\else
- \LT@warn{Column \@width s have changed\MessageBreak
- in table \thetable}%
+ \LT@warn{Column~ widths~ have~ changed\MessageBreak
+ in~ table~ \thetable}%
\LT@final@warn
\fi
% \end{macrocode}
@@ -1449,7 +1610,15 @@
% \end{macrocode}
% Footnotes. As done in the \package{multicol} package.
% \begin{macrocode}
- \ifvoid\footins\else\insert\footins{}\fi}
+ \ifvoid\footins\else\insert\footins{}\fi
+% \end{macrocode}
+%
+% \changes{v4.19}{2023/12/16}{Support for tagged PDF}
+% \begin{macrocode}
+ \UseTaggingSocket{tbl/vmode/end}%
+}
+\ExplSyntaxOff
+%<@@=>
% \end{macrocode}
% \end{macro}
%
@@ -1518,6 +1687,10 @@
\protected\def\LT@tabularcr{%
\relax\iffalse{\fi\ifnum0=`}\fi
\@ifstar
+% \end{macrocode}
+% TODO: as we replace crcr later in one case, we probably have to
+% implement some further logic there!
+% \begin{macrocode}
{\def\crcr{\LT@crcr\noalign{\nobreak}}\let\cr\crcr
\LT@t@bularcr}%
{\LT@t@bularcr}}
@@ -1544,8 +1717,13 @@
% \end{macrocode}
% \end{macro}
%
+%
+%
+%
% \begin{macro}{\LT@t@bularcr}
% \begin{macrocode}
+%<@@=tbl>
+\ExplSyntaxOn
\def\LT@t@bularcr{%
% \end{macrocode}
% Increment the counter, and do \env{tabular}'s "\\" or finish the
@@ -1555,6 +1733,13 @@
% \begin{macrocode}
\global\advance\LT@rows\@ne
\ifnum\LT@rows=\LTchunksize
+% \end{macrocode}
+% At the end of the chunk \verb=\\= is doing something special and
+% so we lose \verb=\tbl_count_missing_cells:n=. Below is about the
+% right place to add it do this code branch.
+% \changes{v4.19}{2023/12/16}{Managing cell indexes}
+% \begin{macrocode}
+ \tbl_count_missing_cells:n {echunk}
\gdef\LT@setprevdepth{%
\prevdepth\z@
\global\let\LT@setprevdepth\relax}%
@@ -1563,6 +1748,8 @@
\ifnum0=`{}\fi
\expandafter\LT@LL@FM@cr
\fi}
+\ExplSyntaxOff
+%<@@=>
% \end{macrocode}
% \end{macro}
%
@@ -1943,7 +2130,9 @@
% This code is based on "\cline". Two copies of the line are produced,
% as described above.
% \begin{macrocode}
-\def\LT@@hline{%
+%<@@=tbl>
+\ExplSyntaxOn
+\def\LT@@@@hline{%
\ifx\@let@token\hline
\global\let\@gtempa\@gobble
\gdef\LT@sep{\penalty-\@medpenalty\vskip\doublerulesep}%
@@ -1954,11 +2143,25 @@
\ifnum0=`{\fi}%
\multispan\LT@cols
\unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
- \noalign{\LT@sep}%
+% \end{macrocode}
+% Don't update the row counter, or rather undo the update done in \cs{everycr}:
+% \changes{v4.19}{2023/12/16}{Managing cell indexes}
+% \begin{macrocode}
+ \noalign{
+ \tbl_gdecr_row_count:
+ \LT@sep}
\multispan\LT@cols
\unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
- \noalign{\penalty\@M}%
+% \end{macrocode}
+% Same here.
+% \changes{v4.19}{2023/12/16}{Managing cell indexes}
+% \begin{macrocode}
+ \noalign{
+ \tbl_gdecr_row_count:
+ \penalty\@M}
\@gtempa}
+\ExplSyntaxOff
+%<@@=>
% \end{macrocode}
% \end{macro}
%
@@ -2049,13 +2252,15 @@
% \begin{macro}{\LT@output}
% Actually this is not so bad, with FM leading the way.
% \begin{macrocode}
+%<@@=tbl>
+\ExplSyntaxOn
\def\LT@output{%
\ifnum\outputpenalty <-\@Mi
\ifnum\outputpenalty > -\LT@end@pen
% \end{macrocode}
% If this was a float or a marginpar we complain.
% \begin{macrocode}
- \LT@err{floats and marginpars not allowed in a longtable}\@ehc
+ \LT@err{floats~ and~ marginpars~ not~ allowed~ in~ a~ longtable}\@ehc
\else
% \end{macrocode}
% We have reached the end of the table, on the scroll at least,
@@ -2103,6 +2308,13 @@
% \begin{macrocode}
\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi
% \end{macrocode}
+% Handle foot box when tagging:
+%
+% \changes{v4.19}{2023/12/16}{Support for tagged PDF}
+% \begin{macrocode}
+ \UseTaggingSocket{tbl/longtable/foot}
+% \end{macrocode}
+%
% End of "\ifnum\outputpenalty > -\LT@end@pen".
% \begin{macrocode}
\fi
@@ -2114,6 +2326,15 @@
% If we have not reached the end of the table,
% \begin{macrocode}
\setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}%
+% \end{macrocode}
+%
+% Handle foot box when tagging:
+% \changes{v4.19}{2023/12/16}{Support for tagged PDF}
+% \begin{macrocode}
+ \UseTaggingSocket{tbl/longtable/foot}
+% \end{macrocode}
+%
+% \begin{macrocode}
\@makecol
\@outputpage
% \end{macrocode}
@@ -2133,8 +2354,15 @@
% \begin{macrocode}
\fi}
% \end{macrocode}
+%
+% \begin{macrocode}
+\ExplSyntaxOff
+%<@@=>
+% \end{macrocode}
% \end{macro}
%
+%
+%
% \subsection{Commands for the table head and foot}
%
% \begin{macro}{\LT@end@hd@ft}
@@ -2142,20 +2370,86 @@
% box specified by "#1". Issue an error if the table has already
% started. Then start a new chunk.
% \begin{macrocode}
+%<@@=tbl>
+\ExplSyntaxOn
\def\LT@end@hd@ft#1{%
+% \end{macrocode}
+%
+% 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.
+%
+% To handle missing columns in the header we need this:
+% \changes{v4.19}{2023/12/16}{Managing cell indexes}
+% \begin{macrocode}
+ \tbl_if_row_was_started:TF
+ {
+% \end{macrocode}
+% TODO: This is exposing internal counters, so it should be encapsulated
+% in some interface command (but I'm not sure what that should be
+% called, so not done yet.
+% \changes{v4.19}{2023/12/16}{Managing cell indexes}
+% \begin{macrocode}
+ \tbl_count_missing_cells:n {head/foot}
+ \int_step_inline:nn
+ { \LT@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@rows { \LTchunksize }
+ }
+% \end{macrocode}
+
+% If we are still in column zero then we had an empty \cs{endhead}
+% and so making any assignment, etc., would start a row --- something we don't want.
+% To get out of this trap we run \cs{crcr} (which would normally
+% come inside \cs{LT@echunk}. That will then trigger \cs{everycr}
+% and update row counter unnecessarily, but now we have a defined state, so
+% we can use \cs{noalign} to undo that.
+% We also change \cs{LT@rows} so that further \cs{cr}s do not do
+% any harm (as explained above.
+%
+% The \cs{crcr} inside \cs{LT@echunk} will be bypassed in that case
+% as we have just executed a \cs{crcr} and are still in scanning modus for
+% \cs{omit} or \cs{noalign}.
+% \begin{macrocode}
+ {
+ \crcr
+ \noalign{
+% \end{macrocode}
+%
+% \changes{v4.19}{2023/12/16}{Managing cell indexes}
+% \begin{macrocode}
+ \tbl_gdecr_row_count: % undo the increment
+ \int_gset:Nn \LT@rows { \LTchunksize }
+ }
+ }
\LT@echunk
% \end{macrocode}
% Changed from "\relax" to "\endgraf" at V3.04, see "\LT@start".
% \begin{macrocode}
\ifx\LT@start\endgraf
\LT@err
- {Longtable head or foot not at start of table}%
- {Increase LTchunksize}%
+ {Longtable~ head~ or~ foot~ not~ at~ start~ of~ table}%
+ {Increase~ LTchunksize}%
\fi
\setbox#1\box\z@
+ \@@_trace:n {-->>~ Saving~\noexpand#1}
\LT@get@widths
\LT@bchunk}
% \end{macrocode}
+%
+% \begin{macrocode}
+\ExplSyntaxOff
+%<@@=>
+% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\endfirsthead}
@@ -2255,6 +2549,24 @@
% \end{macrocode}
% \end{macro}
%
+%
+%
+%
+%
+% Some variables need for the tagging support.
+% \begin{macrocode}
+%<@@=tbl>
+\ExplSyntaxOn
+ \seq_new:N \g_@@_LT@firsthead_rows_seq
+ \seq_new:N \g_@@_LT@head_rows_seq
+ \seq_new:N \g_@@_LT@lastfoot_rows_seq
+ \seq_new:N \g_@@_LT@foot_rows_seq
+\ExplSyntaxOff
+%<@@=>
+% \end{macrocode}
+%
+%
+%
% \begin{macrocode}
%</package>
% \end{macrocode}
diff --git a/macros/latex-dev/required/tools/longtable.ins b/macros/latex-dev/required/tools/longtable.ins
index 5c3ad27063..60b7461571 100644
--- a/macros/latex-dev/required/tools/longtable.ins
+++ b/macros/latex-dev/required/tools/longtable.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2023
+%% Copyright (C) 1993-2024
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -45,7 +45,7 @@ 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) 1993-2023
+Copyright (C) 1993-2024
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/required/tools/longtable.pdf b/macros/latex-dev/required/tools/longtable.pdf
index f24ff36f4f..5fb3c4a917 100644
--- a/macros/latex-dev/required/tools/longtable.pdf
+++ b/macros/latex-dev/required/tools/longtable.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/multicol.dtx b/macros/latex-dev/required/tools/multicol.dtx
index 2676d03aa1..9c680ab563 100644
--- a/macros/latex-dev/required/tools/multicol.dtx
+++ b/macros/latex-dev/required/tools/multicol.dtx
@@ -99,10 +99,10 @@
%<driver> \ProvidesFile{multicol.drv}
% \fi
% \ProvidesFile{multicol.dtx}
- [2023/03/30 v1.9f multicolumn formatting (FMi)]
+ [2024/01/29 v1.9g multicolumn formatting (FMi)]
+%
%
%
-%%
%
% \changes{v1.9c}{2021/11/30}{Added rollback to v1.8}
% \changes{v1.5n}{1997/06/05}{Applied improvement of documentation,
@@ -919,9 +919,22 @@
% And we don't show macro names in the margin.
% \begin{macrocode}
\setcounter{IndexColumns}{4}
-\let\DescribeMacro\SpecialUsageIndex
-\let\DescribeEnv\SpecialEnvIndex
-\renewcommand\PrintMacroName[1]{}
+% \end{macrocode}
+%
+% The following redefinitions have to be moved until after the
+% preamble because version 3 of \pkg{doc} resets them after the
+% premable (this is tmp, because \pkg{hypdoc} is not yet
+% integrated, but as we all know, tmp solutions have a tendency to
+% survive for a long time\ldots).
+% \begin{macrocode}
+\AddToHook{begindocument}{%
+ \let\DescribeMacro\SpecialUsageIndex
+ \let\DescribeEnv\SpecialEnvIndex
+ \renewcommand\PrintMacroName[1]{}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
\CodelineIndex
%\DisableCrossrefs % Partial index
\RecordChanges % Change log
@@ -1082,7 +1095,7 @@
% better test for this situation. Otherwise, we will get a \TeX{}
% stack overflow as this would generate a self-referencing definition.
% \changes{v1.6e}{2004/02/14}{Avoid self-referencing definition of
-% \cs{@footnotetext} (pr/3618)}.
+% \cs{@footnotetext} (pr/3618)}
% \begin{macrocode}
\ifx\@footnotetext\mult@footnotetext
\else
@@ -2376,7 +2389,7 @@
% If |\raggedcolumns| is in force we add a |vfill| at the bottom by
% unboxing the split box.
% But we need to unbox anyway to ensure that at the end of the box
-% we do not have unwanted space. This can sneak in in certain
+% we do not have unwanted space. This can sneak in, in certain
% situations, for example, if two lists follow each other and we
% break between them. While such space is usually zero it still has
% an effect because it hides depth of the last line in the column
@@ -2925,7 +2938,11 @@
% We start by setting the kept marks by updating them with any
% marks from this box. This has to be done \emph{before} we add a
% penalty of $-10000$ to the top of the box, otherwise only an
-% empty box will be considered.
+% empty box will be considered. But even that is not enough: the box
+% may contain \cs{columnbreak}s in which case doing some artifical
+% splitting to get the marks out still fails to see all marks
+% unless we take some special precaution in \cs{get@keptmarks}
+% (which is now done).
% \changes{v1.5h}{1994/08/26}{Get kept marks first}
% \begin{macrocode}
\get@keptmarks\mult@box
@@ -3751,8 +3768,15 @@
% everything is split off. As a result |\splitfirstmark| and
% |\splitbotmark| will contain the first and last mark in the box
% respectively.
+%
+% Unfortunately, a simple \cs{vsplit} is not enough if the material
+% contains forced breaks in that case we first have to get rid of
+% those which is why we do this work in a separate macro that can
+% call itself recursively.
+% \changes{v1.9g}{2023/11/10}{Get rid of forced breaks for mark
+% extraction (gh/1130)}
% \begin{macrocode}
- \setbox#1\vsplit#1to\maxdimen
+ \mc@get@all@box@marks #1%
% \end{macrocode}
% Therefore we can now set the kept marks which is a global
% operation and afterwards close the group. This will restore the
@@ -3773,6 +3797,29 @@
% \end{macro}
%
%
+% \begin{macro}{\mc@get@all@box@marks}
+% This macro splits a box to \cs{maxdimen} in order to get at the
+% marks inside. If it turns out that we have a remainder after the
+% split (e.g., if there was a \cs{columnbreak} in the material) we
+% stitch the two parts together again (which omits the forced
+% break) and recurse. Eventually, everything is split off and the
+% split marks will then have the appropriate values.
+% \changes{v1.9g}{2023/11/10}{Get rid of forced breaks for mark
+% extraction (gh/1130)}
+% \begin{macrocode}
+\def\mc@get@all@box@marks #1{%
+ \setbox\@tempboxa\vsplit#1to\maxdimen
+ \ifvoid#1\else
+ \setbox#1\vbox{\unvbox\@tempboxa \unvbox#1}%
+ \mc@get@all@box@marks #1%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
% \begin{macro}{\set@keptmarks}
% The macro |\set@keptmarks| is responsible for setting
% |\kept@firstmark| and |\kept@botmark|, by checking the current
diff --git a/macros/latex-dev/required/tools/multicol.ins b/macros/latex-dev/required/tools/multicol.ins
index fa561e0bb1..7a7ef27d24 100644
--- a/macros/latex-dev/required/tools/multicol.ins
+++ b/macros/latex-dev/required/tools/multicol.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2023
+%% Copyright (C) 1993-2024
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -45,7 +45,7 @@ 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) 1993-2023
+Copyright (C) 1993-2024
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/required/tools/multicol.pdf b/macros/latex-dev/required/tools/multicol.pdf
index 031d1920fa..360c09d0b9 100644
--- a/macros/latex-dev/required/tools/multicol.pdf
+++ b/macros/latex-dev/required/tools/multicol.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/rawfonts.dtx b/macros/latex-dev/required/tools/rawfonts.dtx
index 4b930f3ea7..3ffa2032c3 100644
--- a/macros/latex-dev/required/tools/rawfonts.dtx
+++ b/macros/latex-dev/required/tools/rawfonts.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/macros/latex-dev/required/tools/rawfonts.pdf b/macros/latex-dev/required/tools/rawfonts.pdf
index 08f8d71317..98bfaa374a 100644
--- a/macros/latex-dev/required/tools/rawfonts.pdf
+++ b/macros/latex-dev/required/tools/rawfonts.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/shellesc.dtx b/macros/latex-dev/required/tools/shellesc.dtx
index aa707fe550..8a556de922 100644
--- a/macros/latex-dev/required/tools/shellesc.dtx
+++ b/macros/latex-dev/required/tools/shellesc.dtx
@@ -1,6 +1,6 @@
% \iffalse
%% Source File: shellesc.dtx
-%% Copyright (C) 2015-2023
+%% Copyright (C) 2015-2024
%%
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
diff --git a/macros/latex-dev/required/tools/shellesc.pdf b/macros/latex-dev/required/tools/shellesc.pdf
index ee1a87cc01..c41228c1b9 100644
--- a/macros/latex-dev/required/tools/shellesc.pdf
+++ b/macros/latex-dev/required/tools/shellesc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/showkeys.dtx b/macros/latex-dev/required/tools/showkeys.dtx
index c90b3863e1..aba96a7eab 100644
--- a/macros/latex-dev/required/tools/showkeys.dtx
+++ b/macros/latex-dev/required/tools/showkeys.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
@@ -22,7 +22,7 @@
% \fi
% \iffalse
%% File: showkeys.dtx Copyright (C) 1992-1997 David Carlisle
-%% File: showkeys.dtx Copyright (C) 2006-2019 David Carlisle, LaTeX Project
+%% File: showkeys.dtx Copyright (C) 2006-2023 David Carlisle, LaTeX Project
%
%<*dtx>
\ProvidesFile{showkeys.dtx}
@@ -39,7 +39,7 @@
%<driver> \ProvidesFile{showkeys.drv}
% \fi
% \ProvidesFile{showkeys.dtx}
- [2023/07/08 v3.19 Show cite and label keys (DPC, MH)]
+ [2023/12/16 v3.20 Show cite and label keys (DPC, MH)]
%
% \iffalse
%<*driver>
@@ -417,6 +417,8 @@
% \end{macrocode}
% \changes{v3.02}{1995/03/17}
% {New code for `in label' case.}
+% \changes{v3.20}{2023/12/16}
+% {Avoid adding an extra box layer github/1123}
% If the |\label| is straight after |\item| (|\bibitem| is handled by
% this case as well) then the item label has not been added to the page
% yet. It is hanging around in the box |\@labels| waiting for the
@@ -425,7 +427,7 @@
\global\setbox\@labels\hbox{%
\llap{\SK@lab\SK@lab@relax
\kern\@totalleftmargin\kern\marginparsep}%
- \box\@labels}%
+ \unhbox\@labels}%
% \end{macrocode}
%
% \begin{macrocode}
diff --git a/macros/latex-dev/required/tools/showkeys.pdf b/macros/latex-dev/required/tools/showkeys.pdf
index 2d4da0c5a7..6b1ae4549e 100644
--- a/macros/latex-dev/required/tools/showkeys.pdf
+++ b/macros/latex-dev/required/tools/showkeys.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/somedefs.dtx b/macros/latex-dev/required/tools/somedefs.dtx
index 02653a1393..156621d70e 100644
--- a/macros/latex-dev/required/tools/somedefs.dtx
+++ b/macros/latex-dev/required/tools/somedefs.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/macros/latex-dev/required/tools/somedefs.pdf b/macros/latex-dev/required/tools/somedefs.pdf
index 9d282b58f3..07a32befaa 100644
--- a/macros/latex-dev/required/tools/somedefs.pdf
+++ b/macros/latex-dev/required/tools/somedefs.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/tabularx.dtx b/macros/latex-dev/required/tools/tabularx.dtx
index 6d59ca4c22..52ee62cad9 100644
--- a/macros/latex-dev/required/tools/tabularx.dtx
+++ b/macros/latex-dev/required/tools/tabularx.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
@@ -31,7 +31,7 @@
%<driver> \ProvidesFile{tabularx.drv}
% \fi
% \ProvidesFile{tabularx.dtx}
- [2023/07/08 v2.11c `tabularx' package (DPC)]
+ [2023/12/11 v2.12a `tabularx' package (DPC)]
% \iffalse
%<*driver>
\documentclass{ltxdoc}
@@ -261,6 +261,25 @@
% This behaviour of the package can be customised slightly
% as noted in the documentation of the code section.
%
+% \section{Support for tagged PDF}
+%
+% With version 2.12a the package is made tagging aware, which means that
+% it will automatically produce tagged tables (necessary, for example, for
+% accessibility) if tagging is requested via \cs{DocumentMetadata}.
+%
+% More granular control, e.g., explicitly deciding which cells are
+% header cells, etc., is currently under development, but syntax for
+% this will not appear in this package. Instead it will become
+% available across all tabular-generating packages and then
+% automatically apply here as well.
+%
+% Enabling \LaTeX{} to automatically produce tagged PDF is a long-term
+% project and this is a tiny step in this puzzle. For more information
+% on the project and already available functionality, see
+% \url{https://latex-project.org/publications/indexbytopic/pdf} and
+% \url{https://github.com/latex3/tagging-project}.
+%
+%
% \MaybeStop{}
%
% \section{The Macros}
@@ -269,6 +288,14 @@
%<*package>
% \end{macrocode}
%
+% We only need two changes for tagging support, but they require
+% that a recent \LaTeX{} kernel is used (which should be no problem
+% if \texttt{tools} is distributed in parallel with the kernel.
+% \changes{v2.12a}{2023/12/11}{Require newer LaTeX kernel}
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[2024/06/01]
+% \end{macrocode}
+%
% \changes{v2.00}{1994/02/07}
% {New Option Handling}
% \begin{macrocode}
@@ -506,7 +533,15 @@
% \begin{macrocode}
\TX@typeout@
{\@spaces Table Width\@spaces Column Width\@spaces X Columns}%
-% \end{macrocode}%
+% \end{macrocode}
+%
+% While we do trial typesetting we suspend any tagging if that is
+% active:
+% \changes{v2.12a}{2023/12/11}
+% {Suspend any tagging while doing trial typesetting}
+% \begin{macrocode}
+ \SuspendTagging {tabularx}%
+% \end{macrocode}
% First attempt. Modify the {\ttfamily X} definition to count {\ttfamily
% X} columns.
% \begin{macrocode}
@@ -523,6 +558,12 @@
\TX@trial{}%
\repeat
% \end{macrocode}
+%
+% And here we restart it again:
+% \begin{macrocode}
+ \ResumeTagging {tabularx}%
+% \end{macrocode}
+%
% One last time, with warnings back on (see appendix D)
% use {\ttfamily tabular*} to put it in a box of the right size, in case
% the algorithm failed to find the correct size.
@@ -737,8 +778,9 @@
% Make the table, and finish the hbox.
% Since v1.06, "\toks@" contains the preamble specification,
% and possible optional argument, as well as the table body.
+%
% \begin{macrocode}
- \expandafter\tabular\the\toks@
+ \expandafter\tabular\the\toks@
\endtabular}%
% \end{macrocode}
% Since v1.05 reset all \LaTeX\ counters, by executing "\TX@ckpt".
@@ -961,6 +1003,7 @@
% \end{macrocode}
% \end{macro}
%
+%
% \begin{macrocode}
%</package>
% \end{macrocode}
diff --git a/macros/latex-dev/required/tools/tabularx.ins b/macros/latex-dev/required/tools/tabularx.ins
index 6e81e93432..fdce598d37 100644
--- a/macros/latex-dev/required/tools/tabularx.ins
+++ b/macros/latex-dev/required/tools/tabularx.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2023
+%% Copyright (C) 1993-2024
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -45,7 +45,7 @@ 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) 1993-2023
+Copyright (C) 1993-2024
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/required/tools/tabularx.pdf b/macros/latex-dev/required/tools/tabularx.pdf
index 9f68f26643..28b61a3da3 100644
--- a/macros/latex-dev/required/tools/tabularx.pdf
+++ b/macros/latex-dev/required/tools/tabularx.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/theorem.dtx b/macros/latex-dev/required/tools/theorem.dtx
index e3a8e90b8c..a9c3ccae3e 100644
--- a/macros/latex-dev/required/tools/theorem.dtx
+++ b/macros/latex-dev/required/tools/theorem.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/macros/latex-dev/required/tools/theorem.pdf b/macros/latex-dev/required/tools/theorem.pdf
index 5cdc977c98..96c8c8512f 100644
--- a/macros/latex-dev/required/tools/theorem.pdf
+++ b/macros/latex-dev/required/tools/theorem.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/tools-overview.pdf b/macros/latex-dev/required/tools/tools-overview.pdf
index 300602a9ed..b5dd0670fb 100644
--- a/macros/latex-dev/required/tools/tools-overview.pdf
+++ b/macros/latex-dev/required/tools/tools-overview.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/tools-overview.tex b/macros/latex-dev/required/tools/tools-overview.tex
index 3bc325d67c..54f4b5ed63 100644
--- a/macros/latex-dev/required/tools/tools-overview.tex
+++ b/macros/latex-dev/required/tools/tools-overview.tex
@@ -1,7 +1,7 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{tools-overview.tex}[2015/03/31 v1.0 Tools overview]
-% Copyright (C) 2006-2023
+% Copyright (C) 2006-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/macros/latex-dev/required/tools/tools.ins b/macros/latex-dev/required/tools/tools.ins
index 6898faead3..2fd1cd174b 100644
--- a/macros/latex-dev/required/tools/tools.ins
+++ b/macros/latex-dev/required/tools/tools.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2023
+%% Copyright (C) 1993-2024
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -49,7 +49,7 @@ reports for it can be opened at https://latex-project.org/bugs/
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2023
+Copyright (C) 1993-2024
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/required/tools/trace.dtx b/macros/latex-dev/required/tools/trace.dtx
index 788f831620..27a39c776b 100644
--- a/macros/latex-dev/required/tools/trace.dtx
+++ b/macros/latex-dev/required/tools/trace.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/macros/latex-dev/required/tools/trace.pdf b/macros/latex-dev/required/tools/trace.pdf
index 7ddd4fc6b7..f0065a21c3 100644
--- a/macros/latex-dev/required/tools/trace.pdf
+++ b/macros/latex-dev/required/tools/trace.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/varioref.dtx b/macros/latex-dev/required/tools/varioref.dtx
index e801c54f81..ccf3468c9b 100644
--- a/macros/latex-dev/required/tools/varioref.dtx
+++ b/macros/latex-dev/required/tools/varioref.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/macros/latex-dev/required/tools/varioref.ins b/macros/latex-dev/required/tools/varioref.ins
index dcc41d0176..88527a20ba 100644
--- a/macros/latex-dev/required/tools/varioref.ins
+++ b/macros/latex-dev/required/tools/varioref.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2023
+%% Copyright (C) 1993-2024
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -45,7 +45,7 @@ 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) 1993-2023
+Copyright (C) 1993-2024
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/required/tools/varioref.pdf b/macros/latex-dev/required/tools/varioref.pdf
index 6a8d722fd7..01a079a5ff 100644
--- a/macros/latex-dev/required/tools/varioref.pdf
+++ b/macros/latex-dev/required/tools/varioref.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/verbatim.dtx b/macros/latex-dev/required/tools/verbatim.dtx
index 832f80ef3a..468dead3e8 100644
--- a/macros/latex-dev/required/tools/verbatim.dtx
+++ b/macros/latex-dev/required/tools/verbatim.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
@@ -55,7 +55,7 @@
\and
Chris Rowley}
-\date{2023/07/08}
+\date{2023/11/06}
\begin{document}
\markboth{Verbatim style option}{Verbatim style option}
\MaintainedByLaTeXTeam{tools}
@@ -69,6 +69,8 @@
%\fi
%
%
+%
+% \changes{v1.5x}{2024/01/22}{Added TAB marking support to \cs{verbatiminput*}}
% \changes{v1.5u}{2020-07-07}{Typo repair and added a missing comment
% character}
% \changes{v1.5q}{2003/08/22}{Reintroduced \cs{@noligs}, by popular
@@ -508,7 +510,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{verbatim}
- [2022-07-02 v1.5u LaTeX2e package for verbatim enhancements]
+ [2024-01-22 v1.5x LaTeX2e package for verbatim enhancements]
\@ifundefined{verbatim@@@}{}{\endinput}
% \end{macrocode}
%
@@ -549,9 +551,17 @@
% to be printed as spaces in the output.
% \begin{macrocode}
\begingroup
- \catcode`\ =\active%
- \def\x{\def\@vobeyspaces{\catcode`\ \active\let \@xobeysp}}
- \expandafter\endgroup\x
+\catcode`\ =\active%
+% \end{macrocode}
+% Because space is active we can't indent the following code
+% nicely---we would then get the spaces at the beginning of the
+% line as the third and fourth argument to \cs{@ifl@t@r}.
+% \changes{v1.5v}{2023/11/06}{\cs{@vobeytabs} added when available (gh/1160)}
+% \begin{macrocode}
+\@ifl@t@r\fmtversion{2023-11-01}%
+{\def\x{\def\@vobeyspaces{\catcode`\ \active\let \@xobeysp\@vobeytabs}}}%
+{\def\x{\def\@vobeyspaces{\catcode`\ \active\let \@xobeysp}}}%
+\expandafter\endgroup\x
% \end{macrocode}
% \end{macro}
%
@@ -1562,7 +1572,14 @@
% arguments, depending on whether an asterisk follows.
% \begin{macrocode}
\def\verbatiminput{\begingroup
- \@ifstar{\verbatim@input\relax}%
+% \end{macrocode}
+%
+% \changes{v1.5x}{2024/01/22}{Added TAB marking support into the
+% starred version (gh/1245)}
+% If starred, we mark spaces and TABs, the two
+% added pieces are the same as for verbatim*.
+% \begin{macrocode}
+ \@ifstar{\verbatim@input{\@setupverbvisiblespace\@vobeyspaces}}%
{\verbatim@input{\frenchspacing\@vobeyspaces}}}
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex-dev/required/tools/verbatim.pdf b/macros/latex-dev/required/tools/verbatim.pdf
index 3908ca304d..bc055db066 100644
--- a/macros/latex-dev/required/tools/verbatim.pdf
+++ b/macros/latex-dev/required/tools/verbatim.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/xr.dtx b/macros/latex-dev/required/tools/xr.dtx
index be48f5a01b..3914cebcd9 100644
--- a/macros/latex-dev/required/tools/xr.dtx
+++ b/macros/latex-dev/required/tools/xr.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/macros/latex-dev/required/tools/xr.pdf b/macros/latex-dev/required/tools/xr.pdf
index 58217a12d2..b3c4530a59 100644
--- a/macros/latex-dev/required/tools/xr.pdf
+++ b/macros/latex-dev/required/tools/xr.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/xspace.dtx b/macros/latex-dev/required/tools/xspace.dtx
index 807fc9c5df..be20fc9e52 100644
--- a/macros/latex-dev/required/tools/xspace.dtx
+++ b/macros/latex-dev/required/tools/xspace.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 1993-2024
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/macros/latex-dev/required/tools/xspace.pdf b/macros/latex-dev/required/tools/xspace.pdf
index 573624719e..792cae7e6c 100644
--- a/macros/latex-dev/required/tools/xspace.pdf
+++ b/macros/latex-dev/required/tools/xspace.pdf
Binary files differ