summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex-dev
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-03-16 21:01:50 +0000
committerKarl Berry <karl@freefriends.org>2022-03-16 21:01:50 +0000
commitedc4da5fa2ccf95dc2d8e78bd12c6532e6074098 (patch)
tree2cbeacd10abcd62cbf748f76a086d6dfb171b5d4 /Master/texmf-dist/tex/latex-dev
parent68a75026205e8146e3f641432ffc7e569d4465f0 (diff)
latex-lab-dev (16mar22)
git-svn-id: svn://tug.org/texlive/trunk@62742 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex-dev')
-rw-r--r--Master/texmf-dist/tex/latex-dev/latex-lab/documentmetadata-support.ltx4
-rw-r--r--Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footmisc.ltx630
-rw-r--r--Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx429
-rw-r--r--Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-prototype.sty301
-rw-r--r--Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-new-or.sty169
-rw-r--r--Master/texmf-dist/tex/latex-dev/latex-lab/new-or-latex-lab-testphase.ltx44
-rw-r--r--Master/texmf-dist/tex/latex-dev/latex-lab/phase-I-latex-lab-testphase.ltx2
-rw-r--r--Master/texmf-dist/tex/latex-dev/latex-lab/phase-II-latex-lab-testphase.ltx7
-rw-r--r--Master/texmf-dist/tex/latex-dev/latex-lab/prototype-latex-lab-testphase.ltx301
-rw-r--r--Master/texmf-dist/tex/latex-dev/latex-lab/tagpdf-latex-lab-testphase.ltx7
10 files changed, 1890 insertions, 4 deletions
diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/documentmetadata-support.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/documentmetadata-support.ltx
index cabd8bb6efc..458394ca9be 100644
--- a/Master/texmf-dist/tex/latex-dev/latex-lab/documentmetadata-support.ltx
+++ b/Master/texmf-dist/tex/latex-dev/latex-lab/documentmetadata-support.ltx
@@ -8,7 +8,7 @@
%%
%% This is a generated file.
%%
-%% Copyright 2021 LaTeX Project
+%% Copyright 2021,2022 LaTeX Project
%%
%% This file was generated from file(s) of the `LaTeX-lab Bundle'.
%% ------------------------------------------------------------------------------------
@@ -141,9 +141,11 @@
{
\tl_gput_right:Nn\g__pdfmanagement_testphase_tl
{
+ \AddToDocumentProperties [document]{testphase/#1}{loaded}
\file_if_exist_input:nF {#1-latex-lab-testphase.ltx}
{
\msg_warning:nnn{meta}{latex-lab-pkg-missing}{#1}
+ \AddToDocumentProperties [document]{testphase/#1}{missing}
}
}
}
diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footmisc.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footmisc.ltx
new file mode 100644
index 00000000000..7c7129b4560
--- /dev/null
+++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footmisc.ltx
@@ -0,0 +1,630 @@
+%%
+%% This is file `latex-lab-footmisc.ltx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% latex-lab-footnotes.dtx (with options: `footmisc')
+%%
+%% This is a generated file.
+%%
+%% Copyright 2021,2022 LaTeX Project
+%%
+%% This file was generated from file(s) of the `LaTeX-lab Bundle'.
+%% ------------------------------------------------------------------------------------
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008 or later.
+%%
+%% This file may only be distributed together with a copy of the LaTeX
+%% `LaTeX-lab Bundle'. You may however distribute the `LaTeX-lab Bundle'
+%% without such generated files.
+%%
+%% The newest sources can be found below
+%%
+%% https://github.com/latex3/latex2e/required/latex-lab
+%%
+%% where one can also log issues in case there are any.
+%%
+%%
+%% File: latex-lab-footnotes.dtx
+%%
+%% Copyright (c) 1995-2011 Robin Fairbairns
+%% Copyright (c) 2018-2022 Robin Fairbairns, Frank Mittelbach
+%%
+%% This file is part of the `latex-lab Bundle'.
+%% --------------------------------------------
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% https://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008 or later.
+%%
+%% This work has the LPPL maintenance status 'maintained'.
+%%
+%%
+%% File: footmisc.dtx (C) Copyright 1995-2011 Robin Fairbairns
+%% (C) Copyright 2018-2022 Frank Mittelbach
+\NeedsTeXFormat{LaTeX2e}
+\providecommand\DeclareRelease[3]{}
+\providecommand\DeclareCurrentRelease[2]{}
+
+\DeclareRelease{v5}{2011-06-06}{footmisc-2011-06-06.sty}
+\DeclareCurrentRelease{}{2022-02-14}
+\ProvidesPackage{latex-lab-footmisc}%
+ [2022/03/08 v6.0d
+ a miscellany of footnote facilities -- latex-lab version%
+ ]
+
+\NeedsTeXFormat{LaTeX2e}[2020/10/01]
+\newtoks\FN@temptoken
+\providecommand\protected@writeaux{%
+ \protected@write\@auxout
+}
+\def\l@advance@macro{\@@dvance@macro\edef}
+\def\@@dvance@macro#1#2#3{\expandafter\@tempcnta#2\relax
+ \advance\@tempcnta#3\relax
+ #1#2{\the\@tempcnta}%
+}
+\let\@advance@macro\l@advance@macro
+\DeclareOption{symbol}{\renewcommand\thefootnote{\fnsymbol{footnote}}}
+\newif\ifFN@robust \FN@robustfalse
+\DeclareOption{symbol*}{%
+ \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
+ \FN@robusttrue
+ \AtEndOfPackage{\setfnsymbol{lamport*-robust}}%
+}
+\newif\ifFN@para \FN@parafalse
+\DeclareOption{para}{%
+ \FN@paratrue
+ \setlength\footnotemargin{-\maxdimen} % default when para is used
+}
+\DeclareOption{side}{\ifFN@para
+ \PackageError{footmisc}{Option "\CurrentOption" incompatible with
+ option "para"}%
+ {I shall ignore "\CurrentOption"}%
+ \else
+ \def\@footnotetext@cfgpoint {\marginpar}
+ \AddToHook{fntext/para}{%
+ \hsize\marginparwidth % correct the default \hsize
+ \footnotesep\z@ % don't add a default separation
+ }
+ \def\@footnotetext@cfgpointii {\@makefntext}
+ \def\@footnotetext@cfgpointiii {}
+ \def\@footnotetext@cfgpointiv {}
+ \fi
+}
+\let\footnotelayout\@empty
+\DeclareOption{ragged}{%
+ \@ifundefined{RaggedRight}%
+ {\renewcommand\footnotelayout{\linepenalty50 \raggedright}}%
+ {\renewcommand\footnotelayout{\linepenalty50 \RaggedRight}}%
+}
+\newif\ifFN@perpage
+\FN@perpagefalse
+\DeclareOption{perpage}{%
+ \FN@perpagetrue
+}
+\newif\ifFN@fixskip \FN@fixskipfalse
+
+\let\FN@bottomcases\thr@@
+\newif\ifFN@abovefloats \FN@abovefloatstrue
+\DeclareOption{bottom}{%
+ \let\FN@bottomcases\@ne
+ \FN@abovefloatsfalse
+ \FN@fixskiptrue
+}
+\DeclareOption{bottomfloats}{%
+ \let\FN@bottomcases\tw@
+ \FN@abovefloatstrue \FN@fixskiptrue
+}
+\DeclareOption{abovefloats}{\FN@abovefloatstrue \FN@fixskiptrue}
+\DeclareOption{belowfloats}{\FN@abovefloatsfalse \FN@fixskiptrue}
+\DeclareOption{marginal}{%
+ \footnotemargin-0.8em\relax
+}
+\DeclareOption{flushmargin}{%
+ \footnotemargin0pt\relax
+}
+\newif\ifFN@hangfoot \FN@hangfootfalse
+\DeclareOption{hang}{%
+ \FN@hangfoottrue
+}
+\newcommand*\hangfootparskip{0.5\baselineskip}
+\newcommand*\hangfootparindent{0em}%
+\DeclareOption{norule}{%
+ \renewcommand\footnoterule{}%
+ \advance\skip\footins 4\p@\@plus2\p@\relax
+}
+\DeclareOption{splitrule}{%
+ \gdef\split@prev{0}
+ \let\pagefootnoterule\footnoterule
+ \let\mpfootnoterule\footnoterule
+ \def\splitfootnoterule{\kern-3\p@ \hrule \kern2.6\p@}
+ \def\footnoterule{\relax
+ \ifx \@listdepth\@mplistdepth
+ \mpfootnoterule
+ \else
+ \ifnum\split@prev=\z@
+ \pagefootnoterule
+ \else
+ \splitfootnoterule
+ \fi
+ \xdef\split@prev{\the\insertpenalties}%
+ \fi
+ }%
+}
+\newif\ifFN@stablefootnote \FN@stablefootnotefalse
+\DeclareOption{stable}{\FN@stablefootnotetrue}
+\newif\ifFN@multiplefootnote \FN@multiplefootnotefalse
+\DeclareOption{multiple}{\FN@multiplefootnotetrue}
+\ProcessOptions
+\ifFN@para
+ \def\@makecol@cfgpointii {%
+ \global\setbox\footins\vbox{\FN@makefootnoteparagraph}%
+ }
+\fi
+\ifFN@fixskip
+ \def\@outputbox@removebskip{%
+ \ifx\@textbottom\relax \else
+ \@outputbox@append{%
+ \@tempskipa\lastskip
+ \ifnum \gluestretchorder\@tempskipa>\z@
+ \vskip-\@tempskipa
+ \xdef\@outputbox@reinsertbskip
+ {\noexpand\@outputbox@append{\vskip\the\@tempskipa}}%
+ \else
+ \global\let\@outputbox@reinsertbskip\relax
+ \fi
+ }%
+ \fi
+ }
+\let\@outputbox@reinsertbskip\relax
+\else
+ \let\@outputbox@removebskip \relax
+ \let\@outputbox@reinsertbskip\relax
+\fi
+\ifcase \FN@bottomcases\relax
+\ERROR
+\or
+ \ifFN@abovefloats
+ \def\@makecol@cfgpoint {%
+ \@if@footnotes@TF
+ {\@outputbox@append{\vfill}}%
+ {\@if@bfloats@TF{\@outputbox@append{\vfill}}%
+ {\@outputbox@reinsertbskip}}%
+ \@outputbox@appendfootnotes
+ \@outputbox@attachfloats
+ }
+ \else
+ \def\@makecol@cfgpoint {%
+ \@outputbox@attachfloats
+ \@if@footnotes@TF
+ {\@outputbox@append{\vfill}}%
+ {\@outputbox@reinsertbskip}%
+ \@outputbox@appendfootnotes
+ }
+ \fi
+\or
+ \ifFN@abovefloats
+ \def\@makecol@cfgpoint {%
+ \@outputbox@appendfootnotes
+ \@if@bfloats@TF
+ {\@outputbox@append{\vfill}}%
+ {\@outputbox@reinsertbskip}%
+ \@outputbox@attachfloats
+ }
+ \else
+ \def\@makecol@cfgpoint {%
+ \@if@footnotes@TF
+ {\@outputbox@append{\vfill}}%
+ {\@if@bfloats@TF{\@outputbox@append{\vfill}}%
+ {\@outputbox@reinsertbskip}}%
+ \@outputbox@attachfloats
+ \@outputbox@appendfootnotes
+ }
+ \fi
+\or
+ \ifFN@abovefloats
+ \def\@makecol@cfgpoint {%
+ \@outputbox@appendfootnotes
+ \@outputbox@attachfloats
+ \@outputbox@reinsertbskip
+ }
+ \else
+ \def\@makecol@cfgpoint {%
+ \@outputbox@attachfloats
+ \@outputbox@appendfootnotes
+ \@outputbox@reinsertbskip
+}
+ \fi
+\else
+\ERROR
+\fi
+
+\newif\ifFN@setspace
+\@ifpackageloaded{setspace}%
+ {%
+ \FN@setspacetrue
+ \@ifclassloaded{memoir}%
+ {%
+ \AddToHook{fntext}{\let\baselinestretch\m@m@singlespace}%
+ \let\FN@baselinestretch\m@m@singlespace
+ }%
+ {%
+ \let\FN@baselinestretch\setspace@singlespace
+ }%
+ }%
+ {%
+ \FN@setspacefalse
+ }
+
+\ifFN@para
+ \def\@footnotetext@cfgpoint {\insert\footins}
+
+ \long\def\@footnotetext@cfgpointii #1{%
+ \setbox\FN@tempboxa\hbox{\@makefntext{#1}}%
+ \dp\FN@tempboxa\z@
+ \ht\FN@tempboxa
+ \dimexpr\wd\FN@tempboxa *%
+ \footnotebaselineskip /\columnwidth\relax
+ \box\FN@tempboxa
+ }
+
+ \def\@footnotetext@cfgpointiii {}
+ \def\@footnotetext@cfgpointiv {% config point
+ \strut
+ \penalty-10\relax
+ \hskip\footglue
+ }
+\fi
+
+\ifFN@para
+ \let\FN@tempboxa\@tempboxa
+ \newbox\FN@tempboxb
+ \newbox\FN@tempboxc
+ \newskip\footglue \footglue=1em plus.3em minus.3em
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \newdimen\footnotebaselineskip
+
+ % establish late:
+
+\AddToHook{begindocument/before} {%
+ {%
+ \footnotesize
+ \global\footnotebaselineskip=\normalbaselineskip
+ }%
+}
+
+ \long\def\FN@makefootnoteparagraph{%
+ \FN@setfootnoteparawidth
+ \@parboxrestore
+ \baselineskip=\footnotebaselineskip
+ \unvbox\footins \FN@removehboxes
+ \RawParEnd
+ }
+ \def\FN@removehboxes{\setbox\FN@tempboxa\lastbox
+ \ifhbox\FN@tempboxa{\FN@removehboxes}%
+ \unhbox\FN@tempboxa
+ \else
+ \RawNoindent
+ \rule\z@\footnotesep
+ \fi
+ }
+\fi
+
+\@ifpackageloaded{multicol}
+ {\def\FN@setfootnoteparawidth
+ {\hsize\ifnum\doublecol@number>\@ne
+ \textwidth
+ \else \columnwidth \fi}}
+ {\def\FN@setfootnoteparawidth{\hsize\columnwidth}}
+
+\ifFN@perpage
+ \RequirePackage{perpage}
+ \MakePerPage{footnote}
+ \def\@stpelt#1{\global\csname c@#1\endcsname \m@ne
+ \stepcounter{#1}%
+ \pp@fix@MakePerPage{#1}%
+ }
+ \def\pp@fix@MakePerPage#1{%
+ \ifnum \value{#1}>\z@
+ \addtocounter{#1}\m@ne\fi
+ }
+ \def\pp@cl@end@iii\stepcounter#1\pp@fix@MakePerPage#2{}
+\fi
+
+\ifFN@para
+
+
+
+\AddToHook{fntext/begin}{\nobreak \hspace{.2em}}
+
+\else
+
+ \ifFN@hangfoot
+ \long\def\@makefntext#1{%
+ \bgroup
+ \setbox\@tempboxa\hbox{%
+ \ifdim\footnotemargin>\z@
+ \hb@xt@\footnotemargin{\@makefnmark\hss}%
+ \else
+ \@makefnmark
+ \fi
+ }%
+ \leftmargin\wd\@tempboxa
+ \rightmargin\z@
+ \linewidth \columnwidth
+ \advance \linewidth -\leftmargin
+ \parshape \@ne \leftmargin \linewidth
+ \footnotesize
+ \@setpar{{\@@par}}%
+ \leavevmode
+ \llap{\box\@tempboxa}%
+ \parskip\hangfootparskip\relax
+ \parindent\hangfootparindent\relax
+ \footnotelayout#1%
+ \par
+ \egroup
+ }
+
+ \else
+
+
+ \fi
+\fi
+
+\ifFN@multiplefootnote
+ \providecommand*{\multiplefootnotemarker}{3sp}
+ \providecommand*{\multfootsep}{,}
+ \AddToHook{fnmark} {\FN@mf@check}
+ \AddToHook{fnmark/end} {\FN@mf@prepare}
+ \def\FN@mf@prepare{%
+ \kern-\multiplefootnotemarker
+ \kern\multiplefootnotemarker\relax
+ }
+ \def\FN@mf@check{%
+ \ifdim\lastkern=\multiplefootnotemarker\relax
+ \edef\@x@sf{\the\spacefactor}%
+ \unkern % new
+ \unkern
+ \textsuperscript{\multfootsep}%
+ \spacefactor\@x@sf\relax
+ \fi
+ }
+\else
+ \let\FN@mf@prepare\relax
+\fi
+\ifFN@stablefootnote
+\let\FN@sf@@footnote\footnote
+\def\footnote{\ifx\protect\@typeset@protect
+ \expandafter\FN@sf@@footnote
+ \else
+ \expandafter\FN@sf@gobble@opt
+ \fi
+}
+\edef\FN@sf@gobble@opt{\noexpand\protect
+ \expandafter\noexpand\csname FN@sf@gobble@opt \endcsname}
+\expandafter\def\csname FN@sf@gobble@opt \endcsname{%
+ \@ifnextchar[%]
+ \FN@sf@gobble@twobracket
+ \@gobble
+}
+\def\FN@sf@gobble@twobracket[#1]#2{}
+\let\FN@sf@@footnotemark\footnotemark
+\def\footnotemark{\ifx\protect\@typeset@protect
+ \expandafter\FN@sf@@footnotemark
+ \else
+ \expandafter\FN@sf@gobble@optonly
+ \fi
+}
+\edef\FN@sf@gobble@optonly{\noexpand\protect
+ \expandafter\noexpand\csname FN@sf@gobble@optonly \endcsname}
+\expandafter\def\csname FN@sf@gobble@optonly \endcsname{%
+ \@ifnextchar[%]
+ \FN@sf@gobble@bracket
+ {}%
+}
+\def\FN@sf@gobble@bracket[#1]{}
+\fi
+\newcommand\setfnsymbol[1]{%
+ \@bsphack
+ \@ifundefined{FN@fnsymbol@#1}%
+ {%
+ \PackageError{footmisc}{Symbol style "#1" not known}%
+ \@eha
+ }{%
+ \expandafter\let\expandafter\@fnsymbol\csname
+ FN@fnsymbol@#1\endcsname
+ }%
+ \@esphack
+}
+\let\FN@fnsymbol@lamport\@fnsymbol
+\newif\if@tempswb
+\DeclareDocumentCommand\DefineFNsymbols {smO{text}m}{%
+ \expandafter\ifx\csname FN@fnsymbol@#2\endcsname\relax
+ \PackageInfo{footmisc}{Declaring symbol style #2}%
+ \else
+ \PackageWarning{footmisc}{Redeclaring symbol style #2}%
+ \fi
+ \toks@{}%
+ \def\@tempb{\end}%
+ \FN@build@symboldef#4\end
+ \def\@tempc{math}%
+ \def\@tempd{#3}%
+ \expandafter\xdef\csname FN@fnsymbol@#2\endcsname##1{%
+ \ifx\@tempc\@tempd
+ \noexpand\ensuremath
+ \else
+ \noexpand\nfss@text
+ \fi
+ {%
+ \noexpand\ifcase##1%
+ \the\toks@
+ \noexpand\else
+ \IfBooleanTF#1{\noexpand\@ctrerr}%
+ {\noexpand\FN@orange##1}%
+ \noexpand\fi
+ }%
+ }%
+}
+\def\FN@build@symboldef#1{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@tempb
+ \else
+ \toks@\expandafter{\the\toks@\or#1}%
+ \expandafter\FN@build@symboldef
+ \fi
+}
+\DeclareDocumentCommand\DefineFNsymbolsTM {smm}{%
+ \expandafter\ifx\csname FN@fnsymbol@#2\endcsname\relax
+ \PackageInfo{footmisc}{Declaring symbol style #2}%
+ \else
+ \PackageWarning{footmisc}{Redeclaring symbol style #2}%
+ \fi
+ \toks@{}%
+ \def\@tempb{\end}%
+ \FN@build@symboldefTM#3\end\@null
+ \expandafter\xdef\csname FN@fnsymbol@#2\endcsname##1{%
+ \noexpand\ifcase##1%
+ \the\toks@
+ \noexpand\else
+ \IfBooleanTF#1{\noexpand\@ctrerr}%
+ {\noexpand\FN@orange##1}%
+ \noexpand\fi
+ }%
+}
+\def\FN@build@symboldefTM#1#2{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@tempb
+ \else
+ \toks@\expandafter{\the\toks@\or\TextOrMath{#1}{#2}}%
+ \expandafter\FN@build@symboldefTM
+ \fi
+}
+\def\FN@orange#1{%
+ \ifFN@robust
+ \@arabic#1%
+ \@bsphack
+ \PackageInfo{footmisc}{Footnote number \number#1 out of range}%
+ \protect\@fnsymbol@orange
+ \@esphack
+ \else \@ctrerr \fi
+}
+\global\let\@diagnose@fnsymbol@orange\relax
+\AtEndDocument{\@diagnose@fnsymbol@orange}
+\def\@fnsymbol@orange{%
+ \gdef\@diagnose@fnsymbol@orange{%
+ \PackageWarningNoLine{footmisc}{Some footnote number(s)
+ were out of range
+ \MessageBreak
+ see log for details%
+ }%
+ }%
+}
+\DefineFNsymbolsTM{bringhurst}{%
+ \textasteriskcentered *%
+ \textdagger \dagger
+ \textdaggerdbl \ddagger
+ \textsection \mathsection
+ \textbardbl \|%
+ \textparagraph \mathparagraph
+}%
+\DefineFNsymbolsTM{chicago}{%
+ \textasteriskcentered *%
+ \textdagger \dagger
+ \textdaggerdbl \ddagger
+ \textsection \mathsection
+ \textbardbl \|%
+ \#\#%
+}%
+\DefineFNsymbolsTM{wiley}{%
+ \textasteriskcentered *%
+ {\textasteriskcentered\textasteriskcentered}{**}%
+ \textdagger \dagger
+ \textdaggerdbl \ddagger
+ \textsection \mathsection
+ \textparagraph \mathparagraph
+ \textbardbl \|%
+}%
+\DefineFNsymbolsTM{lamport-robust}{%
+ \textasteriskcentered *%
+ \textdagger \dagger
+ \textdaggerdbl \ddagger
+ \textsection \mathsection
+ \textparagraph \mathparagraph
+ \textbardbl \|%
+ {\textasteriskcentered\textasteriskcentered}{**}%
+ {\textdagger\textdagger}{\dagger\dagger}%
+ {\textdaggerdbl\textdaggerdbl}{\ddagger\ddagger}%
+}
+\DefineFNsymbolsTM*{lamport*}{%
+ \textasteriskcentered *%
+ \textdagger \dagger
+ \textdaggerdbl \ddagger
+ \textsection \mathsection
+ \textparagraph \mathparagraph
+ \textbardbl \|%
+ {\textasteriskcentered\textasteriskcentered}{**}%
+ {\textdagger\textdagger}{\dagger\dagger}%
+ {\textdaggerdbl\textdaggerdbl}{\ddagger\ddagger}%
+ {\textsection\textsection}{\mathsection\mathsection}%
+ {\textparagraph\textparagraph}{\mathparagraph\mathparagraph}%
+ {\textasteriskcentered\textasteriskcentered\textasteriskcentered}{***}%
+ {\textdagger\textdagger\textdagger}{\dagger\dagger\dagger}%
+ {\textdaggerdbl\textdaggerdbl\textdaggerdbl}{\ddagger\ddagger\ddagger}%
+ {\textsection\textsection\textsection}%%
+ {\mathsection\mathsection\mathsection}%
+ {\textparagraph\textparagraph\textparagraph}%%
+ {\mathparagraph\mathparagraph\mathparagraph}%
+}
+\setfnsymbol{lamport*}
+\DefineFNsymbolsTM{lamport*-robust}{%
+ \textasteriskcentered *%
+ \textdagger \dagger
+ \textdaggerdbl \ddagger
+ \textsection \mathsection
+ \textparagraph \mathparagraph
+ \textbardbl \|%
+ {\textasteriskcentered\textasteriskcentered}{**}%
+ {\textdagger\textdagger}{\dagger\dagger}%
+ {\textdaggerdbl\textdaggerdbl}{\ddagger\ddagger}%
+ {\textsection\textsection}{\mathsection\mathsection}%
+ {\textparagraph\textparagraph}{\mathparagraph\mathparagraph}%
+ {\textasteriskcentered\textasteriskcentered\textasteriskcentered}{***}%
+ {\textdagger\textdagger\textdagger}{\dagger\dagger\dagger}%
+ {\textdaggerdbl\textdaggerdbl\textdaggerdbl}{\ddagger\ddagger\ddagger}%
+ {\textsection\textsection\textsection}%%
+ {\mathsection\mathsection\mathsection}%
+ {\textparagraph\textparagraph\textparagraph}%%
+ {\mathparagraph\mathparagraph\mathparagraph}%
+}
+\newcommand\mpfootnotemark{%
+ \@ifnextchar[%
+ \@xmpfootnotemark
+ {%
+ \stepcounter\@mpfn
+ \protected@xdef\@thefnmark{\thempfn}%
+ \@footnotemark
+ }%
+}
+\def\@xmpfootnotemark[#1]{%
+ \begingroup
+ \csname c@\@mpfn\endcsname #1\relax
+ \unrestored@protected@xdef\@thefnmark{\thempfn}%
+ \endgroup
+ \@footnotemark
+}
+
+\endinput
+%%
+%% End of file `latex-lab-footmisc.ltx'.
diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx
new file mode 100644
index 00000000000..560c1b98bae
--- /dev/null
+++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx
@@ -0,0 +1,429 @@
+%%
+%% This is file `latex-lab-footnotes.ltx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% latex-lab-footnotes.dtx (with options: `kernel')
+%%
+%% This is a generated file.
+%%
+%% Copyright 2021,2022 LaTeX Project
+%%
+%% This file was generated from file(s) of the `LaTeX-lab Bundle'.
+%% ------------------------------------------------------------------------------------
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008 or later.
+%%
+%% This file may only be distributed together with a copy of the LaTeX
+%% `LaTeX-lab Bundle'. You may however distribute the `LaTeX-lab Bundle'
+%% without such generated files.
+%%
+%% The newest sources can be found below
+%%
+%% https://github.com/latex3/latex2e/required/latex-lab
+%%
+%% where one can also log issues in case there are any.
+%%
+%%
+%% File: latex-lab-footnotes.dtx
+\ProvidesFile{latex-lab-footnotes.ltx}
+ [2022-03-10 v0.6a changes to the footnote interfaces]
+
+
+ % not looked at yet
+
+\long\def\@mpfootnotetext#1{%
+ \global\setbox\@mpfootins\vbox{%
+ \unvbox\@mpfootins
+ \reset@font\footnotesize
+ \hsize\columnwidth
+ \@parboxrestore
+ \def\@currentcounter{mpfootnote}%
+ \protected@edef\@currentlabel
+ {\csname p@mpfootnote\endcsname\@thefnmark}%
+ \color@begingroup
+ \@makefntext{%
+ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
+ \par
+ \color@endgroup}}
+
+\def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}
+
+\def\@mpfn{footnote}
+\def\thempfn{\thefootnote}
+
+
+\ExplSyntaxOn
+
+\cs_new_protected:Npn \fnote_step_fnmark:nn #1#2 {
+ \tl_if_novalue:nTF {#1}
+ {
+ \stepcounter {#2}
+ \protected@xdef \@thefnmark { \use:c { the#2 } }
+ }
+ {
+ \group_begin:
+ \int_set:cn { c@#2 }{ #1 }
+ \unrestored@protected@xdef \@thefnmark { \use:c { the#2 } }
+ \group_end:
+ }
+}
+
+\cs_new_protected:Npn \fnote_set_fnmark:nn #1#2 {
+ \tl_if_novalue:nTF {#1}
+ {
+ \protected@xdef \@thefnmark { \use:c { the#2 } }
+ }
+ {
+ \group_begin:
+ \int_set:cn { c@#2 }{ #1 }
+ \unrestored@protected@xdef \@thefnmark { \use:c { the#2 } }
+ \group_end:
+ }
+}
+
+
+\bool_new:N \g_fnote_debug_bool
+\bool_gset_true:N \g_fnote_debug_bool % for now we have debugging turned on by default
+
+
+\NewMirroredHookPair{fnmark/before}{fnmark/after}
+\NewHook{fnmark}
+\NewHook{fnmark/begin}
+\NewHook{fnmark/end}
+
+\cs_new:Npn \__fnote_debug_footnotemark: {
+ \bool_if:NT \g_fnote_debug_bool
+ {
+ \LogHook{fnmark/before}
+ \LogHook{fnmark}
+ \LogHook{fnmark/begin}
+ \LogHook{fnmark/end}
+ \LogHook{fnmark/after}
+ \cs_gset_eq:NN \__fnote_debug_footnotemark: \prg_do_nothing:
+ }
+}
+
+\cs_new_protected:Npn \fnote_footnotemark: {
+ \__fnote_debug_footnotemark:
+ \UseHook{fnmark/before}
+ \leavevmode
+ \ifhmode
+ \edef\@x@sf{\the\spacefactor}
+ \UseHook{fnmark}
+ \nobreak
+ \fi
+ \UseHook{fnmark/begin}
+ \@kernel@process@makefnmark
+ \@makefnmark
+ \__fnote_footnotemark_finish:
+}
+
+\cs_new:Npn \__fnote_finish: {
+ \UseHook{fnmark/end}
+ \ifhmode
+ \spacefactor \@x@sf \relax
+ \fi
+ \UseHook{fnmark/after}
+}
+
+\cs_new_eq:NN \__fnote_footnotemark_finish: \__fnote_finish:
+
+\def \@kernel@process@makefnmark { }
+
+
+
+\cs_set_eq:NN \@footnotemark \fnote_footnotemark:
+
+
+\NewMirroredHookPair{fntext/before}{fntext/after}
+\NewHook{fntext}
+\NewHook{fntext/para}
+\NewHook{fntext/begin}
+\NewHook{fntext/end}
+
+\cs_new:Npn \__fnote_debug_footnotetext: {
+ \bool_if:NT \g_fnote_debug_bool
+ {
+ \cs_log:N\@footnotetext@cfgpoint
+ \cs_log:N\@footnotetext@cfgpointii
+ \cs_log:N\@footnotetext@cfgpointiii
+ \cs_log:N\@footnotetext@cfgpointiv
+ \cs_log:N\@makefntext@cfgpoint
+ \cs_log:N\@makefntext@cfgpointii
+ \LogHook{fntext/before}
+ \LogHook{fntext}
+ \LogHook{fntext/para}
+ \LogHook{fntext/begin}
+ \LogHook{fntext/end}
+ \LogHook{fntext/after}
+ \cs_gset_eq:NN \__fnote_debug_footnotetext: \prg_do_nothing:
+ }
+ }
+
+\cs_new_protected:Npn \fnote_footnotetext:n #1 {
+ \__fnote_debug_footnotetext:
+ \UseHook{fntext/before}
+ \@kernel@process@footnotetext
+ \@footnotetext@cfgpoint { % config point
+ \UseHook{fntext}
+ \reset@font
+ \footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox
+ \floatingpenalty \@MM
+ \hsize\columnwidth
+ \@parboxrestore
+ \parindent 1em % typical default used in \@makefntext moved up here
+ \def\@currentcounter{footnote}
+ \protected@edef \@currentlabel { \p@footnote \@thefnmark }
+ \UseHook{fntext/para}
+ \color@begingroup
+ \@footnotetext@cfgpointii % config point
+ {
+ \@footnotetext@cfgpointiii % config point
+ \UseHook{fntext/begin}
+ \ignorespaces
+ #1
+ \UseHook{fntext/end}
+ \@footnotetext@cfgpointiv % config point
+ }
+ \par
+ \color@endgroup
+ }
+ \UseHook{fntext/after}
+}
+
+\cs_new_protected:Npn \@footnotetext@cfgpoint { \insert\footins }
+
+\cs_new_protected:Npn \@footnotetext@cfgpointii { \@makefntext }
+
+\cs_new_protected:Npn \@footnotetext@cfgpointiii { \rule\z@\footnotesep }
+
+\cs_new_protected:Npn \@footnotetext@cfgpointiv { \@finalstrut\strutbox }
+
+\cs_new_protected:Npn \@kernel@process@footnotetext {}
+
+
+\AddToHook{begindocument}{
+ \cs_set_eq:NN \@footnotetext \fnote_footnotetext:n
+}
+
+
+
+\newdimen\footnotemargin
+\footnotemargin\maxdimen % no value given
+
+\AtBeginDocument{
+ \ifdim \footnotemargin=\maxdimen
+ \setlength\footnotemargin{1.8em}
+ \fi
+}
+
+\cs_new_protected:Npn \fnote_makefntext:n #1 {
+ \@makefntext@cfgpoint
+ {
+ \ifdim\footnotemargin>\z@
+ \hb@xt@ \footnotemargin{\hss\@makefnmark}
+ \else
+ \ifdim\footnotemargin=\z@
+ \llap{\@makefnmark}
+ \else
+ \ifdim\footnotemargin=-\maxdimen
+ \@makefnmark
+ \else
+ \llap{\hb@xt@ -\footnotemargin{\@makefnmark\hss}}
+ \fi
+ \fi
+ \fi
+ }
+ \@makefntext@cfgpointii
+ { #1 }
+}
+
+\cs_new_protected:Npn \@makefntext@cfgpoint { \noindent }
+
+\cs_new_protected:Npn \@makefntext@cfgpointii #1 { #1 }
+\newcommand\old@std@class@makefntext[1]{%
+ \parindent 1em%
+ \noindent
+ \hb@xt@1.8em{\hss\@makefnmark}#1}
+
+
+\tl_new:N \l__fnote_patch_tl
+\cs_new_eq:NN \__fnote_tmp:w \ERROR
+
+\cs_new_protected:Npn \__fnote_patch:
+ {
+ \tl_set:No \l__fnote_patch_tl { \@makefntext { \@makefntext@cfgpointii{##1} } }
+ \tl_if_in:NnTF \l__fnote_patch_tl { \hbox }
+ { \cs_set_eq:NN \__fnote_tmp:w \__fnote_patch_hbox:w }
+ {
+ \tl_if_in:NnTF \l__fnote_patch_tl { \hb@xt@ }
+ { \cs_set_eq:NN \__fnote_tmp:w \__fnote_patch_hb@xt@:w }
+ {
+ \tl_if_in:NnTF \l__fnote_patch_tl { \@makefnmark }
+ { \cs_set_eq:NN \__fnote_tmp:w \__fnote_patch_@makefnmark:w }
+ { \ERROR
+ \cs_set_eq:NN \__fnote_tmp:w \exp_stop_f: }
+ }
+ }
+ \tl_set:Nf \l__fnote_patch_tl
+ { \exp_after:wN \__fnote_tmp:w \l__fnote_patch_tl }
+ \cs_set:Npn \__fnote_tmp:w { \long \def \@makefntext ####1 }
+ \exp_after:wN \__fnote_tmp:w \exp_after:wN { \l__fnote_patch_tl }
+ }
+\cs_new:Npn \__fnote_patch_hbox:w #1 \hbox #2 #
+ { \exp_stop_f: #1 \@makefntext@processX { \hbox #2 } }
+\cs_new:Npn \__fnote_patch_hb@xt@:w #1 \hb@xt@ #2 #
+ { \exp_stop_f: #1 \@makefntext@processX { \hb@xt@ #2 } }
+\cs_new:Npn \__fnote_patch_@makefnmark:w #1 \@makefnmark
+ { \exp_stop_f: #1 \@makefntext@processX { \use:n } { \@makefnmark } }
+\cs_new:Npn \@makefntext@processX #1#2{\@makefntext@cfgpoint{#1{#2}}}
+
+\AddToHook{begindocument}{
+ \cs_if_eq:NNTF \@makefntext \old@std@class@makefntext
+ {
+ \cs_set_eq:NN \@makefntext \fnote_makefntext:n
+ }
+ {
+ \__fnote_patch:
+ }
+}
+
+
+\DeclareDocumentCommand\footnotetext {om} {
+ \fnote_set_fnmark:nn {#1} \@mpfn
+ \@footnotetext {#2}
+}
+
+
+\DeclareDocumentCommand\footnote {om} {
+ \fnote_step_fnmark:nn {#1} \@mpfn
+ \cs_set_eq:NN \__fnote_footnotemark_finish: \prg_do_nothing:
+ \@footnotemark
+ \cs_set_eq:NN \__fnote_footnotemark_finish: \__fnote_finish:
+ \@footnotetext {#2}
+ \__fnote_footnotemark_finish:
+}
+
+
+\DeclareDocumentCommand\footnotemark {o} {
+ \fnote_step_fnmark:nn {#1} { footnote }
+ \@footnotemark
+}
+
+
+\DeclareDocumentCommand\footref {m}{%
+ \begingroup
+ \unrestored@protected@xdef\@thefnmark{\ref{#1}}%
+ \endgroup
+ \@footnotemark
+}
+
+\AddToHook{package/setspace/after}
+ {\let \@footnotetext \fnote_footnotetext:n
+ \AddToHook{fntext}[setspace]{\let\baselinestretch\setspace@singlespace}}
+\AddToHook{package/hyperref/after}{
+ \let\H@@footnotetext\fnote_footnotetext:n
+ \let\H@@footnotemark\fnote_footnotemark:
+ \let \@footnotetext \fnote_footnotetext:n
+ \let \@footnotemark \fnote_footnotemark:
+}
+
+
+
+
+
+
+
+
+\newcounter{absfootnote}
+\AddToHook{fnmark/begin}{\stepcounter{absfootnote}} % too simple (fails with opt args)
+
+
+\cs_new_protected:Npn \tag_if_loaded:TF { \cs_if_exist:NTF \tag_struct_begin:n }
+
+\cs_new_protected:Npn \tag@FEMark #1 {
+ \tag_if_loaded:TF
+ {
+ \tag_mc_end_push:
+ \exp_args:Nx
+ \tag_struct_begin:n{tag=Lbl,ref=fn.\the\c@absfootnote}
+ \tag_mc_begin:n{tag=Lbl}
+ \IfPackageLoadedTF{hyperref}{ \hyper@linkstart
+ {link}{fn.\the\c@absfootnote} }{}
+ #1
+ \IfPackageLoadedTF{hyperref}{ \hyper@linkend }{}
+ \tag_mc_end:
+ \tag_struct_end:
+ \tag_mc_begin_pop:n{}
+ }
+ { #1 }
+}
+
+
+\cs_set_eq:NN \@kernel@process@makefnmark \tag@FEMark
+
+\cs_set:Npn \@kernel@process@footnotetext #1#2 {
+ \tag_if_loaded:TF
+ {
+ \tag_mc_end_push:
+ \tag_struct_begin:n { tag=FENote,label=fn.\the\c@absfootnote }
+ #1 {#2}
+ \tag_struct_end:
+ \tag_mc_begin_pop:n{}
+ }
+ { #1 {#2} }
+}
+
+\cs_set:Npn \@makefntext@cfgpoint #1 {
+ \noindent
+ \cs_if_exist:NT \tag_struct_begin:n { \tag_mc_end_push: }
+ \tag@FELbl { #1 }
+}
+
+\cs_set:Npn \@makefntext@cfgpointii #1 {
+ \tag@FENote { #1 }
+ \cs_if_exist:NT \tag_struct_begin:n { \tag_mc_begin_pop:n{} }
+}
+
+\cs_new_protected:Npn \tag@FELbl #1 {
+ \tag_if_loaded:TF
+ {
+ % target should perhaps be raised ...
+ \IfPackageLoadedTF{hyperref}{ \hypertarget{fn.\the\c@absfootnote}{} }{}
+ %\tag_struct_begin:n { tag=FENote,label=fn.\the\c@absfootnote } %alternativ location for structure
+ \tag_struct_begin:n { tag=Lbl }
+ \tag_mc_begin:n { tag=Lbl }
+ #1
+ \tag_mc_end:
+ \tag_struct_end:
+ }
+ { #1 }
+}
+
+\cs_new_protected:Npn \tag@FENote #1 {
+ \tag_if_loaded:TF
+ {
+ \tag_mc_begin:n{tag=FENote}
+ #1
+ \tag_mc_end:
+ %\tag_struct_end: %alternative location for structure end but ends inside a P
+ }
+ { #1 }
+}
+
+
+\ExplSyntaxOff
+\endinput
+%%
+%% End of file `latex-lab-footnotes.ltx'.
diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-prototype.sty b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-prototype.sty
new file mode 100644
index 00000000000..cedf3ad4d1b
--- /dev/null
+++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-prototype.sty
@@ -0,0 +1,301 @@
+%%
+%% This is file `latex-lab-prototype.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% latex-lab-prototype.dtx (with options: `2ekernel')
+%%
+%% This is a generated file.
+%%
+%% Copyright 2021,2022 LaTeX Project
+%%
+%% This file was generated from file(s) of the `LaTeX-lab Bundle'.
+%% ------------------------------------------------------------------------------------
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008 or later.
+%%
+%% This file may only be distributed together with a copy of the LaTeX
+%% `LaTeX-lab Bundle'. You may however distribute the `LaTeX-lab Bundle'
+%% without such generated files.
+%%
+%% The newest sources can be found below
+%%
+%% https://github.com/latex3/latex2e/required/latex-lab
+%%
+%% where one can also log issues in case there are any.
+%%
+%%
+%% File: latex-lab-prototype.dtx
+\ExplSyntaxOn
+\tl_if_exist:NF \l__keys_precompile_tl
+ {
+ \bool_new:N \l__keys_precompile_bool
+ \tl_new:N \l__keys_precompile_tl
+ }
+\cs_gset_protected:Npn \__keys_precompile:n #1
+ {
+ \bool_if:NTF \l__keys_precompile_bool
+ { \tl_put_right:Nn \l__keys_precompile_tl }
+ { \use:n }
+ {#1}
+ }
+\cs_gset_protected:Npn \__keys_bool_set:Nnnn #1#2#3#4
+ {
+ \bool_if_exist:NF #1 { \bool_new:N #1 }
+ \__keys_choice_make:
+ \__keys_cmd_set:nx { \l_keys_path_str / true }
+ { \exp_not:c { bool_ #2 set_ #3 :N } \exp_not:N #1 }
+ \__keys_cmd_set:nx { \l_keys_path_str / false }
+ { \exp_not:c { bool_ #2 set_ #4 :N } \exp_not:N #1 }
+ \__keys_cmd_set_direct:nn { \l_keys_path_str / unknown }
+ {
+ \msg_error:nnx { keys } { boolean-values-only }
+ \l_keys_key_str
+ }
+ \__keys_default_set:n { true }
+ }
+\cs_gset_protected:Npn \__keys_choice_make_aux:N #1
+ {
+ \cs_set_nopar:cpn { \c__keys_type_root_str \l_keys_path_str }
+ { choice }
+ \__keys_cmd_set_direct:nn \l_keys_path_str { #1 {##1} }
+ \__keys_cmd_set_direct:nn { \l_keys_path_str / unknown }
+ {
+ \msg_error:nnxx { keys } { choice-unknown }
+ \l_keys_path_str {##1}
+ }
+ }
+\cs_gset_protected:Npn \__keys_cmd_set:nn #1#2
+ { \__keys_cmd_set_direct:nn {#1} { \__keys_precompile:n {#2} } }
+\cs_gset_protected:Npn \__keys_cmd_set_direct:nn #1#2
+ { \cs_set_protected:cpn { \c__keys_code_root_str #1 } ##1 {#2} }
+\cs_gset_protected:Npn \__keys_cs_set:NNpn #1#2#3#
+ {
+ \cs_set_protected:cpx { \c__keys_code_root_str \l_keys_path_str } ##1
+ {
+ \__keys_precompile:n
+ { #1 \exp_not:N #2 \exp_not:n {#3} {##1} }
+ }
+ \use_none:n
+ }
+\cs_gset_protected:Npn \__keys_meta_make:n #1
+ {
+ \exp_args:NVo \__keys_cmd_set_direct:nn \l_keys_path_str
+ {
+ \exp_after:wN \keys_set:nn \exp_after:wN
+ { \l__keys_module_str } {#1}
+ }
+ }
+\cs_gset_protected:Npn \__keys_meta_make:nn #1#2
+ {
+ \exp_args:NV \__keys_cmd_set_direct:nn
+ \l_keys_path_str { \keys_set:nn {#1} {#2} }
+ }
+\cs_gset_protected:Npn \keys_precompile:nnN #1#2#3
+ {
+ \bool_set_true:N \l__keys_precompile_bool
+ \tl_clear:N \l__keys_precompile_tl
+ \keys_set:nn {#1} {#2}
+ \bool_set_false:N \l__keys_precompile_bool
+ \tl_set_eq:NN #3 \l__keys_precompile_tl
+ }
+\cs_gset_protected:Npn \__keys_show:Nnn #1#2#3
+ {
+ #1 { keys } { show-key }
+ { \__keys_trim_spaces:n { #2 / #3 } }
+ {
+ \keys_if_exist:nnT {#2} {#3}
+ {
+ \exp_args:Nnf \msg_show_item_unbraced:nn { code }
+ {
+ \exp_args:Ne \__keys_show:n
+ {
+ \exp_args:Nc \cs_replacement_spec:N
+ {
+ \c__keys_code_root_str
+ \__keys_trim_spaces:n { #2 / #3 }
+ }
+ }
+ }
+ }
+ }
+ { } { }
+ }
+\cs_gset:Npx \__keys_show:n #1
+ {
+ \exp_not:N \__keys_show:w
+ #1
+ \tl_to_str:n { \__keys_precompile:n }
+ #1
+ \tl_to_str:n { \__keys_precompile:n }
+ \exp_not:N \s__keys_stop
+ }
+\use:x
+ {
+ \cs_gset:Npn \exp_not:N \__keys_show:w
+ ##1 \tl_to_str:n { \__keys_precompile:n }
+ ##2 \tl_to_str:n { \__keys_precompile:n }
+ ##3 \exp_not:N \s__keys_stop
+ }
+ {
+ \tl_if_blank:nTF {#2}
+ {#1}
+ { \__keys_show:Nw #2 \s__keys_stop }
+ }
+\use:x
+ {
+ \cs_gset:Npn \exp_not:N \__keys_show:Nw ##1##2
+ \c_right_brace_str \exp_not:N \s__keys_stop
+ }
+ {#2}
+\tl_new:N \l__prototype_tmp_tl
+\prop_new:N \l__prototype_object_prop
+\cs_new_protected:Npn \prototype_declare_object:nn #1#2
+ {
+ \exp_args:Nx \__prototype_declare_object:nn { \int_eval:n {#2} } {#1}
+ }
+\cs_new_protected:Npn \__prototype_declare_object:nn #1#2
+ {
+ \int_compare:nTF { 0 <= #1 <= 9 }
+ {
+ \msg_info:nnnn { prototype } { declare-object-type } {#2} {#1}
+ \prop_put:Nnn \l__prototype_object_prop {#2} {#1}
+ }
+ { \msg_error:nnxx { prototype } { bad-number-of-arguments } {#2} {#1} }
+ }
+\tl_new:N \l__prototype_assignments_tl
+\cs_new_protected:Npn \prototype_declare_template:nnnn #1#2#3#4
+ {
+ \prop_get:NnNTF \l__prototype_object_prop {#1} \l__prototype_tmp_tl
+ {
+ \keys_define:nn { prototype / #1 / #2 } {#3}
+ \tl_clear_new:c { l__prototype_defaults_ #1 _ #2 _tl }
+ \cs_generate_from_arg_count:cNnn
+ { __prototype_template_ #1 _ #2 :w }
+ \cs_set_protected:Npn
+ { \l__prototype_tmp_tl }
+ {
+ \tl_use:N \l__prototype_assignments_tl
+ #4
+ }
+ }
+ { \msg_error:nnn { prototype } { unknown-object-type } {#1} }
+ }
+\cs_new_protected:Npn \prototype_declare_defaults:nnn #1#2#3
+ {
+ \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w }
+ { \tl_set:cn { l__prototype_defaults_ #1 _ #2 _tl } {#3} }
+ { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
+ }
+\cs_generate_variant:Nn \keys_precompile:nnN { v , nv }
+\cs_new_protected:Npn \prototype_use_template:nnn #1#2#3
+ {
+ \__prototype_declare_aux:nnnn {#1} {#2} {#3}
+ { \use:c { __prototype_template_ #1 _ #2 :w } }
+ }
+\cs_new_protected:Npn \prototype_declare_instance:nnnn #1#2#3#4
+ {
+ \__prototype_declare_aux:nnnn {#1} {#2} {#4}
+ {
+ \tl_clear_new:c { l__prototype_instance_ #1 _ #3 _pars_tl }
+ \tl_set_eq:cN { l__prototype_instance_ #1 _ #3 _pars_tl }
+ \l__prototype_assignments_tl
+ \tl_clear_new:c { l__prototype_instance_ #1 _ #3 _template_tl }
+ \tl_set:cn { l__prototype_instance_ #1 _ #3 _template_tl } {#2}
+ }
+ }
+\cs_new_protected:Npn \__prototype_declare_aux:nnnn #1#2#3#4
+ {
+ \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w }
+ {
+ \keys_precompile:nvN
+ { prototype / #1 / #2 }
+ { l__prototype_defaults_ #1 _ #2 _tl }
+ \l__prototype_assignments_tl
+ \keys_precompile:nnN { prototype / #1 / #2 } {#3} \l__prototype_tmp_tl
+ \tl_put_right:NV \l__prototype_assignments_tl \l__prototype_tmp_tl
+ #4
+ }
+ { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
+ }
+\cs_new_protected:Npn \prototype_use_instance:nn #1#2
+ { \prototype_use_instance:nnn {#1} {#2} { } }
+\cs_new_protected:Npn \prototype_use_instance:nnn #1#2#3
+ {
+ \tl_if_exist:cTF { l__prototype_instance_ #1 _ #2 _template_tl }
+ {
+ \tl_set_eq:Nc \l__prototype_assignments_tl
+ { l__prototype_instance_ #1 _ #2 _pars_tl }
+ \tl_if_blank:nF {#3}
+ {
+ \keys_precompile:vnN
+ {
+ prototype / #1 /
+ \tl_use:c { l__prototype_instance_ #1 _ #2 _template_tl }
+ }
+ {#3}
+ \l__prototype_tmp_tl
+ \tl_put_right:NV \l__prototype_assignments_tl
+ \l__prototype_tmp_tl
+ }
+ \use:c
+ {
+ __prototype_template_ #1 _
+ \tl_use:c { l__prototype_instance_ #1 _ #2 _template_tl }
+ :w
+ }
+ }
+ { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} }
+ }
+\cs_new_protected:Npn \prototype_show_template_code:nn #1#2
+ {
+ \prop_if_in:NnTF \l__prototype_object_prop {#1}
+ { \cs_show:c { __prototype_template_ #1 _ #2 :w } }
+ { \msg_error:nnn { prototype } { unknown-object-type } {#1} }
+ }
+\cs_new_protected:Npn \prototype_show_template_defaults:nn #1#2
+ {
+ \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w }
+ { \tl_show:c { l__prototype_defaults_ #1 _ #2 _tl } }
+ { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
+ }
+\cs_new_protected:Npn \prototype_show_instance_values:nn #1#2
+ {
+ \tl_if_exist:cTF { l__prototype_instance_ #1 _ #2 _template_tl }
+ { \tl_show:c { l__prototype_instance_ #1 _ #2 _pars_tl } }
+ { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} }
+ }
+\msg_new:nnnn { prototype } { bad-number-of-arguments }
+ { Bad~number~of~arguments~for~object~type~'#1'. }
+ {
+ An~object~may~accept~between~0~and~9~arguments.\\
+ You~asked~to~use~#2~arguments:~this~is~not~supported.
+ }
+\msg_new:nnnn { prototype } { unknown-instance }
+ { The~instance~'#2'~of~type~'#1'~is~unknown. }
+ {
+ You~have~asked~to~use~an~instance~'#2',~
+ but~this~has~not~been~created.
+ }
+\msg_new:nnnn { prototype } { unknown-object-type }
+ { The~object~type~'#1'~is~unknown. }
+ { An~object~type~needs~to~be~declared~prior~to~using~it. }
+\msg_new:nnnn { prototype } { unknown-template }
+ { The~template~'#2'~of~type~'#1'~is~unknown. }
+ {
+ No~interface~has~been~declared~for~a~template~
+ '#2'~of~object~type~'#1'.
+ }
+\msg_new:nnn { prototype } { declare-object-type }
+ { Declaring~object~type~'#1'~taking~#2~argument(s). }
+\ExplSyntaxOff
+\endinput
+%%
+%% End of file `latex-lab-prototype.sty'.
diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-new-or.sty b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-new-or.sty
new file mode 100644
index 00000000000..61c8fd594c9
--- /dev/null
+++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-new-or.sty
@@ -0,0 +1,169 @@
+%%
+%% This is file `latex-lab-testphase-new-or.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% latex-lab-new-or.dtx (with options: `code')
+%%
+%% This is a generated file.
+%%
+%% Copyright 2021,2022 LaTeX Project
+%%
+%% This file was generated from file(s) of the `LaTeX-lab Bundle'.
+%% ------------------------------------------------------------------------------------
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008 or later.
+%%
+%% This file may only be distributed together with a copy of the LaTeX
+%% `LaTeX-lab Bundle'. You may however distribute the `LaTeX-lab Bundle'
+%% without such generated files.
+%%
+%% The newest sources can be found below
+%%
+%% https://github.com/latex3/latex2e/required/latex-lab
+%%
+%% where one can also log issues in case there are any.
+%%
+%%
+%% File: latex-lab-new-or.dtx
+\ProvidesFile{latex-lab-new-or.ltx}
+ [2022-03-09 v0.1b changes to the output routine]
+\def \@makecol {%
+ \@kernel@before@cclv
+ \setbox\@outputbox \box\@cclv
+ \@outputbox@removebskip
+ \let\@elt\relax
+ \xdef\@freelist{\@freelist\@midlist}%
+ \global \let \@midlist \@empty
+ \@makecol@cfgpoint
+ \ifvbox\@kludgeins
+ \@makespecialcolbox
+ \else
+ \@makenormalcolbox
+ \fi
+ \global \maxdepth \@maxdepth
+}
+\newdimen\@outputbox@depth
+\def \@makenormalcolbox {%
+ \setbox\@outputbox \vbox to\@colht {%
+ \@texttop
+ \@outputbox@depth \dp\@outputbox
+ \unvbox \@outputbox
+ \vskip -\@outputbox@depth
+ \@textbottom
+ }%
+}
+\def \@makespecialcolbox {%
+ \@outputbox@append {\vskip-\@outputbox@depth}%
+ \@tempdima \@colht
+ \ifdim \wd\@kludgeins>\z@
+ \advance \@tempdima -\ht\@outputbox
+ \advance \@tempdima \pageshrink
+ \setbox\@outputbox \vbox to \@colht {%
+ \unvbox\@outputbox
+ \vskip \@tempdima
+ \@textbottom
+ }%
+ \else
+ \advance \@tempdima -\ht\@kludgeins
+ \setbox \@outputbox \vbox to \@colht {%
+ \vbox to \@tempdima {%
+ \unvbox\@outputbox
+ \@textbottom}%
+ \vss}%
+ \fi
+ {\setbox \@tempboxa \box \@kludgeins}%
+}
+\def\@outputbox@removebskip{%
+ \ifx\@textbottom\relax \else
+ \@outputbox@append{%
+ \@tempskipa\lastskip
+ \ifnum \gluestretchorder\@tempskipa>\z@
+ \vskip-\@tempskipa
+ \xdef\@outputbox@reinsertbskip
+ {\noexpand\@outputbox@append{\vskip\the\@tempskipa}}%
+ \else
+ \global\let\@outputbox@reinsertbskip\relax
+ \fi
+ }%
+ \fi
+}
+\let\@outputbox@reinsertbskip\relax
+\providecommand\@kernel@before@cclv{}
+\providecommand\@kernel@before@footins{}
+\def\@outputbox@append #1{%
+ \setbox\@outputbox \vbox {%
+ \boxmaxdepth \@maxdepth
+ \@outputbox@depth\dp\@outputbox % if needed in #1
+ \unvbox \@outputbox
+ #1%
+ }%
+}
+\def\@outputbox@appendfootnotes {%
+ \ifvoid\footins \else
+ \@makecol@handlesplitfootnotes
+ \@makecol@cfgpointii
+ \@outputbox@append{%
+ \vskip \skip\footins
+ \@kernel@before@footins
+ \color@begingroup
+ \normalcolor
+ \footnoterule
+ \csname pdfcolfoot@current\endcsname
+ \unvbox \footins
+ \color@endgroup
+ }%
+ \fi
+}
+\let \@outputbox@attachfloats \@combinefloats
+\def \@outputbox@attachtopfloats {%
+ \ifx \@toplist\@empty \else \@cflt \fi
+}
+\def \@outputbox@attachbottomfloats {%
+ \ifx \@botlist\@empty \else \@cflb \fi
+}
+\def\@makecol@handlesplitfootnotes {%
+ \ifnum\insertpenalties>\z@
+ \@makecol@splitfootnotemessagehook
+ \fi
+}
+\let \@makecol@splitfootnotemessagehook \@empty
+\let \@makecol@cfgpointii \@empty
+\def\@if@flushbottom@TF{%
+ \ifx\@textbottom\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+\def\@if@footnotes@TF{%
+ \ifvoid\footins
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+}
+\def\@if@bfloats@TF{%
+ \ifx \@botlist\@empty
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+}
+ \def\@makecol@cfgpoint {%
+ \@outputbox@appendfootnotes
+ \@outputbox@attachfloats
+ \@outputbox@reinsertbskip
+ }
+\declare@file@substitution{footmisc.sty}{latex-lab-footmisc.ltx}
+\input{latex-lab-footnotes.ltx}
+\endinput
+%%
+%% End of file `latex-lab-testphase-new-or.sty'.
diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/new-or-latex-lab-testphase.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/new-or-latex-lab-testphase.ltx
new file mode 100644
index 00000000000..4a17be70d6b
--- /dev/null
+++ b/Master/texmf-dist/tex/latex-dev/latex-lab/new-or-latex-lab-testphase.ltx
@@ -0,0 +1,44 @@
+%%
+%% This is file `new-or-latex-lab-testphase.ltx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% latex-lab-testphase.dtx (with options: `new-or')
+%%
+%% This is a generated file.
+%%
+%% Copyright 2021,2022 LaTeX Project
+%%
+%% This file was generated from file(s) of the `LaTeX-lab Bundle'.
+%% ------------------------------------------------------------------------------------
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008 or later.
+%%
+%% This file may only be distributed together with a copy of the LaTeX
+%% `LaTeX-lab Bundle'. You may however distribute the `LaTeX-lab Bundle'
+%% without such generated files.
+%%
+%% The newest sources can be found below
+%%
+%% https://github.com/latex3/latex2e/required/latex-lab
+%%
+%% where one can also log issues in case there are any.
+%%
+%%
+%% File: latex-lab-testphase.dtx
+
+\IfFileExists{latex-lab-testphase-new-or.sty}
+ {
+ \RequirePackage{latex-lab-testphase-new-or}
+ }
+ {}
+\endinput
+%%
+%% End of file `new-or-latex-lab-testphase.ltx'.
diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/phase-I-latex-lab-testphase.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/phase-I-latex-lab-testphase.ltx
index 226bdaa2cbc..26d8ecd1da9 100644
--- a/Master/texmf-dist/tex/latex-dev/latex-lab/phase-I-latex-lab-testphase.ltx
+++ b/Master/texmf-dist/tex/latex-dev/latex-lab/phase-I-latex-lab-testphase.ltx
@@ -8,7 +8,7 @@
%%
%% This is a generated file.
%%
-%% Copyright 2021 LaTeX Project
+%% Copyright 2021,2022 LaTeX Project
%%
%% This file was generated from file(s) of the `LaTeX-lab Bundle'.
%% ------------------------------------------------------------------------------------
diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/phase-II-latex-lab-testphase.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/phase-II-latex-lab-testphase.ltx
index 0530b2fee56..a99fdab9ffd 100644
--- a/Master/texmf-dist/tex/latex-dev/latex-lab/phase-II-latex-lab-testphase.ltx
+++ b/Master/texmf-dist/tex/latex-dev/latex-lab/phase-II-latex-lab-testphase.ltx
@@ -8,7 +8,7 @@
%%
%% This is a generated file.
%%
-%% Copyright 2021 LaTeX Project
+%% Copyright 2021,2022 LaTeX Project
%%
%% This file was generated from file(s) of the `LaTeX-lab Bundle'.
%% ------------------------------------------------------------------------------------
@@ -34,6 +34,11 @@
%%
%% File: latex-lab-testphase.dtx
+\IfFileExists{latex-lab-testphase-new-or.sty}
+ {
+ \RequirePackage{latex-lab-testphase-new-or}
+ }
+ {}
\RequirePackage{tagpdf}
\AddToDocumentProperties [document]{testphase/tagpdf}{loaded}
\tagpdfsetup{activate,paratagging,interwordspace}
diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/prototype-latex-lab-testphase.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/prototype-latex-lab-testphase.ltx
new file mode 100644
index 00000000000..876039967c4
--- /dev/null
+++ b/Master/texmf-dist/tex/latex-dev/latex-lab/prototype-latex-lab-testphase.ltx
@@ -0,0 +1,301 @@
+%%
+%% This is file `prototype-latex-lab-testphase.ltx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% latex-lab-prototype.dtx (with options: `2ekernel')
+%%
+%% This is a generated file.
+%%
+%% Copyright 2021,2022 LaTeX Project
+%%
+%% This file was generated from file(s) of the `LaTeX-lab Bundle'.
+%% ------------------------------------------------------------------------------------
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008 or later.
+%%
+%% This file may only be distributed together with a copy of the LaTeX
+%% `LaTeX-lab Bundle'. You may however distribute the `LaTeX-lab Bundle'
+%% without such generated files.
+%%
+%% The newest sources can be found below
+%%
+%% https://github.com/latex3/latex2e/required/latex-lab
+%%
+%% where one can also log issues in case there are any.
+%%
+%%
+%% File: latex-lab-prototype.dtx
+\ExplSyntaxOn
+\tl_if_exist:NF \l__keys_precompile_tl
+ {
+ \bool_new:N \l__keys_precompile_bool
+ \tl_new:N \l__keys_precompile_tl
+ }
+\cs_gset_protected:Npn \__keys_precompile:n #1
+ {
+ \bool_if:NTF \l__keys_precompile_bool
+ { \tl_put_right:Nn \l__keys_precompile_tl }
+ { \use:n }
+ {#1}
+ }
+\cs_gset_protected:Npn \__keys_bool_set:Nnnn #1#2#3#4
+ {
+ \bool_if_exist:NF #1 { \bool_new:N #1 }
+ \__keys_choice_make:
+ \__keys_cmd_set:nx { \l_keys_path_str / true }
+ { \exp_not:c { bool_ #2 set_ #3 :N } \exp_not:N #1 }
+ \__keys_cmd_set:nx { \l_keys_path_str / false }
+ { \exp_not:c { bool_ #2 set_ #4 :N } \exp_not:N #1 }
+ \__keys_cmd_set_direct:nn { \l_keys_path_str / unknown }
+ {
+ \msg_error:nnx { keys } { boolean-values-only }
+ \l_keys_key_str
+ }
+ \__keys_default_set:n { true }
+ }
+\cs_gset_protected:Npn \__keys_choice_make_aux:N #1
+ {
+ \cs_set_nopar:cpn { \c__keys_type_root_str \l_keys_path_str }
+ { choice }
+ \__keys_cmd_set_direct:nn \l_keys_path_str { #1 {##1} }
+ \__keys_cmd_set_direct:nn { \l_keys_path_str / unknown }
+ {
+ \msg_error:nnxx { keys } { choice-unknown }
+ \l_keys_path_str {##1}
+ }
+ }
+\cs_gset_protected:Npn \__keys_cmd_set:nn #1#2
+ { \__keys_cmd_set_direct:nn {#1} { \__keys_precompile:n {#2} } }
+\cs_gset_protected:Npn \__keys_cmd_set_direct:nn #1#2
+ { \cs_set_protected:cpn { \c__keys_code_root_str #1 } ##1 {#2} }
+\cs_gset_protected:Npn \__keys_cs_set:NNpn #1#2#3#
+ {
+ \cs_set_protected:cpx { \c__keys_code_root_str \l_keys_path_str } ##1
+ {
+ \__keys_precompile:n
+ { #1 \exp_not:N #2 \exp_not:n {#3} {##1} }
+ }
+ \use_none:n
+ }
+\cs_gset_protected:Npn \__keys_meta_make:n #1
+ {
+ \exp_args:NVo \__keys_cmd_set_direct:nn \l_keys_path_str
+ {
+ \exp_after:wN \keys_set:nn \exp_after:wN
+ { \l__keys_module_str } {#1}
+ }
+ }
+\cs_gset_protected:Npn \__keys_meta_make:nn #1#2
+ {
+ \exp_args:NV \__keys_cmd_set_direct:nn
+ \l_keys_path_str { \keys_set:nn {#1} {#2} }
+ }
+\cs_gset_protected:Npn \keys_precompile:nnN #1#2#3
+ {
+ \bool_set_true:N \l__keys_precompile_bool
+ \tl_clear:N \l__keys_precompile_tl
+ \keys_set:nn {#1} {#2}
+ \bool_set_false:N \l__keys_precompile_bool
+ \tl_set_eq:NN #3 \l__keys_precompile_tl
+ }
+\cs_gset_protected:Npn \__keys_show:Nnn #1#2#3
+ {
+ #1 { keys } { show-key }
+ { \__keys_trim_spaces:n { #2 / #3 } }
+ {
+ \keys_if_exist:nnT {#2} {#3}
+ {
+ \exp_args:Nnf \msg_show_item_unbraced:nn { code }
+ {
+ \exp_args:Ne \__keys_show:n
+ {
+ \exp_args:Nc \cs_replacement_spec:N
+ {
+ \c__keys_code_root_str
+ \__keys_trim_spaces:n { #2 / #3 }
+ }
+ }
+ }
+ }
+ }
+ { } { }
+ }
+\cs_gset:Npx \__keys_show:n #1
+ {
+ \exp_not:N \__keys_show:w
+ #1
+ \tl_to_str:n { \__keys_precompile:n }
+ #1
+ \tl_to_str:n { \__keys_precompile:n }
+ \exp_not:N \s__keys_stop
+ }
+\use:x
+ {
+ \cs_gset:Npn \exp_not:N \__keys_show:w
+ ##1 \tl_to_str:n { \__keys_precompile:n }
+ ##2 \tl_to_str:n { \__keys_precompile:n }
+ ##3 \exp_not:N \s__keys_stop
+ }
+ {
+ \tl_if_blank:nTF {#2}
+ {#1}
+ { \__keys_show:Nw #2 \s__keys_stop }
+ }
+\use:x
+ {
+ \cs_gset:Npn \exp_not:N \__keys_show:Nw ##1##2
+ \c_right_brace_str \exp_not:N \s__keys_stop
+ }
+ {#2}
+\tl_new:N \l__prototype_tmp_tl
+\prop_new:N \l__prototype_object_prop
+\cs_new_protected:Npn \prototype_declare_object:nn #1#2
+ {
+ \exp_args:Nx \__prototype_declare_object:nn { \int_eval:n {#2} } {#1}
+ }
+\cs_new_protected:Npn \__prototype_declare_object:nn #1#2
+ {
+ \int_compare:nTF { 0 <= #1 <= 9 }
+ {
+ \msg_info:nnnn { prototype } { declare-object-type } {#2} {#1}
+ \prop_put:Nnn \l__prototype_object_prop {#2} {#1}
+ }
+ { \msg_error:nnxx { prototype } { bad-number-of-arguments } {#2} {#1} }
+ }
+\tl_new:N \l__prototype_assignments_tl
+\cs_new_protected:Npn \prototype_declare_template:nnnn #1#2#3#4
+ {
+ \prop_get:NnNTF \l__prototype_object_prop {#1} \l__prototype_tmp_tl
+ {
+ \keys_define:nn { prototype / #1 / #2 } {#3}
+ \tl_clear_new:c { l__prototype_defaults_ #1 _ #2 _tl }
+ \cs_generate_from_arg_count:cNnn
+ { __prototype_template_ #1 _ #2 :w }
+ \cs_set_protected:Npn
+ { \l__prototype_tmp_tl }
+ {
+ \tl_use:N \l__prototype_assignments_tl
+ #4
+ }
+ }
+ { \msg_error:nnn { prototype } { unknown-object-type } {#1} }
+ }
+\cs_new_protected:Npn \prototype_declare_defaults:nnn #1#2#3
+ {
+ \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w }
+ { \tl_set:cn { l__prototype_defaults_ #1 _ #2 _tl } {#3} }
+ { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
+ }
+\cs_generate_variant:Nn \keys_precompile:nnN { v , nv }
+\cs_new_protected:Npn \prototype_use_template:nnn #1#2#3
+ {
+ \__prototype_declare_aux:nnnn {#1} {#2} {#3}
+ { \use:c { __prototype_template_ #1 _ #2 :w } }
+ }
+\cs_new_protected:Npn \prototype_declare_instance:nnnn #1#2#3#4
+ {
+ \__prototype_declare_aux:nnnn {#1} {#2} {#4}
+ {
+ \tl_clear_new:c { l__prototype_instance_ #1 _ #3 _pars_tl }
+ \tl_set_eq:cN { l__prototype_instance_ #1 _ #3 _pars_tl }
+ \l__prototype_assignments_tl
+ \tl_clear_new:c { l__prototype_instance_ #1 _ #3 _template_tl }
+ \tl_set:cn { l__prototype_instance_ #1 _ #3 _template_tl } {#2}
+ }
+ }
+\cs_new_protected:Npn \__prototype_declare_aux:nnnn #1#2#3#4
+ {
+ \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w }
+ {
+ \keys_precompile:nvN
+ { prototype / #1 / #2 }
+ { l__prototype_defaults_ #1 _ #2 _tl }
+ \l__prototype_assignments_tl
+ \keys_precompile:nnN { prototype / #1 / #2 } {#3} \l__prototype_tmp_tl
+ \tl_put_right:NV \l__prototype_assignments_tl \l__prototype_tmp_tl
+ #4
+ }
+ { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
+ }
+\cs_new_protected:Npn \prototype_use_instance:nn #1#2
+ { \prototype_use_instance:nnn {#1} {#2} { } }
+\cs_new_protected:Npn \prototype_use_instance:nnn #1#2#3
+ {
+ \tl_if_exist:cTF { l__prototype_instance_ #1 _ #2 _template_tl }
+ {
+ \tl_set_eq:Nc \l__prototype_assignments_tl
+ { l__prototype_instance_ #1 _ #2 _pars_tl }
+ \tl_if_blank:nF {#3}
+ {
+ \keys_precompile:vnN
+ {
+ prototype / #1 /
+ \tl_use:c { l__prototype_instance_ #1 _ #2 _template_tl }
+ }
+ {#3}
+ \l__prototype_tmp_tl
+ \tl_put_right:NV \l__prototype_assignments_tl
+ \l__prototype_tmp_tl
+ }
+ \use:c
+ {
+ __prototype_template_ #1 _
+ \tl_use:c { l__prototype_instance_ #1 _ #2 _template_tl }
+ :w
+ }
+ }
+ { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} }
+ }
+\cs_new_protected:Npn \prototype_show_template_code:nn #1#2
+ {
+ \prop_if_in:NnTF \l__prototype_object_prop {#1}
+ { \cs_show:c { __prototype_template_ #1 _ #2 :w } }
+ { \msg_error:nnn { prototype } { unknown-object-type } {#1} }
+ }
+\cs_new_protected:Npn \prototype_show_template_defaults:nn #1#2
+ {
+ \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w }
+ { \tl_show:c { l__prototype_defaults_ #1 _ #2 _tl } }
+ { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
+ }
+\cs_new_protected:Npn \prototype_show_instance_values:nn #1#2
+ {
+ \tl_if_exist:cTF { l__prototype_instance_ #1 _ #2 _template_tl }
+ { \tl_show:c { l__prototype_instance_ #1 _ #2 _pars_tl } }
+ { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} }
+ }
+\msg_new:nnnn { prototype } { bad-number-of-arguments }
+ { Bad~number~of~arguments~for~object~type~'#1'. }
+ {
+ An~object~may~accept~between~0~and~9~arguments.\\
+ You~asked~to~use~#2~arguments:~this~is~not~supported.
+ }
+\msg_new:nnnn { prototype } { unknown-instance }
+ { The~instance~'#2'~of~type~'#1'~is~unknown. }
+ {
+ You~have~asked~to~use~an~instance~'#2',~
+ but~this~has~not~been~created.
+ }
+\msg_new:nnnn { prototype } { unknown-object-type }
+ { The~object~type~'#1'~is~unknown. }
+ { An~object~type~needs~to~be~declared~prior~to~using~it. }
+\msg_new:nnnn { prototype } { unknown-template }
+ { The~template~'#2'~of~type~'#1'~is~unknown. }
+ {
+ No~interface~has~been~declared~for~a~template~
+ '#2'~of~object~type~'#1'.
+ }
+\msg_new:nnn { prototype } { declare-object-type }
+ { Declaring~object~type~'#1'~taking~#2~argument(s). }
+\ExplSyntaxOff
+\endinput
+%%
+%% End of file `prototype-latex-lab-testphase.ltx'.
diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/tagpdf-latex-lab-testphase.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/tagpdf-latex-lab-testphase.ltx
index 6189809d8c0..20c85a681a2 100644
--- a/Master/texmf-dist/tex/latex-dev/latex-lab/tagpdf-latex-lab-testphase.ltx
+++ b/Master/texmf-dist/tex/latex-dev/latex-lab/tagpdf-latex-lab-testphase.ltx
@@ -8,7 +8,7 @@
%%
%% This is a generated file.
%%
-%% Copyright 2021 LaTeX Project
+%% Copyright 2021,2022 LaTeX Project
%%
%% This file was generated from file(s) of the `LaTeX-lab Bundle'.
%% ------------------------------------------------------------------------------------
@@ -34,6 +34,11 @@
%%
%% File: latex-lab-testphase.dtx
+\IfFileExists{latex-lab-testphase-new-or.sty}
+ {
+ \RequirePackage{latex-lab-testphase-new-or}
+ }
+ {}
\RequirePackage{tagpdf}
\AddToDocumentProperties [document]{testphase/tagpdf}{loaded}
\tagpdfsetup{activate,paratagging,interwordspace}