summaryrefslogtreecommitdiff
path: root/macros/latex-dev
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-09-15 03:02:43 +0000
committerNorbert Preining <norbert@preining.info>2023-09-15 03:02:43 +0000
commitdeda1937c52481b2259e1061840b99e18e8ca361 (patch)
tree2dede32b7c181f98c1fa00cfa9d531a306e5d5fd /macros/latex-dev
parent527001b634c06d34f92d1809f507add012c320f6 (diff)
CTAN sync 202309150302
Diffstat (limited to 'macros/latex-dev')
-rw-r--r--macros/latex-dev/required/latex-lab/README.md2
-rw-r--r--macros/latex-dev/required/latex-lab/blocks-code.pdfbin878830 -> 886155 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/blocks-code.tex2
-rw-r--r--macros/latex-dev/required/latex-lab/blocks-doc.pdfbin439729 -> 440245 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/blocks-doc.tex2
-rw-r--r--macros/latex-dev/required/latex-lab/changes.txt62
-rw-r--r--macros/latex-dev/required/latex-lab/documentmetadata-support-code.pdfbin519336 -> 523606 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdfbin385426 -> 389235 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/documentmetadata-support.dtx65
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdfbin357259 -> 357811 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-bib.dtx11
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-bib.pdfbin412227 -> 411100 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-block.dtx (renamed from macros/latex-dev/required/latex-lab/latex-lab-block-tagging.dtx)272
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-block.pdf (renamed from macros/latex-dev/required/latex-lab/latex-lab-block-tagging.pdf)bin878830 -> 886155 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-firstaid.dtx62
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-firstaid.pdfbin271638 -> 272876 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-float.dtx60
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-float.pdfbin442979 -> 444989 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx985
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-footnotes.pdfbin800571 -> 815832 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-graphic.dtx8
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-graphic.pdfbin497530 -> 497260 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-math.dtx (renamed from macros/latex-dev/required/latex-lab/latex-lab-mathtagging.dtx)74
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-math.pdf (renamed from macros/latex-dev/required/latex-lab/latex-lab-mathtagging.pdf)bin609434 -> 612561 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdfbin302091 -> 302644 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdfbin357259 -> 357811 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-minipage.dtx21
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-minipage.pdfbin277702 -> 278305 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-namespace.dtx100
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-namespace.pdfbin0 -> 234661 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-new-or-1.dtx57
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-new-or-1.pdfbin383591 -> 389733 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-new-or-2.dtx341
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdfbin530241 -> 632322 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-sec.dtx67
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-sec.pdfbin527667 -> 528176 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx46
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-testphase.pdfbin298138 -> 298669 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-text.dtx12
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-text.pdfbin308879 -> 307823 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.dtx4
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdfbin296522 -> 296136 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx23
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.pdfbin357477 -> 356743 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-toc.dtx (renamed from macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.dtx)26
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-toc.pdf (renamed from macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.pdf)bin379087 -> 377490 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab.ins110
47 files changed, 1587 insertions, 825 deletions
diff --git a/macros/latex-dev/required/latex-lab/README.md b/macros/latex-dev/required/latex-lab/README.md
index 3f9efe728c..2b86c4d5ee 100644
--- a/macros/latex-dev/required/latex-lab/README.md
+++ b/macros/latex-dev/required/latex-lab/README.md
@@ -1,6 +1,6 @@
# LaTeX laboratory
-Release 2023-11-01 pre-release 0
+Release 2023-11-01 pre-release 1
## Overview
diff --git a/macros/latex-dev/required/latex-lab/blocks-code.pdf b/macros/latex-dev/required/latex-lab/blocks-code.pdf
index f01d17db22..7b3c18298f 100644
--- a/macros/latex-dev/required/latex-lab/blocks-code.pdf
+++ b/macros/latex-dev/required/latex-lab/blocks-code.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/blocks-code.tex b/macros/latex-dev/required/latex-lab/blocks-code.tex
index f71342d6f5..00bc2fa328 100644
--- a/macros/latex-dev/required/latex-lab/blocks-code.tex
+++ b/macros/latex-dev/required/latex-lab/blocks-code.tex
@@ -1,4 +1,4 @@
% this will typeset documentation + code
\AtBeginDocument{\AlsoImplementation}
-\input{latex-lab-block-tagging.dtx}
+\input{latex-lab-block.dtx}
diff --git a/macros/latex-dev/required/latex-lab/blocks-doc.pdf b/macros/latex-dev/required/latex-lab/blocks-doc.pdf
index 416406acde..4e0408b361 100644
--- a/macros/latex-dev/required/latex-lab/blocks-doc.pdf
+++ b/macros/latex-dev/required/latex-lab/blocks-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/blocks-doc.tex b/macros/latex-dev/required/latex-lab/blocks-doc.tex
index 39a93479a1..28008be6c0 100644
--- a/macros/latex-dev/required/latex-lab/blocks-doc.tex
+++ b/macros/latex-dev/required/latex-lab/blocks-doc.tex
@@ -1,4 +1,4 @@
% this will typeset documentation + code
\AtBeginDocument{\OnlyDescription}
-\input{latex-lab-block-tagging.dtx}
+\input{latex-lab-block.dtx}
diff --git a/macros/latex-dev/required/latex-lab/changes.txt b/macros/latex-dev/required/latex-lab/changes.txt
index 7e76d74996..e447d8130a 100644
--- a/macros/latex-dev/required/latex-lab/changes.txt
+++ b/macros/latex-dev/required/latex-lab/changes.txt
@@ -1,14 +1,50 @@
+2023-09-04 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * latex-lab-math.dtx: fix below display skip, tagging issue #11
+ * latex-lab-math.dtx: allow to use it without tagging.
+ * latex-lab-math.dtx: avoid tagging as math if fakemath is detected, tagging issue #5.
+
+2023-09-04 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * label-lab-new-or-1.dtx latex-lab-new-or-2.dtx
+ fix position of kernel hook in \@makecol (tagpdf issue #58)
+
+2023-09-04 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * documentmetadata-support.dtx: add debug key to load tagpdf-debug.
+ * new latex-lab-namespace.dtx with role mappings
+
+2023-09-01 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * latex-lab-block.dtx:
+ end environment \par handling needs to be specified for all display blocks
+ because the standalone receipt should not influence inner environments
+ and vice versa (bug reported in tagging-project/9)
+
+2023-07-21 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * rename latex-lab-toc-tagging.dtx to latex-lab-toc.dtx
+ * clean up versions and package declarations
+ * remove firstaid for ltugboat, this is now handled by the class
+ * do not load glyphtounicode with dvilualatex
+
+2023-07-19 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * really rename sec-tagging to sec
+ * really rename toc-tagging to toc
+ * rename block-tagging to block
+ * rename mathtagging to math
+ * document testphase key sec, toc, math, graphic, block
+
+2023-06-21 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * latex-lab-sec.dtx: redefine \part only if it defined (letter.cls ...)
+ * latex-lab-block-tagging: add definition for verse
+
2023-06-07 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
- * latex-lab-block-tagging.dtx corrected tagging of caption
- * new latex-lab-firstaid.dtx with adaptions to external packages
- * latex-lab-float.dtx: declare variable
- * latex-lab-toc-hyperref-changes: use hooks with arguments
- * latex-lab-toc-kernel-changes: use hooks with arguments
- * latex-lab-sec.dtx: provide \pdfgentounicode with lualatex
-
+ * latex-lab-block-tagging.dtx corrected tagging of caption
+ * new latex-lab-firstaid.dtx with adaptions to external packages
+ * latex-lab-float.dtx: declare variable
+ * latex-lab-toc-hyperref-changes: use hooks with arguments
+ * latex-lab-toc-kernel-changes: use hooks with arguments
+ * latex-lab-sec.dtx: provide \pdfgentounicode with lualatex
+
2023-05-20 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
- * renamed latex-lab-sec-tagging -> latex-lab-sec for consistency
-
+ * renamed latex-lab-sec-tagging -> latex-lab-sec for consistency
2023-05-19 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
* new latex-lab-bib.dtx:
@@ -18,10 +54,10 @@
2023-05-18 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
* new latex-lab-floats.dtx:
tagging support for float environments
- * new latex-lab-graphic.dtx
- tagging support for includegraphics and picture environment
- * new latex-lab-minipage.dtx
- tagging support for minipage and parbox
+ * new latex-lab-graphic.dtx
+ tagging support for includegraphics and picture environment
+ * new latex-lab-minipage.dtx
+ tagging support for minipage and parbox
2023-05-16 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
diff --git a/macros/latex-dev/required/latex-lab/documentmetadata-support-code.pdf b/macros/latex-dev/required/latex-lab/documentmetadata-support-code.pdf
index 863d390fc4..ed38483aec 100644
--- a/macros/latex-dev/required/latex-lab/documentmetadata-support-code.pdf
+++ b/macros/latex-dev/required/latex-lab/documentmetadata-support-code.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdf b/macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdf
index b6ebb2888a..d05aca93d9 100644
--- a/macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdf
+++ b/macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/documentmetadata-support.dtx b/macros/latex-dev/required/latex-lab/documentmetadata-support.dtx
index 0dccdd87cb..b37ae6c9d7 100644
--- a/macros/latex-dev/required/latex-lab/documentmetadata-support.dtx
+++ b/macros/latex-dev/required/latex-lab/documentmetadata-support.dtx
@@ -18,8 +18,8 @@
% for those people who are interested or want to report an issue.
%
% \begin{macrocode}
-\def\documentmetadatasupportversion{1.0d}
-\def\documentmetadatasupportdate{2023-06-07}
+\def\documentmetadatasupportversion{1.0f}
+\def\documentmetadatasupportdate{2023-09-01}
% \end{macrocode}
%
%
@@ -139,7 +139,7 @@
% |pdfstandard| can be used more than once to set overlapping standards, e.g:\\
% |pdfstandard=A-2b,pdfstandard=X-4,pdfstandard=UA-1|
%
-% If XMP-metadata are added (see the following key \texttt{xmp}
+% If XMP-metadata are added (see the following key \texttt{xmp})
% the needed conformance marker for the standards are set.
%
% More information can be found in the documentation
@@ -151,9 +151,13 @@
% \item[\texttt{colorprofiles}] This allows to load icc-colorprofiles. Details
% are described in the documentation of \pkg{l3pdfmeta}.
%
-% \item[\texttt{testphase}] This key is used to load testphase code. The values it accepts
-% and their effect will change over time, when testphase packages are added or
-% removed or when the code is moved into the kernel.
+% \item[\texttt{testphase}] This key is used to load testphase code.
+% The |testphase| key can only be used in the first \cs{DocumentMetadata}.
+% The values it accepts and their effect will change over time, when testphase packages are added or
+% removed or when the code is moved into the kernel. The key accepts a list of values
+% and it can be used more than once.
+%
+% The \texttt{phase} key bundle testphase modules. They also all activate tagging.
% \begin{description}
% \item[\texttt{phase-I}]
% This value loads code implementing the first phase of the project~\cite{blueprint}, i.e., it
@@ -172,7 +176,13 @@
% table of contents and similar lists, graphics, minipages and floats.
% As it redefines many internals it is currently restricted to the use of
% standard classes (article, report, and book)
-% and it supports only a limited number of add-on packages.
+% and it supports only a limited number of add-on packages.
+% \end{description}
+%
+% The various testphase modules can also be loaded individually (and least in theory,
+% there can be hidden dependencies). If loaded like this, the tagpdf package is not
+% loaded and tagging is not activated! The list of modules will change over time.
+% \begin{description}
% \item[\texttt{new-or-1}] This patches a few commands related
% to the output routine. The patches are needed for the tagging
% of paragraphs, for the tagging of header and footer and
@@ -183,8 +193,32 @@
% \item[\texttt{new-or}] This loads more changes to the output routine required for the
% tagging. It is not compatible with every class! The code is also loaded by the
% \texttt{phase-II} value.
+% \item[\texttt{sec}] This adapts commands related to sectioning to make them tagging aware.
+% The \texttt{sec} module is loaded by \texttt{phase-III}.
+% \item[\texttt{toc}] This adapts commands related to the table of contents and
+% similar list to make them tagging aware. The \texttt{toc} module is loaded by \texttt{phase-III}.
+% \item[\texttt{graphic}] This enables tagging support for
+% the \cs{includegraphics} command and the \texttt{picture} environment.
+% This code is also loaded by the \texttt{phase-III} key.
+% \item[\texttt{block}] This reimplements lists and blocks environments and
+% add tagging support.
+% This code is also loaded by the \texttt{phase-III} key.
+% \item[\texttt{minipage}] This adds tagging support to \texttt{minipage}
+% and \cs{parbox}.
+% This code is also loaded by the \texttt{phase-III} key.
+% \item[\texttt{float}] This adds tagging support to floats.
+% This code is also loaded by the \texttt{phase-III} key.
+% \item[\texttt{bib}] This adds tagging support to citations and bibliographies.
+% This code is also loaded by the \texttt{phase-III} key.
+% \item[\texttt{text}] This module adds tagging support to the \LaTeX{} logo and
+% to the \cs{emph} command.
+% This code is also loaded by the \texttt{phase-III} key.
+% \item[\texttt{math}] This adapts math for tagging. This is only a prototype.
+% The module is currently not loaded by any \texttt{phase} key.
+% \item[\texttt{firstaid}] This contains small adjustments to external packages.
+% The module is currently not loaded by any \texttt{phase} key.
% \end{description}
-% The |testphase| key can only be used in the first \cs{DocumentMetadata}.
+%
%
% \item[\texttt{debug}] This key activates some debug options. It takes a list of key-values
% as value. Currently the following keys are known:
@@ -200,7 +234,10 @@
% \item[\texttt{xmp-export}] This will export the XMP-metadata to a file \verb+\jobname.xmpi+.
% with \texttt{debug=\{xmp-export=filename\}} the file name can be changed.
% More information can be found in the documentation of \pkg{l3pdfmeta} of the \pkg{pdfmanagement-testphase}
-% bundle.
+% bundle.
+% \item[\texttt{tagpdf}] This loads the package tagpdf-debug which enhances
+% various commands from tagpdf with additional debugging options. This can slow down
+% the compilation!
% \end{description}
% \end{description}
%
@@ -426,6 +463,16 @@
\tagpdfsetup{log=#1}
}
}
+ ,debug / tagpdf .code:n =
+ {
+ \AddToHook
+ {
+ package/tagpdf/after
+ }
+ {
+ \RequirePackage{tagpdf-debug}
+ }
+ }
,debug / uncompress .code:n =
{
\pdf_uncompress:
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdf b/macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdf
index ee73972e15..d47e09867f 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-bib.dtx b/macros/latex-dev/required/latex-lab/latex-lab-bib.dtx
index 9a5ee81720..a467bf3158 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-bib.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-bib.dtx
@@ -16,6 +16,8 @@
%
% for those people who are interested or want to report an issue.
%
+\def\ltlabbibdate{2023-07-20}
+\def\ltlabbibversion{0.81a}
%<*driver>
\documentclass{l3doc}
\EnableCrossrefs
@@ -31,7 +33,7 @@
% Changes and additions to the kernel related to tagging and links in citations and
% bibliography entries}
% \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}}
-% \date{Version 0.81 2023-06-07}
+% \date{v\ltlabbibversion\ \ltlabbibdate}
%
% \maketitle
%
@@ -129,12 +131,12 @@
%<@@=tag>
% \end{macrocode}
% \begin{macrocode}
-\ProvidesExplPackage {latex-lab-testphase-bib} {2023-05-18} {0.8}
+\ProvidesExplPackage {latex-lab-testphase-bib} {\ltlabbibdate} {\ltlabbibversion}
{Code related to the tagging of bibliography and cite command}
% \end{macrocode}
% We need at least the block tagging code.
% \begin{macrocode}
-\RequirePackage{latex-lab-testphase-block-tagging}
+\RequirePackage{latex-lab-testphase-block}
% \end{macrocode}
%
% At first we suppress the patches from hyperref. This will only work with the next
@@ -398,7 +400,8 @@
% \begin{macrocode}
%<*latex-lab>
\ProvidesFile{bib-latex-lab-testphase.ltx}
- [2023-05-18 v0.8 code related to the tagging of bib and citations]
+ [\ltlabbibdate\space v\ltlabbibversion\space
+ latex-lab wrapper bib]
\RequirePackage{latex-lab-testphase-bib}
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-bib.pdf b/macros/latex-dev/required/latex-lab/latex-lab-bib.pdf
index 0de6ad02a6..153923a871 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-bib.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-bib.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-block-tagging.dtx b/macros/latex-dev/required/latex-lab/latex-lab-block.dtx
index 63145d929e..3bd06b72c8 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-block-tagging.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-block.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-%% File: latex-lab-block-tagging.dtx (C) Copyright 2021-2023 LaTeX Project
+%% File: latex-lab-block.dtx (C) Copyright 2021-2023 LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -9,7 +9,8 @@
%
% https://www.latex-project.org/lppl.txt
%
-%
+\def\ltlabblockdate{2023-09-01}
+\def\ltlabblockversion{0.8h}
%<*driver>
\documentclass{l3doc}
\usepackage{amstext}
@@ -19,21 +20,25 @@
\usepackage{todonotes}
\begin{document}
- \DocInput{latex-lab-block-tagging.dtx}
+ \DocInput{latex-lab-block.dtx}
\end{document}
%</driver>
%
% \fi
%
-
-\def\ltblocksversion{v0.8d}
-\def\ltblocksdate{2023/06/07}
-
+% \providecommand\hook[1]{\texttt{#1\DescribeHook[noprint]{#1}}}
+% \providecommand\socket[1]{\texttt{#1\DescribeSocket[noprint]{#1}}}
+% \providecommand\plug[1]{\texttt{#1\DescribePlug[noprint]{#1}}}
+%
+% \NewDocElement[printtype=\textit{socket},idxtype=socket,idxgroup=Sockets]{Socket}{socketdecl}
+% \NewDocElement[printtype=\textit{hook},idxtype=hook,idxgroup=Hooks]{Hook}{hookdecl}
+% \NewDocElement[printtype=\textit{plug},idxtype=plug,idxgroup=Plugs]{Plug}{plugdecl}
+%
%
% \title{Prototype reimplementation of \LaTeXe{}'s block environments using templates}
% \author{\LaTeX{} Project\thanks{Initial reimplementation of lists done by Bruno
% Le Floch, generalized second version with tagging support by Frank Mittelbach.}}
-% \date{\ltblocksversion\ \ltblocksdate}
+% \date{v\ltlabblockversion\ \ltlabblockdate}
%
% \maketitle
%
@@ -253,7 +258,7 @@
% \TemplateKey{max-inner-levels}{tokenlist}{Maximum number of nested
% environments of this kind. Only relevant if there is a
% \key{inner-level-counter} specified}{4}
-% \TemplateKey{inner-instance-type}{tokenlist}{Opject type of the
+% \TemplateKey{inner-instance-type}{tokenlist}{Object type of the
% inner instance}{list}
% \TemplateKey{inner-instance}{tokenlist}{Name of the inner instance
% (if any).}{}
@@ -544,6 +549,30 @@
% \key{tagging-recipe} of the \xt{blockenv} template. Currently the
% following values are implemented:
% \begin{description}
+% \item[\texttt{standalone}]
+% This recipe does the following:
+% \begin{itemize}
+% \item
+% Ensure that the \xt{blockenv} is not inside a \struct{text-unit}
+% structure. If necessary, close the open one (and any open
+% \struct{text} structure).
+%
+% \item
+% Text inside the body of the environment start with
+% \struct{text-unit}\struct{text} unless the key
+% \key{para-flattened} is set to \texttt{true}
+% (which is most likely the wrong thing to do because we then get just
+% \struct{text} as the structure).
+%
+% \item
+% At the end of the environment close \struct{/text} and possibly an
+% inner \struct{/text-unit} if open.
+%
+% \item
+% Finally, ensure that after the environment a new
+% \struct{text-unit} is started, if appropriate, e.g., if text is following.
+% \end{itemize}
+%
% \item[\texttt{basic}]
% This recipe does the following:
% \begin{itemize}
@@ -555,7 +584,7 @@
% leave the \struct{text-unit} open.
%
% \item
-% Text inside the body of the environment starts with
+% Text inside the body of the environment start with
% \struct{text-unit}\struct{text} if \key{para-flattened} is set to \texttt{false},
% otherwise just with \struct{text}.
%
@@ -571,7 +600,6 @@
% paragraph indentation)
% \end{itemize}
%
-%
% \item[\texttt{standard}]
% This recipe is like the \texttt{basic} one as far as handling
% \struct{text-unit} and \struct{text} is concerned. In addition
@@ -641,8 +669,8 @@
%
%
% \begin{macrocode}
-\ProvidesPackage {latex-lab-testphase-block-tagging}
- [\ltblocksdate\space \ltblocksversion\space
+\ProvidesPackage {latex-lab-testphase-block}
+ [\ltlabblockdate\space v\ltlabblockversion\space
blockenv implementation]
% \end{macrocode}
%
@@ -886,17 +914,6 @@
% \end{macrocode}
% \end{macro}
%
-%
-% \begin{macro}{\tag_if_active:T}
-% If tagging support is not loaded then we shouldn't try to execute
-% any tagging related commands. Eventually this can go once the
-% basic support is available in the kernel.
-% \fmi{can vanish one day}
-% \begin{macrocode}
-\cs_if_exist:NF \tag_if_active:T
- { \cs_new_eq:NN \tag_if_active:T \use_none:n }
-% \end{macrocode}
-% \end{macro}
%
% \subsubsection{Debugging}
%
@@ -1143,8 +1160,6 @@
% \end{macro}
%
%
-%
-%
% \subsubsection{Standard list environments}
%
%
@@ -1173,8 +1188,32 @@
% \end{environment}
%
%
+% \subsubsection{verse environment}
%
-%
+% \begin{environment}{verse}
+% The verse environment has not special tagging currently. It is
+% defined as a simple standard list and takes the tagging from there.
+% But it must be redefined so that \cs{itemindent} is correctly set.
+% \begin{macrocode}
+\AddToHook{begindocument/before}{
+ \RenewDocumentEnvironment{verse}{ !O{} }
+ {
+ \let\\\@centercr
+ \UseInstance{blockenv}{list}
+ {
+ item-indent=-1.5em,
+ parindent=-1.5em,
+ item-skip=0pt,
+ rightmargin=\leftmargin,
+ leftmargin=\leftmargin+1.5em,
+ #1
+ }
+ \item\relax
+ }
+ { \endblockenv }
+ }
+% \end{macrocode}
+% \end{environment}
%
%
% \begin{environment}{list}
@@ -1201,12 +1240,6 @@
}
% \end{macrocode}
%
-% Again something that should probably elsewhere: the rolemapping.
-% \begin{macrocode}
-\tag_if_active:T {
- \tagpdfsetup{add-new-tag={tag=list,role=L}}
-}
-% \end{macrocode}
% \end{environment}
%
%
@@ -1339,20 +1372,42 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\@thm}
+% \cs{@thm} executes \cs{refstepcounter} too early for hyperref
+% and structure destinations: the generated target is outside the structure
+% and can be separated from the theorem by a page break. We therefore move
+% the anchor setting into \cs{@begintheorem}. \cs{@begintheorem} doesn't
+% currently get the name of the counter as argument, so we store it in variable
+% for now, to be able to pass it along.
+% \begin{macrocode}
+\tl_new:N \l_@@_thm_current_counter_tl
+\def\@thm#1#2{%
+ \@kernel@refstepcounter{#1}
+ \tl_set:Nn \l_@@_thm_current_counter_tl{#1}
+ \@ifnextchar[{\@ythm{#1}{#2}}{\@xthm{#1}{#2}}}
+% \end{macrocode}
+% To avoid that hyperref overwrites the definition again we must its patch:
+% \begin{macrocode}
+\def\hyper@nopatch@thm{}
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\@begintheorem,\@opargbegintheorem}
%
% The \cs{@thm} command expands to either \cs{@beginthorem} or
% \cs{@opargbegintheorem}. For the moment we stick with this as it
-% will help with the transion. But instead of using a
+% will help with the transition. But instead of using a
% \env{trivlist} we use a blockenv and some tagging for the title
% (as a Caption).
% We do not want potential tagging from \cs{textbf} here,
-% so we use \cs{bfseries} to set the font.
+% so we use \cs{bfseries} to set the font. The commands set also the link targets
+% which should be inside the main structure.
% \begin{macrocode}
\def\@begintheorem#1#2{
\UseInstance{blockenv}{theorem}{}
\tagpdfparaOff
- \mode_leave_vertical:
+ \mode_leave_vertical:
+ \MakeLinkTarget{\l_@@_thm_current_counter_tl}
\tag_struct_begin:n{tag=Caption}
\group_begin:
\bfseries
@@ -1382,6 +1437,7 @@
\UseInstance{blockenv}{theorem}{}
\tagpdfparaOff
\mode_leave_vertical:
+ \MakeLinkTarget{\l_@@_thm_current_counter_tl}
\tag_struct_begin:n{tag=Caption}
\group_begin:
\bfseries
@@ -1470,7 +1526,7 @@
\tl_if_empty:nF {#1} { \SetTemplateKeys{blockenv}{display}{#1} }
%
% \end{macrocode}
-% We need to know later if we haved nested blockenvs inside
+% We need to know later if we have nested blockenvs inside
% a flattened environment. Whenever we start a new blockenv we
% increment \cs{\l_@@_flattened_level_int} if it is already
% different from zero. If it is zero we increment it if flattening
@@ -1556,7 +1612,7 @@
\UseInstance{para}{ \l_@@_para_instance_tl } {}
}
% \end{macrocode}
-% In the inner instance may have its own levels or none depending
+% The inner instance may have its own levels or none depending
% on which the instance name differs. Again we pass it the optional
% key/value list.
% \begin{macrocode}
@@ -1594,7 +1650,7 @@
%
% \begin{macro}{\c@maxblocklevels}
% A counter to increase or decrease the number of supported
-% level. If increased, one needs to suply additional level instances.
+% level. If increased, one needs to supply additional level instances.
% \begin{macrocode}
\newcounter{maxblocklevels}
\setcounter{maxblocklevels}{6}
@@ -1668,7 +1724,7 @@
% point here, i.e., only if the list didn't start a paragraph. One
% can make a case for that, but it can be somewhat surprising to
% the user and there is a good argument that even such a list could
-% be followed expanatory text that is part of the same paragraph
+% be followed explanatory text that is part of the same paragraph
% and doesn't start a new one.\fmi{decide which logic we want to
% use! If the old logic is used we need to close the text-unit
% ourselves in the true branch}
@@ -1679,18 +1735,13 @@
% So this is for now always done. Probably \cs{l_@@_topsepadd_skip} above
% should be added only if the paragraph ends here and not if it
% continues, so this need some further cleanup.\fmi{decide}
- % \begin{macrocode}
- \bool_if:NTF \l_@@_standalone_bool
-% \end{macrocode}
-% It is possible that \texttt{@endpe} is true because a
-% displayblock has just ended before we end the standalone
-% displayblock and in that casevthere is no outer
-% \struct{text-unit} so we have to explicitly set \texttt{@endpe}
-% back to false to prevent it from closing a structure later that
-% isn't there.
+%
+% Finally, we have a socket that handles the \cs{par} handling
+% after the block. Normally, we use it with the \plug{on} plug (check for a
+% following \cs{par}) but in the case of standalone environments we
+% assign it the \plug{off} plug.
% \begin{macrocode}
- { \legacy_if_gset_false:n { @endpe } }
- { \legacy_if_gset_true:n { @endpe } }
+ \socket_use:n {tagsupport/block-endpe}
}
% \end{macrocode}
%
@@ -1708,13 +1759,29 @@
%
%
%
-% \begin{macro}{\l_@@_standalone_bool}
-%
+% \begin{socketdecl}{tagsupport/block-endpe}
+% This socket is responsible for the end environment \cs{par}
+% handling. We define two plugs for it (\plug{on} and \plug{off}).
% \begin{macrocode}
-\bool_new:N \l_@@_standalone_bool
-\bool_set_false:N \l_@@_standalone_bool
+\socket_new:nn {tagsupport/block-endpe}{0}
% \end{macrocode}
-% \end{macro}
+% \end{socketdecl}
+%
+% \begin{plugdecl}{on,off}
+% The plugs set the legacy \texttt{@endpe} switch. This must always
+% happen because block environments with different settings can be nested
+% and should not inherit the setting from the outer environment.
+% \begin{macrocode}
+\socket_new_plug:nnn{tagsupport/block-endpe}{on}
+ { \legacy_if_gset_true:n { @endpe } }
+\socket_new_plug:nnn{tagsupport/block-endpe}{off}
+ { \legacy_if_gset_false:n { @endpe } }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\socket_assign_plug:nn{tagsupport/block-endpe}{on}
+% \end{macrocode}
+% \end{plugdecl}
%
%
%
@@ -2516,6 +2583,10 @@
\@@_beginpar_vmode:
\let \__kernel_displayblock_begin: \prg_do_nothing:
\let \__kernel_displayblock_end: \prg_do_nothing:
+% \end{macrocode}
+% End environment \cs{par} handling:
+% \begin{macrocode}
+ \socket_assign_plug:nn{tagsupport/block-endpe}{on}
}
% \end{macrocode}
% \end{macro}
@@ -2534,9 +2605,9 @@
\cs_set_eq:NN \__kernel_displayblock_begin: \@@_inner_begin:
\cs_set_eq:NN \__kernel_displayblock_end: \@@_inner_end:
% \end{macrocode}
-%
+% End environment \cs{par} handling:
% \begin{macrocode}
- \bool_set_true:N \l_@@_standalone_bool
+ \socket_assign_plug:nn{tagsupport/block-endpe}{off}
% \end{macrocode}
%
% \begin{macrocode}
@@ -2574,6 +2645,10 @@
\cs_set_eq:NN \__kernel_displayblock_begin: \@@_inner_begin:
\cs_set_eq:NN \__kernel_displayblock_end: \@@_inner_end:
% \end{macrocode}
+% End environment \cs{par} handling:
+% \begin{macrocode}
+ \socket_assign_plug:nn{tagsupport/block-endpe}{on}
+% \end{macrocode}
%
% \begin{macrocode}
\tl_if_empty:NTF \l_@@_tag_name_tl
@@ -2598,7 +2673,7 @@
% \begin{itemize}
% \item It opens a \struct{text-unit}-structure or keeps the current one open (only
% closing the MC).
-% \item It then starts a new structure rollmapped to L-structure
+% \item It then starts a new structure rolemapped to L-structure
% and arranges for handling list items, e.g., Li, Lbl and LBody
% structures.
% \item At the end it closes open list structures as needed but
@@ -2624,6 +2699,11 @@
\cs_set_eq:NN \__kernel_list_item_begin: \@@_list_item_begin:
\cs_set_eq:NN \__kernel_list_item_end: \@@_list_item_end:
% \end{macrocode}
+% End environment \cs{par} handling:
+% \begin{macrocode}
+ \socket_assign_plug:nn{tagsupport/block-endpe}{on}
+% \end{macrocode}
+%
% Handle the tag name and attribute classess using the key values
% from the current list instance.
% \begin{macrocode}
@@ -2753,14 +2833,7 @@
% \subsubsection{Blockquote instances}
%
% \begin{instance}{blockenv quotation}
-%
-% \begin{macrocode}
-\tag_if_active:T {
- \tagpdfsetup{add-new-tag={tag=quote,role=BlockQuote}}
- \tagpdfsetup{add-new-tag={tag=quotation,role=BlockQuote}}
-}
-% \end{macrocode}
-%
+ %
% \begin{macrocode}
\DeclareInstance{blockenv}{quotation}{display}
{
@@ -2851,32 +2924,15 @@
}
% \end{macrocode}
%
-% We use \struct{theorem-like} as the structure name and rollmap it
+% We use \struct{theorem-like} as the structure name and rolemap it
% to a \struct{Sect} because that can hold a \struct{Caption}.
-% \begin{macrocode}
-\tag_if_active:T {
- \tagpdfsetup{add-new-tag={tag=theorem-like,role=Sect}}
-}
-% \end{macrocode}
-%
-%
-%
%
% \subsubsection{Verbatim instances}
%
% \begin{instance}{blockenv verbatim}
%
-% \begin{macrocode}
-\tag_if_active:T {
- \tagpdfsetup{add-new-tag={tag=verbatim,role=P}}
- \tagpdfsetup{add-new-tag={tag=codeline,role=Sub}}
-% \end{macrocode}
-% Possible alternative for PDF 1.7:
-% \begin{macrocode}
-% \tagpdfsetup{add-new-tag={tag=verbatim,role=Div}}
-% \tagpdfsetup{add-new-tag={tag=codeline,role=P}}
-}
-% \end{macrocode}
+% The rolemapping is current verbatim to P and codeline to Sub (which is role mapped
+% to Span in pdf 1.7. Alternatives for PDF 1.7: Div and P.
%
% \begin{macrocode}
\DeclareInstance{blockenv}{verbatim}{display}
@@ -3118,7 +3174,7 @@
% block list-5,
% block list-6 }
% The block instances for the various list environments use the
-% same underlying instance (well by default) and nothing nothing
+% same underlying instance (well by default) and nothing
% needs to be set up specifically (because that is already done in
% the legacy \cs{list\meta{romannumeral}} unless a
% different layout is wanted.
@@ -3149,7 +3205,7 @@
% \subsection{List instances for the standard lists}
%
% For all list instances we have to say what kind of label we want
-% (\texttt{label-instance}) and how it should beformatted.
+% (\texttt{label-instance}) and how it should be formatted.
%
% \begin{instance}{list itemize-1,
% list itemize-2,
@@ -3339,7 +3395,7 @@
% All of the following definitions should only be made if tagging
% is active!
% \begin{macrocode}
-\tag_if_active:T {
+\tag_if_active:TF {
% \end{macrocode}
%
% \begin{macro}{\@@_beginpar_vmode:}
@@ -3417,7 +3473,7 @@
% e.g., \verb=...\end{itemize} \item ...\par= it can happen that
% \cs{__kernel_displayblock_doendpe:} is called while
% \texttt{@endpe} is already handled and then we should not attempt
-% to close a \texttt{text-unit} structure. So we need to check for this.
+% to close a \texttt{text-unit} structure). So we need to check for this.
% \begin{macrocode}
\legacy_if:nT { @endpe }
{
@@ -3425,7 +3481,7 @@
% If the display block currently ending was \enquote{flattened}
% (i.e., uses simplified paragraphs that are not tagged by a
% combination of \texttt{text-unit} followed by \struct{text}, but simply
-% with a \struct{text},
+% with a \struct{text}),
% then we don't have to do anything, because the \struct{text} is already closed.
% \begin{macrocode}
\@@_debug_typeout:n
@@ -3450,7 +3506,7 @@
%
% Paragraph tagging is mainly done using the paragraph hooks (will
% get moved eventually). The default hook setting is not good
-% enough when lists get suppported: we need to delay starting the
+% enough when lists get supported: we need to delay starting the
% paragraph tagging if we still have to place the list label.
% We therefore remove the existing hook data and replace it with an
% augmented version (this will get combined eventually).
@@ -3511,7 +3567,7 @@
}
% \end{macrocode}
% The same code, but without testing \texttt{@endpe}. This is not
-% needed in the standalong e case and wrong inside lists.
+% needed in the standalone case and wrong inside lists.
% \begin{macrocode}
\cs_new_protected:Npn \@@_start_para_structure_unconditionally:n #1 {
\bool_if:NF \l__tag_para_flattened_bool
@@ -3532,14 +3588,6 @@
% \end{macrocode}
% \end{macro}
%
-%
-%
-% \begin{macrocode}
-\tag_if_active:T {
-% \tagpdfsetup{add-new-tag={tag=text-unit,role=Part}}
-}
-% \end{macrocode}
-%
% \begin{macrocode}
\RemoveFromHook{para/end}[tagpdf]
\AddToHook{para/end}
@@ -3600,8 +3648,6 @@
\cs_set_eq:NN \endgraf \para_end:
% \end{macrocode}
%
-% \begin{macrocode}
-% \end{macrocode}
% \end{macro}
%
%
@@ -3817,16 +3863,16 @@
}
% \end{macrocode}
% \end{macro}
-%
-%
-%
-%
-%
-%
% End of tagging related declarations.
% \begin{macrocode}
}
% \end{macrocode}
+% These command should have a dummy declaration if tagging is not active
+% \begin{macrocode}
+{
+ \cs_new:Npn \@@_start_para_structure_unconditionally:n #1 {}
+}
+% \end{macrocode}
%
%
%
@@ -3844,10 +3890,10 @@
%
% \begin{macrocode}
%<*latex-lab>
-\ProvidesFile{block-tagging-latex-lab-testphase.ltx}
- [\ltblocksdate\space \ltblocksversion\space
+\ProvidesFile{block-latex-lab-testphase.ltx}
+ [\ltlabblockdate\space v\ltlabblockversion\space
blockenv implementation]
-\RequirePackage{latex-lab-testphase-block-tagging}
+\RequirePackage{latex-lab-testphase-block}
%</latex-lab>
% \end{macrocode}
%
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-block-tagging.pdf b/macros/latex-dev/required/latex-lab/latex-lab-block.pdf
index 8c88ff980a..b82beb2684 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-block-tagging.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-block.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-firstaid.dtx b/macros/latex-dev/required/latex-lab/latex-lab-firstaid.dtx
index 8f474e6b12..e2ee78b2ff 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-firstaid.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-firstaid.dtx
@@ -16,6 +16,8 @@
%
% for those people who are interested or want to report an issue.
%
+\def\ltlabfirstaiddate{2023-07-20}
+\def\ltlabfirstaidversion{0.85a}
%<*driver>
\documentclass{l3doc}
\EnableCrossrefs
@@ -28,9 +30,9 @@
% \fi
%
% \title{The \textsf{latex-lab-firstaid} package\\
-% Temporary patches to external packages}
+% Temporary patches to external packages needed for the tagging project}
% \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}}
-% \date{Version 0.80 2023-06-04}
+% \date{v\ltlabfirstaidversion\ \ltlabfirstaiddate}
%
% \maketitle
%
@@ -58,8 +60,9 @@
%<@@=tag>
% \end{macrocode}
% \begin{macrocode}
-\ProvidesPackage {latex-lab-testphase-firstaid} [2023-06-04 v0.8
- Temporary patches to external packages need for the tagging project]
+\ProvidesPackage {latex-lab-testphase-firstaid} [%
+ \ltlabfirstaiddate\space v\ltlabfirstaiddate\space
+ Temporary patches to external packages needed for the tagging project]
% \end{macrocode}
% \subsection{blindtext}
@@ -103,43 +106,38 @@
}%
}
% \end{macrocode}
-% \subsection{ltugboat}
-% ltugboat need only a redefinition of \cs{l@section} to add the hooks
+% \subsection{cleveref}
+% The cleveref package redefines \cs{@makefntext} and this means that the patches in
+% the new footnote code fails. We use a hook instead
% \begin{macrocode}
-\AddToHook{file/ltugboat.cls/after}
+\AddToHook{package/cleveref/after}
{
- \def\l@section#1#2{\addpenalty{\@secpenalty}%
- \addvspace{\TBtocsectionspace}%
- \@tempdima 1.5em
- \begingroup
- \parindent\z@ \rightskip\z@ % article style makes \rightskip > 0
- \parfillskip\z@
- \TBtocsectionfont
- \leavevmode\advance\leftskip\@tempdima\hskip-\leftskip
- \UseHookWithArguments{contentsline/text/before}{4}
- {\toclevel@part}{#1}{#2}{\@contentsline@destination}%
- \csname contentsline@text@1@format\endcsname{#1}%
- \UseHookWithArguments{contentsline/text/after}{4}
- {\toclevel@part}{#1}{#2}{\@contentsline@destination}%
- \nobreak\hfil
- \nobreak\hb@xt@\@pnumwidth{\hss
- \UseHookWithArguments{contentsline/page/before}{4}
- {\toclevel@part}{#1}{#2}{\@contentsline@destination}%
- #2%
- \UseHookWithArguments{contentsline/page/after}{4}
- {\toclevel@part}{#1}{#2}{\@contentsline@destination}%
- }\par
- \endgroup}
- }
+ \let\@makefntext\cref@old@makefntext
+ \AddToHook{cmd/@makefntext/before}{%
+ \cref@constructprefix{footnote}{\cref@result}%
+ \protected@edef\cref@currentlabel{%
+ [footnote][\arabic{footnote}][\cref@result]%
+ \p@footnote\@thefnmark}}
+% \end{macrocode}
+% The second problem is that it redefines \cs{refstepcounter} to use an argument.
+% In itself this isn't a problem but as the new definition doesn't grab the arguments
+% directly it fails over the generic hook inserted at the end of the definition
+% \begin{macrocode}
+ \RenewDocumentCommand\refstepcounter{om}{%
+ \IfNoValueTF{#1}%
+ {\refstepcounter@noarg{#2}}%
+ {\refstepcounter@optarg[#1]{#2}}%
+ }%
+ }
% \end{macrocode}
-
% \begin{macrocode}
%</package>
% \end{macrocode}
% \begin{macrocode}
%<*latex-lab>
\ProvidesFile{firstaid-latex-lab-testphase.ltx}
- [2023-06-04 v0.8 Temporary patches to external packages need for the tagging project]
+ [\ltlabfirstaiddate\space v\ltlabfirstaidversion\space
+ latex-lab wrapper firstaid]
\RequirePackage{latex-lab-testphase-firstaid}
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-firstaid.pdf b/macros/latex-dev/required/latex-lab/latex-lab-firstaid.pdf
index bd656c629a..23b2d0d97d 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-firstaid.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-firstaid.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-float.dtx b/macros/latex-dev/required/latex-lab/latex-lab-float.dtx
index 430b2aec96..3bd3483600 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-float.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-float.dtx
@@ -16,6 +16,8 @@
%
% for those people who are interested or want to report an issue.
%
+\def\ltlabfloatdate{2023-07-20}
+\def\ltlabfloatversion{0.81a}
%<*driver>
\documentclass{l3doc}
\EnableCrossrefs
@@ -31,7 +33,7 @@
% \title{The \textsf{latex-lab-floats} package\\
% Tagging of floats }
% \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}}
-% \date{v0.81 2023-06-07}
+% \date{v\ltlabfloatversion\ \ltlabfloatdate}
%
% \maketitle
%
@@ -128,17 +130,11 @@
% \begin{implementation}
% \section{Implementation}
% \begin{macrocode}
-\ProvidesExplPackage {latex-lab-testphase-float} {2023-04-28} {0.8}
+\ProvidesExplPackage {latex-lab-testphase-float} {\ltlabfloatdate} {\ltlabfloatversion}
{Code related to the tagging of floats}
% \end{macrocode}
% \subsection{Variables}
-% We rolemap to Aside, and float sections to Sect
-%
-% \begin{macrocode}
-\tagpdfsetup{add-new-tag=float/Aside}
-\tagpdfsetup{add-new-tag=figures/Sect}
-\tagpdfsetup{add-new-tag=tables/Sect}
-% \end{macrocode}
+% We rolemap to float to Aside, and float sections to Sect.
%
% \begin{variable}{
% \g_@@_float_sect_prop,
@@ -408,6 +404,32 @@
\fi
\fi
}
+% \end{macrocode}
+% and similar for double floats:
+% \begin{macrocode}
+\def\end@dblfloat{%
+ \if@twocolumn
+ \@endfloatbox
+ \@nameuse{@@_float_end:}%
+ \ifnum\@floatpenalty <\z@
+ \@largefloatcheck
+ \global\dp\@currbox1sp %
+ \@cons\@currlist\@currbox
+ \ifnum\@floatpenalty <-\@Mii
+ \penalty -\@Miv
+ \@tempdima\prevdepth
+ \vbox{}%
+ \prevdepth\@tempdima
+ \penalty\@floatpenalty
+ \else
+ \vadjust{\penalty -\@Miv \vbox{}\penalty\@floatpenalty}\@Esphack
+ \@nameuse{@@_float_start_par:} %restart P safe here??
+ \fi
+ \fi
+ \else
+ \end@float
+ \fi
+}%
\ExplSyntaxOn
% \end{macrocode}
%
@@ -417,6 +439,22 @@
% \begin{macrocode}
\def\hyper@nopatch@caption{}
% \end{macrocode}
+%
+% With hyperref that means that the \cs{refstepcounter} now can affect spacing so we
+% change that to the kernel refstepcounter:
+% \begin{macrocode}
+\let\@kernel@refstepcounter\refstepcounter %as long it is not in the kernel
+\def\caption{%
+ \ifx\@captype\@undefined
+ \@latex@error{\noexpand\caption outside float}\@ehd
+ \expandafter\@gobble
+ \else
+ \@kernel@refstepcounter\@captype
+ \expandafter\@firstofone
+ \fi
+ {\@dblarg{\@caption\@captype}}%
+}
+% \end{macrocode}
% As we will use the structure number in the target, we need to provide a
% theH-representation. (Once the kernel will create
% theH-representation generally this will be provided automatically, as tagpdf uses
@@ -471,7 +509,7 @@
\tag_mc_end:
\tag_struct_end:
\tag_mc_begin:n{}
- #2\par
+ #2
\tag_mc_end:\hfil}%
\fi
\tag_struct_end: %caption
@@ -487,7 +525,7 @@
% \begin{macrocode}
%<*latex-lab>
\ProvidesFile{float-latex-lab-testphase.ltx}
- [2023-04-30 v0.8 code related to the tagging of floats]
+ [\ltlabfloatdate\space v\ltlabfloatversion\space latex-lab wrapper float]
\RequirePackage{latex-lab-testphase-float}
%</latex-lab>
% \end{macrocode}
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-float.pdf b/macros/latex-dev/required/latex-lab/latex-lab-float.pdf
index e1a3ba4039..6cf52778ba 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-float.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-float.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx b/macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx
index 4c8c9b73a6..f62d12bfd9 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx
@@ -17,6 +17,9 @@
%
% for those people who are interested or want to report an issue.
%
+\def\ltlabfootnotedate{2023-09-04}
+\def\ltlabfootnoteversion{0.8c}
+
%<*driver>
\documentclass{l3doc}
\EnableCrossrefs
@@ -38,7 +41,14 @@
% \newcommand\NEW[1]{\marginpar{\mbox{}\hfill\fbox{New: #1}}}
% \providecommand\class[1]{\texttt{#1.cls}}
% \providecommand\pkg[1]{\texttt{#1}}
-% \providecommand\hook[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}
%
% \begin{abstract}
% \emph{to be written}
@@ -56,7 +66,7 @@
% some adjustments are mutually exclusive). This is achieved by
% providing a larger number of hooks (for areas where different
% packages/classes can easily coexist with their adjustments) and a
-% number of configuration points to which only one class or package
+% number of sockets to which only one class or package
% can write to successfully (in case of multiple changes the
% last one wins). The latter are for special functionality, e.g.,
% if footnote text is typeset as a single paragraph, it can't be configured
@@ -67,7 +77,7 @@
% for this to work, all packages altering the footnote setup should
% use the interfaces provided here and not do it through the
% legacy methods (though there is some support for the latter as
-% well, but if will not work in a cases).
+% well, but it will not work in all cases).
%
% \subsection{Configuration methods}
%
@@ -103,11 +113,14 @@
%
%
%
-% \section{Hooks and configuration points}
+% \section{Sockets and hooks}
+%
+% We use sockets for those parts that can be controlled only by one
+% package or by the kernel and hooks for places where it may be
+% possible that several packages or the document class adds code
+% (typically declarations such as font changes, etc.).
%
-% Note: the configuration points do not have an interface mechanism
-% yet and all their names are temporary right now.
-% Also note that configuration points are of interest only to very
+% Note that sockets are of interest only to very
% few specialized packages, mainly \pkg{footmisc}, and packages
% providing similar functionality---the current documentation is
% therefore fairly sketchy.
@@ -124,7 +137,7 @@
% in the same place, etc.
%
%
-% \subsubsection{Configuration points}
+% \subsubsection{Sockets}
%
% None: everything is implemented through a single definition for
% \cs{@footnotemark} that offers a number of hooks that can be used
@@ -132,12 +145,14 @@
% formatting of marks.
%
%
-% \subsubsection{Hooks}
+% \subsubsection{Hooks for formatting the footnote mark in text}
%
% The hooks to customize the marks in the text are the following:
% \begin{description}
% \item[\hook{fnmark/before}]
%
+% \DescribeHook[noprint]{fnmark/before}
+%
% Executed at the very beginning of \cs{footnotemark}. Currently
% there are two packages (\pkg{bibarts} and \pkg{chextras}) that
% prepend material at this point (not necessarily correctly, e.g.,
@@ -147,6 +162,8 @@
%
% \item[\hook{fnmark}]
%
+% \DescribeHook[noprint]{fnmark}
+%
% Executed in horizontal mode and after the current space factor
% has been saved away for reuse. This is where currently code for multiple
% marks does its preparation (as done by \pkg{footmisc} and
@@ -156,12 +173,14 @@
% generated in math --- maybe that means the multiple handling
% should happen later?
%
-% After the hook \cs{nobreak} is executed, so any
+% After the hook a \cs{nobreak} is executed, so any
% ``material'' added in the hook is tied to the following mark
% unless it contains its own permissible penalty.
%
% \item[\hook{fnmark/begin}]
%
+% \DescribeHook[noprint]{fnmark/begin}
+%
% This hook is executed directly in front of the typeset mark.
% This is the place where \pkg{hyperref} would have added
% part of its code, i.e., after the \cs{nobreak} mentioned above.
@@ -170,6 +189,8 @@
%
% \item[\hook{fnmark/end}]
%
+% \DescribeHook[noprint]{fnmark/end}
+%
% This hook is executed directly after the typeset mark. It is
% used by \pkg{memhfixc}, \pkg{scrlttr2}, and
% \pkg{footmisc}. Used, for example, to implement support for
@@ -180,6 +201,8 @@
%
% \item[\hook{fnmark/after}]
%
+% \DescribeHook[noprint]{fnmark/after}
+%
% This hook is executed at the very end of the \cs{footnotemark} command.
%
% It is a reversed hook to pair with \hook{fnmark/before}
@@ -201,78 +224,114 @@
% appears at the bottom of the page (default case), or possibly
% elsewhere, e.g. in the margin.
%
-% \subsubsection{Configuration points}
+% \subsubsection{Sockets}
%
% To cater for different layout configurations there are four
-% configuration points which can be set only by one package or
-% class, if two packages/classes set them they are mutually
-% incompatible.
+% sockets that can be set by a package or
+% class but there should be only one per document setting them, i.e., if two packages/classes set them they are mutually
+% incompatible (or rather the last one wins most likely).
% These are:
% \begin{description}
-% \item[\cs{@footnotetext@cfgpoint} (1 argument)]
+% \item[\socket{fntext/process} (1 argument)]
+%
+% \DescribeSocket[noprint]{fntext/process}
+%
+% This socket receives all material that is to be processed (or
+% stored) including color protection code and what have you.
+% The \plug{default} executes \cs{insert}\cs{footins}.
+%
+% Available plugs are \plug{default}, \plug{side} (side notes), and \plug{mp} (minipage).
+%
+%
+% \item[\socket{fntext/make} (1 argument)]
%
-% This receives all material that is to be processed (or stored)
-% including color protection code and what have you. The default
-% definition is to run \cs{insert}\cs{footins}.
+% \DescribeSocket[noprint]{fntext/make}
%
-% \item[\cs{@footnotetext@cfgpointii} (1 argument)]
+% This socket receives the \meta{text} as given in \cs{footnote}
+% or \cs{footnotetext} in the document and adds formatting
+% instructions to it.
%
-% The default definition runs \cs{@makefntext} which contains
+% The \plug{default} plug runs \cs{@makefntext} which contains
% various hooks for customization. For most scenarios this is
% sufficient. However, when running all footnotes as a single
% paragraph at the bottom, then each footnote needs to be
-% prepared prior to storing in the insert and this configuration
-% point allows running extra code to do that.
+% prepared prior to storing it with \cs{insert} and this socket
+% allows running extra code to do that.
%
-% \item[\cs{@footnotetext@cfgpointiii} (no argument)]
+% Available plugs are \plug{default} and \plug{para}.
%
-% By default this configuration point adds a strut to the
-% footnote material so that consecutive footnotes are properly
-% spaced vertically. In some use cases this is not appropriate
-% (e.g., when running all footnotes as a single paragraph) and so
-% this configuration point can cancel the action or do something
-% else instead.
+% \item[\socket{fntext/begin} (no argument)]
%
-% The configuration point is executed near the start of the
-% argument for the configuration point
-% \cs{@footnotetext@cfgpointii}.
+% \DescribeSocket[noprint]{fntext/begin}
%
-% \item[\cs{@footnotetext@cfgpointiv} (no argument)]
+% The socket is executed near the start of the
+% argument for the \socket{fntext/make} socket.
+% By \plug{default} it adds a strut to the footnote
+% material so that consecutive footnotes are properly spaced
+% vertically. In some use cases this is not appropriate (e.g.,
+% when running all footnotes as a single paragraph) and so with
+% this socket one can cancel the action or do something else
+% instead.
%
-% This configuration point is executed at the very end of the
-% argument passed to \cs{@footnotetext@cfgpointii}.
-% By default it adds a final strut as long as we are still in
-% horizontal mode (i.e., processing the footnote text paragraph.
-% When running several footnotes in one paragraph some additional
-% material (some horizontal glue) needs adding at this point.
+% Available plugs are \plug{default} and \plug{noop}.
%
+%
+% \item[\socket{fntext/end} (no argument)]
+%
+% \DescribeSocket[noprint]{fntext/end}
+%
+% This socket is executed at the very end of the argument passed
+% to socket \socket{fntext/make}. By \plug{default} it
+% adds a final strut as long as we are still in horizontal mode
+% (i.e., processing the footnote text paragraph). When running
+% several footnotes in one paragraph some additional material
+% (some horizontal glue) needs adding at this point which is done
+% with the plug \plug{para}.
+%
+% Available plugs are \plug{default}, \plug{para}, and
+% \plug{noop}.
% \end{description}
-% The configuration point \cs{@footnotetext@cfgpointii} runs
+%
+%
+% All standard plugs for the socket \socket{fntext/make} run
% \cs{@makefntext} and this command contains two further
-% configuration points (and a few hooks):
+% sockets (unless it is overwritten by a legacy class):
% \begin{description}
-% \item[\cs{@makefntext@cfgpoint} (1 argument)]
+% \item[\socket{fntext/mark} (0 arguments)]
+%
+% \DescribeSocket[noprint]{fntext/mark}
%
-% This configuration point receives the material to typeset the
-% footnote mark. By default, all it does is running \cs{indent}
-% to get a paragraph indentation (if one is set up---in most
-% layouts it is 0~points) and then typesets the mark, but in
-% some designs it executes more elaborate code.
+% This socket has no input arguments but uses \cs{@makefnmark} to
+% typeset the mark in front of the footnote text. Its
+% \plug{default} uses code that examines the value of
+% \cs{footnotemargin} and based on its setting typeset the mark
+% in different ways:
+% \begin{itemize}
+% \item positive: typeset the mark in a box of that size
+% \item zero: use \cs{llap} around the mark
+% \item negative: use \cs{llap} but with a box of the given size
+% negated inside
+% \item \texttt{-}\cs{maxdimen}: just use \cs{@makefnmark}
+% \end{itemize}
+% For most cases this would be flexible enough, but if not then a
+% class can define its own plug to specify the placement of the mark.
%
-% If tagging is produced this configuration point is also
-% responsible for surrounding the mark with the appropriate tags
-% marking the mark as an Lbl. It does this using the command
-% \cs{tag@FENoteLbl}.
+% Available plugs are \plug{default} and \plug{noop} (no mark is produced).
%
-% \item[\cs{@makefntext@cfgpointii} (1 argument)]
%
-% This configuration point manages the formatting of the footnote
-% text once the mark has been typeset.
+% \item[\socket{fntext/text} (1 argument)]
%
-% If tagging is produced this configuration point is also
-% responsible for surrounding the mark with the appropriate tags
-% marking the mark as an MC of type FENote. It does this using
-% the command \cs{tag@FENotetext}.
+% \DescribeSocket[noprint]{fntext/text}
+%
+% This socket manages the formatting of the footnote text
+% (presented as an argument) once the mark has been typeset. In
+% all cases we can think of this formatting is better configured
+% via the available hooks described below, so the \plug{default}
+% just grabs the argument and processes it without any other
+% action. It is really only there to allow for some fancy stuff
+% that some design comes up with.
+%
+% Available plugs are \plug{identity} (default) and \plug{noop}.
%
% \end{description}
%
@@ -284,19 +343,23 @@
%
%
%
-% \subsubsection{Hooks}
+% \subsubsection{Hooks for formatting the footnote text}
%
% \begin{description}
% \item[\hook{fntext/before}]
%
+% \DescribeHook[noprint]{fntext/before}
+%
% Executed at the very beginning of \cs{footnotetext}. Currently
-% there is on package (\pkg{linguex}) that
+% there is one package (\pkg{linguex}) that
% prepends material at this point.
%
% This hook is paired with hook \hook{fnmark/after}.
%
% \item[\hook{fntext}]
%
+% \DescribeHook[noprint]{fntext}
+%
% Executed at the beginning of the material passed to the first
% configuration point. Typically used to set any baseline
% stretch for the footnote text, e.g., by \pkg{setspace},
@@ -308,32 +371,42 @@
%
% \item[\hook{fntext/para}]
%
-% After the font is set default paragraph parameters are set up
+% \DescribeHook[noprint]{fntext/para}
+%
+% After the font is set (after the previous hook), some default
+% paragraph parameters
+% are set up
% including \cs{interlinepenalty}, \cs{hsize}, \cs{parindent} and
% a number of others, as some of them depend on the font
-% size. Then the \hook{fntext/para} is run. If one wants to
+% size. Then the \hook{fntext/para} is run which can overwrite
+% the default. If one wants to
% change the font size, it is probably necessary to reset these
% other parameters too, e.g., \cs{parindent}, which can be done
% here.
%
-% The configuration point \cs{@footnotetext@cfgpointii} normally
+% Note: the socket \socket{fntext/make} normally
% runs the command \cs{@makefntext} or some code that eventually
-% runs this command, and this then produces the footnote mark (in
-% front of the footnote text) and the formatted footnote text. In
+% runs this command, and this then produces the footnote mark in
+% front of the formatted footnote text. In
% front of both the mark and the footnote text some classes have
% placed paragraph parameter adjustments in their redefinition of
% \cs{@makefntext}. However, there is no need to place it there
% it could equally well go into the \hook{fntext/para} hook. We
-% therefore do not provide another hook at this point.
+% therefore do not provide another hook at this other point.
%
% \item[\hook{fntext/begin} \& \hook{fntext/end}]
%
+% \DescribeHook[noprint]{fntext/begin}
+% \DescribeHook[noprint]{fntext/end}
+%
% The footnote text itself is surrounded by the hooks
% \hook{fntext/begin} and \hook{fntext/end}. The two hooks are
% not paired as they are typically used independently.
%
% \item[\hook{fntext/after}]
%
+% \DescribeHook[noprint]{fntext/after}
+%
% At the very end of \cs{footnotetext} we execute the hook
% \hook{fntext/after} which is a reversed hook paired with
% \hook{fntext/before}. Some packages, e.g., \pkg{linguex}, have
@@ -384,6 +457,8 @@
%
% \section{Tagging and hyperlinking support}
%
+% \fmi{this section needs work (and probably csname changes)}
+%
% Footnotes consist of a \emph{footnotemark} (short: mark) that is typically placed in the text
% as a superscript number like this\footnotemark[1], and a \emph{footnotetext}
% (short: note) that is placed at the bottom of the page.
@@ -407,6 +482,38 @@
%
% \subsection{Technical details for the tagging}
%
+% The following sockets are set up for kernel use, when doing tagging:
+% \begin{description}
+% \item[\socket{tagsupport/fnmark} (1 argument)]
+%
+% \DescribeSocket[noprint]{tagsupport/fnmark}
+%
+% \fmi{describe and decide on names}
+%
+%
+% \item[\socket{tagsupport/fntext/begin} (no argument)]
+%
+% \DescribeSocket[noprint]{tagsupport/fntext/begin}
+%
+%
+% \item[\socket{tagsupport/fntext/end} (no argument)]
+%
+% \DescribeSocket[noprint]{tagsupport/fntext/end}
+%
+%
+% \item[\socket{tagsupport/fntext/mark} (1 argument)]
+%
+% \DescribeSocket[noprint]{tagsupport/fntext/mark}
+%
+%
+% \item[\socket{tagsupport/fntext/text} (1 argument)]
+%
+% \DescribeSocket[noprint]{tagsupport/fntext/text}
+%
+%
+% \end{description}
+%
+%
% The \emph{footnotemark} should create a \texttt{/Lbl} structure\footnote{to make it easier
% to identify the role we use \texttt{/footnotemark} which we rolemap to \texttt{/Lbl}} that should contain a \texttt{/Ref} entry pointing
% to the structure of the \emph{footnotetext}.
@@ -475,36 +582,36 @@
% as long as nothing unusual is done to \cs{@thefnmark}.
% It also works if a document uses more than one footnote series as long as they have distinct numbering
% systems, but in case a distinction is needed it is possible to define
-% a new data structure and to switch locally to use this
-% container. The following three commands are used for this.
+% a new class with its own data structure and to switch locally to use this
+% class. The following three commands are used for this.
%
-% The default property uses the name \texttt{default}
+% The default class uses the name \texttt{default}
%
-% \begin{function}{\fnote_new:nn}
+% \begin{function}{\fnote_class_new:nn}
% \begin{syntax}
-% \cs{fnote_new:nn}\Arg{name}\Arg{key/value option}
+% \cs{fnote_class_new:nn}\Arg{name}\Arg{key/value option}
% \end{syntax}
-%
-% This commands set up the needed data structure. Currently this only
-% consists of a property which is used to store and manage the mark values.
-% There are no options yet.
+% This declaration sets up the needed data structure. Currently this only
+% consists of a property list which is used to store and manage the mark values.
+% There are no options yet.
% \end{function}
%
% \begin{function}{\fnote_mark_gput:nn,\fnote_mark_gput:no,\fnote_mark_gput:oo}
% \begin{syntax}
-% \cs{fnote_mark_gput:nn}\Arg{mark}\Arg{footnote type name}
+% \cs{fnote_mark_gput:nn}\Arg{mark}\Arg{class name}
% \end{syntax}
-% This command stores the current structure number as key and the \meta{mark} as
-% value in the property associated with the \meta{footnote type name}
+% This command stores the current structure number as key and the \meta{mark} as
+% value in the property list associated with the \meta{class name}.
% \end{function}
%
-% \begin{function}{\fnote_mark_gpop:nnN}
+% \begin{function}{\fnote_mark_gpop_all:nnN}
% \begin{syntax}
-% \cs{fnote_mark_gpop:nnN}\Arg{mark}\Arg{footnote type name}\meta{sequence}
+% \cs{fnote_mark_gpop_all:nnN}\Arg{mark}\Arg{class name}\meta{sequence}
% \end{syntax}
-% This command stores the keys/structure numbers whose value are \meta{mark} in the
-% property associated with \meta{footnote type name} in the \meta{sequence}
-% and then remove them from the property. The content of the sequence can then be
+% This command stores all the keys/structure numbers whose value in the
+% property list for \meta{class name} are equal to \meta{mark}
+% into the sequence \meta{sequence} and then removes them from the property list.
+% The content of the sequence can then be
% used to create link targets and references.
% \end{function}
%
@@ -516,7 +623,7 @@
% above, as it contains a reference command it can't be used to match a note, also \cs{footref} can
% be used after the note has already been set. \cs{footref} disables therefore the automatic detection.
%
-% Instead the \cs{label} command is (currently with the help of a hook from the \texttt{nameref} package)
+% Instead the \cs{label} command is
% extended in the \cs{footnotetext} command to also store the structure number and \cs{footref} retrieves this
% number to setup the reference and the link.
%
@@ -560,28 +667,33 @@
% by the mark commands) and one for the structure number of the footnotetest itself
% (used as target by \cs{footref}s commands).
%
-% \subsection{Implementation details}
+% \subsection{Implementation details regarding tagging}
%
% \subsection{Handling the mark}
%
-% The mark in the text is handled by redefining the kernel configuration point
-% \cs{@kernel@process@makefnmark} to \cs{tag@FEMark}.
-% It takes one argument, \cs{@makefnmark}, the command which formats the
-% mark, and surrounds it by link and tagging commands.
-% At the point where \cs{@kernel@process@makefnmark} is issued \cs{@thefnmark} has already been
-% defined and can be used to setup the reference detections.
+% The mark in the text is handled by assigning an appropriate
+% plug to the socket \socket{tagsupport/fnmark}.
+% It takes one argument, \cs{@makefnmark}, the
+% command which formats the mark, and surrounds it by link and tagging
+% commands. At the point where the socket is
+% executed, \cs{@thefnmark} has already been defined and can be used to
+% setup the reference detections.
%
%
% \subsection{Handling the footnotetext}
%
-% The main part is done by redefining \cs{@kernel@process@footnotetext}. This configuration point takes two arguments, \cs{@footnotetext@cfgpoint} (by default \verb+\insert\footins+) and as second argument lots of code related to typesetting the notemark and the footnote text with the actual content of the footnote text somewhere in the middle.
+% The main part is done by assigning a different plug to socket \socket{tagsupport/fntext/begin}
+% and \socket{tagsupport/fntext/end}
+% surrounding the footnote text.
+% These sockets are used to start and end the structure and
+% attempt to detect to which mark the note is related.
%
-% The redefinition of \cs{@kernel@process@footnotetext} surrounds the content with the structure command
-% and tries to detect to which mark the note is related.
-%
-% The actual typesetting of the note text is done
-% by \cs{@makefntext}/\cs{fnote_makefntext:n}. In the new implementation this contains two configuration
-% points, \cs{@makefntext@cfgpoint} and \cs{@makefntext@cfgpointii}. These are redefined to add the tagging commands around note mark and note text.
+% The actual typesetting of the note text is done by
+% \cs{fnote_makefntext:n} (or its \LaTeXe{} name \cs{@makefntext}). In
+% the new implementation this contains two further kernel sockets for tagging:
+% \socket{tagsupport/fntext/mark} and
+% \socket{tagsupport/fntext/text}. They get plugs assigned that add the
+% tagging commands around note mark and note text.
%
% \subsection{Footnotes in minipages}
%
@@ -603,13 +715,6 @@
%
% \begin{itemize}
%
-% \item tagging destroys footnotes directly following the text with pdflatex.
-%
-% \item there is a dependency on nameref as it provides the hook in \cs{label}
-% used by the \cs{footref} code.
-%
-% \item there is a dependency to etoolbox as we patch \cs{\@iiiminipage}
-%
% \item Special formatting of footnote marks in the text, e.g. if ranges or commas are
% used require special care as they should normally mark up such text as artifacts and
% perhaps have to insert empty structures to represent an invisible mark. This must be coordinated
@@ -617,9 +722,6 @@
%
% \item manyfoot doesn't work correctly and must be analyzed.
%
-% \item Check if additional kernel configuration points are needed/possible
-% to avoid the redefinitions of \cs{@makefntext@cfgpoint} and \cs{@makefntext@cfgpointii}.
-%
% \item \pkg{memoir} is not supported at all and errors when the code tries to patch
% \cs{@makefntext}.
% \end{itemize}
@@ -644,7 +746,8 @@
% \subsection{File declaration}
% \begin{macrocode}
\ProvidesFile{latex-lab-footnotes.ltx}
- [2023-02-04 v0.7 changes to the footnote interfaces]
+ [\ltlabfootnotedate\space v\ltlabfootnoteversion\space
+ changes to the footnote interfaces]
% \end{macrocode}
%
% \subsection{code not fully handled yet}
@@ -796,7 +899,6 @@
% \subsection{Variants}
%
% \begin{macrocode}
-\cs_generate_variant:Nn \ref_label:nn { Vn }
\cs_generate_variant:Nn \ref_value:nn { Vn }
\cs_generate_variant:Nn \prop_gput:Nnn {cxn}
\cs_generate_variant:Nn \hook_gput_code:nnn{nne}
@@ -852,14 +954,22 @@
%
% \subsection{Hooks}
%
-% Hooks in the footnotemark command.
+% \begin{hookdecl}{fnmark/before,fnmark/after,
+% fnmark,
+% fnmark/begin,fnmark/end}
+% Hooks in the footnotemark command.
% \begin{macrocode}
\NewMirroredHookPair{fnmark/before}{fnmark/after}
\NewHook{fnmark}
\NewHook{fnmark/begin}
\NewHook{fnmark/end}
% \end{macrocode}
-% Hooks in the footnotetext command
+% \end{hookdecl}
+%
+% \begin{hookdecl}{fntext/before,fntext/after,
+% fntext,
+% fntext/begin,fntext/end,fntext/para}
+% Hooks in the footnotetext command:
% \begin{macrocode}
\NewMirroredHookPair{fntext/before}{fntext/after}
\NewHook{fntext}
@@ -867,6 +977,7 @@
\NewHook{fntext/begin}
\NewHook{fntext/end}
% \end{macrocode}
+% \end{hookdecl}
%
% \subsection{Debugging code}
% the debugging code is just temporary
@@ -882,11 +993,11 @@
{
\bool_if:NT \g_fnote_debug_bool
{
- \LogHook{fnmark/before}
- \LogHook{fnmark}
- \LogHook{fnmark/begin}
- \LogHook{fnmark/end}
- \LogHook{fnmark/after}
+ \hook_log:n {fnmark/before}
+ \hook_log:n {fnmark}
+ \hook_log:n {fnmark/begin}
+ \hook_log:n {fnmark/end}
+ \hook_log:n {fnmark/after}
\cs_gset_eq:NN \@@_debug_footnotemark: \prg_do_nothing:
}
}
@@ -897,18 +1008,32 @@
{
\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}
+ \socket_log:n {fntext/process}
+ \socket_log:n {fntext/make}
+ \socket_log:n {fntext/begin}
+ \socket_log:n {fntext/end}
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \socket_log:n {fntext/mark}
+ \socket_log:n {fntext/text}
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \socket_log:n {tagsupport/fnmark}
+ \socket_log:n {tagsupport/fntext/begin}
+ \socket_log:n {tagsupport/fntext/end}
+ \socket_log:n {tagsupport/fntext/mark}
+ \socket_log:n {tagsupport/fntext/text}
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \hook_log:n {fntext/before}
+ \hook_log:n {fntext}
+ \hook_log:n {fntext/para}
+ \hook_log:n {fntext/begin}
+ \hook_log:n {fntext/end}
+ \hook_log:n {fntext/after}
% \end{macrocode}
% Show the info only once (if at all).
% \begin{macrocode}
@@ -926,7 +1051,7 @@
%-------
% bibarts
% chextras --- actually in the wrong place does an \unskip
- \UseHook{fnmark/before}
+ \hook_use:n {fnmark/before}
%-------
\leavevmode
\ifhmode
@@ -936,21 +1061,24 @@
% (a bit less efficient)
% memhfixc.sty
% footmisc.sty
- \UseHook{fnmark}
+ \hook_use:n {fnmark}
%-------
\nobreak
\fi
%-------
% hyperref.sty
- \UseHook{fnmark/begin}
+ \hook_use:n {fnmark/begin}
%-------
- \@kernel@process@makefnmark
- \@makefnmark
+% \end{macrocode}
+% The kernel socket for tagging. It picks up \cs{@makefnmark} as its
+% argument and if tagging is not active it contains the \plug{identity} plug.
+% \begin{macrocode}
+ \socket_use:nn {tagsupport/fnmark} \@makefnmark
%-------
% \end{macrocode}
% If a footnote mark is placed by its own then it should finish by
-% executing \hook{fnmark/end}, resetting the space factor, and
-% finishing with \hook{fnmark/after}. However, in a complete
+% executing the hook \hook{fnmark/end}, resetting the space factor, and
+% finishing with the hook \hook{fnmark/after}. However, in a complete
% footnote these actions have to happen only after we have handled
% the footnote text (e.g., by placing it into an \cs{insert}). In
% such a situation \cs{_@@_footmark_finish:} below does nothing
@@ -961,9 +1089,10 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_finish:,\@@_footnotemark_finish:}
+% \begin{macro}{\@@_footnotemark_default_finish:,\@@_footnotemark_finish:}
+% The default definition for \cs{@@_footnotemark_finish:} is called \cs{@@_footnotemark_default_finish:}
% \begin{macrocode}
-\cs_new_protected:Npn \@@_finish: {
+\cs_new_protected:Npn \@@_footnotemark_default_finish: {
% hyperref.sty
% memhfixc.sty --- could move fnmark/after
% scrlttr2.cls --- could vanish if footmisc uses a hook
@@ -978,20 +1107,24 @@
\UseHook{fnmark/after}
%-------
}
-
-\cs_new_eq:NN \@@_footnotemark_finish: \@@_finish:
% \end{macrocode}
-% \end{macro}
%
-% \begin{macro}{\@kernel@process@makefnmark}
-% Not a public config point but the kernel hook to add tagging
% \begin{macrocode}
-\def \@kernel@process@makefnmark { }
+\cs_new_eq:NN \@@_footnotemark_finish: \@@_footnotemark_default_finish:
% \end{macrocode}
% \end{macro}
%
+% \begin{socketdecl}{tagsupport/fnmark}
+% Not a public socket but reserved for tagging. By
+% default it contains \plug{identity} and is reassigned if tagging is active.
+% \begin{macrocode}
+\NewSocket{tagsupport/fnmark}{1}
+% \end{macrocode}
+% \end{socketdecl}
+%
% \begin{macro}{\@footnotemark}
-% At last provide the name \LaTeXe{} is used to.
+% Here we provide the traditional \LaTeXe{} name in case it is directly used
+% in some legacy class.
% \begin{macrocode}
\cs_set_eq:NN \@footnotemark \fnote_footnotemark:
% \end{macrocode}
@@ -1007,16 +1140,23 @@
\@@_debug_footnotetext:
%-------
% ./linguex/linguex.sty
- \UseHook{fntext/before}
+ \hook_use:n {fntext/before}
%-------
- \@kernel@process@footnotetext
- \@footnotetext@cfgpoint { % config point
+% \end{macrocode}
+% Execute a kernel socket for tagging.
+% \begin{macrocode}
+ \socket_use:n {tagsupport/fntext/begin}
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \socket_use:nn {fntext/process}
+ {
%-------
% resetting baselinestretch ... (could be done further down)
% ./uafthesis/uafthesis.cls
% ./setspace/setspace.sty
% ./footmisc/footmisc.sty (normal)
- \UseHook{fntext}
+ \hook_use:n {fntext}
%-------
\reset@font
\footnotesize
@@ -1046,84 +1186,144 @@
% and \cs{@currentlabel} is that is necessary.
%
% ./resphilosophica/resphilosophica.cls
- \UseHook{fntext/para}
+ \hook_use:n {fntext/para}
%-------
\color@begingroup
%-------
-% fnpara wants to replace \@makefntext{...} and para and side option of footmisc etc too ...
-% so we make this a config point
+% fnpara wants to replace \@makefntext{...} and para and side
+% option of footmisc etc too ...
+% so we make this a socket, because only one action can be active:
%-------
- \@footnotetext@cfgpointii % config point
+ \socket_use:nn {fntext/make}
{
%-------
% ./resphilosophica/resphilosophica.cls
%-------
- \@footnotetext@cfgpointiii % config point
+ \socket_use:n {fntext/begin}%
%-------
% bibarts
% fnbreak.sty
- \UseHook{fntext/begin}
+ \hook_use:n {fntext/begin}
%-------
\ignorespaces
#1
%-------
% bibarts
% fnbreak.sty
- \UseHook{fntext/end}
+ \hook_use:n {fntext/end}
%-------
- \@footnotetext@cfgpointiv % config point
+% \end{macrocode}
+% The socket code (by default adding a strut) has to come
+% \emph{after} everything added into the hook above.
+% \begin{macrocode}
+ \socket_use:n {fntext/end}
}
\par
\color@endgroup
}
%-------
+% \end{macrocode}
+% The corresponding kernel hook that ends the tagging structure if
+% tagging is active.
+% \begin{macrocode}
+ \socket_use:n{tagsupport/fntext/end}
+%-------
% ./linguex/linguex.sty
- \UseHook{fntext/after}
+ \hook_use:n {fntext/after}
%-------
}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@footnotetext@cfgpoint}
-% default for config point (1 arg)
+% \begin{socketdecl}{fntext/process}
+%
% \begin{macrocode}
-\cs_new_protected:Npn \@footnotetext@cfgpoint { \insert\footins }
+\NewSocket {fntext/process}{1}
+\NewSocketPlug{fntext/process}{default}{ \insert\footins {#1} }
+\NewSocketPlug{fntext/process}{side} { \marginpar {#1} }
% \end{macrocode}
-% \end{macro}
+%
+% \begin{macrocode}
+\AssignSocketPlug{fntext/process}{default}
+% \end{macrocode}
+% \end{socketdecl}
%
%
-% \begin{macro}{\@footnotetext@cfgpointii}
-% default for config point (1 arg)
+%
+% \begin{socketdecl}{fntext/make}
+% This socket receives the \meta{text} from the \cs{footnote} or
+% \cs{footnotetext} and formats it.
% \begin{macrocode}
-\cs_new_protected:Npn \@footnotetext@cfgpointii { \@makefntext }
+\NewSocket {fntext/make}{1}
+\NewSocketPlug{fntext/make}{default}{ \@makefntext {#1} }
+% \end{macrocode}
+% When running several footnotes together as a paragraph some
+% additional work is necessary to unbox the individual footnotes
+% recursively (see \TeX{}book algorithm in appendix~D).
+% \begin{macrocode}
+\NewSocketPlug{fntext/make}{para}
+{
+ \setbox\FN@tempboxa\hbox{\@makefntext{#1}}%
+ \dp\FN@tempboxa\z@
+ \ht\FN@tempboxa
+ \dimexpr\wd\FN@tempboxa *%
+ \footnotebaselineskip /\columnwidth\relax
+ \box\FN@tempboxa
+}
% \end{macrocode}
-% \end{macro}
%
-% \begin{macro}{\@footnotetext@cfgpointiii}
-% default for config point (0 args)
% \begin{macrocode}
-\cs_new_protected:Npn \@footnotetext@cfgpointiii { \rule\z@\footnotesep }
+\AssignSocketPlug{fntext/make}{default}
% \end{macrocode}
-% \end{macro}
+% \end{socketdecl}
%
-% \begin{macro}{\@footnotetext@cfgpointiv}
-% default for config point (0 args)
+% \begin{socketdecl}{fntext/begin}
+% By default adds a strut at the start of the footnote text.
% \begin{macrocode}
-\cs_new_protected:Npn \@footnotetext@cfgpointiv { \@finalstrut\strutbox }
+\NewSocket {fntext/begin}{0}
+\NewSocketPlug{fntext/begin}{default}{ \rule\z@\footnotesep }
% \end{macrocode}
-% \end{macro}
%
-% \begin{macro}{\@kernel@process@footnotetext}
-% kernel hook for tagging (2 args)
% \begin{macrocode}
-\cs_new_protected:Npn \@kernel@process@footnotetext {}
+\AssignSocketPlug{fntext/begin}{default}
% \end{macrocode}
-% \end{macro}
+% \end{socketdecl}
+%
+% \begin{socketdecl}{fntext/end}
+% By default adds a strut at the end of the footnote text unless we
+% are no longer in hmode.
+% \begin{macrocode}
+\NewSocket {fntext/end}{0}
+\NewSocketPlug{fntext/end}{default}{ \@finalstrut\strutbox }
+% \end{macrocode}
+% When running several footnotes together as a paragraph some
+% additional glue has to be added between them.
+% \begin{macrocode}
+\NewSocketPlug{fntext/end}{para}
+ {%
+ \strut
+ \penalty-10\relax
+ \hskip\footglue
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\AssignSocketPlug{fntext/end}{default}
+% \end{macrocode}
+% \end{socketdecl}
+%
+% \begin{socketdecl}{tagsupport/fntext/begin,tagsupport/fntext/end}
+% Kernel sockets for tagging.
+% \begin{macrocode}
+\NewSocket{tagsupport/fntext/begin}{0}
+\NewSocket{tagsupport/fntext/end}{0}
+% \end{macrocode}
+% \end{socketdecl}
%
% Provide the name \LaTeXe{} is used to and do this unconditionally
-% (no patching of class code if any). This means that if a class provides it own
-% definition that gets lost and if necessary needs to be handled
-% with firstaid (or updating of the class).
+% (no patching of class code if any). This means that if a class
+% provides it own definition that gets lost and if necessary needs to
+% be handled with firstaid (or updating of the class).
% \begin{macrocode}
\AddToHook{begindocument}
{
@@ -1131,6 +1331,9 @@
}
% \end{macrocode}
%
+%
+%
+%
% \subsection{The new \cs{@makefntext} command}
%
% \cs{footnotemargin} is the logic implemented by footmisc. Perhaps we
@@ -1147,57 +1350,85 @@
\fi
}
% \end{macrocode}
-
+%
+%
+%
+%
% \begin{macro}{\fnote_makefntext:n}
% \begin{macrocode}
\cs_new_protected:Npn \fnote_makefntext:n #1 {
% \end{macrocode}
% Some classes in their redefinition for \cs{@makefntext} have
-% places some paragraph parameters at this point, but those can
+% placed some paragraph parameters at this point, but those can
% equally well go into the hook \hook{fntext/para}. We therefore do
% not provide a further hook at this point.
% \begin{macrocode}
- \@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 }
+ \noindent
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \socket_use:nn {tagsupport/fntext/mark} { \socket_use:n {fntext/mark} }
+ \socket_use:nn {tagsupport/fntext/text} { \socket_use:nn {fntext/text}{#1} }
}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@makefntext@cfgpoint}
-% default for config point (1 arg)
+% \begin{socketdecl}{fntext/mark}
+% A socket to typeset the mark at the start of a footnote.
+% \begin{macrocode}
+\NewSocket {fntext/mark}{0}
+% \end{macrocode}
+% The \plug{default} plug implements the logic introduced with the
+% \pkg{footmisc} package.
+% \begin{macrocode}
+\NewSocketPlug{fntext/mark}{default}{
+ \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
+}
+% \end{macrocode}
+%
% \begin{macrocode}
-\cs_new_protected:Npn \@makefntext@cfgpoint { \noindent }
+\AssignSocketPlug{fntext/mark}{default}
% \end{macrocode}
-% \end{macro}
+% \end{socketdecl}
%
-% \begin{macro}{\@makefntext@cfgpointii}
-% default for config point (1 arg)
+% \begin{socketdecl}{fntext/text}
+% By default this socket does nothing special and simply processes
+% its argument as provided.
% \begin{macrocode}
-\cs_new_protected:Npn \@makefntext@cfgpointii #1 { #1 }
+\NewSocket {fntext/text}{1}
% \end{macrocode}
-% \end{macro}
+% \end{socketdecl}
+%
+%
+%
+% \begin{socketdecl}{tagsupport/fntext/mark,tagsupport/fntext/text}
+% Not a public socket but reserved for tagging. By
+% default it contains \plug{identity} and is reassigned if tagging is active.
+% \begin{macrocode}
+\NewSocket{tagsupport/fntext/mark}{1}
+\NewSocket{tagsupport/fntext/text}{1}
+% \end{macrocode}
+% \end{socketdecl}
+%
+%
%
% \subsubsection{Making documents use the new \cs{@makefntext}}
%
% If the definition for \cs{@makefntext} is that of the standard
% classes then replace it with \cs{fnote_makefntext:n}, otherwise
-% try to patch the definition.
+% try to patch the definition used in the class.
%
% Here is the definition the way it is in
% \texttt{classes.dtx}. Notice that (for saving space) there is no
@@ -1217,22 +1448,24 @@
%
% Here is the messy code for patching. Note that this is only there
% to help classes along that aren't updated yet so it does some
-% minimal patching to hopefully add configuration points in the
-% right place.
+% minimal patching to hopefully add kernel configuration hooks in the
+% right place while otherwise leaving the legacy code alone. An
+% updated class would not redefine \cs{@makefntext} but simply add
+% appropriate code to the provided hooks.
%
% What it does is roughly the
-% following: It look for a definition of \cs{@makefntext} of the form
+% following: It looks for a definition of \cs{@makefntext} of the form
%\begin{verbatim}
% {AAA \hbox BBB { CCC } DDD #1 EEE }
%\end{verbatim}
% where ``BBB'' is something like \texttt{to 1em} or similar. It then
% replaces that with
%\begin{verbatim}
-% {AAA \@makefntext@cfgpoint{\hbox BBB { CCC }} DDD
-% \@makefntext@cfgpointii{#1} EEE }
+% {AAA \UseSocket{tagsupport/fntext/mark}{\hbox BBB { CCC }} DDD
+% \UseSocket{tagsupport/fntext/text}{#1} EEE }
%\end{verbatim}
% The patching is not very careful, i.e., it assumes there is only
-% one \verb=#1= in the replacement text and that a \cs{hbox} found
+% one \verb=#1= in the replacement text and that the first \cs{hbox} found
% is the right one to patch. But that is enough to cater for all
% definitions of \cs{@makefntext} out there in the TL distribution.
%
@@ -1247,7 +1480,7 @@
\cs_new_protected:Npn \@@_patch:
{
- \tl_set:No \l_@@_patch_tl { \@makefntext { \@makefntext@cfgpointii{##1} } }
+ \tl_set:No \l_@@_patch_tl { \@makefntext { \UseSocket{tagsupport/fntext/text}{##1} } }
\tl_if_in:NnTF \l_@@_patch_tl { \hbox }
{ \cs_set_eq:NN \@@_tmp:w \@@_patch_hbox:w }
{
@@ -1268,7 +1501,7 @@
% \end{macrocode}
%
% If \cs{@makefntext} contains \cs{hbox} then grab ``AAA'' as
-% \verb=#1= and ``BBB'' (up to the open \verb={=) and return it as
+% \verb=#1= and ``BBB'' (up to the open \texttt{\{}) and return it as
%\begin{verbatim}
% AAA \@makefntext@processX { \hbox BBB }
%\end{verbatim}
@@ -1291,12 +1524,13 @@
% not a patch person, so this is the simple way out for now:
%
% \begin{macrocode}
-\cs_new:Npn \@makefntext@processX #1#2{\@makefntext@cfgpoint{#1{#2}}}
+\cs_new:Npn \@makefntext@processX #1#2{\UseSocket{tagsupport/fntext/mark}{#1{#2}}}
% \end{macrocode}
%
% At \verb=\begin{document}= check if the current definition is
% that of the standard classes and if so replace it by
% \cs{fnote_makefntext:n} otherwise try and patch the definition
+% made by some class or package
% using the approach above.
% \begin{macrocode}
@@ -1340,7 +1574,7 @@
\fnote_step_fnmark:nn {#1} \@mpfn
\cs_set_eq:NN \@@_footnotemark_finish: \prg_do_nothing:
\@footnotemark
- \cs_set_eq:NN \@@_footnotemark_finish: \@@_finish:
+ \cs_set_eq:NN \@@_footnotemark_finish: \@@_footnotemark_default_finish:
\@footnotetext {#2}
\@@_footnotemark_finish:
}
@@ -1362,7 +1596,7 @@
% \cs{footref} used the starred \cs{ref} in \cs{@thefnmark}
% as the linking is handled by the tagging code inside
% the \cs{@footnotemark}.
-% \cs{footref} should not try to link to its related related
+% \cs{footref} should not try to link to its related
% note automatically but should instead use the label.
% This is passed to \cs{@footnotemark} through
% \cs{l__fnote_currentlabel_tl}.
@@ -1388,9 +1622,8 @@
% Tagging of footnotes in minipages require a change in the minipage commands
% We define at first a local configuration command for minipage footnotes.
%
-% TODO remove the dependency to etoolbox, and need for the patch.
% \begin{macrocode}
-\cs_new_protected:Npn \@mpfootnotetext@cfgpoint #1
+\NewSocketPlug{fntext/process}{mp}
{
\global\setbox\@mpfootins\vbox{%
\unvbox\@mpfootins
@@ -1398,16 +1631,6 @@
}
}
% \end{macrocode}
-% Then we patch \cs{@iiiminipage}
-% \begin{macrocode}
-\RequirePackage{etoolbox}
-\ExplSyntaxOff
-\patchcmd\@iiiminipage
- {\let\@footnotetext\@mpfootnotetext}
- {\let\@footnotetext@cfgpoint\@mpfootnotetext@cfgpoint}
- {}{\ERROR}
-\ExplSyntaxOn
-% \end{macrocode}
%
% \subsubsection{\pkg{memoir}}
% The \pkg{memoir} class redefines various internal commands to inject its
@@ -1484,35 +1707,28 @@
% For \cs{footref} and (perhaps later for labeled footnotes)
% we must extend the label system.
% Beside the normal values we also need the structure number of the note.
-% We use the \pkg{nameref} hook until latex provides a hook for its label.
+% We use the inbuild label hook
% At first we define a suitable attribute, it uses as value the structure
% number of the note as stored in \cs{l__fnote_currentstruct_tl}
% \begin{macrocode}
\ref_attribute_gset:nnnn {fnote/struct}{1}{now}{\l_@@_currentstruct_tl}
% \end{macrocode}
%
-% We add a hook to the \pkg{nameref} hook. By default it does nothing
-% \begin{macro}{\@@_label_hook:}
+% We add a hook to the label hook. By default it does nothing
+% \begin{macro}{\@@_label_hook:n}
% \begin{macrocode}
-\cs_new_protected:Npn \@@_label_hook: {}
-\AddToHook{begindocument/before}
- {
- \RequirePackage{nameref}
- \g@addto@macro\label@hook
- {
- \@@_label_hook:
- }
- }
+\cs_new_protected:Npn \@@_label_hook:n #1 {}
+\AddToHookWithArguments{label}{ \@@_label_hook:n{#1}}
% \end{macrocode}
% \end{macro}
% Inside a footnotetext we change the hook to store the structure number too.
-% nameref provides the name of label in \cs{label@name}.
+% The name of label is provided as argument in the label hook.
% \begin{macrocode}
\AddToHook{fntext/begin}
{
- \cs_set_protected:Npn \@@_label_hook:
+ \cs_set_protected:Npn \@@_label_hook:n #1
{
- \ref_label:Vn \label@name {fnote/struct}
+ \ref_label:nn {#1} {fnote/struct}
}
}
% \end{macrocode}
@@ -1526,7 +1742,7 @@
% tabular notes, other footnote series) to make use of this.
%
%
-% \begin{macro}{\fnote_new:nn}
+% \begin{macro}{\fnote_class_new:nn}
% This sets up a new footnote type, the first argument
% is the name, the second is meant for options. Currently
% it does nothing at all.
@@ -1534,19 +1750,19 @@
% command as its own type!
%
% \begin{macrocode}
-\cs_new_protected:Npn \fnote_new:nn #1 #2 % #1 name, #2 options
+\cs_new_protected:Npn \fnote_class_new:nn #1 #2 % #1 name, #2 options
{
\prop_new:c { g_@@_currentmarks_ #1 _prop }
}
-\fnote_new:nn {default}{}
+\fnote_class_new:nn {default}{}
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\fnote_mark_gput:nn}
-% This commands takes as argument the representation of the mark
-% (e.g. \cs{@thefnmark} and the type (typically default should work)
+% This commands takes as argument the representation of the mark,
+% e.g., \cs{@thefnmark} and the type (typically default should work).
% \begin{macrocode}
\cs_new_protected:Npn \fnote_mark_gput:nn #1 #2 % #1 the representation of the mark, #2 type
{
@@ -1559,13 +1775,13 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\fnote_mark_gpop:nnN}
+% \begin{macro}{\fnote_mark_gpop_all:nnN}
% This commands takes as argument the representation of the mark
-% (e.g. the content of\cs{@thefnmark}), the series (typically default should work)
+% (e.g. the content of\cs{@thefnmark}), the class (typically |default| should work)
% and a sequence into which every structure number in the property
-% is stored that has the same value as the mark
+% is stored that has the same value as the mark. The sequence is cleared first.
% \begin{macrocode}
-\cs_new_protected:Npn \fnote_mark_gpop:nnN #1 #2 #3
+\cs_new_protected:Npn \fnote_mark_gpop_all:nnN #1 #2 #3
{
\seq_clear:N #3
\prop_set_eq:Nc \l_@@_tmpa_prop { g_@@_currentmarks_ #2 _prop }
@@ -1584,20 +1800,28 @@
}
}
}
-\cs_generate_variant:Nn\fnote_mark_gpop:nnN {ooN}
+\cs_generate_variant:Nn\fnote_mark_gpop_all:nnN {ooN}
% \end{macrocode}
% \end{macro}
-
-
+%
+%
+%
+%
% \subsubsection{Enabling tagging and links for the mark command}
-% To handle the mark in the text, we define a special command
-% which will surround \cs{@makefntext}.
-% At this time \cs{@thefnmark} is already set.
+%
+%
+% \begin{plugdecl}{FEMark}
+%
+% To handle the mark in the text, we define a special plug for
+% the socket \socket{tagsupport/fnmark} that receives
+% \cs{@makefntext} as its argument. At this time \cs{@thefnmark}
+% is already set.
+%
% \begin{macrocode}
-\cs_new_protected:Npn \tag@FEMark #1 %#1 content
+\NewSocketPlug{tagsupport/fnmark}{FEMark}
{
% \end{macrocode}
-% end an open mc and start the structure.
+% End an open mc and start the structure.
% \begin{macrocode}
\tag_mc_end_push:
\tag_struct_begin:n { tag=footnotemark }
@@ -1658,11 +1882,15 @@
\tag_mc_begin_pop:n{}
}
% \end{macrocode}
-% At last set the kernel command to this one
+% At last assign the plug:
% \begin{macrocode}
-\cs_set_eq:NN \@kernel@process@makefnmark \tag@FEMark
+\AssignSocketPlug{tagsupport/fnmark}{FEMark}
% \end{macrocode}
-
+% \end{plugdecl}
+%
+%
+%
+%
% \subsubsection{The footnote text}
% We need a public command to append values to the Ref keys
@@ -1688,11 +1916,13 @@
\tl_new:N \l_@@_dflt_struct_tl
\tl_set:Nn \l_@@_dflt_struct_tl {1}
% \end{macrocode}
-% kernel hook for tagging (2 args)
+% kernel hooks for taggin
% this sets the structure around the whole text
%
+%
+% \begin{plugdecl}{FENote}
% \begin{macrocode}
-\cs_new_protected:Npn \tag@FENote #1#2 % #1 config point, \insert\footins #2 content
+\NewSocketPlug{tagsupport/fntext/begin}{FENote}
{
\tag_mc_end_push:
% \end{macrocode}
@@ -1724,7 +1954,7 @@
% \end{macrocode}
% find open marks with identical \cs{@thefnmark}
% \begin{macrocode}
- \fnote_mark_gpop:ooN { \@thefnmark }{ \l_fnote_type_tl } \l_@@_currentrefs_seq
+ \fnote_mark_gpop_all:ooN { \@thefnmark }{ \l_fnote_type_tl } \l_@@_currentrefs_seq
% \end{macrocode}
% Then we store the object numbers of the marks in the /Ref of the FENote structure:
% and the number of the FEnote into the marks structure:
@@ -1744,57 +1974,62 @@
{%no auto
}
+ }
% \end{macrocode}
% This finish the setup of the tagging structure.
+% \end{plugdecl}
+
+
+
% Now we process the text. The destinations for the links are set with the label
% so that we can be sure that we are in hmode.
% \begin{macrocode}
- #1 {#2}
+\NewSocketPlug{tagsupport/fntext/end}{FENote}
+ {
\tag_struct_end:
\tag_mc_begin_pop:n{}
}
% \end{macrocode}
-% At last set the kernel command to this one
+% At last assign the plugs:
% \begin{macrocode}
-\cs_set_eq:NN \@kernel@process@footnotetext \tag@FENote
+\AssignSocketPlug{tagsupport/fntext/begin}{FENote}
+\AssignSocketPlug{tagsupport/fntext/end}{FENote}
% \end{macrocode}
%
-% \cs{@makefntext@cfgpoint} is the configuration point responsible for
-% typesetting the mark in the note. We use it to surround
+% The kernel socket \socket{tagsupport/fntext/mark} is responsible for
+% tagging the mark in the note. We use it to surround
% the mark with the needed tagging commands.
%
-% TODO check if this should/can be kernel configuration points
-% or if an additional kernel configuration points are needed.
+% TODO check if additional kernel configuration points are needed.
% If yes, what about the paragraph start and the paratagging??
%
-% \begin{macrocode}
-\cs_set_protected:Npn \@makefntext@cfgpoint #1 %#1 code that typesets the mark.
- {
- \noindent
- \tag_mc_end_push:
- \tag@FENoteLbl { #1 }
- \tag_mc_begin_pop:n{}
- }
-% \end{macrocode}
-% \cs{tag@FENoteLbl} creates the label in the note on the bottom.
-% It also adds link targets for the hyperlinking.
%
-% \begin{macro}{\tag@FENoteLbl}
+%
+%^^A If tagging is produced this configuration point is also
+%^^A responsible for surrounding the mark with the appropriate tags
+%^^A marking the mark as an Lbl. It does this using the
+%^^A \socket{tagsupport/fntext/mark} socket.
+%
+% \begin{plugdecl}{FENoteLbl}
+% This plug creates the label in the note on the bottom.
+% It also adds link targets for the hyperlinking.
% \begin{macrocode}
-\cs_new_protected:Npn \tag@FENoteLbl #1
+\NewSocketPlug{tagsupport/fntext/mark}{FENoteLbl}
{
+ \tag_mc_end_push:
% \end{macrocode}
-% We create a link target for every related mark. The name is footnote* + structure number
-% of the mark. We also add a link target for the current structure (for footref)
+% We create a link target for every related mark. The name is
+% \texttt{footnote*} \meta{structure number of the mark}. We also add a link
+% target for the current structure (for \cs{footref}).
% \begin{macrocode}
%\seq_show:N\l_@@_currentrefs_seq
\seq_map_inline:Nn\l_@@_currentrefs_seq {\MakeLinkTarget*{footnote*.##1}}
\MakeLinkTarget*{footnote*.\l_@@_currentstruct_tl}
% \end{macrocode}
-% now we add the tagging commands. We move the structure of the label to
-% to the container at the begin of the note.
+% Now we add the tagging commands. We move the structure of the label to
+% to the container at the begin of the note.
% \begin{NOTE}{UF}
-% check if the NonStruct is really needed. Perhaps we can simply move the mc.
+% Check if the NonStruct is really needed. Perhaps we can simply move the mc.
% \end{NOTE}
% \begin{macrocode}
\tag_struct_begin:n { tag=NonStruct,parent=\l_@@_currentstruct_tl +1 }
@@ -1802,37 +2037,43 @@
#1
\tag_mc_end:
\tag_struct_end:
+ \tag_mc_begin_pop:n{}
}
% \end{macrocode}
-% \end{macro}
-%
-%
-% \cs{@makefntext@cfgpointii} is the
-% configuration point around the actual note text.
%
-% TODO check if this should/can be kernel configuration points
% \begin{macrocode}
-\cs_set_protected:Npn \@makefntext@cfgpointii #1
- {
- \tag_mc_end_push:
- \tag@FENotetext { #1 }
- \tag_mc_begin_pop:n{}
- }
+\AssignSocketPlug{tagsupport/fntext/mark}{FENoteLbl}
% \end{macrocode}
-% \begin{macro}{\tag@FENotetext}
+% \end{plugdecl}
+%
+%
+%^^A If tagging is produced this configuration point is also
+%^^A responsible for surrounding the mark with the appropriate tags
+%^^A marking the mark as an MC of type FENote. It does this using
+%^^A the socket \socket{tagsupport/fntext/text}.
%
-% This command currently only adds an MC chunk,
+% \begin{plugdecl}{FENotetext}
+%
+% This plug is for the kernel socket \socket{tagsupport/fntext/text}
+% around the actual note text when doing tagging.
+% Currently it only adds an MC chunk.
%
% TODO Should it set a mc or could it rely on the content?
% \begin{macrocode}
-\cs_new_protected:Npn \tag@FENotetext #1
+\NewSocketPlug{tagsupport/fntext/text}{FENotetext}
{
+ \tag_mc_end_push:
\tag_mc_begin:n{}
#1
\tag_mc_end:
+ \tag_mc_begin_pop:n{}
}
% \end{macrocode}
-% \end{macro}
+%
+% \begin{macrocode}
+\AssignSocketPlug{tagsupport/fntext/text}{FENotetext}
+% \end{macrocode}
+% \end{plugdecl}
%-------------------------------------
% \begin{macrocode}
@@ -1849,7 +2090,7 @@
%<*footmisc>
%%
%% Copyright (c) 1995-2011 Robin Fairbairns
-%% Copyright (c) 2018-2022 Robin Fairbairns, Frank Mittelbach
+%% Copyright (c) 2018-2023 Robin Fairbairns, Frank Mittelbach
%%
%% This file is part of the `latex-lab Bundle'.
%% --------------------------------------------
@@ -1864,9 +2105,6 @@
%%
%% 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]{}
@@ -1916,14 +2154,14 @@
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 {}
+ \AssignSocketPlug{fntext/process}{side}
+% \AssignSocketPlug{fntext/make}{default}
+ \AssignSocketPlug{fntext/begin}{noop}
+ \AssignSocketPlug{fntext/end}{noop}
\fi
}
\let\footnotelayout\@empty
@@ -1992,25 +2230,16 @@
\DeclareOption{multiple}{\FN@multiplefootnotetrue}
\ProcessOptions
% \end{macrocode}
-% This version of \pkg{footmisc} can assume that the new OR code is
-% already available, thus nothing needs loading at this
-% point. However, as long as we use this code also in a package
-% version that can be loaded by other package while we are in a
-% transition phase it is not clear whether not the kernel code is
-% already available for other packages.
-% \begin{macrocode}
-%\@ifundefined{@kernel@before@cclv}
-% {\input{latex-lab-new-or.ltx}}{}
-% \end{macrocode}
%
% Footnote box layout for para footnotes;
% this would also be the hook to support dblfootnotes (from the
% \texttt{dblfnote} package if we integrate that).
% \begin{macrocode}
\ifFN@para
- \def\@makecol@cfgpointii {%
+ \NewSocketPlug{@makecol/footnotes}{para}{%
\global\setbox\footins\vbox{\FN@makefootnoteparagraph}%
}
+ \AssignSocketPlug{@makecol/footnotes}{para}
\fi
% \end{macrocode}
%
@@ -2038,64 +2267,29 @@
% \end{macrocode}
%
%
-%
% \begin{macrocode}
\ifcase \FN@bottomcases\relax
-\ERROR
-\or
+ \ERROR
+\or %1
\ifFN@abovefloats
- \def\@makecol@cfgpoint {%
- \@if@footnotes@TF
- {\@outputbox@append{\vfill}}%
- {\@if@bfloats@TF{\@outputbox@append{\vfill}}%
- {\@outputbox@reinsertbskip}}%
- \@outputbox@appendfootnotes
- \@outputbox@attachfloats
- }
+ \AssignSocketPlug {@makecol/outputbox}{space-footnotes-floats}
\else
- \def\@makecol@cfgpoint {%
- \@outputbox@attachfloats
- \@if@footnotes@TF
- {\@outputbox@append{\vfill}}%
- {\@outputbox@reinsertbskip}%
- \@outputbox@appendfootnotes
- }
+ \AssignSocketPlug {@makecol/outputbox}{floats-footnotes-space}
\fi
-\or
+\or %2
\ifFN@abovefloats
- \def\@makecol@cfgpoint {%
- \@outputbox@appendfootnotes
- \@if@bfloats@TF
- {\@outputbox@append{\vfill}}%
- {\@outputbox@reinsertbskip}%
- \@outputbox@attachfloats
- }
+ \AssignSocketPlug {@makecol/outputbox}{footnotes-space-floats}
\else
- \def\@makecol@cfgpoint {%
- \@if@footnotes@TF
- {\@outputbox@append{\vfill}}%
- {\@if@bfloats@TF{\@outputbox@append{\vfill}}%
- {\@outputbox@reinsertbskip}}%
- \@outputbox@attachfloats
- \@outputbox@appendfootnotes
- }
+ \AssignSocketPlug {@makecol/outputbox}{space-floats-footnotes}
\fi
-\or
+\or %3
\ifFN@abovefloats
- \def\@makecol@cfgpoint {%
- \@outputbox@appendfootnotes
- \@outputbox@attachfloats
- \@outputbox@reinsertbskip
- }
+ \AssignSocketPlug {@makecol/outputbox}{footnotes-floats}
\else
- \def\@makecol@cfgpoint {%
- \@outputbox@attachfloats
- \@outputbox@appendfootnotes
- \@outputbox@reinsertbskip
-}
+ \AssignSocketPlug {@makecol/outputbox}{floats-footnotes}
\fi
\else
-\ERROR
+ \ERROR
\fi
% next can be dropped when cleaned up
@@ -2120,24 +2314,12 @@
\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
- }
+% \AssignSocketPlug{fntext/process}{default}
+ \AssignSocketPlug{fntext/make}{para}
+ \AssignSocketPlug{fntext/begin}{noop}
+ \AssignSocketPlug{fntext/end}{para}
+
\fi
@@ -2211,7 +2393,7 @@
% perpage is loaded this results in updating counters on the reset
% list to 1 (or to a higher starting value if \cs{MakePerPage} is
% used with an optional argument, which is precisely the problem
-% here. By subtracting 1 in that case we set it back to 1 lower
+% here). By subtracting 1 in that case we set it back to 1 lower
% than the starting value.
%
% But to make this fully work we also need to update a support
@@ -2236,10 +2418,7 @@
%}
-\AddToHook{fntext/begin}{\nobreak \hspace{.2em}}
-
-
-
+ \AddToHook{fntext/begin}{\nobreak \hspace{.2em}}
\else
@@ -2296,7 +2475,11 @@
\ifFN@multiplefootnote
\providecommand*{\multiplefootnotemarker}{3sp}
-% we tag the separator as artifact
+% \end{macrocode}
+%
+% We tag the separator as artifact
+% \fmi{why is this done with \cs{providecommand}?}
+% \begin{macrocode}
\ExplSyntaxOn
\providecommand*{\multfootsep}{\tag_mc_end_push:\tag_mc_begin:n{artifact},\tag_mc_end:\tag_mc_begin_pop:n{}}
\ExplSyntaxOff
@@ -2526,7 +2709,7 @@
{\mathparagraph\mathparagraph\mathparagraph}%
}
\newcommand\mpfootnotemark{%
- \@ifnextchar[%
+ \@ifnextchar[%]
\@xmpfootnotemark
{%
\stepcounter\@mpfn
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-footnotes.pdf b/macros/latex-dev/required/latex-lab/latex-lab-footnotes.pdf
index b4f848dcbf..6736fc5132 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-footnotes.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-footnotes.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-graphic.dtx b/macros/latex-dev/required/latex-lab/latex-lab-graphic.dtx
index f9457e0524..1db0277425 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-graphic.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-graphic.dtx
@@ -15,6 +15,8 @@
% https://github.com/latex3/latex2e/required/latex-lab
%
% for those people who are interested or want to report an issue.
+\def\ltlabgraphicdate{2023-07-20}
+\def\ltlabgraphicversion{0.80a}
%
%<*driver>
\documentclass{l3doc}
@@ -31,7 +33,7 @@
% \title{The \textsf{latex-lab-graphic} package\\
% Tagging of included graphics }
% \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}}
-% \date{v0.8 2023-04-07}
+% \date{v\ltlabgraphicversion\ \ltlabgraphicdate}
%
% \maketitle
%
@@ -174,7 +176,7 @@
% \begin{implementation}
% \section{Implementation}
% \begin{macrocode}
-\ProvidesExplPackage {latex-lab-testphase-graphic} {2023-04-07} {0.8}
+\ProvidesExplPackage {latex-lab-testphase-graphic} {\ltlabgraphicdate} {\ltlabgraphicversion}
{Code related to the tagging of graphics}
% \end{macrocode}
% We load l3opacity for the debug code
@@ -1066,7 +1068,7 @@
% \begin{macrocode}
%<*latex-lab>
\ProvidesFile{graphic-latex-lab-testphase.ltx}
- [2023-04-07 v0.8 code related to the tagging included graphics]
+ [\ltlabgraphicdate\space v\ltlabgraphicversion\space latex-lab wrapper graphic]
\RequirePackage{latex-lab-testphase-graphic}
%</latex-lab>
% \end{macrocode}
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-graphic.pdf b/macros/latex-dev/required/latex-lab/latex-lab-graphic.pdf
index 563b0f1329..03f3d0b3f5 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-graphic.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-graphic.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-mathtagging.dtx b/macros/latex-dev/required/latex-lab/latex-lab-math.dtx
index 923001f559..d593f93320 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-mathtagging.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-math.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-%% File: latex-lab-mathtagging.dtx
+%% File: latex-lab-math.dtx
%
% Copyright (C) 2022-2023 The LaTeX Project
%
@@ -19,8 +19,8 @@
% for those people who are interested or want to report an issue.
%
%
-\def\ltmathtaggingdate{2023-03-08}
-\def\ltmathtaggingversion{v0.5a}
+\def\ltlabmathdate{2023-09-11}
+\def\ltlabmathversion{0.5c}
%
%<*driver>
\documentclass{l3doc}
@@ -30,16 +30,17 @@
\usepackage{todonotes}
\begin{document}
- \DocInput{latex-lab-mathtagging.dtx}
+ \DocInput{latex-lab-math.dtx}
\end{document}
%</driver>
%
% \fi
%
%
-% \title{The \texttt{latex-lab-mathtagging} code\thanks{}}
+% \title{The \texttt{latex-lab-math} code\thanks{}}
% \author{Frank Mittelbach, Joseph Wright, \LaTeX{} Project}
-%
+% \date{v\ltlabmathversion\ \ltlabmathdate}
+%
% \maketitle
%
% \newcommand\NEW[1]{\marginpar{\mbox{}\hfill\fbox{New: #1}}}
@@ -198,15 +199,15 @@
%
% \car{Change description here?}
% \begin{macrocode}
-\ProvidesFile{latex-lab-mathtagging.ltx}
- [\ltmathtaggingdate\space
- \ltmathtaggingversion\space
+\ProvidesFile{latex-lab-math.ltx}
+ [\ltlabmathdate\space
+ v\ltlabmathversion\space
Grab all the math(s) and tag it (experiments)]
% \end{macrocode}
%
% Temp loading \ldots
% \begin{macrocode}
-\AddToHook{begindocument/before}{\RequirePackage{latex-lab-testphase-block-tagging}}
+\AddToHook{begindocument/before}{\RequirePackage{latex-lab-testphase-block}}
% \end{macrocode}
%
% \begin{macrocode}
@@ -309,11 +310,25 @@
{
\@@_process:nn { math } {#1} % $
% fairly simple this one
- \tagmcend %end P-chunk, in code: \tag_mc_end_push:
- \@kernel@math@begin
- #1 $
- \@kernel@math@end
- \tagmcbegin{} % restart P-chunk (whatsits in pdftex)
+% \end{macrocode}
+% We do not want math tagging in fakemath or when measuring,
+% so we imitate the test inside
+% \cs{@@_process:nn} for now, see https://github.com/latex3/tagging-project/issues/5
+% \begin{macrocode}
+ \legacy_if:nTF { measuring@ }
+ { #1 $ }
+ {
+ \tl_if_in:nnTF {#1} { \m@th }
+ { #1 $ }
+ {
+ \tagmcend %end P-chunk, in code: \tag_mc_end_push:
+ \@kernel@math@begin
+ #1 $
+ \@kernel@math@end
+ \tagmcbegin{} % restart P-chunk (whatsits in pdftex)
+ }
+ }
+
}
}
% \end{macrocode}
@@ -334,9 +349,14 @@
$$
}
}
-
+% \end{macrocode}
+% To allow to use the code without tagging we guard. But probably tagpdf should
+% provide some tools for such manual para-ends.
+% \begin{macrocode}
\cs_new_protected:Npn \@kernel@close@P {
- \tagmcend %end P-chunk, in code: \tag_mc_end_push:
+ \tag_if_active:T
+ {
+ \tagmcend %end P-chunk, should perhaps be \tag_mc_end_push: ...
\int_gincr:N \g__tag_para_end_int
\bool_if:NT \l__tag_para_show_bool
{ \tag_mc_begin:n{artifact}
@@ -344,6 +364,7 @@
\tag_mc_end:
}
\tag_struct_end:
+ }
}
@@ -368,12 +389,15 @@
\l_@@_tmpa_skip \lastskip
\@kernel@math@end
\penalty \postdisplaypenalty
- \skip_vertical:n { -\l_@@_tmpa_skip }
+% \end{macrocode}
+% This reinserts the below display skips. It must be doubled to
+% get the right amount:
+% \begin{macrocode}
+ \skip_vertical:n { -\l_@@_tmpa_skip * 2 }
%
\@doendpe % this has no \end{...} to take care of it
}
-
% \end{macrocode}
% \end{macro}
%
@@ -813,12 +837,23 @@
\@@_grab_dollar:w
}
}
+
\exp_args:No \tex_everydisplay:D
{
\tex_the:D \tex_everydisplay:D
\iftrue % this may have to be a settable flag!
% {
% \typeout{==>~ in~ everydisplay}
+% \end{macrocode}
+% flipping the \cs{belowdisplay} values is done so that we get (assumption)
+% a negative skip and not make the page bigger then we take that out,
+% then we add the tagging code (in \cs{@@_tag_dollardollar_display_end} ) and
+% then we put a real \cs{postdisplaypenalty} in and
+% the right skip (of which we don't know if it is short or a
+% normal \cs{belowdisplayskip}). This might need some refinement if that skip
+% is actually negative from the start
+% (not sure it ever is and is worth bothering about)
+% \begin{macrocode}
\skip_set:Nn \belowdisplayskip {-\belowdisplayskip}
\skip_set:Nn \belowdisplayshortskip {-\belowdisplayshortskip}
\int_set:Nn \postdisplaypenalty {10000}
@@ -1277,4 +1312,3 @@
% \Finale
%
%
-
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-mathtagging.pdf b/macros/latex-dev/required/latex-lab/latex-lab-math.pdf
index 4df1f5e141..f68397d94a 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-mathtagging.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-math.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf b/macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf
index f2362e1f8e..a8c65f5f9c 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf b/macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf
index eb53e235bb..8dec843fe9 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-minipage.dtx b/macros/latex-dev/required/latex-lab/latex-lab-minipage.dtx
index 00b1d649a1..bbd40a3c52 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-minipage.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-minipage.dtx
@@ -16,6 +16,8 @@
%
% for those people who are interested or want to report an issue.
%
+\def\ltlabminipagedate{2023-08-20}
+\def\ltlabminipageversion{0.81b}
%<*driver>
\documentclass{l3doc}
\EnableCrossrefs
@@ -27,15 +29,11 @@
%
% \fi
%
-
-\def\ltlistsversion{v0.81}
-\def\ltlistsdate{2023/05/10}
-
%
% \title{The \textsf{latex-lab-minipage} package\\
% Changes related to the tagging of minipage and parbox}
% \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}}
-% \date{\ltlistsversion\ \ltlistsdate}
+% \date{v\ltlabminipageversion\ \ltlabminipagedate}
%
% \maketitle
%
@@ -64,9 +62,15 @@
%
% \section{Implementation}
% \begin{macrocode}
-\ProvidesExplPackage {latex-lab-testphase-minipage} {2023-05-10} {0.81}
+\ProvidesExplPackage {latex-lab-testphase-minipage}
+ {\ltlabminipagedate} {\ltlabminipageversion}
{Code related to the tagging of minipages and parboxes}
% \end{macrocode}
+% As minipage uses a socket from the footnote code we must load the OR-code:
+% \begin{macrocode}
+\RequirePackage{latex-lab-testphase-new-or-1}
+\RequirePackage{latex-lab-testphase-new-or-2}
+% \end{macrocode}
%
% \subsection{Provide the kernel hooks}
@@ -111,7 +115,7 @@
\textwidth\hsize \columnwidth\hsize
\@parboxrestore
\def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@
- \let\@footnotetext\@mpfootnotetext
+ \AssignSocketPlug{fntext/process}{mp}%
\let\@listdepth\@mplistdepth \@mplistdepth\z@
\@minipagerestore
\@setminipage}
@@ -196,7 +200,8 @@
% \begin{macrocode}
%<*latex-lab>
\ProvidesFile{minipage-latex-lab-testphase.ltx}
- [2022-10-26 v0.8 code related to the tagging of sectioning commands]
+ [\ltlabminipagedate\space v\ltlabminipageversion
+ code related to the tagging of minipage and parbox]
\RequirePackage{latex-lab-testphase-minipage}
%</latex-lab>
% \end{macrocode}
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-minipage.pdf b/macros/latex-dev/required/latex-lab/latex-lab-minipage.pdf
index ca89cd0b8f..ac235aef7d 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-minipage.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-minipage.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-namespace.dtx b/macros/latex-dev/required/latex-lab/latex-lab-namespace.dtx
new file mode 100644
index 0000000000..2ec9b0584b
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/latex-lab-namespace.dtx
@@ -0,0 +1,100 @@
+% \iffalse meta-comment
+%
+%% File: latex-lab-namespace.dtx (C) Copyright 2023 LaTeX Project
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file
+%
+% https://www.latex-project.org/lppl.txt
+%
+%<*driver>
+\documentclass{l3doc}
+\usepackage{amstext}
+\EnableCrossrefs
+\CodelineIndex
+
+\usepackage{todonotes}
+
+\begin{document}
+ \DocInput{latex-lab-namespace.dtx}
+\end{document}
+%</driver>
+% \fi
+% \title{Prototype reimplementation of \LaTeXe{}'s role mapping}
+% \author{\LaTeX{} Project, initial implementation Ulrike Fischer}
+% \date{v0.8 2023-09-04}
+%
+% \maketitle
+%
+% \begin{documentation}
+%
+%
+%
+% \section{Introduction}
+%
+% This short file collects tag names from the \LaTeX{} namespace and their role mapping used
+% in the latex-lab files. The names and the roles are not necessarly the final ones!
+%
+% Later settings of the same tag overwrite previous settings.
+% The syntax of a line is a list of three strings ending with commas:
+% \begin{verbatim}
+% latex-tag, PDF-tag, name space,
+% \end{verbatim}
+%
+% The name space is normally pdf2 with the exception of the following PDF-tags
+% which are only in pdf namespace:
+% Art, BlockQuote, TOC, TOCI, Index, Private, Quote, Note,
+% Reference, BibEntry, Code.
+%
+% \end{documentation}
+% \begin{implementation}
+% \begin{macrocode}
+%<*ns-latex-lab>
+%% \ProvidesExplFile {tagpdf-ns-latex-lab.def} {2023-09-04} {0.8}
+%% {latex} {https://www.latex-project.org/ns/lab/2022}{}
+% \end{macrocode}
+% \subsection{Role from tagpdf}
+% The following tags are already set by tagpdf, so deleting here will not remove them.
+% \begin{macrocode}
+title, Title, pdf2,
+part, Title, pdf2,
+section, H1, pdf2,
+subsection, H2, pdf2,
+subsubsection,H3, pdf2,
+paragraph, H4, pdf2,
+subparagraph, H5, pdf2,
+list, L, pdf2,
+itemize, L, pdf2,
+enumerate, L, pdf2,
+description, L, pdf2,
+quote, BlockQuote,pdf,
+quotation, BlockQuote,pdf,
+verbatim, Div, pdf2,
+item, LI, pdf2,
+itemlabel, Lbl, pdf2,
+itembody, LBody, pdf2,
+footnote, FENote, pdf2,
+footnotemark, Lbl, pdf2,
+footnotelabel,Lbl, pdf2,
+text-unit, Part, pdf2,
+text, P, pdf2,
+% \end{macrocode}
+% \subsection{From block code}
+% \begin{macrocode}
+theorem-like, Sect, pdf2,
+verbatim, P, pdf2,
+codeline, Sub, pdf2,
+% \end{macrocode}
+% \subsection{From float code}
+% \begin{macrocode}
+float, Aside, pdf2,
+figures, Sect, pdf2,
+tables, Sect, pdf2,
+% \end{macrocode}
+% \begin{macrocode}
+%</ns-latex-lab>
+% \end{macrocode}
+% \end{implementation}
+\endinput
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-namespace.pdf b/macros/latex-dev/required/latex-lab/latex-lab-namespace.pdf
new file mode 100644
index 0000000000..e0c02494ca
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/latex-lab-namespace.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-new-or-1.dtx b/macros/latex-dev/required/latex-lab/latex-lab-new-or-1.dtx
index ef799e813c..cc60f50de0 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-new-or-1.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-new-or-1.dtx
@@ -9,6 +9,8 @@
%
% https://www.latex-project.org/lppl.txt
%
+\def\ltlabneworIdate{2023-07-20}
+\def\ltlabneworIversion{0.85a}
%<*driver>
\documentclass{l3doc}
@@ -27,7 +29,8 @@
%
% \title{Temporary output patches for tagging and better link support}
% \author{Frank Mittelbach \and Ulrike Fischer}
-%
+% \date{v\ltlabneworIversion\ \ltlabneworIdate}
+%
% \maketitle
%
% \section{Introduction}
@@ -47,12 +50,13 @@
%
% \section{The Implementation}
% \begin{macrocode}
-%<*code>
+%<*package>
% \end{macrocode}
%
% \begin{macrocode}
\ProvidesPackage{latex-lab-testphase-new-or-1}
- [2022-11-94 v0.1a Temporary output patches for tagging and better link support]
+ [\ltlabneworIdate\space v\ltlabneworIversion\space
+ Temporary output patches for tagging and better link support]
\RequirePackage{etoolbox}
% \end{macrocode}
%
@@ -94,18 +98,36 @@
%
% We patch \cs{@makecol}, if new-or-2 is loaded too it will overwrite that again.
% \begin{macrocode}
- \providecommand\@kernel@before@footins{}
- \providecommand\@kernel@before@cclv{}
+\providecommand\@kernel@before@footins{}
+\providecommand\@kernel@tagsupport@@makecol{}
- \patchcmd\@makecol
- {\vskip\skip\footins}
- {\vskip\skip\footins\@kernel@before@footins}
- {\typeout{Patching \string\@makecol\space for tagging}}{\PATCHerror }
+\patchcmd\@makecol
+ {\vskip\skip\footins}
+ {\vskip\skip\footins\@kernel@before@footins}
+ {\typeout{Patching \string\@makecol\space for tagging}}{\PATCHerror }
-%for some reason patching with etoolbox only works in this order ...
+\patchcmd\@makecol
+ {\let\@elt\relax}
+ {\@kernel@tagsupport@@makecol\let\@elt\relax}
+ {\typeout{Patching \string\@makecol\space for tagging}}{\PATCHerror }
- \pretocmd\@makecol{\@kernel@before@cclv}
- {\typeout{Patching \string\@makecol\space for tagging}}{\PATCHerror }
+\AddToHook{package/footmisc/after}
+ {%
+ \def\@makecol{%
+ \setbox\@outputbox \box\@cclv
+ \@outputbox@removebskip
+ \@kernel@tagsupport@@makecol
+ \let\@elt\relax
+ \xdef\@freelist{\@freelist\@midlist}%
+ \global \let \@midlist \@empty
+ \@makecol@appendblocks
+ \ifvbox\@kludgeins
+ \@makespecialcolbox
+ \else
+ \@makenormalcolbox
+ \fi
+ \global \maxdepth \@maxdepth}
+}
% \end{macrocode}
% \end{macro}
%
@@ -150,9 +172,16 @@
\def\@kernel@after@foot {\pdfannot_link_on:}
\ExplSyntaxOff
% \end{macrocode}
-%
% \begin{macrocode}
-%</code>
+%</package>
+% \end{macrocode}
+% \begin{macrocode}
+%<*latex-lab>
+\ProvidesFile{new-or-1-latex-lab-testphase.ltx}
+ [\ltlabneworIdate\space v\ltlabneworIversion\space
+ latex-lab wrapper new-or-1]
+\RequirePackage{latex-lab-testphase-new-or-1}
+%</latex-lab>
% \end{macrocode}
%
% \Finale
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-new-or-1.pdf b/macros/latex-dev/required/latex-lab/latex-lab-new-or-1.pdf
index 1e97867f2a..3f68d29e3e 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-new-or-1.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-new-or-1.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.dtx b/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.dtx
index 74d56d687f..d2011256b1 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.dtx
@@ -1,7 +1,7 @@
% \iffalse meta-comment
%
%% File: latex-lab-new-or-2.dtx
-% Copyright (C) 2022 The LaTeX Project
+% Copyright (C) 2022-2023 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -17,6 +17,9 @@
%
% for those people who are interested or want to report an issue.
%
+\def\ltlabneworIIdate{2023-09-04}
+\def\ltlabneworIIversion{0.85c}
+
%<*driver>
\documentclass{l3doc}
\EnableCrossrefs
@@ -31,41 +34,58 @@
%
% \title{The \texttt{latex-lab-testphase-new-or-2} code\thanks{}}
% \author{Frank Mittelbach, \LaTeX{} Project}
-%
+% % \date{v\ltlabneworIIversion\ \ltlabneworIIdate}
% \maketitle
%
% \newcommand\fmi[1]{\begin{quote} TODO: \itshape #1\end{quote}}
% \newcommand\NEW[1]{\marginpar{\mbox{}\hfill\fbox{New: #1}}}
% \providecommand\pkg[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{plug},idxtype=plug,idxgroup=Plugs]{Plug}{plugdecl}
+% \NewDocElement[printtype=\textit{hook},idxtype=hook,idxgroup=Hooks]{Hook}{hookdecl}
+%
+%
% \begin{abstract}
+% This code implements changes to the output routine intended to be
+% moved in the \LaTeX{} kernel at some point in the future.
% \end{abstract}
%
-% \section{Introduction}
-%
-% This code implements changes to the output routine.
%
%
%
+% \section{Introduction}
%
-% \section{Hooks and configuration points}
%
-% Note: the configuration points do not have an interface mechanism
-% yet and all their names are temporary right now.
+% \section{Hooks and replaceable code blocks}
%
%
-% \subsubsection{Configuration points}
+% \subsubsection{Replaceable code blocks (sockets)}
%
% To cater for different layouts with respect to text, footnotes,
-% and bottom-floats placements there are two configuration points for
+% and bottom-floats placements there are two sockets for
% now.
% \begin{description}
-% \item[\cs{@makecol@cfgpoint} (0 arguments)]
+% \item[\socket{@makecol/outputbox} (0 arguments)]
%
-% In this configuration point the \cs{@outputbox} (holding the
+% In code for this socket the \cs{@outputbox} (holding the
% galley text for the current column or page) is augmented by
% attaching floats and footnote areas together with appropriate
-% spacing. Before the code is run any existing glue at the bottom
+% spacing.
+%
+% Prior to calling the socket the output routine has already
+% decided which floats go into which area and which get deferred.
+% Therefore, the assumption is that the code in the socket attaches all
+% areas that contain floats. If this is not done, then the order
+% of floats is likely to be screwed up unless unused floats
+% are moved to the defer list in an appropriate way (for now we
+% don't offer any interface for that scenario).
+%
+% Before the code in the socket is run, any existing glue at the bottom
% of the \cs{@outputbox} is removed and stored in a safe
% place. If needed, it can be reinserted with one of the helper
% commands.
@@ -74,17 +94,25 @@
% \begin{description}
% \item[\cs{@outputbox@append} (1 argument)]
%
+% \DescribeMacro[noprint]{@outputbox@append}
+%
% This general purpose command alters the \cs{@outputbox} box by
% appending material to it.
%
% \item[\cs{@outputbox@appendfootnotes} (0 arguments)]
%
+% \DescribeMacro[noprint]{@outputbox@appendfootnotes}
+%
% This command appends the footnotes to the \cs{@outputbox} (if
% there are any). If not, then it does nothing.
%
% \item[\cs{@outputbox@attachfloats} (0 arguments)]
% \item[\cs{@outputbox@attachtopfloats} (0 arguments)]
% \item[\cs{@outputbox@attachbottomfloats} (0 arguments)]
+%
+% \DescribeMacro[noprint]{@outputbox@attachfloats}
+% \DescribeMacro[noprint]{@outputbox@attachtopfloats}
+% \DescribeMacro[noprint]{@outputbox@attachbottomfloats}
%
% Attaching top and bottom floats can usually be done in one
% go, but for special layouts we might want more control so we
@@ -92,11 +120,16 @@
%
% \item[\cs{@outputbox@reinsertbskip} (0 arguments)]
%
+% \DescribeMacro[noprint]{@outputbox@reinsertbskip}
+%
% Reinsert the bottom skip of the \cs{@outputbox} that was
% saved before.
%
% \item[Testing for existence of material]
%
+% \DescribeMacro[noprint]{@if@footnotes@TF}
+% \DescribeMacro[noprint]{@if@bfloats@TF}
+%
% There are a number of helpers to run conditional code
% depending on whether or not there are footnotes or bottom
% floats. They are \cs{@if@footnotes@TF} and
@@ -104,16 +137,67 @@
% (names are likely to change).
%
% \end{description}
-% This configuration point needs an appropriate definition; a
-% default is already given in the kernel.
%
-% \item[\cs{@makecol@cfgpointii} (0 arguments)]
+% \fmi{Decide on names for these helper commands. We could keep
+% them similar to the above (because they are only supposed to be
+% used by a few packages). However, we could alternatively use
+% CamelCase names, under the assumption that classes may also
+% directly define a plug for the socket, instead of loading a
+% support package such as \pkg{footmisc} (or in addition
+% to). --- decide}
+%
+% This socket cannot be empty but needs appropriate code; a set
+% of suitable plugs for it are already given in the kernel. These
+% are
+% \begin{description}
+% \item[\plug{space-footnotes-floats}]
+%
+% After the galley text there is a vertical \cs{vfill}
+% followed by any footnotes followed by the bottom floats, if any.
+%
+% \item[\plug{floats-footnotes-space}]
+%
+% As before but the \cs{vfill} is at the bottom (page is
+% ragged bottom).
+%
+% \item[\plug{footnotes-space-floats}]
+%
+% As before but the \cs{vfill} is between footnotes and floats.
%
-% This configuration point is used to manipulate the footnote
+% \item[\plug{space-floats-footnotes}]
+%
+% Here the footnotes come last.\footnote{There are two more
+% permutations, but neither of them has ever been requested so
+% they aren't set up by default --- doing that in a class
+% would be trivial though.}
+%
+% \item[\plug{floats-footnotes}]
+%
+% All excess space has to be distributed across the existing
+% glue on the page, e.g., within the text galley, the
+% separation between blocks, etc.
+% The order is text, floats, footnotes.
+%
+% \item[\plug{footnotes-floats}]
+%
+% As the previous one but floats and footnotes are
+% swapped. This is the \LaTeX{} default, i.e., this plug is
+% assigned to the socket.
+%
+% \end{description}
+%
+%-----------------------
+%
+% \item[\socket{@makecol/footnotes} (0 arguments)]
+%
+% This socket is used to manipulate the footnote
% material inside \cs{box}\cs{footins}. It if contains code, it
% is supposed to do some processing of that box and then write
% the result back into it (and nothing else!). By default it
-% does nothing.
+% does nothing, i.e., has the \plug{noop} assigned.
+%
+% If (short) footnotes are run as a paragraph this socket gets
+% the plug \plug{para} assigned which is defined elsewhere.
%
% \end{description}
%
@@ -123,28 +207,32 @@
% \section{The Implementation}
%
% \begin{macrocode}
-%<*code>
+%<*package>
% \end{macrocode}
%
% \subsection{File declaration}
% \begin{macrocode}
\ProvidesPackage{latex-lab-testphase-new-or-2}
- [2022-11-04 v0.1c changes to the output routine]
+ [\ltlabneworIIdate\space v\ltlabneworIIversion\space
+ Changes to the output routine]
% \end{macrocode}
+%
% \subsection{\cs{@makecol} reimplementation}
%
% In order for other packages to prepend or append code to
-% \cs{@makecol}, they can use the generic command hooks
-% \texttt{cmd/@makecol/before} and \texttt{cmd/@makecol/after}, so
-% there is nothing we need to do here.
+% \cs{@makecol} the generic command hooks
+% \texttt{cmd/@makecol/before} and \texttt{cmd/@makecol/after} can
+% be used, so for now there is nothing we need to do for this.
%
%
% \begin{macro}{\@makecol}
% \cs{@makecol} is shortened a lot, basically all the hardwired
-% code in the middle has moved into a configuration point.
+% code in the middle has moved into a socket.
% \begin{macrocode}
\def \@makecol {%
- \@kernel@before@cclv
+% \end{macrocode}
+% Save away box 255 as \cs{@outputbox} to make it available for further adjustments.
+% \begin{macrocode}
\setbox\@outputbox \box\@cclv
% \end{macrocode}
% The only real addition is the next command which either does
@@ -153,25 +241,31 @@
% \begin{macrocode}
\@outputbox@removebskip
% \end{macrocode}
-% Any ``here'' floats in the \cs{@outputbox} are now handled so we
+% Now a kernel hook for tagging.
+% \fmi{The name is likely to change and it probably will eventually
+% be replaced with a socket.}
+% \begin{macrocode}
+ \@kernel@tagsupport@@makecol
+% \end{macrocode}
+% When this code is run any ``here'' floats in the \cs{@outputbox} are already handled, so we
% recycle their registers and put them back to the \cs{@freelist}.
% \begin{macrocode}
\let\@elt\relax
\xdef\@freelist{\@freelist\@midlist}%
\global \let \@midlist \@empty
% \end{macrocode}
-% Here we have the configurable part.
-% \fmi{Interface to configuration points will change in the future}
+% Here we have the configurable part. This socket is supposed to add floats,
+% footnotes and stretchable vertical space as appropriate to the \cs{@outputbox}.
% \begin{macrocode}
- \@makecol@cfgpoint
+ \UseSocket{@makecol/outputbox}%
% \end{macrocode}
-% The we deal with any \cs{enlargethispage} or run the normal code
+% Then we deal with any \cs{enlargethispage} or run the normal code
% to build a column.
% \begin{macrocode}
\ifvbox\@kludgeins
- \@makespecialcolbox
+ \@make@specialcolbox
\else
- \@makenormalcolbox
+ \@make@normalcolbox
\fi
\global \maxdepth \@maxdepth
}
@@ -188,10 +282,10 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@makenormalcolbox}
+% \begin{macro}{\@make@normalcolbox}
% Taken out of \cs{@makecol} for readability.
% \begin{macrocode}
-\def \@makenormalcolbox {%
+\def \@make@normalcolbox {%
\setbox\@outputbox \vbox to\@colht {%
\@texttop
\@outputbox@depth \dp\@outputbox
@@ -204,10 +298,10 @@
% \end{macro}
%
%
-% \begin{macro}{\@makespecialcolbox}
+% \begin{macro}{\@make@specialcolbox}
% Make the colbox when \cs{enlargethispage} was used.
% \begin{macrocode}
-\def \@makespecialcolbox {%
+\def \@make@specialcolbox {%
\@outputbox@append {\vskip-\@outputbox@depth}%
\@tempdima \@colht
\ifdim \wd\@kludgeins>\z@
@@ -235,7 +329,7 @@
% \begin{macro}{\@outputbox@removebskip}
%
% This is really a bug fix for the kernel but one we only
-% automatically make in new documents using \cs{DocumentMetadata}.
+% automatically make in new documents that are using \cs{DocumentMetadata}.
% \fmi{may make optional for legacy docs}
% If
% \cs{raggedbottom} is in force, footnotes get attached to the main
@@ -248,7 +342,7 @@
% short, but the footnotes are not pushed to the bottom.
%
% In \pkg{footmisc} \cs{@outputbox@removebskip} is only applied when
-% \pkg{footmisc} is called with with an option specifying the
+% \pkg{footmisc} is called with an option specifying the
% footnote placement, i.e., not in the default case.
% In new documents we apply it always.
% \begin{macrocode}
@@ -270,6 +364,7 @@
\ifnum \gluestretchorder\@tempskipa>\z@
\vskip-\@tempskipa
% \end{macrocode}
+%
% \begin{macro}{\@outputbox@reinsertbskip}
% We also record the value so that it can be reinserted
% elsewhere. As we have to do this globally, we also need to
@@ -295,25 +390,28 @@
%
%
%
-% \begin{macro}{\@kernel@before@cclv}
-% \begin{macro}{\@kernel@before@footins}
+% \begin{macro}{\@kernel@before@cclv,
+% \@kernel@before@footins}
% These two commands are internal kernel hooks intended for tagging
-% support in case that is active. By default they do nothing (and
+% support in case that is active. They should not be altered by package code!
+% By default they do nothing (and
% may have been defined already by \cs{DocumentMetadata}).
+% \fmi{The names might change and perhaps each of them is turned
+% into a socket named something like \socket{tagsupport/before/cclv}
+% or similar.}
% \begin{macrocode}
\providecommand\@kernel@before@cclv{}
\providecommand\@kernel@before@footins{}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
%
%
%
% \subsection{The output routine configuration components}
%
-% Here we provide the components that are used to define
-% \cs{@makecol@cfgpoint}.
+% Here we provide the components that are used to define code for the
+% \socket{@makecol/outputbox} socket.
%
%
% \begin{macro}{\@outputbox@append}
@@ -346,7 +444,7 @@
% \begin{macro}{\@outputbox@appendfootnotes}
%
% This command appends the footnotes to the \cs{@outputbox} (if
-% there are any). If not then it does nothing.
+% there are any). If not, then it does nothing.
% \begin{macrocode}
\def\@outputbox@appendfootnotes {%
\ifvoid\footins \else
@@ -354,22 +452,34 @@
% First come two configuration points: what to do if we are in a split
% footnote situation and a second one that does some manipulation
% of the \cs{footins} box before it gets appended.
-% \fmi{this code will get revised as part of CP handling in the future}
+% \fmi{The code for handling split footnotes will get revised as part of socket handling in the future}
% \begin{macrocode}
\@makecol@handlesplitfootnotes
- \@makecol@cfgpointii
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \UseSocket{@makecol/footnotes}%
% \end{macrocode}
% Then the footnotes are appended:
% \begin{macrocode}
\@outputbox@append{%
\vskip \skip\footins
+% \end{macrocode}
+% This is a kernel hook for tagging.
+% \fmi{The name is likely to change and it probably will eventually
+% be replaced with a socket.}
+% \begin{macrocode}
\@kernel@before@footins
+% \end{macrocode}
+%
+% \begin{macrocode}
\color@begingroup
\normalcolor
\footnoterule
% \end{macrocode}
% Support for \pkg{pdfcolfoot}, eventually this can go once color
-% is properly supported.
+% is properly supported. The csname is constructed in case it
+% doesn't exist.
% \begin{macrocode}
\csname pdfcolfoot@current\endcsname
\unvbox \footins
@@ -435,17 +545,16 @@
%
%
%
-% \begin{macro}{\@makecol@cfgpointii}
+% \begin{socketdecl}{@makecol/footnote}
%
-% Configuration point to support manipulation of footins box
-% (result needs to be moved back in there). Used by the
-% \texttt{para} option.
-% \fmi{Interface will change in the future}
+% The socket allowing the manipulation of \cs{footins} box
+% (result needs to be moved back in there). Used when footnotes are
+% reformatted into a single paragraph by the
+% \texttt{para} option of \pkg{footmisc}. By default it does nothing.
% \begin{macrocode}
-\let \@makecol@cfgpointii \@empty
+\NewSocket{@makecol/footnotes}{0}
% \end{macrocode}
-%
-% \end{macro}
+% \end{socketdecl}
%
%
%
@@ -497,27 +606,124 @@
% \subsection{The \cs{@makecol} configuration}
%
%
-% \begin{macro}{\@makecol@cfgpoint}
+% \begin{socketdecl}{@makecol/outputbox}
+% We have one socket that is supposed to augment the \cs{@outputbox}
+% by attaching floats and footnotes with appropriate spacing.
+%
+% \begin{macrocode}
+\NewSocket{@makecol/outputbox}{0}
+% \end{macrocode}
+% \end{socketdecl}
+%
+% The following plugs are available for
+% this socket:
+%
+% \begin{plugdecl}{space-footnotes-floats}
+% After the galley text there is a vertical \cs{vfill} followed by
+% any footnotes followed by the bottom floats, if any.
+% \begin{macrocode}
+\NewSocketPlug {@makecol/outputbox}{space-footnotes-floats} {%
+ \@if@footnotes@TF
+ {\@outputbox@append{\vfill}}%
+ {\@if@bfloats@TF
+ {\@outputbox@append{\vfill}}%
+ {\@outputbox@reinsertbskip}%
+ }%
+ \@outputbox@appendfootnotes
+ \@outputbox@attachfloats
+}
+% \end{macrocode}
+% \end{plugdecl}
%
-% Here is only the configuration for the default case for now,
-% others are provided by \pkg{footmisc}.
+% \begin{plugdecl}{floats-footnotes-space}
+% As before but the \cs{vfill} is at the bottom (page is ragged
+% bottom).
+% \begin{macrocode}
+\NewSocketPlug {@makecol/outputbox}{floats-footnotes-space} {%
+ \@outputbox@attachfloats
+ \@if@footnotes@TF
+ {\@outputbox@append{\vfill}}%
+ {\@outputbox@reinsertbskip}%
+ \@outputbox@appendfootnotes
+}
+% \end{macrocode}
+% \end{plugdecl}
%
+% \begin{plugdecl}{footnotes-space-floats}
+% As before but the \cs{vfill} is between footnotes and floats.
% \begin{macrocode}
- \def\@makecol@cfgpoint {%
- \@outputbox@appendfootnotes
- \@outputbox@attachfloats
+\NewSocketPlug {@makecol/outputbox}{footnotes-space-floats} {%
+ \@outputbox@appendfootnotes
+ \@if@bfloats@TF
+ {\@outputbox@append{\vfill}}%
+ {\@outputbox@reinsertbskip}%
+ \@outputbox@attachfloats
+}
% \end{macrocode}
-% We do, however, reinsert the bottom skip from \cs{newpage} if it
+% \end{plugdecl}
+%
+% \begin{plugdecl}{space-floats-footnotes}
+% Here the footnotes come last.\footnote{There are two more
+% permutations, but neither of them has ever been requested so
+% they aren't set up by default --- doing that in a class
+% would be trivial though.}
+% \begin{macrocode}
+\NewSocketPlug {@makecol/outputbox}{space-floats-footnotes} {%
+ \@if@footnotes@TF
+ {\@outputbox@append{\vfill}}%
+ {\@if@bfloats@TF
+ {\@outputbox@append{\vfill}}%
+ {\@outputbox@reinsertbskip}}%
+ \@outputbox@attachfloats
+ \@outputbox@appendfootnotes
+}
+% \end{macrocode}
+% \end{plugdecl}
+%
+%
+%
+% \begin{plugdecl}{floats-footnotes}
+% All excess space has to be distributed across the existing
+% glue on the page, e.g., within the text galley, the
+% separation between blocks, etc.
+% The order is text, floats, footnotes.
+% \begin{macrocode}
+\NewSocketPlug {@makecol/outputbox}{floats-footnotes} {%
+ \@outputbox@attachfloats
+ \@outputbox@appendfootnotes
+% \end{macrocode}
+% We do reinsert the bottom skip from \cs{newpage} if it
% was taken out earlier. This is, strictly speaking, not necessary
% in most cases, but it is a \cs{vfil} while \cs{raggedbottom} is
% only generating \verb=\vspace{0pt plus .0001fil}=, so if you have
% several \cs{vfil} on the page before the \cs{newpage} you would
% alter the space distribution if one is taken out.
% \begin{macrocode}
- \@outputbox@reinsertbskip
- }
+ \@outputbox@reinsertbskip
+}
% \end{macrocode}
-% \end{macro}
+%
+% \end{plugdecl}
+%
+% \begin{plugdecl}{footnotes-floats}
+% \begin{macrocode}
+\NewSocketPlug {@makecol/outputbox}{footnotes-floats} {%
+ \@outputbox@appendfootnotes
+ \@outputbox@attachfloats
+ \@outputbox@reinsertbskip
+}
+% \end{macrocode}
+% The \texttt{footnote-floats} plug is the default used by
+% \LaTeX{}; it can be overwritten either through \pkg{footmisc} or
+% by assigning any of the other plugs (or by coding yet another
+% plug for the socket).
+% \begin{macrocode}
+\AssignSocketPlug {@makecol/outputbox}{footnotes-floats}
+% \end{macrocode}
+% \end{plugdecl}
+%
+%
+%
%
%
% \section {Replacement for the \pkg{footmisc} package}
@@ -532,13 +738,14 @@
%
% \section {Temp stuff that is related but should go to the kernel}
%
+% This is the code from \texttt{latex-lab-footnotes.dtx}.
% \begin{macrocode}
\input{latex-lab-footnotes.ltx}
% \end{macrocode}
%
%
% \begin{macrocode}
-%</code>
+%</package>
% \end{macrocode}
%
% \Finale
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdf b/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdf
index c0ec1ce19e..2846071100 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-sec.dtx b/macros/latex-dev/required/latex-lab/latex-lab-sec.dtx
index 5df3803b54..d20c55624b 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-sec.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-sec.dtx
@@ -16,6 +16,8 @@
%
% for those people who are interested or want to report an issue.
%
+\def\ltlabsecdate{2023-07-20}
+\def\ltlabsecversion{0.84a}
%<*driver>
\documentclass{l3doc}
\EnableCrossrefs
@@ -31,7 +33,7 @@
% \title{The \textsf{latex-lab-sec} package\\
% Changes related to the tagging of sectioning commands}
% \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}}
-% \date{v0.83 2023-06-07}
+% \date{v\ltlabsecversion\ \ltlabsecdate}
%
% \maketitle
%
@@ -147,7 +149,7 @@
%
% \section{Implementation}
% \begin{macrocode}
-\ProvidesExplPackage {latex-lab-testphase-sec} {2023-05-20} {0.81}
+\ProvidesExplPackage {latex-lab-testphase-sec} {\ltlabsecdate} {\ltlabsecversion}
{Code related to the tagging of sectioning commands}
% \end{macrocode}
%
@@ -177,10 +179,12 @@
% \begin{macrocode}
%<*kernelchange>
\ifdefined\directlua
- \pdfvariable gentounicode =1
- \protected\def\pdfglyphtounicode {\pdfextension glyphtounicode }
- \protected\edef\pdfgentounicode {\pdfvariable gentounicode}
- \input{glyphtounicode}
+ \ifnum\outputmode > 0
+ \pdfvariable gentounicode =1
+ \protected\def\pdfglyphtounicode {\pdfextension glyphtounicode }
+ \protected\edef\pdfgentounicode {\pdfvariable gentounicode}
+ \input{glyphtounicode}
+ \fi
\fi
\ifdefined\pdfglyphtounicode
\input{glyphtounicode-cmex}
@@ -437,45 +441,48 @@
% \end{macrocode}
% This redefines \cs{part} in article class.
% \begin{macrocode}
- \RenewDocumentCommand\part{ s O{#3} m }
+ \@ifundefined{part}{}
{
- \if@noskipsec \leavevmode \fi
- \par
- \addvspace{4ex}%
- \@afterindentfalse
+ \RenewDocumentCommand\part{ s O{#3} m }
+ {
+ \if@noskipsec \leavevmode \fi
+ \par
+ \addvspace{4ex}%
+ \@afterindentfalse
% \end{macrocode}
% This are the tagging commands needed at the begin. They open a Part structure
% and the structure for the title of the heading.
% \begin{macrocode}
% tagging start commands
- \tag_tool:n {sec-start-part=#2}
+ \tag_tool:n {sec-start-part=#2}
% end tagging start commands
% \end{macrocode}
% This adds a manual target if the part is unnumbered or starred.
% It replaces the hyperref patches.
% \begin{macrocode}
- \bool_lazy_any:nT
- {
- { #1 }
- {
- \int_compare_p:nNn {\c@secnumdepth}<{-1}
- }
- }
- {
- \MakeLinkTarget[part]{}
- }
+ \bool_lazy_any:nT
+ {
+ { #1 }
+ {
+ \int_compare_p:nNn {\c@secnumdepth}<{-1}
+ }
+ }
+ {
+ \MakeLinkTarget[part]{}
+ }
% \end{macrocode}
% The main call to the underlying commands.
% \begin{macrocode}
- \IfBooleanTF
- {#1}
- { \@spart {#3} }
- { \@part [#2]{#3} }
+ \IfBooleanTF
+ {#1}
+ { \@spart {#3} }
+ { \@part [#2]{#3} }
% \end{macrocode}
% and now the closing command for the tagging of the title.
% \begin{macrocode}
- \tag_tool:n {sec-stop-part}
- }
+ \tag_tool:n {sec-stop-part}
+ }
+ }
}
% \end{macrocode}
% Redefinitions for book and report
@@ -812,8 +819,8 @@
% \begin{macrocode}
%<*latex-lab>
-\ProvidesFile{sec-tagging-latex-lab-testphase.ltx}
- [2023-05-20 v0.82 code related to the tagging of sectioning commands]
+\ProvidesFile{sec-latex-lab-testphase.ltx}
+ [\ltlabsecdate\space v\ltlabsecversion\space latex-lab wrapper sec]
\RequirePackage{latex-lab-testphase-sec}
%</latex-lab>
% \end{macrocode}
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-sec.pdf b/macros/latex-dev/required/latex-lab/latex-lab-sec.pdf
index 917b5c9bcf..ca042a4314 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-sec.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-sec.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx b/macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx
index ce882030e8..b2ed5ecf8a 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx
@@ -41,11 +41,14 @@
% \section{Introduction}
%
% This code implements small files which can be loaded with the |testphase|
-% key of \cs{DocumentMetadata}. This will be extended to allow user to load
+% key of \cs{DocumentMetadata} and which bundle various testphase modules.
+% This will be extended to allow user to load
% well defined parts of the tagged PDF project.
-% Currently the values |phase-I|, |phase-II| and |new-or| are provided.
-% |tagpdf| is an undocumented alias for |phase-II| which is kept for compability.
%
+% Currently the values |phase-I|, |phase-II|, |phase-III| and |new-or| (bundles |new-or-1|
+% and |new-or-2|) are provided.
+% |tagpdf| is an undocumented alias for |phase-II| which is kept for compability.
+% The value |math| combines various math related files.
%
% \StopEventually{\setlength\IndexMin{200pt} \PrintIndex }
%
@@ -53,17 +56,12 @@
% \section{The Implementation}
% new-or-1 contains the code for header and footer (tagging and
% suppressing links) and is always loaded
-% \begin{macrocode}
-%<*new-or-1>
-\ProvidesFile{new-or-1-latex-lab-testphase.ltx}
- [2022-11-04 v0.1a latex-lab wrapper new-or-1]
-%</new-or-1>
-% \end{macrocode}
+
% new-or combines all new-or parts (currently 1+2)
% \begin{macrocode}
%<*new-or>
\ProvidesFile{new-or-latex-lab-testphase.ltx}
- [2022-11-04 v0.1a latex-lab wrapper new-or]
+ [2023-06-15 v0.1b latex-lab wrapper new-or]
%</new-or>
% \end{macrocode}
% \begin{macrocode}
@@ -75,17 +73,17 @@
% \begin{macrocode}
%<*phase-II>
\ProvidesFile{phase-II-latex-lab-testphase.ltx}
- [2022-11-04 v0.1a latex-lab wrapper phase-II]
+ [2023-06-15 v0.1b latex-lab wrapper phase-II]
%</phase-II>
% \end{macrocode}
% \begin{macrocode}
%<*phase-III>
\ProvidesFile{phase-III-latex-lab-testphase.ltx}
- [2023-03-06 v0.1a latex-lab wrapper phase-III]
+ [2023-07-20 v0.1b latex-lab wrapper phase-III]
\input{phase-II-latex-lab-testphase.ltx}
\IfFormatAtLeastTF{2023-06-01}
{
- \RequirePackage{latex-lab-testphase-block-tagging}
+ \RequirePackage{latex-lab-testphase-block}
\RequirePackage{latex-lab-testphase-sec}
\RequirePackage{latex-lab-testphase-toc}
\RequirePackage{latex-lab-testphase-minipage}
@@ -106,11 +104,11 @@
%</tagpdf>
% \end{macrocode}
% \begin{macrocode}
-%<*tagpdf|phase-I|phase-II|new-or|new-or-1>
+%<*tagpdf|phase-I|phase-II|new-or>
\RequirePackage{latex-lab-testphase-new-or-1}
-%</tagpdf|phase-I|phase-II|new-or|new-or-1>
+%</tagpdf|phase-I|phase-II|new-or>
% \end{macrocode}
-% New output routine code is loaded in phase-II and new-or:
+% Support for the new output routine code are loaded in phase-II and new-or:
% \begin{macrocode}
%<*tagpdf|phase-II|new-or>
\RequirePackage{latex-lab-testphase-new-or-2}
@@ -135,23 +133,23 @@
% \begin{macrocode}
%</tagpdf|phase-I|phase-II>
% \end{macrocode}
-% Wrapper files for math tagging:
+% testphase wrapper files for math:
% \begin{macrocode}
-%<*math-lab>
+%<*math>
\ProvidesFile{math-latex-lab-testphase.ltx}
- [2023-01-07 v0.8 code related to the math tagging]
+ [2023-07-20 v0.8a latex-lab wrapper math]
\RequirePackage{latex-lab-testphase-math}
-%</math-lab>
+%</math>
% \end{macrocode}
% \begin{macrocode}
-%<*math-sty>
+%<*math-package>
\ProvidesPackage{latex-lab-testphase-math}
- [2023-01-07 v0.8 code related to the math tagging]
-\input{latex-lab-mathtagging.ltx}
+ [2023-07-20 v0.8a code related to the math tagging]
+\input{latex-lab-math.ltx}
\input{latex-lab-amsmath.ltx}
\input{latex-lab-mathtools.ltx}
\input{latex-lab-mathpkg.ltx}
-%</math-sty>
+%</math-package>
% \end{macrocode}
% \Finale
%
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-testphase.pdf b/macros/latex-dev/required/latex-lab/latex-lab-testphase.pdf
index 4e48fddaa5..0fd13aba89 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-testphase.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-testphase.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-text.dtx b/macros/latex-dev/required/latex-lab/latex-lab-text.dtx
index 0f31c45969..4041336ecb 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-text.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-text.dtx
@@ -16,6 +16,9 @@
%
% for those people who are interested or want to report an issue.
%
+\def\ltlabtextdate{2023-07-20}
+\def\ltlabtextversion{0.85a}
+
%<*driver>
\documentclass{l3doc}
\EnableCrossrefs
@@ -30,7 +33,7 @@
% \title{The \textsf{latex-lab-text} package\\
% Changes and additions to the kernel related to the tagging of various small text commands}
% \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}}
-% \date{Version 0.80 2023-05-28}
+% \date{v\ltlabtextversion\ \ltlabtextdate}
%
% \maketitle
%
@@ -61,8 +64,8 @@
%<@@=tag>
% \end{macrocode}
% \begin{macrocode}
-\ProvidesExplPackage {latex-lab-testphase-text} {2023-05-28} {0.8}
- {Code related to the tagging of inline text commands}
+\ProvidesExplPackage {latex-lab-testphase-text} {\ltlabtextdate} {\ltlabtextversion}
+ {Code related to the tagging of various small text commands}
% \end{macrocode}
% \subsection{The \LaTeX\ and \TeX\ logo}
@@ -124,7 +127,8 @@
% \begin{macrocode}
%<*latex-lab>
\ProvidesFile{text-latex-lab-testphase.ltx}
- [2023-05-28 v0.8 code related to the tagging of bib and citations]
+ [\ltlabtextdate\space v\ltlabtextversion\space
+ code related to the tagging of various small text commands]
\RequirePackage{latex-lab-testphase-text}
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-text.pdf b/macros/latex-dev/required/latex-lab/latex-lab-text.pdf
index 1e38ccd59d..4940583de0 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-text.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-text.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.dtx b/macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.dtx
index 186f388a19..2f00b83c05 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.dtx
@@ -16,6 +16,8 @@
%
% for those people who are interested or want to report an issue.
%
+\def\ltlabtochyperdate{2023-07-20}
+\def\ltlabtochyperversion{0.85a}
%<*driver>
\documentclass{l3doc}
\EnableCrossrefs
@@ -29,7 +31,7 @@
% \title{The \textsf{latex-lab-toc-hyperref-changes} package\\
% Changes and additions to hyperref related to toc entries}
% \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}}
-% \date{Version 0.83 2023-06-07}
+% \date{v\ltlabtochyperversion\ \ltlabtochyperdate}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdf b/macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdf
index 722c82af28..e00a26b141 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx b/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx
index 1c1ce7f44e..632315a731 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-%% File: latex-lab-toc-kernel-functions.dtx (C) Copyright 2022-2023 LaTeX Project
+%% File: latex-lab-toc-kernel-changes.dtx (C) Copyright 2022-2023 LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -16,6 +16,9 @@
%
% for those people who are interested or want to report an issue.
%
+% dates for latex-lab-kernel-changes.sty (pulled from various sources, see ins)
+\def\ltlabkerneldate{2023-07-20}
+\def\ltlabkernelversion{0.85a}
%<*driver>
\documentclass{l3doc}
\EnableCrossrefs
@@ -56,6 +59,13 @@
% They are marked as [class]. They are inserted with hooks here: this will break
% if a non-standard class is used.
%
+% \subsection{Package declaration}
+% \begin{macrocode}
+%<*kernelchange>
+\ProvidesPackage{latex-lab-kernel-changes}
+ [\ltlabkerneldate\space v\ltlabkernelversion\space
+ General kernel and class changes]
+% \end{macrocode}
% \subsection{Providing the counter representation \cs{theHxx} generally}
% [kernel?]
%
@@ -67,7 +77,6 @@
%
% At first we suppress the patches from hyperref:
% \begin{macrocode}
-%<*kernelchange>
\def\hyper@nopatch@counter{}
% \end{macrocode}
%
@@ -461,13 +470,3 @@
% \begin{macrocode}
%</package>
% \end{macrocode}
-
-% \begin{macrocode}
-%<*latex-lab>
-\ProvidesFile{toc-tagging-latex-lab-testphase.ltx}
- [2023-05-20 v0.81 code related to the tagging of toc and similar lists]
-
-\RequirePackage{latex-lab-testphase-toc}
-
-%</latex-lab>
-% \end{macrocode}
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.pdf b/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.pdf
index 9994eebbf1..22016e835d 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.dtx b/macros/latex-dev/required/latex-lab/latex-lab-toc.dtx
index a39ace44e5..81f6676a80 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-toc.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-%% File: latex-lab-toc-tagging-functions.dtx (C) Copyright 2022-2023 LaTeX Project
+%% File: latex-lab-toc.dtx (C) Copyright 2022-2023 LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -16,22 +16,24 @@
%
% for those people who are interested or want to report an issue.
%
+\def\ltlabtocdate{2023-07-20}
+\def\ltlabtocversion{0.85a}
%<*driver>
\documentclass{l3doc}
\EnableCrossrefs
\CodelineIndex
\begin{document}
- \DocInput{latex-lab-toc-tagging-functions.dtx}
+ \DocInput{latex-lab-toc.dtx}
\end{document}
%</driver>
%
% \fi
%
%
-% \title{The \textsf{latex-lab-toc-tagging-functions} package\\
-% Tagpdf functions related to the tagging of toc and similar lists}
+% \title{The \textsf{latex-lab-toc} package\\
+% Changes related to the tagging of toc and similar lists}
% \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}}
-% \date{Version 0.82 2023-05-20}
+% \date{v\ltlabtocdate\ \ltlabtocversion}
%
% \maketitle
%
@@ -48,8 +50,8 @@
% Header for the testphase package
% \begin{macrocode}
%<*header>
-\ProvidesExplPackage {latex-lab-testphase-toc} {2023-05-20} {0.82}
- { commands related to the tagging of toc-like lists}
+\ProvidesExplPackage {latex-lab-testphase-toc} {\ltlabtocdate} {\ltlabtocversion}
+ { Code related to the tagging of toc-like lists}
%</header>
% \end{macrocode}
%
@@ -363,3 +365,13 @@
% \begin{macrocode}
%</package>
% \end{macrocode}
+% Wrapper for the testphase key.
+% \begin{macrocode}
+%<*latex-lab>
+\ProvidesFile{toc-latex-lab-testphase.ltx}
+ [\ltlabtocdate\space v\ltlabtocversion latex-lab wrapper toc]
+
+\RequirePackage{latex-lab-testphase-toc}
+
+%</latex-lab>
+% \end{macrocode}
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.pdf b/macros/latex-dev/required/latex-lab/latex-lab-toc.pdf
index 8f52a2cc16..64853b0e8b 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-toc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab.ins b/macros/latex-dev/required/latex-lab/latex-lab.ins
index 1989ddcfa3..a4aeb7289d 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab.ins
+++ b/macros/latex-dev/required/latex-lab/latex-lab.ins
@@ -66,87 +66,99 @@ where one can also log issues in case there are any.
% files that should be loadable with the testphase key should use the naming scheme
% #1-latex-lab-testphase.ltx
+
+%%% phases and bundles %%%
+% phases
\generate{\file{phase-I-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{phase-I}}}
\generate{\file{phase-II-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{phase-II}}}
\generate{\file{phase-III-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{phase-III}}}
-
+% obsolete
\generate{\file{tagpdf-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{tagpdf}}}
+
+%new-or (no style, only wrapper, private and not documentated)
\generate{\file{new-or-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{new-or}}}
-\generate{\file{new-or-1-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{new-or-1}}}
-\generate{\file{math-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{math-lab}}}
-\generate{\file{latex-lab-testphase-math.sty}{\from{latex-lab-testphase.dtx}{math-sty}}}
+% math
+\generate{\file{math-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{math}}}
+\generate{\file{latex-lab-testphase-math.sty}{\from{latex-lab-testphase.dtx}{math-package}}}
-% support files (the new-or code is a private package to make life easier)
-\generate{\file{latex-lab-testphase-new-or-2.sty}{\from{latex-lab-new-or-2.dtx}{code}}}
-\generate{\file{latex-lab-testphase-new-or-1.sty}{\from{latex-lab-new-or-1.dtx}{code}}}
+%%% support files loaded by phases and testphase modules %%%
+%footnotes
\generate{\file{latex-lab-footmisc.ltx}{\from{latex-lab-footnotes.dtx}{footmisc}}}
\generate{\file{latex-lab-footnotes.ltx}{\from{latex-lab-footnotes.dtx}{kernel}}}
-\generate{\file{latex-lab-mathtagging.ltx}{\from{latex-lab-mathtagging.dtx}{kernel}}}
+%new-or-2
+\generate{\file{latex-lab-testphase-new-or-2.sty}{\from{latex-lab-new-or-2.dtx}{package}}}
+
+%math
+\generate{\file{latex-lab-math.ltx}{\from{latex-lab-math.dtx}{kernel}}}
\generate{\file{latex-lab-amsmath.ltx}{\from{latex-lab-amsmath.dtx}{kernel}}}
\generate{\file{latex-lab-mathtools.ltx}{\from{latex-lab-mathtools.dtx}{kernel}}}
\generate{\file{latex-lab-mathpkg.ltx}{\from{latex-lab-mathpkg.dtx}{kernel}}}
-\generate{\file{latex-lab-testphase-sec.sty}{\from{latex-lab-sec.dtx}{package}}}
-\generate{\file{sec-tagging-latex-lab-testphase.ltx}{\from{latex-lab-sec.dtx}{latex-lab}}}
-
-
-\generate{\file{latex-lab-testphase-toc.sty}{%
- \from{latex-lab-toc-tagging-functions.dtx}{header}
- \from{latex-lab-toc-kernel-changes.dtx}{package}
- \from{latex-lab-toc-tagging-functions.dtx}{package}
- \from{latex-lab-toc-hyperref-changes.dtx}{package}}}
-
-\generate{\file{toc-tagging-latex-lab-testphase.ltx}{%
- \from{latex-lab-toc-kernel-changes.dtx}{latex-lab}}}
-
+% kernel changes need by more than one module
\generate{\file{latex-lab-kernel-changes.sty}
{\from{latex-lab-toc-kernel-changes.dtx}{kernelchange}
\from{latex-lab-sec.dtx}{kernelchange}
}}
-\generate{\file{latex-lab-testphase-graphic.sty}{%
- \from{latex-lab-graphic.dtx}{package}}}
+%%% single modules %%%
+%new-or-1
+\generate{\file{new-or-1-latex-lab-testphase.ltx}{\from{latex-lab-new-or-1.dtx}{latex-lab}}}
+\generate{\file{latex-lab-testphase-new-or-1.sty}{\from{latex-lab-new-or-1.dtx}{package}}}
-\generate{\file{graphic-latex-lab-testphase.ltx}{%
- \from{latex-lab-graphic.dtx}{latex-lab}}}
+%sec
+\generate{\file{sec-latex-lab-testphase.ltx}{\from{latex-lab-sec.dtx}{latex-lab}}}
+\generate{\file{latex-lab-testphase-sec.sty}{\from{latex-lab-sec.dtx}{package}}}
-\generate{\file{latex-lab-testphase-block-tagging.sty}{\from{latex-lab-block-tagging.dtx}{package}}}
-\generate{\file{block-tagging-latex-lab-testphase.ltx}{\from{latex-lab-block-tagging.dtx}{latex-lab}}}
-\generate{\file{latex-lab-testphase-minipage.sty}{%
- \from{latex-lab-minipage.dtx}{package}}}
+%toc
+\generate{\file{toc-latex-lab-testphase.ltx}{\from{latex-lab-toc.dtx}{latex-lab}}}
-\generate{\file{minipage-latex-lab-testphase.ltx}{%
- \from{latex-lab-minipage.dtx}{latex-lab}}}
-
- \generate{\file{latex-lab-testphase-float.sty}{%
- \from{latex-lab-float.dtx}{package}}}
+\generate{\file{latex-lab-testphase-toc.sty}{%
+ \from{latex-lab-toc.dtx}{header}
+ \from{latex-lab-toc-kernel-changes.dtx}{package}
+ \from{latex-lab-toc.dtx}{package}
+ \from{latex-lab-toc-hyperref-changes.dtx}{package}}}
-\generate{\file{float-latex-lab-testphase.ltx}{%
- \from{latex-lab-float.dtx}{latex-lab}}}
-
-\generate{\file{latex-lab-testphase-bib.sty}{%
- \from{latex-lab-bib.dtx}{package}}}
+%graphic
+\generate{\file{graphic-latex-lab-testphase.ltx}{\from{latex-lab-graphic.dtx}{latex-lab}}}
+\generate{\file{latex-lab-testphase-graphic.sty}{\from{latex-lab-graphic.dtx}{package}}}
+
+% block
+\generate{\file{latex-lab-testphase-block.sty}{\from{latex-lab-block.dtx}{package}}}
+\generate{\file{block-latex-lab-testphase.ltx}{\from{latex-lab-block.dtx}{latex-lab}}}
+
+% minipage
+\generate{\file{minipage-latex-lab-testphase.ltx}{\from{latex-lab-minipage.dtx}{latex-lab}}}
+\generate{\file{latex-lab-testphase-minipage.sty}{\from{latex-lab-minipage.dtx}{package}}}
-\generate{\file{bib-latex-lab-testphase.ltx}{%
- \from{latex-lab-bib.dtx}{latex-lab}}}
+%float
+\generate{\file{float-latex-lab-testphase.ltx}{\from{latex-lab-float.dtx}{latex-lab}}}
+\generate{\file{latex-lab-testphase-float.sty}{\from{latex-lab-float.dtx}{package}}}
-\generate{\file{latex-lab-testphase-text.sty}{%
- \from{latex-lab-text.dtx}{package}}}
+%bib
+\generate{\file{bib-latex-lab-testphase.ltx}{\from{latex-lab-bib.dtx}{latex-lab}}}
+\generate{\file{latex-lab-testphase-bib.sty}{\from{latex-lab-bib.dtx}{package}}}
-\generate{\file{text-latex-lab-testphase.ltx}{%
- \from{latex-lab-text.dtx}{latex-lab}}}
+%text
+\generate{\file{text-latex-lab-testphase.ltx}{\from{latex-lab-text.dtx}{latex-lab}}}
+\generate{\file{latex-lab-testphase-text.sty}{\from{latex-lab-text.dtx}{package}}}
-\generate{\file{latex-lab-testphase-firstaid.sty}{%
- \from{latex-lab-firstaid.dtx}{package}}}
+%firstaid
+\generate{\file{firstaid-latex-lab-testphase.ltx}{\from{latex-lab-firstaid.dtx}{latex-lab}}}
+\generate{\file{latex-lab-testphase-firstaid.sty}{\from{latex-lab-firstaid.dtx}{package}}}
-\generate{\file{firstaid-latex-lab-testphase.ltx}{%
- \from{latex-lab-firstaid.dtx}{latex-lab}}}
+% stop docstrip adding \endinput
+\preamble
+\endpreamble
+\postamble
+\endpostamble
+% namespace definitions
+\generate{\file{tagpdf-ns-latex-lab.def}{\from{latex-lab-namespace.dtx}{ns-latex-lab}}}
\endbatchfile