diff options
author | Karl Berry <karl@freefriends.org> | 2022-03-15 20:08:23 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-03-15 20:08:23 +0000 |
commit | 269db182a3b5d6df307e49e15092cbd1dd26d898 (patch) | |
tree | 3291c66dc473e571ccd897b781c5c39f776ba720 /Master/texmf-dist/source/latex-dev | |
parent | 664dc1f78cafa6dae96ff3bad0b0c4a5906dc9c2 (diff) |
latex-dev (15mar22)
git-svn-id: svn://tug.org/texlive/trunk@62725 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex-dev')
16 files changed, 426 insertions, 154 deletions
diff --git a/Master/texmf-dist/source/latex-dev/amsmath/amsmath.dtx b/Master/texmf-dist/source/latex-dev/amsmath/amsmath.dtx index d810e921db4..52509f95449 100644 --- a/Master/texmf-dist/source/latex-dev/amsmath/amsmath.dtx +++ b/Master/texmf-dist/source/latex-dev/amsmath/amsmath.dtx @@ -86,7 +86,7 @@ Bug reports can be opened (category \texttt{#1}) at\\% % \end{macrocode} % % \begin{macrocode} -\ProvidesPackage{amsmath}[2021/10/15 v2.17l AMS math features] +\ProvidesPackage{amsmath}[2022/02/03 v2.17m AMS math features] % \end{macrocode} % % \section{Catcode defenses} @@ -6130,15 +6130,16 @@ Cannot use `split' here;\MessageBreak trying to recover with `aligned'}% % in his \fn{amstex.doc} Spivak indicates those commands should never % be used on a first or last line. Perhaps better to leave the % question open unless/until real-life examples turn up. +% \changes{v2.17m}{2022/02/03}{Make \cs{shoveright} robust (if def is not trival)} % \begin{macrocode} \iftagsleft@ - \def\shoveright#1{% + \protected\def\shoveright#1{% #1% \hfilneg \hskip\multlinegap } \else - \def\shoveright#1{% + \protected\def\shoveright#1{% #1% \hfilneg \iftag@ @@ -6153,12 +6154,14 @@ Cannot use `split' here;\MessageBreak trying to recover with `aligned'}% \fi } \fi - +% \end{macrocode} +% \changes{v2.17m}{2022/02/03}{Make \cs{shoveleft} robust (if def is not trival)} +% \begin{macrocode} \if@fleqn \def\shoveleft#1{#1}% \else \iftagsleft@ - \def\shoveleft#1{% + \protected\def\shoveleft#1{% \setboxz@h{$\m@th\displaystyle{}#1$}% \setbox\@ne\hbox{$\m@th\displaystyle#1$}% \hfilneg @@ -6173,17 +6176,23 @@ Cannot use `split' here;\MessageBreak trying to recover with `aligned'}% \hskip\multlinegap \fi \hskip.5\wd\@ne - \hskip-.5\wdz@ +% \end{macrocode} +% \changes{v2.17m}{2022/02/03}{Added missing \cs{relax} for (gh/716)} +% \begin{macrocode} + \hskip-.5\wdz@ \relax #1% } \else - \def\shoveleft#1{% + \protected\def\shoveleft#1{% \setboxz@h{$\m@th\displaystyle{}#1$}% \setbox\@ne\hbox{$\m@th\displaystyle#1$}% \hfilneg \hskip\multlinegap \hskip.5\wd\@ne - \hskip-.5\wdz@ +% \end{macrocode} +% \changes{v2.17m}{2022/02/03}{Added missing \cs{relax} for (gh/716)} +% \begin{macrocode} + \hskip-.5\wdz@ \relax #1% } \fi diff --git a/Master/texmf-dist/source/latex-dev/amsmath/amsopn.dtx b/Master/texmf-dist/source/latex-dev/amsmath/amsopn.dtx index 20e63b63d78..22801e8cf13 100644 --- a/Master/texmf-dist/source/latex-dev/amsmath/amsopn.dtx +++ b/Master/texmf-dist/source/latex-dev/amsmath/amsopn.dtx @@ -58,7 +58,7 @@ Bug reports can be opened (category \texttt{#1}) at\\% % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX) [1994/12/01]% LaTeX date must December 1994 or later -\ProvidesPackage{amsopn}[2021/08/26 v2.02 operator names] +\ProvidesPackage{amsopn}[2022/01/20 v2.03 operator names] % \end{macrocode} % % What \cs{nolimits@} does is keep a \cn{limits} typed by the user @@ -198,8 +198,16 @@ Bug reports can be opened (category \texttt{#1}) at\\% % more accessible so that users can call this font for use in special % constructs that are not ordinary operator names but conceptually % related. +% +% \cs{operator@font} is also declared by the \LaTeX{} kernel (for +% at least 14 years), thus defining it here effectively means +% ``resetting it'' to the kernel value, which is counterproductive +% in situations where the user (or a class) has altered its +% definition and at a later point \pkg{amsopn} got added. +% \changes{v2.03}{2022/01/20}{Do not reset \cs{operator@font} it is +% already defined in the LaTeX kernel (gh/734)} % \begin{macrocode} -\def\operator@font{\mathgroup\symoperators} +%\def\operator@font{\mathgroup\symoperators} % commented out in 2.03 \def\operatorfont{\operator@font} % \end{macrocode} % \end{macro} diff --git a/Master/texmf-dist/source/latex-dev/base/latexrelease.dtx b/Master/texmf-dist/source/latex-dev/base/latexrelease.dtx index efdfa8c418f..294007553d3 100644 --- a/Master/texmf-dist/source/latex-dev/base/latexrelease.dtx +++ b/Master/texmf-dist/source/latex-dev/base/latexrelease.dtx @@ -40,7 +40,7 @@ %<*latexrelease> % \fi % \ProvidesFile{latexrelease.dtx} - [2021/04/29 v1.0n LaTeX release emulation and tests + [2022/02/28 v1.0o LaTeX release emulation and tests (including releases up to \latexreleaseversion)] % \iffalse %</latexrelease> @@ -487,10 +487,9 @@ % \begin{macro}{\sourceLaTeXdate} % \changes{v1.0l}{2021/01/23}{\cs{sourceLaTeXdate} added} % \changes{v1.0m}{2021/03/18}{Define \cs{sourceLaTeXdate} conditionally} -% Store the original \LaTeX{} format version -% as a number in the format |YYYYMMDD|. This macro has to -% be defined conditionally, so that it isn't changed in case -% \file{latexrelease.sty} is loaded twice (for tests), but it +% Store the original \LaTeX{} format version as a number in the format +% |YYYYMMDD |. This macro has to be defined conditionally, so that it +% isn't changed in case \file{latexrelease.sty} is reloaded, but it % can't be defined in the kernel only, otherwise % \file{latexrelease.sty} wouldn't work in older \LaTeX{} due % to the missing macro. @@ -619,7 +618,7 @@ of this package available from CTAN} \catcode58=11 % : \catcode126=10 % ~ \catcode32=09 % <space> - \xdef\latexrelease@postexpl{\unexpanded{% + \xdef\latexrelease@postltexpl{\unexpanded{% %<@@=latexrelease> % \end{macrocode} % @@ -691,14 +690,13 @@ of this package available from CTAN} % store each in \cs{l_@@_restores_tl}, save a copy, and redefine each. % \begin{macrocode} \tl_clear_new:N \l_@@_restores_tl -\cs_gset:Npn \@@_tmp:w #1 #2 +\cs_gset:Npn \@@_redefines:w #1 #2 { - \quark_if_recursion_tail_stop_do:Nn #1 - { \cs_undefine:N \@@_tmp:w } + \quark_if_recursion_tail_stop:N #1 \tl_put_right:Nn \l_@@_restores_tl {#1} \cs_set_eq:cN { @@_ \cs_to_str:N #1 } #1 \cs_set_eq:NN #1 #2 - \@@_tmp:w + \@@_redefines:w } % \end{macrocode} % @@ -731,12 +729,12 @@ of this package available from CTAN} % \end{description} % And here we go: % \begin{macrocode} -\@@_tmp:w +\@@_redefines:w \__kernel_chk_if_free_cs:N \use_none:n \e@alloc \@@_e@alloc:NnnnnN \__kernel_msg_error:nnx \use_none:nnn \msg_new:nnnn \msg_gset:nnnn - \NewDocumentCommand \DeclareDocumentCommand + % \NewDocumentCommand \DeclareDocumentCommand % after ltcmd.dtx \newcommand \@@_declare_command:w % \end{macrocode} % Temp addition \ldots @@ -752,6 +750,22 @@ of this package available from CTAN} \msg_redirect_name:nnn { hooks } { exists } { none } % \end{macrocode} % +% Now a one-off for |ltcmd.dtx|: we need to make \cs{NewDocumentCommand} +% not complain on an already existing command, but it has to be done +% after \cs{NewDocumentCommand} is defined, so this is separate from +% the \cs{latexrelease@postltexpl} actions above: +% \changes{v1.0o}{2022/02/28} +% {Move most redefinitions to right after ltexpl.dtx} +% \begin{macrocode} +\cs_gset_protected:Npn \latexrelease@postltcmd + { + \@@_redefines:w + \NewDocumentCommand \DeclareDocumentCommand + \q_recursion_tail \q_recursion_tail + \q_recursion_stop + } +% \end{macrocode} +% % \begin{macrocode} }}% \endgroup diff --git a/Master/texmf-dist/source/latex-dev/base/latexrelease.ins b/Master/texmf-dist/source/latex-dev/base/latexrelease.ins index 42cb5885685..cfba0f5c6e0 100644 --- a/Master/texmf-dist/source/latex-dev/base/latexrelease.ins +++ b/Master/texmf-dist/source/latex-dev/base/latexrelease.ins @@ -93,7 +93,7 @@ extension .ins) which are part of the distribution. \from{ltluatex.dtx} {latexrelease}% empty \from{ltexpl.dtx} {latexrelease}% empty \from{ltdefns.dtx} {latexrelease}% - \from{ltcmd.dtx} {latexrelease}% + \from{ltcmd.dtx} {latexrelease}% L3 layer module \from{lthooks.dtx} {latexrelease}% L3 layer module \from{ltcmdhooks.dtx} {latexrelease}% L3 layer module \from{ltalloc.dtx} {latexrelease}% empty diff --git a/Master/texmf-dist/source/latex-dev/base/ltbibl.dtx b/Master/texmf-dist/source/latex-dev/base/ltbibl.dtx index 9824ca539fd..4c219657b87 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltbibl.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltbibl.dtx @@ -32,7 +32,7 @@ %<*driver> % \fi \ProvidesFile{ltbibl.dtx} - [2020/12/10 v1.1s LaTeX Kernel (Bibliography)] + [2022/03/10 v1.1t LaTeX Kernel (Bibliography)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltbibl.dtx} @@ -199,8 +199,41 @@ % \begin{macro}{\cite} % \changes{v1.1j}{1995/10/16}{(DPC) Make robust} % \begin{macrocode} +%</2ekernel> +%<*2ekernel|latexrelease> +%<latexrelease>\IncludeInRelease{2022/06/01}% +%<latexrelease> {\cite}{check for blank}% \DeclareRobustCommand\cite{% - \@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}} + \@ifnextchar [{\@tempswatrue\@citex@checkblank}{\@tempswafalse\@citex@checkblank[]}} +% \end{macrocode} +% Due to the way \cs{@for} as used in \cs{@citex} behaves an empty +% argument to \cs{cite} did not produce any warning for a missing +% citation. So we now inject a command before calling \cs{@citex} that +% does the checking for us. It is not done in \cs{@citex} directly, +% because that command is altered by a number of packages/classes +% and this way it is more likely that the check survives. +% \changes{v1.1t}{2022/03/10}{Ensure that an empty argument generates +% a warning (gh/790)} +% \begin{macrocode} +\def\@citex@checkblank[#1]#2{% + \IfBlankTF {#2}% + {\@citex[#1]{\space}}% + {\@citex[#1]{#2}}% +} +%</2ekernel|latexrelease> +% \end{macrocode} +% +% \begin{macrocode} +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {\cite}{check for blank}% +%<latexrelease> +%<latexrelease>\DeclareRobustCommand\cite{% +%<latexrelease> \@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}} +%<latexrelease>\let\@citex@checkblank\@undefined +%<latexrelease> +%<latexrelease>\EndIncludeInRelease +%<*2ekernel> % \end{macrocode} % \end{macro} % diff --git a/Master/texmf-dist/source/latex-dev/base/ltcmd.dtx b/Master/texmf-dist/source/latex-dev/base/ltcmd.dtx index bf7ae4ea246..f52b32479ed 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltcmd.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltcmd.dtx @@ -34,8 +34,8 @@ %%% From File: ltcmd.dtx % % \begin{macrocode} -\def\ltcmdversion{v1.0j} -\def\ltcmddate{2021-12-31} +\def\ltcmdversion{v1.0k} +\def\ltcmddate{2022-02-28} % \end{macrocode} % %<*driver> @@ -4716,6 +4716,27 @@ % \end{macrocode} % \end{macro} % +% +% \begin{macro}{\IfBlankT, \IfBlankF, \IfBlankTF} +% Another simple re-naming. +% \changes{v1.0k}{2022/02/19}{Added \cs{IfBlankTF} and friends} +% \begin{macrocode} +%<latexrelease>\IncludeInRelease{2022/06/01}% +%<latexrelease> {\IfBlankTF}{Testing~for~empty~or~blank}% +\cs_new_eq:NN \IfBlankF \tl_if_blank:nF +\cs_new_eq:NN \IfBlankT \tl_if_blank:nT +\cs_new_eq:NN \IfBlankTF \tl_if_blank:nTF +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{2021/11/15}% +%<latexrelease> {\IfBlankTF}{Testing~for~empty~or~blank}% +%<latexrelease>\cs_undefine:N \IfBlankF +%<latexrelease>\cs_undefine:N \IfBlankT +%<latexrelease>\cs_undefine:N \IfBlankTF +%<latexrelease> +%<latexrelease>\EndIncludeInRelease +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\ProcessedArgument} % Processed arguments are returned using this name, which is reserved % here although the definition will change. @@ -4779,7 +4800,14 @@ %<latexrelease> %<latexrelease>\EndModuleRelease \ExplSyntaxOff -%<latexrelease>\@ifundefined{ExplSyntaxOff}{}{\latexrelease@postexpl} +% \end{macrocode} +% +% Now in |latexrelease| mode, redefine \cs{NewDocumentCommand} to not +% complain on commands already defined. +% \changes{v1.0k}{2022-02-28} +% {Move latexrelease redefinitions from ltcmd.dtx} +% \begin{macrocode} +%<latexrelease>\@ifundefined{ExplSyntaxOff}{}{\latexrelease@postltcmd} %<latexrelease>\catcode`\^^@=\@latexrelease@catcode@null\relax %</2ekernel|latexrelease> % \end{macrocode} diff --git a/Master/texmf-dist/source/latex-dev/base/ltexpl.dtx b/Master/texmf-dist/source/latex-dev/base/ltexpl.dtx index e6a83d57250..aab189bec28 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltexpl.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltexpl.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltexpl.dtx} - [2022/01/06 v1.3e LaTeX Kernel (expl3-dependent code)] + [2022/02/28 v1.3f LaTeX Kernel (expl3-dependent code)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltexpl.dtx} @@ -288,6 +288,14 @@ %<latexrelease>\EndIncludeInRelease % \end{macrocode} % +% Now in |latexrelease| mode, redefine a few commands to avoid ``already +% defined'' errors. +% \changes{v1.3f}{2022/02/28} +% {Move latexrelease redefinitions from ltcmd.dtx} +% \begin{macrocode} +%<latexrelease>\@ifundefined{ExplSyntaxOff}{}{\latexrelease@postltexpl} +% \end{macrocode} +% % \changes{v1.3a}{2021/01/21} % {Move \pkg{xparse} rollback code to \texttt{ltcmd.dtx}} % @@ -432,17 +440,17 @@ %<latexrelease>\IncludeInRelease{2022/06/01}% %<latexrelease> {\fpeval}{fp and int calculations}% \ExplSyntaxOn -\cs_new_eq:NN \fpeval \fp_eval:n +\cs_new_eq:NN \fpeval \fp_eval:n % \end{macrocode} % And a few more, this time wrappers around the e\TeX{} primitives. % \begin{macrocode} -\cs_new_eq:NN \inteval \int_eval:n +\cs_new_eq:NN \inteval \int_eval:n % \end{macrocode} % % \changes{v1.3d}{2021/12/07}{Added \cs{dimeval} and \cs{skipeval} (gh/711)} % \begin{macrocode} -\cs_new_eq:NN \dimeval \dim_eval:n -\cs_new_eq:NN \skipeval \skip_eval:n +\cs_new_eq:NN \dimeval \dim_eval:n +\cs_new_eq:NN \skipeval \skip_eval:n \ExplSyntaxOff % \end{macrocode} % \end{macro} @@ -452,7 +460,6 @@ %<latexrelease>\EndIncludeInRelease %<latexrelease>\IncludeInRelease{0000/00/00}% %<latexrelease> {\fpeval}{fp and int calculations}% - %<latexrelease> %<latexrelease>\let\fpeval\@undefined %<latexrelease>\let\inteval\@undefined @@ -503,7 +510,6 @@ %<latexrelease>\EndIncludeInRelease %<latexrelease>\IncludeInRelease{0000/00/00}% %<latexrelease> {\ExpandArgs}{Some pre-expansion commands}% - %<latexrelease> %<latexrelease>\let\UseName\@undefined %<latexrelease>\let\ExpandArgs\@undefined diff --git a/Master/texmf-dist/source/latex-dev/base/ltfilehook.dtx b/Master/texmf-dist/source/latex-dev/base/ltfilehook.dtx index 533aacbf2ba..af503b262f5 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltfilehook.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltfilehook.dtx @@ -31,8 +31,8 @@ %%% From File: ltfilehook.dtx % % \begin{macrocode} -\providecommand\ltfilehookversion{v1.0l} -\providecommand\ltfilehookdate{2021/08/27} +\providecommand\ltfilehookversion{v1.0m} +\providecommand\ltfilehookdate{2022/03/10} % \end{macrocode} % %<*driver> @@ -1046,7 +1046,8 @@ % % \subsection{Selecting a file (\cs{set@curr@file})} % -% \begin{macro}{\set@curr@file,\@curr@file,\@curr@file@reqd} +% \begin{macro}{\set@curr@file,\set@curr@file@nosearch} +% \begin{macro}{\@curr@file,\@curr@file@reqd} % \changes{v1.0f}{2021/01/31}{set \cs{protect} to \cs{string} gh/481} % Now we hook into \cs{set@curr@file} to resolve a possible file % substitution, and add \cs{@expl@@@filehook@set@curr@file@@nNN} @@ -1070,13 +1071,23 @@ % control sequence. % \changes{v1.0i}{2021/04/20} % {Make \string~ expand to a string (tracks change in l3kernel)} +% \changes{v1.0m}{2022/03/10} +% {Add \cs{set@curr@file@nosearch} for \pkg{graphicx}} % \begin{macrocode} %</2ekernel> %<*2ekernel|latexrelease> -%<latexrelease>\IncludeInRelease{2021/06/01}% +%<latexrelease>\IncludeInRelease{2022/06/01}% %<latexrelease> {\set@curr@file}{Setting current file name}% -\def\set@curr@file#1{% +\def\set@curr@file{% + \begingroup + \set@curr@file@aux} +\edef\set@curr@file@nosearch{% \begingroup + \let\noexpand\input@path\noexpand\@empty + \csname seq_clear:N\endcsname + \expandafter\noexpand\csname l_file_search_path_seq\endcsname + \noexpand\set@curr@file@aux} +\def\set@curr@file@aux#1{% \escapechar\m@ne \let\protect\string \edef~{\string~}% @@ -1117,6 +1128,32 @@ % \end{macrocode} % % \begin{macrocode} +%<latexrelease>\IncludeInRelease{2021/06/01}% +%<latexrelease> {\set@curr@file}{Setting current file name}% +%<latexrelease>\def\set@curr@file#1{% +%<latexrelease> \begingroup +%<latexrelease> \escapechar\m@ne +%<latexrelease> \let\protect\string +%<latexrelease> \edef~{\string~}% +%<latexrelease> \expandafter\def\csname\expandafter\endcsname +%<latexrelease> \expandafter{\csname\endcsname}% +%<latexrelease> \@expl@@@filehook@if@no@extension@@nTF{#1}% +%<latexrelease> {\@tempswatrue}{\@tempswafalse}% +%<latexrelease> \@kernel@make@file@csname\@curr@file +%<latexrelease> \@expl@@@filehook@resolve@file@subst@@w {#1}% +%<latexrelease> \@expl@@@filehook@if@file@replaced@@TF +%<latexrelease> {\@kernel@make@file@csname\@curr@file@reqd +%<latexrelease> \@expl@@@filehook@normalize@file@name@@w{#1}% +%<latexrelease> \if@tempswa \@expl@@@filehook@drop@extension@@N\@curr@file@reqd \fi}% +%<latexrelease> {\if@tempswa \@expl@@@filehook@drop@extension@@N\@curr@file \fi +%<latexrelease> \global\let\@curr@file@reqd\@curr@file}% +%<latexrelease> \@expl@@@filehook@clear@replacement@flag@@ +%<latexrelease> \endgroup} +%<latexrelease>\let\set@curr@file@nosearch\@undefined +%<latexrelease>\EndIncludeInRelease +% \end{macrocode} +% +% \begin{macrocode} %<latexrelease>\IncludeInRelease{2020/10/01}% %<latexrelease> {\set@curr@file}{Setting current file name}% %<latexrelease>\def\set@curr@file#1{% @@ -1136,6 +1173,7 @@ %<latexrelease> \global\let\@curr@file@reqd\@curr@file}% %<latexrelease> \@expl@@@filehook@clear@replacement@flag@@ %<latexrelease> \endgroup} +%<latexrelease>\let\set@curr@file@nosearch\@undefined %<latexrelease>\EndIncludeInRelease % \end{macrocode} % @@ -1152,6 +1190,7 @@ %<latexrelease> \csname\@firstofone#1\@empty\endcsname}}% %<latexrelease> \endgroup %<latexrelease>} +%<latexrelease>\let\set@curr@file@nosearch\@undefined %<latexrelease>\EndIncludeInRelease % \end{macrocode} % @@ -1159,10 +1198,12 @@ %<latexrelease>\IncludeInRelease{0000/00/00}% %<latexrelease> {\set@curr@file}{Setting current file name}% %<latexrelease>\let\set@curr@file\@undefined +%<latexrelease>\let\set@curr@file@nosearch\@undefined %<latexrelease>\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % \end{macro} +% \end{macro} % % % diff --git a/Master/texmf-dist/source/latex-dev/base/ltfinal.dtx b/Master/texmf-dist/source/latex-dev/base/ltfinal.dtx index 46c7ded4aac..4f3b3f15a15 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltfinal.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltfinal.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltfinal.dtx} - [2021/12/07 v2.2q LaTeX Kernel (Final Settings)] + [2022/02/20 v2.2r LaTeX Kernel (Final Settings)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltfinal.dtx} @@ -1037,10 +1037,14 @@ % \begin{macro}{\MakeUppercase} % \begin{macro}{\MakeUppercase} % \begin{macro}{\@uclclist} +% \begin{macro}{\@expl@text@lowercase@@n} +% \begin{macro}{\@expl@text@uppercase@@n} +% \begin{macro}{\@uclclist} +% % % \changes{v1.1a}{1997/10/20}{Removed \cs{aa} and \cs{AA} from % \cs{@uclclist} as these are macros.} -% +% \changes{v2.2r}{2022/02/20}{use \cs{text_lowercase:n}}% % And whilst we're doing things with uc/lc tables, here are two % commands to upper- and lower-case a string. % @@ -1051,7 +1055,18 @@ % mathematics, environment names, labels, etc. A much better % long-term solution is to use all-caps fonts, but these aren't % generally available. +% +% Two wrappers around the L3 case changing functions. +% |\protected| to make them mostly safe as replacements for |uppercase| +% and |\lowercase|. % \begin{macrocode} +\ExplSyntaxOn +\protected\def\@expl@text@lowercase@@n{\text_lowercase:n} +\protected\def\@expl@text@uppercase@@n{\text_uppercase:n} +\ExplSyntaxOff +% \end{macrocode} + +%% \begin{macrocode} \DeclareRobustCommand{\MakeUppercase}[1]{{% \def\i{I}\def\j{J}% \def\reserved@a##1##2{\let##1##2\reserved@a}% @@ -1059,20 +1074,16 @@ % \end{macrocode} % Tell UTF-8 processing to process chars even though we are in an \cs{protected@edef}. % \changes{v2.1h}{2019/09/14}{Expand UTF8 chars when case changing (github/177)} +% \changes{v2.2r}{2022/02/20} +% {Use \cs{@expl@text@uppercase@@n}, removing local redefinition of \cs{UTF@two@octets@noexpand}}% % \begin{macrocode} - \let\UTF@two@octets@noexpand\@empty - \let\UTF@three@octets@noexpand\@empty - \let\UTF@four@octets@noexpand\@empty - \protected@edef\reserved@a{\uppercase{#1}}% + \protected@edef\reserved@a{\@expl@text@uppercase@@n{#1}}% \reserved@a }} \DeclareRobustCommand{\MakeLowercase}[1]{{% \def\reserved@a##1##2{\let##2##1\reserved@a}% \expandafter\reserved@a\@uclclist\reserved@b{\reserved@b\@gobble}% - \let\UTF@two@octets@noexpand\@empty - \let\UTF@three@octets@noexpand\@empty - \let\UTF@four@octets@noexpand\@empty - \protected@edef\reserved@a{\lowercase{#1}}% + \protected@edef\reserved@a{\@expl@text@lowercase@@n{#1}}% \reserved@a }} % \end{macrocode} @@ -1108,6 +1119,9 @@ % \end{macro} % \end{macro} % \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % % \changes{v1.0h}{1994/05/13}{Added output enc stuff} % \changes{v1.0i}{1994/05/16}{moved output enc stuff to lfonts} diff --git a/Master/texmf-dist/source/latex-dev/base/ltkeys.dtx b/Master/texmf-dist/source/latex-dev/base/ltkeys.dtx index 0ff3d9cfa38..c606d8284d2 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltkeys.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltkeys.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltkeys.dtx} - [2022/02/04 v1.0b LaTeX Kernel (Kevyal options)] + [2022/02/21 v1.0e LaTeX Kernel (Kevyal options)] % \iffalse \documentclass{l3doc} \GetFileInfo{ltkeys.dtx} @@ -103,6 +103,17 @@ % \cs{ProcessKeyOptions}/\cs{ProcessKeyPackageOptions} act as package options. % \end{function} % +% \begin{function}{\DeclareUnknownKeyHandler} +% \begin{syntax} +% \cs{DeclareUnknownKeyHandler} \oarg{family} \marg{code} +% \end{syntax} +% The function \cs{DeclareUnknownKeyHandler} may be used to define +% the behavior when an undefined key is encountered. The \meta{code} +% will receive the unknown key name as |#1| and the value as |#2|. +% These can then be processed as appropriate, e.g.~by forwarding +% to another package. +% \end{function} +% % \begin{function}{\ProcessKeyOptions} % \begin{syntax} % \cs{ProcessKeyOptions} \oarg{family} @@ -153,6 +164,10 @@ % \subsection{Key properties} % % \begin{macro}{.code, .if, .store, .usage} +% \changes{v1.0b}{2022/02/05} +% {Create properties in \texttt{ltlkeys}} +% \changes{v1.0c}{2022/02/07} +% {Correct \texttt.{.code} property} % \begin{macrocode} \group_begin: \cs_set_protected:Npn \@@_tmp:nn #1#2 @@ -164,7 +179,7 @@ \@@_tmp:nn } \@@_tmp:nn - { code } { code } + { code:n } { code } { legacy_if_set:n } { if } { tl_set:N } { store } { usage:n } { usage } @@ -196,7 +211,8 @@ % \end{macrocode} % \end{variable} % -% \begin{macro}{\@@_options:Nn, \@@_options:NV} +% \begin{macro}{\@@_options:Nn} +% \begin{macro}{\@@_options:nN} % \changes{v1.0b}{2022/01/15} % {Clear option list in end-of-package hook} % \begin{macro}{\@@_options_end:} @@ -211,15 +227,17 @@ % in all cases. % \begin{macrocode} \cs_new_protected:Npn \@@_options:Nn #1#2 + { \@@_options_expand_module:Nn \@@_options:nN {#2} #1 } +\cs_new_protected:Npn \@@_options:nN #1#2 { - \cs_gset_nopar:cpn { opt@fam@\@currname.\@currext } {#2} + \cs_gset_nopar:cpn { opt@fam@\@currname.\@currext } {#1} \cs_set_protected:Npn \@@_option_end: { } \clist_clear:N \l_@@_options_clist - \@@_options_global:Nn #1 {#2} + \@@_options_global:Nn #2 {#1} \@@_options_local: - \keys_if_exist:nnF {#2} { unknown } + \keys_if_exist:nnF {#1} { unknown } { - \keys_define:nn {#2} + \keys_define:nn {#1} { unknown .code:n = { @@ -228,16 +246,15 @@ } } \cs_set_protected:Npn \@@_option_end: - { \keys_define:nn {#2} { unknown .undefine: } } + { \keys_define:nn {#1} { unknown .undefine: } } } \bool_set_true:N \l_@@_options_loading_bool - \keys_set:nV {#2} \l_@@_options_clist + \keys_set:nV {#1} \l_@@_options_clist \bool_set_false:N \l_@@_options_loading_bool \AtEndOfPackage { \cs_set_eq:NN \@unprocessedoptions \scan_stop: } \@@_option_end: - \@@_options_loaded:n {#2} + \@@_options_loaded:n {#1} } -\cs_generate_variant:Nn \@@_options:Nn { NV } \msg_new:nnnn { keys } { option-unknown } { Unknown~option~'#1'~for~package~#2. } { @@ -247,6 +264,7 @@ % \end{macrocode} % \end{macro} % \end{macro} +% \end{macro} % % \begin{macro}{\@@_options_global:Nn} % Global (class) options are handled differently for \LaTeXe{} packages @@ -355,38 +373,72 @@ % % \subsection{The document interfaces} % +% \begin{macrocode} +\cs_generate_variant:Nn \keys_define:nn { nx } +% \end{macrocode} +% +% \begin{macro}{\@@_options_expand_module:Nn} +% \changes{v1.0e}{2022/02/21} +% {Faster approach to module expansion} +% \begin{macro}{\@@_options_expand_module:nN} +% To deal with active characters inside the module argument whilst also +% expanding that argument, we use a combination of \texttt{c}- and +% \texttt{f}-type expansion. This works as the definitions for active +% UTF-8 bytes contain an \cs{ifincsname} test. +% \begin{macrocode} +\cs_new_protected:Npn \@@_options_expand_module:Nn #1#2 + { + \cs:w @@_options_expand_module:nN \use:e { \cs_end: {#2} } #1 + } +\cs_new_protected:Npn \@@_options_expand_module:nN #1#2 + { #2 {#1} } +% \end{macrocode} +% \end{macro} +% \end{macro} +% % \begin{macro}{\DeclareKeys} +% \changes{v1.0c}{2022/02/15}{Expand module argument} +% \changes{v1.0d}{2022/02/16}{Allow for active characters in module argument} % Defining key options is quite straight-forward: we have an intermediate % function to allow for potential set-up steps. % \begin{macrocode} -\NewDocumentCommand \DeclareKeys { o +m } +\NewDocumentCommand \DeclareKeys { O { \@currname } +m } + { \@@_options_expand_module:Nn \keys_define:nn {#1} {#2} } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DeclareUnknownKeyHandler} +% \changes{v1.0c}{2022/02/15}{Added \cs{DeclareUnknownKeysHandler}} +% \changes{v1.0d}{2022/02/16}{Allow for active characters in module argument} +% \changes{v1.0d}{2022/02/16} +% {Rename \cs{DeclareUnknownKeysHandler} to \cs{DeclareUnknownKeyHandler}} +% \begin{macrocode} +\NewDocumentCommand \DeclareUnknownKeyHandler { O { \@currname } +m } { - \IfNoValueTF {#1} - { \exp_args:NV \keys_define:nn \@currname } - { \keys_define:nn {#1} } - {#2} + \cs_set_protected:cpn { @@_unknown_handler_ #1 :nn } ##1##2 {#2} + \@@_options_expand_module:Nn \keys_define:nx {#1} + { + unknown .code:n = + \exp_not:N \exp_args:NV + \exp_not:c { @@_unknown_handler_ #1 :nn } + \exp_not:N \l_keys_key_str {####1} + } } % \end{macrocode} % \end{macro} % % \begin{macro}{\ProcessKeyOptions, \ProcessKeyPackageOptions} +% \changes{v1.0c}{2022/02/15}{Expand module argument} +% \changes{v1.0d}{2022/02/16}{Allow for active characters in module argument} % We need to deal with the older interface from \pkg{l3keys2e} here: it had % a mandatory argument. We can mop that up using a look-ahead, and then % exploit that information to determine whether the package option handling % is set up for the new approach for clash handling. % \begin{macrocode} -\NewDocumentCommand \ProcessKeyOptions { o } - { - \IfNoValueTF {#1} - { \@@_options:NV \c_true_bool \@currname } - { \@@_options:Nn \c_true_bool {#1} } - } -\NewDocumentCommand \ProcessKeyPackageOptions { o } - { - \IfNoValueTF {#1} - { \@@_options:NV \c_false_bool \@currname } - { \@@_options:Nn \c_false_bool {#1} } - } +\NewDocumentCommand \ProcessKeyOptions { O { \@currname } } + { \@@_options:Nn \c_true_bool {#1} } +\NewDocumentCommand \ProcessKeyPackageOptions { O { \@currname } } + { \@@_options:Nn \c_false_bool {#1} } \@onlypreamble \ProcessKeyOptions \@onlypreamble \ProcessKeyPackageOptions % \end{macrocode} @@ -462,15 +514,12 @@ % \subsection{General key setting} % % \begin{macro}{\SetKeys} +% \changes{v1.0c}{2022/02/15}{Expand module argument} +% \changes{v1.0d}{2022/02/16}{Allow for active characters in module argument} % A simple wrapper. % \begin{macrocode} -\NewDocumentCommand \SetKeys { o +m } - { - \IfNoValueTF {#1} - { \keys_set:Vn \@currname } - { \keys_set:nn {#1} } - {#2} - } +\NewDocumentCommand \SetKeys { O { \@currname } +m } + { \@@_options_expand_module:Nn \keys_set:nn {#1} {#2} } % \end{macrocode} % \end{macro} % diff --git a/Master/texmf-dist/source/latex-dev/base/ltvers.dtx b/Master/texmf-dist/source/latex-dev/base/ltvers.dtx index 0bf753f210b..e46851de01a 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltvers.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltvers.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltvers.dtx} - [2021/08/10 v1.1h LaTeX Kernel (Version Info)] + [2022/02/28 v1.1i LaTeX Kernel (Version Info)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltvers.dtx} @@ -115,7 +115,7 @@ {2022-06-01} %</2ekernel|latexrelease> %<*2ekernel> -\def\patch@level{-2} +\def\patch@level{-3} % \end{macrocode} % % \begin{macro}{\development@branch@name} @@ -365,6 +365,8 @@ % \changes{v1.1f}{2021/03/18}{Added \cs{NewModuleRelease}.} % \changes{v1.1g}{2021/04/16} % {\cs{NewModuleRelease} with the same arguments as \cs{IncludeInRelease}.} +% \changes{v1.1i}{2022/02/28} +% {Detect a missing \cs{IncludeInRelease}\texttt{\{0000/00/00\}}.} % \begin{macrocode} \let\if@skipping@module\iffalse \def\@skipping@moduletrue{\let\if@skipping@module\iftrue} @@ -379,7 +381,7 @@ \GenericInfo{}{BEGIN module: \new@modulename\space (\new@moduledate)}% \GenericInfo{}{ \@spaces\@spaces\@spaces\space#3\@gobble}% \ifnum\sourceLaTeXdate<% - \expandafter\@parse@version\new@moduledate//00\@nil\relax + \expandafter\@parse@version\new@moduledate//00\@nil\relax \ifnum\expandafter\@parse@version\fmtversion//00\@nil<% \expandafter\@parse@version\new@moduledate//00\@nil\relax \GenericInfo{}{Skipping module \new@modulename}% @@ -394,7 +396,19 @@ \@skipping@moduletrue \expandafter\new@module@skip \fi} -\long\def\new@module@skip#1\IncludeInRelease{\IncludeInRelease} +\long\def\new@module@skip#1\IncludeInRelease{% + \long\def\reserved@a##1\EndModuleRelease{}% + \if\relax\detokenize\expandafter{\reserved@a#1{}{}\EndModuleRelease}\relax + \else + \@latex@error{Missing mandatory \string\IncludeInRelease{0000/00/00}}\@ehc + \expandafter\@secondoftwo + \fi + \@gobble + {\@expandtwoargs\IncludeInRelease + {0000/00/00}{\new@modulename}% + {ERROR! Emergency recovery}% + #1}% + \IncludeInRelease} \def\EndModuleRelease{% \ifx\new@modulename\@empty \@latex@error{Extra \string\EndModuleRelease.}\@eha diff --git a/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx b/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx index a0c96357a03..8789dd35efd 100644 --- a/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx +++ b/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx @@ -216,7 +216,7 @@ %<+ts1> \ProvidesFile{ts1enc.dfu} %<+x2> \ProvidesFile{x2enc.dfu} %<+all> \ProvidesFile{utf8enc.dfu} -%<-utf8-2018> [2021/12/13 v1.2o UTF-8 support] +%<-utf8-2018> [2022/02/13 v1.3a UTF-8 support] % \end{macrocode} % % \begin{macrocode} @@ -363,11 +363,12 @@ % \begin{macro}{\UTFviii@two@octets@noexpand} % \begin{macro}{\UTFviii@three@octets@noexpand} % \begin{macro}{\UTFviii@four@octets@noexpand} +% \changes{v1.3a}{2022/02/19}{Use \cs{unexpanded} rather than \cs{noexpand} so only takes one expansion step}% % These temporarily prevent the active chars from expanding. % \begin{macrocode} -\long\def\UTF@two@octets@noexpand#1#2{\noexpand#2\noexpand} -\long\def\UTF@three@octets@noexpand#1#2#3{\noexpand#2\noexpand#3\noexpand} -\long\def\UTF@four@octets@noexpand#1#2#3#4{\noexpand#2\noexpand#3\noexpand#4\noexpand} +\long\def\UTF@two@octets@noexpand#1#2#3{\unexpanded{#2#3}} +\long\def\UTF@three@octets@noexpand#1#2#3#4{\unexpanded{#2#3#4}} +\long\def\UTF@four@octets@noexpand#1#2#3#4#5{\unexpanded{#2#3#4#5}} % \end{macrocode} % \end{macro} % \end{macro} @@ -376,11 +377,12 @@ % \begin{macro}{\UTFviii@two@octets@string} % \begin{macro}{\UTFviii@three@octets@string} % \begin{macro}{\UTFviii@four@octets@string} +% \changes{v1.3a}{2022/02/19}{Use \cs{detokenize} rather than \cs{string} so only takes one expansion step}% % And the same with \cs{string} for use in \cs{csname} constructions. % \begin{macrocode} -\long\def\UTF@two@octets@string#1#2{\string#2\string} -\long\def\UTF@three@octets@string#1#2#3{\string#2\string#3\string} -\long\def\UTF@four@octets@string#1#2#3#4{\string#2\string#3\string#4\string} +\long\def\UTF@two@octets@string#1#2#3{\detokenize{#2#3}} +\long\def\UTF@three@octets@string#1#2#3#4{\detokenize{#2#3#4}} +\long\def\UTF@four@octets@string#1#2#3#4#5{\detokenize{#2#3#4#5}} % \end{macrocode} % \end{macro} % \end{macro} @@ -542,15 +544,24 @@ % |\count@| and ending at |\@tempcnta|${} - 1$, each time executing % the code in |\UTFviii@tmp|. % -% All this is done in a group so that temporary catcode changes -% etc.~vanish after everything is set up. +% Store current settings so can restore after the loops without using a group (gh/762). +% +% \begin{macrocode} +\edef\reserved@a{% +\catcode`\noexpand\~=\the\catcode`\~\relax +\catcode`\noexpand\"=\the\catcode`\"\relax +\uccode`\noexpand\~=\the\uccode`\~\relax +\count@=\the\count@\relax +\@tempcnta=\the\@tempcnta\relax +\let\noexpand\reserved@a\relax} +% \end{macrocode} % % \begin{macrocode} -\begingroup \catcode`\~13 \catcode`\"12 % \end{macrocode} % +% \changes{v1.3a}{2022/02/19}{Use local protected definitions in the character definitions}% % \begin{macrocode} \def\UTFviii@loop{% \uccode`\~\count@ @@ -566,7 +577,7 @@ % C0 controls are valid UTF-8 but defined to give the ``Character not defined error'' % They may be defined with |\DeclareUnicodeCharacter|. % \begin{macrocode} - \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@undefined@err{:\string~}}} + \def\UTFviii@tmp{\protected\edef~{\noexpand\UTFviii@undefined@err{:\string~}}} % 0 ^^@ null \count@"1 \@tempcnta9 @@ -588,7 +599,7 @@ % \begin{macrocode} \count@"80 \@tempcnta"C2 - \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@invalid@err\string~}} + \def\UTFviii@tmp{\protected\edef~{\noexpand\UTFviii@invalid@err\string~}} \UTFviii@loop % \end{macrocode} % @@ -597,7 +608,7 @@ % \begin{macrocode} \count@"C2 \@tempcnta"E0 - \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@two@octets\noexpand~}} + \def\UTFviii@tmp{\protected\edef~{\noexpand\UTFviii@two@octets\noexpand~}} \UTFviii@loop % \end{macrocode} % @@ -605,7 +616,7 @@ % \begin{macrocode} \count@"E0 \@tempcnta"F0 - \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@three@octets\noexpand~}} + \def\UTFviii@tmp{\protected\edef~{\noexpand\UTFviii@three@octets\noexpand~}} \UTFviii@loop % \end{macrocode} % @@ -614,7 +625,7 @@ % \begin{macrocode} \count@"F0 \@tempcnta"F5 - \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@four@octets\noexpand~}} + \def\UTFviii@tmp{\protected\edef~{\noexpand\UTFviii@four@octets\noexpand~}} \UTFviii@loop % \end{macrocode} % @@ -623,12 +634,13 @@ % \begin{macrocode} \count@"F5 \@tempcnta"100 - \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@invalid@err\string~}} + \def\UTFviii@tmp{\protected\edef~{\noexpand\UTFviii@invalid@err\string~}} \UTFviii@loop % \end{macrocode} % +% Restore values after the loops. % \begin{macrocode} -\endgroup +\reserved@a % \end{macrocode} % % \end{macro} diff --git a/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx b/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx index fb8d3401373..1e6e286a737 100644 --- a/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx +++ b/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -%% File: latex2e-first-aid-for-external-files.dtx (C) Copyright 2020-2021 +%% File: latex2e-first-aid-for-external-files.dtx (C) Copyright 2020-2022 %% %% The LaTeX Project and any individual authors listed elsewhere %% in this file. @@ -99,7 +99,7 @@ % release we have to make and distribute also a matching % development release. % -% \StopEventually{\setlength\IndexMin{200pt} \PrintIndex } +% \MaybeStop{\setlength\IndexMin{200pt} \PrintIndex } % % % \section{The Implementation} @@ -111,8 +111,8 @@ % \end{macrocode} % % \begin{macrocode} -\def\LaTeXFirstAidDate{2021/11/11} -\def\LaTeXFirstAidVersion{v1.0q} +\def\LaTeXFirstAidDate{2022/02/20} +\def\LaTeXFirstAidVersion{v1.0r} % \end{macrocode} % % \begin{macrocode} @@ -311,11 +311,12 @@ %<*kernel> % \end{macrocode} % +% Bidi is now ar a new version: patches are no longer needed. % \begin{macrocode} -\AddToHook{file/biditools.sty/after}[firstaid]{% - \FirstAidNeededT{biditools}{sty}% - {2020/05/13 v2 Programming tools for bidi package}% - {% +%\AddToHook{file/biditools.sty/after}[firstaid]{% +% \FirstAidNeededT{biditools}{sty}% +% {2020/05/13 v2 Programming tools for bidi package}% +% {% % \end{macrocode} % \pkg{bidi} adds some code to the beginning of \cs{document} which % contains \cs{endgroup} and \cs{begingroup} which is no longer @@ -324,20 +325,20 @@ % Patching \cs{document} using \cs{bidi@patchcmd} doesn't work so % we take the extra groups out by hand: % \begin{macrocode} - \def\firstaid@bidi@document@patch - \endgroup#1\begingroup#2\firstaid@bidi@document@patch - {\unexpanded{#1#2}}% - \edef\document{\expandafter\firstaid@bidi@document@patch\document - \firstaid@bidi@document@patch}% +% \def\firstaid@bidi@document@patch +% \endgroup#1\begingroup#2\firstaid@bidi@document@patch +% {\unexpanded{#1#2}}% +% \edef\document{\expandafter\firstaid@bidi@document@patch\document +% \firstaid@bidi@document@patch}% % \end{macrocode} % There are also some patches into \cs{enddocument}, some continue % to go in but one fails, so we add that now into the right place. % \begin{macrocode} - \AddToHook{enddocument/info}% - {\let\bidi@AfterEndDocumentCheckLabelsRerun\@firstofone - \bidi@afterenddocumentchecklabelsrerunhook}% - }% -} +% \AddToHook{enddocument/info}% +% {\let\bidi@AfterEndDocumentCheckLabelsRerun\@firstofone +% \bidi@afterenddocumentchecklabelsrerunhook}% +% }% +%} % \end{macrocode} % % @@ -559,6 +560,30 @@ } % \end{macrocode} % +% \subsection{The \pkg{german} class first aid} +% +% Handling of \cs{protected} UTF-8 +% \begin{macrocode} +\AddToHook{file/german.sty/after}[firstaid]{% + \FirstAidNeededT{german}{sty}{1998/07/08 v2.5e Support for writing german texts (br)} + {% +\let\grmn@active@dq@\@active@dq +\def\@active@dq{\protect\grmn@active@dq@}% +\germanTeX +}% +} +% \end{macrocode} +% +% \begin{macrocode} +\AddToHook{file/ngerman.sty/after}[firstaid]{% + \FirstAidNeededT{ngerman}{sty}{1998/07/08 v2.5e Support for writing german texts (br)} + {% +\let\grmn@active@dq@\@active@dq +\def\@active@dq{\protect\grmn@active@dq@}% +\ngermanTeX +}% +} +% \end{macrocode} % % % diff --git a/Master/texmf-dist/source/latex-dev/graphics/graphics.dtx b/Master/texmf-dist/source/latex-dev/graphics/graphics.dtx index c9b381adad7..92b3c8f335a 100644 --- a/Master/texmf-dist/source/latex-dev/graphics/graphics.dtx +++ b/Master/texmf-dist/source/latex-dev/graphics/graphics.dtx @@ -27,7 +27,7 @@ %<driver> \ProvidesFile{graphics.drv} % \fi % \ProvidesFile{graphics.dtx} - [2021/03/04 v1.4d Standard LaTeX Graphics (DPC,SPQR)] + [2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR)] % % \iffalse %<*driver> @@ -1053,33 +1053,39 @@ % \edef{macrocode} % \end{macro} % -% \begin{macro}{\set@curr@file} +% \begin{macro}{\Gin@set@curr@file} % \begin{macro}{\quote@name} % \changes{v1.3c}{2019/10/08} % {Definitions added for old formats} +% \changes{v1.4e}{2022/03/10} +% {Use \cs{Gin@set@curr@file}, and define it appropriately} +% We have to cope with older formats (rollback as far as 2019-10-01) +% and Plain. Define a minimal \cs{Gin@set@curr@file} first: % \begin{macrocode} -\def\Gin@temp#1{% - \begingroup - \escapechar\m@ne - \xdef\@curr@file{\expandafter\string\csname #1\endcsname}% - \endgroup -} -\ifx\set@curr@file\@Gin@temp - \let\set@curr@file\@undefined -\fi -% \end{macrocode} -% -% \begin{macrocode} -\ifx\set@curr@file\@undefined -\def\set@curr@file#1{% +\def\Gin@set@curr@file#1{% \begingroup \escapechar\m@ne \xdef\@curr@file{\expandafter\string\csname\@firstofone#1\@empty\endcsname}% - \endgroup -} -\def\quote@name#1{"\quote@@name#1\@gobble""} -\def\quote@@name#1"{#1\quote@@name} -\def\unquote@name#1{\quote@@name#1\@gobble"} + \endgroup} +% \end{macrocode} +% Then, if \cs{set@curr@file@nosearch} is undefined, we're before +% 2022-06-01, and if \cs{set@curr@file} is undefined, we're before +% 2019-10-01 (aka Plain, as far as these tests are concerned). Make +% \cs{Gin@set@curr@file} be a copy of the most recent macro: +% \cs{set@curr@file@nosearch} if it exists, and \cs{set@curr@file} +% otherwise. If neither exist, we also need to define +% \cs{quote@name} et~al. +% \begin{macrocode} +\ifx\set@curr@file@nosearch\@undefined + \ifx\set@curr@file\@undefined + \def\quote@name#1{"\quote@@name#1\@gobble""} + \def\quote@@name#1"{#1\quote@@name} + \def\unquote@name#1{\quote@@name#1\@gobble"} + \else + \let\Gin@set@curr@file\set@curr@file + \fi +\else + \let\Gin@set@curr@file\set@curr@file@nosearch \fi % \end{macrocode} % \end{macro} @@ -1114,8 +1120,11 @@ % % \changes{v1.3d}{2019/11/01} % {\cs{curr@name} now unquoted} +% \changes{v1.4e}{2022/03/10} +% {Use \cs{set@curr@file@nosearch} to avoid premature inclusion of +% path from \cs{graphicspath}} % \begin{macrocode} - \set@curr@file{#1}% + \Gin@set@curr@file{#1}% \expandafter\filename@parse\expandafter{\@curr@file}% % \end{macrocode} % If extension is |.gz| tack on to previous extension, eg |.eps.gz| if available. diff --git a/Master/texmf-dist/source/latex-dev/graphics/mathcolor.dtx b/Master/texmf-dist/source/latex-dev/graphics/mathcolor.dtx index 6ed53f8f618..2341e71e284 100644 --- a/Master/texmf-dist/source/latex-dev/graphics/mathcolor.dtx +++ b/Master/texmf-dist/source/latex-dev/graphics/mathcolor.dtx @@ -14,8 +14,8 @@ %%% From File: mathcolor.dtx % % \begin{macrocode} -\def\mathcolorversion{v1.0a} -\def\mathcolordate{2022/01/07} +\def\mathcolorversion{v1.0b} +\def\mathcolordate{2022/01/28} % \end{macrocode} %<*driver> \documentclass{l3doc} @@ -165,7 +165,17 @@ % \begin{macrocode} \DeclareDocumentCommand \mathcolor { o m m } { % \end{macrocode} -% First action is to save the current color value on a stack +% The \cs{mathcolor} is only supported in math mode because in text +% mode it has problems scanning away a space after it, for example. +% We therefore raise an error if it executes +% anywhere else. The \LaTeXe{} error command is a +% bit strangely named, because in the kernel it is only used for +% math alphabets, but the message it gives is fine. +% \changes{v1.0b}{2022/01/28}{Restrict command to math mode} +% \begin{macrocode} + \mode_if_math:F { \non@alpherr {\mathcolor\space} } +% \end{macrocode} +% First real action is to save the current color value on a stack % (needed if the command is nested or contains some further color % changes with \cs{color} inside). % \begin{macrocode} diff --git a/Master/texmf-dist/source/latex-dev/tools/array.dtx b/Master/texmf-dist/source/latex-dev/tools/array.dtx index acee0ce5053..c9f77d77a35 100644 --- a/Master/texmf-dist/source/latex-dev/tools/array.dtx +++ b/Master/texmf-dist/source/latex-dev/tools/array.dtx @@ -33,7 +33,7 @@ %<+package>\DeclareCurrentRelease{}{2020-10-01} %<+package> %<+package>\ProvidesPackage{array} -%<+package> [2021/10/04 v2.5f Tabular extension package (FMi)] +%<+package> [2022/03/10 v2.5f Tabular extension package (FMi)] % % \fi % @@ -890,8 +890,8 @@ % c & 0 & 0 \\ % l & 0 & 1 \\ % r & 0 & 2 \\ -% p-arg & 0 & 3 \\ -% t-arg & 0 & 4 \\ +% m-arg & 0 & 3 \\ +% p-arg & 0 & 4 \\ % b-arg & 0 & 5 \\ % | & 1 & 0 \\ % !-arg & 1 & 1 \\ @@ -907,8 +907,8 @@ % @ & 7 & --- \\ % < & 8 & --- \\ % > & 9 & --- \\ -% p & 10 & 3 \\ -% t & 10 & 4 \\ +% m & 10 & 3 \\ +% p & 10 & 4 \\ % b & 10 & 5 % \end{tabular} % \end{center} |