% \iffalse meta-comment % %% File: latex-lab-firstaid.dtx (C) Copyright 2023-2024 LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this % license or (at your option) any later version. The latest version % of this license is in the file % % https://www.latex-project.org/lppl.txt % % % The development version of the bundle can be found below % % https://github.com/latex3/latex2e/required/latex-lab % % for those people who are interested or want to report an issue. % \def\ltlabfirstaiddate{2024-03-18} \def\ltlabfirstaidversion{0.85c} %<*driver> \documentclass{l3doc} \EnableCrossrefs \CodelineIndex \begin{document} \DocInput{latex-lab-firstaid.dtx} \end{document} % % % \fi % % \title{The \textsf{latex-lab-firstaid} package\\ % Temporary patches to external packages needed for the tagging project} % \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}} % \date{v\ltlabfirstaidversion\ \ltlabfirstaiddate} % % \maketitle % % \newcommand{\xt}[1]{\textsl{\textsf{#1}}} % \newcommand{\TODO}[1]{\textbf{[TODO:} #1\textbf{]}} % \newcommand{\docclass}{document class \marginpar{\raggedright document class % customizations}} % % \providecommand\hook[1]{\texttt{#1}} % % \begin{abstract} % \end{abstract} % % \section{Introduction} % % The followings contains small temporary changes to external packages to avoid % errors with the new tagging code. % % Similar to the main firstaid package the goal is to remove the % patches once the packages have been updated. % \section{Implementation} % % \begin{macrocode} %<*package> %<@@=tag> % \end{macrocode} % \begin{macrocode} \ProvidesPackage {latex-lab-testphase-firstaid} [% \ltlabfirstaiddate\space v\ltlabfirstaiddate\space Temporary patches to external packages needed for the tagging project] % \end{macrocode} % \subsection{ams classes} % The amsart and amsbook classes do not use \cs{@author} to store the author list % but a command \cs{authors}. To be able to nevertheless use the authors in the % xmp-metadata we map \cs{@author} to this new command. % % \begin{macrocode} \AddToHook{class/amsart/after} {\def\@author{\authors}} \AddToHook{class/amsbook/after} {\def\@author{\authors}} % \end{macrocode} % % % % \subsection{verse} % % The \pkg{verse} package has its own definition of the % \env{verse} environment, which would tag correctly, except that % it is overwritten by the block code in the hook % \texttt{begindocument/before}. So the simplest way to make % tagging work is to reinstall the package version afterwards, % which is what we are doing here. % \begin{macrocode} \AddToHook{package/verse/after}[latex-lab-firstaid]{% \FirstAidNeededT{verse}{sty}{2014/05/10 v2.4b verse typesetting}% {% \AtBeginDocument{% \renewenvironment{verse}[1][\linewidth]{% \stepcounter{verse@envctr}% \setcounter{poemline}{0}\refstepcounter{poemline}% \setcounter{vslineno}{1}% \let\\=\@vscentercr \list{}{\itemsep \z@ \itemindent -\vindent \listparindent\itemindent \parsep \stanzaskip \ifdim #1 < \linewidth \rightmargin \z@ \setlength{\leftmargin}{\linewidth}% \addtolength{\leftmargin}{-#1}% \addtolength{\leftmargin}{-0.5\leftmargin}% \else \rightmargin \leftmargin \fi \addtolength{\leftmargin}{\vindent}}% \item[]% }% {\endlist}% }% }% } % \end{macrocode} % Of course, this means that the % optional argument of the environment then only accepts a length % value and not any more a key value list for altering the % environment settings. % % A more elabroate version could be something like this that allows % key/val and legacy interface. Or one could extend the list % template to support a \texttt{list-width} key. %\begin{verbatim} % \ExplSyntaxOn % \cs_new_protected:Npn \ExtractAndDropKey #1#2#3#4#5 { % \tl_set_eq:NN #4 \c_novalue_tl % or empty? % \keys_define:nn { #1 } { #2 .code:n = \tl_set:Nn #4{##1} } % \keys_set_known:nnN { #1 } { #3 } #5 % } % \ExplSyntaxOff % % % Change the env definition for verse matching verse.sty % % This keeps the verse.sty interface as it is and only adjusts the % % main environment to use the basic list env with the verse.sty % % specific settings. % \makeatletter % % \AddToHook{package/verse/after}{% % \AtBeginDocument{% % \RenewDocumentEnvironment{verse}{={verse-width}!O{\linewidth}}% % {% % \stepcounter{verse@envctr}% % \setcounter{poemline}{0}\refstepcounter{poemline}% % \setcounter{vslineno}{1}% % \let\\=\@vscentercr % % % \ExtractAndDropKey{verse}{verse-width}{#1}\@vswidth\@vsremainingkvlist % % If other keys have been specified but not verse-width we have no % % default for \@vswidth and need to set it again % \ExpandArgs{o}\IfNoValueT \@vswidth % {\def\@vswidth{\linewidth}}% % % % % This is a bit ugly but we can't stick \cs{@vsremainingkvlist} into % % the instance argument as keys are expected to be visible on % % top-level not hidden inside a macro. The alternative is to push % % in \verb=#1= but then the key/value \verb/verse-width=.../ is % % passed into the instance which is not known there (not harmful as % % it will get ignored but noticeably more and unnecessary % % processing). % % % \def\next##1{% % \UseInstance{blockenv}{list}% % {% % item-indent =-\vindent,% % parindent =-\vindent,% % par-skip =\stanzaskip,% % item-skip =0pt,% % leftmargin = (\linewidth-\@vswidth)/2+\vindent,% % rightmargin = \ifdim\@vswidth<\linewidth 0pt % \else (\linewidth-\@vswidth)/2\fi,% % ##1% % }}% % \ExpandArgs{o}\next\@vsremainingkvlist % \item\relax % }{\endblockenv}% % }% % } % \makeatother %\end{verbatim} % % % \subsection{blindtext} % % The blindtext package generates lists with nested \cs{loop} command. % The inner loop introduces a group around the list which error when lists are tagged % as \cs{@doendpe} is lost. % \begin{macrocode} \AddToHook{file/blindtext.sty/after}[latex-lab-firstaid]{% \FirstAidNeededT{blindtext}{sty}{\blindfiledate\space\blindfileversion\space% blindtext-Package}% {% \renewcommand{\blind@items}{% \setcounter{blind@listcount}{1}% \loop \ifblind@optional \ifblind@long \item[\blindtext@countitem] \blindtext@text \else \item[\blindtext@count] \blindtext@item \fi \else % \blind@optionalfalse \ifblind@long \item \blindtext@text \else \item \blindtext@countitem \fi \fi % \ifblind@optional {% \loop \ifnum\value{blindlistlevel}>\value{blindlist@level}% \stepcounter{blind@levelcount}% \blind@list[\value{blindlist}]\relax \addtocounter{blind@levelcount}{-1}% \setcounter{blind@listcount}{1}% \repeat \expandafter}\if@endpe\@doendpe\fi % <----------changed \ifnum\value{blind@listcount}<\value{blindlist}% \stepcounter{blind@listcount}% \repeat } }% } % \end{macrocode} % % % \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{package/cleveref/after} { \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} % % \end{macrocode} % % % \begin{macrocode} %<*latex-lab> \ProvidesFile{firstaid-latex-lab-testphase.ltx} [\ltlabfirstaiddate\space v\ltlabfirstaidversion\space latex-lab wrapper firstaid] \RequirePackage{latex-lab-testphase-firstaid} % % \end{macrocode}