diff options
Diffstat (limited to 'macros/latex-dev')
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 Binary files differindex f01d17db22..7b3c18298f 100644 --- a/macros/latex-dev/required/latex-lab/blocks-code.pdf +++ b/macros/latex-dev/required/latex-lab/blocks-code.pdf 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 Binary files differindex 416406acde..4e0408b361 100644 --- a/macros/latex-dev/required/latex-lab/blocks-doc.pdf +++ b/macros/latex-dev/required/latex-lab/blocks-doc.pdf 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 Binary files differindex 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 diff --git a/macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdf b/macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdf Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 diff --git a/macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf b/macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf Binary files differindex 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 diff --git a/macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf b/macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf Binary files differindex 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 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 Binary files differindex 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 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 Binary files differnew file mode 100644 index 0000000000..e0c02494ca --- /dev/null +++ b/macros/latex-dev/required/latex-lab/latex-lab-namespace.pdf 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 |