diff options
Diffstat (limited to 'Master/texmf-dist/source/latex-dev/base')
18 files changed, 378 insertions, 222 deletions
diff --git a/Master/texmf-dist/source/latex-dev/base/doc.dtx b/Master/texmf-dist/source/latex-dev/base/doc.dtx index 82eb8dc5b88..946f187389f 100644 --- a/Master/texmf-dist/source/latex-dev/base/doc.dtx +++ b/Master/texmf-dist/source/latex-dev/base/doc.dtx @@ -34,9 +34,9 @@ %\catcode`\<=14 %<+package|shortvrb>\NeedsTeXFormat{LaTeX2e}[1994/12/01] %<+package> -%<+package>\providecommand\DeclareRelease[3]{} -%<+package>\providecommand\DeclareCurrentRelease[2]{} -%<+package> +% Any rollback request before 2016-02-15 we try to fullfil with the 2016 version: +%<+package>\DeclareRelease{}{1994-06-01} +%<+package> {doc-2016-02-15.sty} %<+package>\DeclareRelease{v2.1g}{2016-02-15} %<+package> {doc-2016-02-15.sty} %<+package>\DeclareRelease{v2}{2021-06-01} @@ -45,7 +45,7 @@ %<+package> %<+package>\ProvidesPackage{doc} %<+shortvrb>\ProvidesPackage{shortvrb} -%<+package|shortvrb> [2024/02/08 v3.0o +%<+package|shortvrb> [2024/04/26 v3.0p %<+package|shortvrb> Standard LaTeX documentation package V3 (FMi)] %\catcode`\<=12 % diff --git a/Master/texmf-dist/source/latex-dev/base/ltboxes.dtx b/Master/texmf-dist/source/latex-dev/base/ltboxes.dtx index a041312cc59..7e6c787ab89 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltboxes.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltboxes.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltboxes.dtx} - [2024/02/08 v1.4e LaTeX Kernel (Box Commands)] + [2024/04/22 v1.4f LaTeX Kernel (Box Commands)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltboxes.dtx} @@ -1011,7 +1011,7 @@ % set globally to false when they are definitely true. % % If anyone is unhappy with this argument then both flags should be -% treated as in |\set@nobreak|; otherwise this command will be +% treated as in |\@setnobreak|; otherwise this command will be % redundant. % \changes{v1.1a}{1996/10/24}{Added local settings of flags: dangerous!!} % \begin{macrocode} @@ -1487,9 +1487,40 @@ % % The |\nobreak| was added (1995/10/31) to allow hyphenation of the % final word of the paragraph. +% +% In 2024 we changed the macro to account for vertical mode. In +% that case we use a strut produced with \cs{hrule} to avoid +% starting a new paragraph (resulting in spurious extra line) and +% also account for the \cs{prevdepth} of the previous line. +% \changes{v1.4f}{2024/04/18} +% {Use a \cs{hrule} strut not a \cs{vrule} if already in +% vertical mode (bug seen first with footmisc/14)} % \begin{macrocode} +%</2ekernel> +%<*2ekernel|latexrelease> +%<latexrelease>\IncludeInRelease{2024/06/01}% +%<latexrelease> {\@finalstrut}{final strut correction}% \def\@finalstrut#1{% - \unskip\ifhmode\nobreak\fi\vrule\@width\z@\@height\z@\@depth\dp#1} + \unskip + \ifhmode \nobreak \vrule + \else + \ifdim \prevdepth=-\@m\p@ + \else + \vskip-\prevdepth + \fi + \hrule + \fi + \@width\z@\@height\z@\@depth\dp#1} +%</2ekernel|latexrelease> +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {\@finalstrut}{final strut correction}% +%<latexrelease>\def\@finalstrut#1{% +%<latexrelease> \unskip\ifhmode\nobreak\fi +%<latexrelease> \vrule\@width\z@\@height\z@\@depth\dp#1} +%<latexrelease> +%<latexrelease>\EndIncludeInRelease +%<*2ekernel> % \end{macrocode} % \end{macro} % diff --git a/Master/texmf-dist/source/latex-dev/base/ltclass.dtx b/Master/texmf-dist/source/latex-dev/base/ltclass.dtx index 1948db2c6b4..35bbb8a55a4 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltclass.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltclass.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltclass.dtx} - [2024/03/22 v1.5j LaTeX Kernel (Class & Package Interface)] + [2024/04/10 v1.5k LaTeX Kernel (Class & Package Interface)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltclass.dtx} @@ -1075,19 +1075,20 @@ % \begin{macrocode} %</2ekernel> %<*2ekernel|latexrelease> -%<latexrelease>\IncludeInRelease{2021/11/15}% -%<latexrelease> {\IfPackageLoadedtTF}{Test package loading}% +%<latexrelease>\IncludeInRelease{2024/06/01}% +%<latexrelease> {\IfPackageLoadedTF}{Test package loading}% \let \IfPackageLoadedTF \@ifpackageloaded \let \IfClassLoadedTF \@ifclassloaded \let \IfPackageLoadedWithOptionsTF \@ifpackagewith \let \IfClassLoadedWithOptionsTF \@ifclasswith % \end{macrocode} -% For rollback pretend it was available since the beginning of dawn. +% For rollback/rollforward pretend everything was available since +% the beginning of dawn. % \begin{macrocode} %</2ekernel|latexrelease> %<latexrelease>\EndIncludeInRelease %<latexrelease>\IncludeInRelease{0000/00/00}% -%<latexrelease> {\IfPackageLoadedtTF}{Test package loading}% +%<latexrelease> {\IfPackageLoadedTF}{Test package loading}% %<latexrelease> %<latexrelease>\let \IfPackageLoadedTF \@ifpackageloaded %<latexrelease>\let \IfClassLoadedTF \@ifclassloaded @@ -1102,6 +1103,99 @@ % % % +% \begin{macro}{ +% \IfPackageLoadedT,\IfPackageLoadedF, +% \IfPackageAtLeastT,\IfPackageAtLeastF, +% \IfClassAtLeastT,\IfClassAtLeastF, +% \IfFileAtLeastT,\IfFileAtLeastF, +% \IfFormatAtLeastT,\IfFormatAtLeastF, +% \IfPackageLoadedWithOptionsT,\IfPackageLoadedWithOptionsF, +% \IfClassLoadedT,\IfClassLoadedF, +% \IfClassLoadedWithOptionsF,\IfClassLoadedWithOptionTF +% } +% A few more conditionals for convenience +% \changes{v1.5k}{2024/04/10}{Provide T and F conditionals not just TF +% (gh/1262)} +% \begin{macrocode} +%</2ekernel> +%<*2ekernel|latexrelease> +%<latexrelease>\IncludeInRelease{2024/06/01}% +%<latexrelease> {\IfPackageLoadedT}{More conditionals}% +\def\IfPackageLoadedT #1#2{\IfPackageLoadedTF{#1}{#2}{}} +\def\IfPackageLoadedF #1{\IfPackageLoadedTF{#1}{}} +\def\IfClassLoadedT #1#2{\IfClassLoadedTF{#1}{#2}{}} +\def\IfClassLoadedF #1{\IfClassLoadedTF{#1}{}} +\def\IfPackageAtLeastT#1#2#3{\IfPackageAtLeastTF{#1}{#2}{#3}{}} +\def\IfPackageAtLeastF #1#2{\IfPackageAtLeastTF{#1}{#2}{}} +\def\IfClassAtLeastT #1#2#3{\IfClassAtLeastTF{#1}{#2}{#3}{}} +\def\IfClassAtLeastF #1#2{\IfClassAtLeastTF{#1}{#2}{}} +\def\IfFileAtLeastT #1#2#3{\IfFileAtLeastTF{#1}{#2}{#3}{}} +\def\IfFileAtLeastF #1#2{\IfFileAtLeastTF{#1}{#2}{}} +\def\IfFormatAtLeastT #1#2{\IfFormatAtLeastTF{#1}{#2}{}} +\def\IfFormatAtLeastF #1{\IfFormatAtLeastTF{#1}{}} +\def\IfPackageLoadedWithOptionsT #1#2#3{\IfPackageLoadedWithOptionsTF{#1}{#2}{#3}{}} +\def\IfPackageLoadedWithOptionsF #1#2{\IfPackageLoadedWithOptionsTF{#1}{#2}{}} +\def\IfClassLoadedWithOptionsT #1#2#3{\IfClassLoadedWithOptionsTF{#1}{#2}{#3}{}} +\def\IfClassLoadedWithOptionsF #1#2{\IfClassLoadedWithOptionsTF{#1}{#2}{}} +% \end{macrocode} +% +% \begin{macro}{\IfFileLoadedTF,\IfFileLoadedT,\IfFileLoadedF} +% These three commands haven't been there at all in the past. +% \changes{v1.5k}{2024/04/10}{Provide \cs{IfFileLoadedTF} and variants +% (gh/1222)} +% \begin{macrocode} +\def\IfFileLoadedTF#1{% + \expandafter\ifx\csname ver@#1\endcsname\relax + \expandafter\@secondoftwo + \else + \expandafter\@firstoftwo + \fi} +\def\IfFileLoadedT#1#2{\IfFileLoadedTF{#1}{#2}{}} +\def\IfFileLoadedF #1{\IfFileLoadedTF{#1}{}} +% \end{macrocode} +% For rollback/rollforward pretend everything was available since +% the beginning of dawn. +% \begin{macrocode} +%</2ekernel|latexrelease> +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {\IfPackageLoadedT}{More conditionals}% +%<latexrelease> +%<latexrelease>\def\IfPackageLoadedT #1#2{\IfPackageLoadedTF{#1}{#2}{}} +%<latexrelease>\def\IfPackageLoadedF #1{\IfPackageLoadedTF{#1}{}} +%<latexrelease>\def\IfClassLoadedT #1#2{\IfClassLoadedTF{#1}{#2}{}} +%<latexrelease>\def\IfClassLoadedF #1{\IfClassLoadedTF{#1}{}} +%<latexrelease>\def\IfPackageAtLeastT#1#2#3{\IfPackageAtLeastTF{#1}{#2}{#3}{}} +%<latexrelease>\def\IfPackageAtLeastF #1#2{\IfPackageAtLeastTF{#1}{#2}{}} +%<latexrelease>\def\IfClassAtLeastT #1#2#3{\IfClassAtLeastTF{#1}{#2}{#3}{}} +%<latexrelease>\def\IfClassAtLeastF #1#2{\IfClassAtLeastTF{#1}{#2}{}} +%<latexrelease>\def\IfFileAtLeastT #1#2#3{\IfFileAtLeastTF{#1}{#2}{#3}{}} +%<latexrelease>\def\IfFileAtLeastF #1#2{\IfFileAtLeastTF{#1}{#2}{}} +%<latexrelease>\def\IfFormatAtLeastT #1#2{\IfFormatAtLeastTF{#1}{#2}{}} +%<latexrelease>\def\IfFormatAtLeastF #1{\IfFormatAtLeastTF{#1}{}} +%<latexrelease>\def\IfPackageLoadedWithOptionsT #1#2#3{\IfPackageLoadedWithOptionsTF{#1}{#2}{#3}{}} +%<latexrelease>\def\IfPackageLoadedWithOptionsF #1#2{\IfPackageLoadedWithOptionsTF{#1}{#2}{}} +%<latexrelease>\def\IfClassLoadedWithOptionsT #1#2#3{\IfClassLoadedWithOptionsTF{#1}{#2}{#3}{}} +%<latexrelease>\def\IfClassLoadedWithOptionsF #1#2{\IfClassLoadedWithOptionsTF{#1}{#2}{}} +%<latexrelease> +%<latexrelease>\def\IfFileLoadedTF#1{% +%<latexrelease> \expandafter\ifx\csname ver@#1\endcsname\relax +%<latexrelease> \expandafter\@secondoftwo +%<latexrelease> \else +%<latexrelease> \expandafter\@firstoftwo +%<latexrelease> \fi} +%<latexrelease>\def\IfFileLoadedT#1#2{\IfFileLoadedTF{#1}{#2}{}} +%<latexrelease>\def\IfFileLoadedF #1{\IfFileLoadedTF{#1}{}} +%<latexrelease> +%<latexrelease>\EndIncludeInRelease +%<*2ekernel> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% +% % \begin{macro}{\ProvidesPackage} % Checks that the current filename is correct, and defines % |\ver@filename|. diff --git a/Master/texmf-dist/source/latex-dev/base/ltcmd.dtx b/Master/texmf-dist/source/latex-dev/base/ltcmd.dtx index f57ceeedff0..69bd162e56b 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.2d} -\def\ltcmddate{2024-03-21} +\def\ltcmdversion{v1.2e} +\def\ltcmddate{2024-04-17} % \end{macrocode} % %<*driver> @@ -4552,6 +4552,8 @@ % \changes{v1.0l}{2022/03/18}{Fix \cs{@@_cmd_type_cases:NnnnnF} % prematurely expanding macros (gh/795)} % \changes{v1.2b}{2023/12/01}{Extend for optimized commands} +% \changes{v1.2e}{2024/04/17}{Use \cs{__kernel_cs_parameter_spec:N} instead +% of \cs{cs_argument_spec:N}/\cs{cs_parameter_spec:N}} % \begin{macro}{\@@_cmd_if_xparse_aux:N} % % To determine whether the command is an \pkg{xparse} command check @@ -4570,7 +4572,7 @@ { \exp_args:Ne \str_case_e:nnF { - \exp_args:Nf \tl_if_empty:nT { \cs_argument_spec:N #1 } + \exp_args:Nf \tl_if_empty:nT { \__kernel_cs_parameter_spec:N #1 } { \exp_not:N \exp_not:n { \exp_not:e { \tl_head:N #1 } } } } { diff --git a/Master/texmf-dist/source/latex-dev/base/ltcmdhooks.dtx b/Master/texmf-dist/source/latex-dev/base/ltcmdhooks.dtx index a3c89b48a9a..f8a8699d7ed 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltcmdhooks.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltcmdhooks.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -%%% From File: ltcmdhooks.dtx +%% From File: ltcmdhooks.dtx %% Copyright (C) 2020-2024 %% Frank Mittelbach, Phelype Oleinik, The LaTeX Project % @@ -20,7 +20,7 @@ %<*driver> % \fi \ProvidesFile{ltcmdhooks.dtx} - [2024/03/09 v1.0i LaTeX Kernel (Command hooks)] + [2024/04/17 v1.0j LaTeX Kernel (Command hooks)] % \iffalse % \documentclass{l3doc} @@ -406,6 +406,8 @@ % \end{macrocode} % % \changes{v1.0b}{2021/05/24}{Use \cs{msg_...} instead of \cs{__kernel_msg...}} +% \changes{v1.0j}{2024/04/17}{Use \cs{__kernel_cs_parameter_spec:N} instead +% of \cs{cs_argument_spec:N}/\cs{cs_parameter_spec:N}} % % \begin{macrocode} %<*2ekernel|latexrelease> @@ -850,14 +852,14 @@ \@@_patch_debug:x { ++~command~can~be~patched~without~rescanning } % \end{macrocode} % We'll start by counting the number of arguments in the command by -% counting the number of characters in the \cs{cs_argument_spec:N} of +% counting the number of characters in the \cs{cs_parameter_spec:N} of % the macro, divided by two, and subtracting one if the command has an % optional argument (that is, an extra |[]| in its % \meta{parameter text}). % \begin{macrocode} \int_set:Nn \l_@@_patch_num_args_int { - \exp_args:Nf \str_count:n { \cs_argument_spec:N #2 } / 2 + \exp_args:Nf \str_count:n { \__kernel_cs_parameter_spec:N #2 } / 2 \bool_if:NT #1 { -1 } } % \end{macrocode} @@ -1010,7 +1012,7 @@ %<latexrelease> \@@_patch_debug:x { ++~command~can~be~patched~without~rescanning } %<latexrelease> \int_set:Nn \l_@@_patch_num_args_int %<latexrelease> { -%<latexrelease> \exp_args:Nf \str_count:n { \cs_argument_spec:N #2 } / 2 +%<latexrelease> \exp_args:Nf \str_count:n { \__kernel_cs_parameter_spec:N #2 } / 2 %<latexrelease> \bool_if:NT #1 { -1 } %<latexrelease> } %<latexrelease> \int_compare:nNnTF { \l_@@_patch_num_args_int } > { \c_zero_int } @@ -1260,12 +1262,12 @@ % top-level macro with no arguments, so testing this first would % short-circuit \tn{robust@command@act} and the top-level macros would % be incorrectly patched. In that case, we just check if the -% \cs{cs_argument_spec:N} is empty, and call +% \cs{cs_parameter_spec:N} is empty, and call % \cs{@@_patch_expand_redefine:NNnn}. % \begin{macrocode} \cs_new_protected:Npn \@@_retokenize_patch:Nnn #1 #2 #3 { - \str_if_eq:eeTF { \cs_argument_spec:N #1 } { } + \str_if_eq:eeTF { \__kernel_cs_parameter_spec:N #1 } { } { \@@_patch_expand_redefine:NNnn \c_false_bool #1 {#2} {#3} } { \@@_patch_debug:x { ..~command~can~only~be~patched~by~rescanning } diff --git a/Master/texmf-dist/source/latex-dev/base/ltdefns.dtx b/Master/texmf-dist/source/latex-dev/base/ltdefns.dtx index db05962505c..d9ec12e75a6 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltdefns.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltdefns.dtx @@ -32,7 +32,7 @@ %<*driver> % \fi \ProvidesFile{ltdefns.dtx} - [2024/02/29 v1.5s LaTeX Kernel (definition commands)] + [2024/04/17 v1.5t LaTeX Kernel (definition commands)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltdefns.dtx} @@ -91,6 +91,9 @@ % \changes{v1.4b}{2015/02/21} % {Removed autoload support} % \changes{v1.5l}{2020/08/21}{Integration of new hook management interface} +% \changes{v1.5t}{2024/04/17} +% {Rename \cs{@expl@cs@argument@spec@@N} to +% \cs{@expl@cs@parameter@spec@@N} (gh/1014)} % % \section{Definitions} % @@ -2020,7 +2023,7 @@ \long\def\@show@newcommand@aux#1#2#3{% \typeout{> \string#1=\@expl@cs@prefix@spec@@N#1macro:}% #3{default \string##1=\expandafter\detokenize\@gobblethree#2.^^J% - \@expl@cs@argument@spec@@N#1->\@expl@cs@replacement@spec@@N#1}} + \@expl@cs@parameter@spec@@N#1->\@expl@cs@replacement@spec@@N#1}} % \end{macrocode} % \end{macro} % \end{macro} @@ -2121,7 +2124,7 @@ \@show@environment@end#1} \long\def\@show@environment@begin#1{% \typeout{> \string\begin{\@expl@cs@to@str@@N#1}=environment:}% - \typeout{\@expl@cs@argument@spec@@N#1->% + \typeout{\@expl@cs@parameter@spec@@N#1->% \@expl@cs@replacement@spec@@N#1.^^J}} % \end{macrocode} % \end{macro} @@ -2143,7 +2146,7 @@ \long\def\@show@environment@end@aux#1#2{% \@show@tokens{\string\end{\@expl@cs@to@str@@N#2}% \ifx\relax#1=undefined% - \else:^^J\@expl@cs@argument@spec@@N#1->% + \else:^^J\@expl@cs@parameter@spec@@N#1->% \@expl@cs@replacement@spec@@N#1% \fi}} % \end{macrocode} @@ -2162,7 +2165,7 @@ % \begin{macrocode} \def\@show@nonstop#1{% \typeout{> \string#1=\@expl@cs@prefix@spec@@N#1macro:^^J% - \@expl@cs@argument@spec@@N#1->\@expl@cs@replacement@spec@@N#1.}} + \@expl@cs@parameter@spec@@N#1->\@expl@cs@replacement@spec@@N#1.}} \def\@show@typeout#1{\typeout{> #1.^^J}} % \end{macrocode} % \end{macro} diff --git a/Master/texmf-dist/source/latex-dev/base/ltdirchk.dtx b/Master/texmf-dist/source/latex-dev/base/ltdirchk.dtx index d06f68a706d..917431552b7 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltdirchk.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltdirchk.dtx @@ -263,6 +263,10 @@ % In current formats enable primitives with unprefixed names. % the \textsf{latexrelease} guards allow the primitives to be % defined with a |\luatex| prefix if older formats are specified. +% +% The unprefixed forms are \emph{not} undefined for improved +% compatibility with external packages when rolling back +% the format. % \begin{macrocode} %</initex> %</dircheck> @@ -280,25 +284,6 @@ %<latexrelease> "luatex", %<latexrelease> tex.extraprimitives("core","omega", "aleph", "luatex") %<latexrelease> ) -%<latexrelease> local i -%<latexrelease> local t = { } -%<latexrelease> for _,i in pairs(tex.extraprimitives("luatex")) do -%<latexrelease> if not string.match(i,"^U") then -%<latexrelease> if not string.match(i, "^luatex") then -%<latexrelease> table.insert(t,i) -%<latexrelease> end -%<latexrelease> else -%<latexrelease> if string.match(i,"^Uchar$") then -%<latexrelease> table.insert(t,i) -%<latexrelease> end -%<latexrelease> end -%<latexrelease> end -%<latexrelease> for _,i in pairs(t) do -%<latexrelease> tex.print( -%<latexrelease> "\noexpand\\let\noexpand\\" .. i -%<latexrelease> .. "\noexpand\\undefined" -%<latexrelease> ) -%<latexrelease> end %<latexrelease>} %<latexrelease>\EndIncludeInRelease %<latexrelease>\fi diff --git a/Master/texmf-dist/source/latex-dev/base/ltexpl.dtx b/Master/texmf-dist/source/latex-dev/base/ltexpl.dtx index 4aaf799e325..410235a056c 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} - [2023/10/13 v1.3g LaTeX Kernel (expl3-dependent code)] + [2024/04/17 v1.3h LaTeX Kernel (expl3-dependent code)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltexpl.dtx} @@ -356,9 +356,19 @@ % \changes{v1.2e}{2020/08/19} % {Add \cs{@expl@cs@\meta{thing}@spec@@N} % for \cs{ShowCommand} (gh/373)} +% \changes{v1.3h}{2024/04/17} +% {Rename \cs{@expl@cs@argument@spec@@N} to +% \cs{@expl@cs@parameter@spec@@N} (gh/1014)} +% \changes{v1.3h}{2024/04/17} +% {Update name of \pkg{expl3} function} +% \changes{v1.3h}{2024/04/17} +% {Add a kernel-level copy of \cs{cs_parameter_spec:N}} % \begin{macrocode} \cs_gset_eq:NN \@expl@cs@prefix@spec@@N \cs_prefix_spec:N -\cs_gset_eq:NN \@expl@cs@argument@spec@@N \cs_argument_spec:N +\cs_if_exist:NTF \cs_parameter_spec:N + { \cs_gset_eq:NN \@expl@cs@parameter@spec@@N \cs_parameter_spec:N } + { \cs_gset_eq:NN \@expl@cs@parameter@spec@@N \cs_argument_spec:N } +\cs_gset_eq:NN \__kernel_cs_parameter_spec:N \@expl@cs@parameter@spec@@N \cs_gset_eq:NN \@expl@cs@replacement@spec@@N \cs_replacement_spec:N % \end{macrocode} % @@ -387,7 +397,7 @@ %<latexrelease>\let \@expl@cs@to@str@@N \@undefined %<latexrelease>\let \@expl@str@if@eq@@nnTF \@undefined %<latexrelease>\let \@expl@cs@prefix@spec@@N \@undefined -%<latexrelease>\let \@expl@cs@argument@spec@@N \@undefined +%<latexrelease>\let \@expl@cs@parameter@spec@@N \@undefined %<latexrelease>\let \@expl@cs@replacement@spec@@N \@undefined %<latexrelease>\let \@expl@str@map@function@@NN \@undefined %<latexrelease>\EndIncludeInRelease diff --git a/Master/texmf-dist/source/latex-dev/base/ltfloat.dtx b/Master/texmf-dist/source/latex-dev/base/ltfloat.dtx index a07e5e81dae..ef057def0b8 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltfloat.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltfloat.dtx @@ -31,7 +31,7 @@ % %<*driver> % \fi -\ProvidesFile{ltfloat.dtx}[2021/10/14 v1.2g LaTeX Kernel (Floats)] +\ProvidesFile{ltfloat.dtx}[2024/04/22 v1.2g LaTeX Kernel (Floats)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltfloat.dtx} @@ -559,7 +559,7 @@ % set globally to false when they are definitely true. % % If anyone is unhappy with this argument then both flags should be -% treated as in |\set@nobreak|; otherwise this command will be +% treated as in |\@setnobreak|; otherwise this command will be % redundant. % \changes{v1.1p}{1996/10/24} % {Added local settings of flags: dangerous!!} @@ -1061,7 +1061,7 @@ % set globally to false when they are definitely true. % % If anyone is unhappy with this argument then both flags should be -% treated as in |\set@nobreak|; otherwise this command will be +% treated as in |\@setnobreak|; otherwise this command will be % redundant. % \changes{v1.1p}{1996/10/24} % {Added local settings of flags: dangerous!!} diff --git a/Master/texmf-dist/source/latex-dev/base/lthooks.dtx b/Master/texmf-dist/source/latex-dev/base/lthooks.dtx index 7e02aa4fd59..d282ff841c7 100644 --- a/Master/texmf-dist/source/latex-dev/base/lthooks.dtx +++ b/Master/texmf-dist/source/latex-dev/base/lthooks.dtx @@ -32,7 +32,7 @@ %<*driver> % \fi \ProvidesFile{lthooks.dtx} - [2024/03/09 v1.1h LaTeX Kernel (hooks)] + [2024/04/22 v1.1h LaTeX Kernel (hooks)] % \iffalse % \documentclass{l3doc} @@ -1549,7 +1549,7 @@ % \hook{cmd}, % \hook{env}, % \hook{file}, -% \hook{include} +% \hook{include}, % \hook{package}, and % \hook{class}, % and all these are available out of the box: you only have to diff --git a/Master/texmf-dist/source/latex-dev/base/ltkeys.dtx b/Master/texmf-dist/source/latex-dev/base/ltkeys.dtx index da8340ea9d0..34a0ab4b477 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltkeys.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltkeys.dtx @@ -100,7 +100,7 @@ % \texttt{second-name} can be given anywhere, and will save its value in % \cs{@mypkg@other@name}. % -% Keys created \emph{before} the use of \cs{ProcessKeyOptions}act as +% Keys created \emph{before} the use of \cs{ProcessKeyOptions} act as % package options. % \end{function} % diff --git a/Master/texmf-dist/source/latex-dev/base/ltmarks.dtx b/Master/texmf-dist/source/latex-dev/base/ltmarks.dtx index dcfa2fcb27e..a9f3bb0184f 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltmarks.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltmarks.dtx @@ -17,21 +17,12 @@ %<*driver> % \fi \ProvidesFile{ltmarks.dtx} - [2024/02/11 v1.0e LaTeX Kernel (Marks)] + [2024/05/31 v1.0g LaTeX Kernel (Marks)] % \iffalse % \documentclass{l3doc} \GetFileInfo{ltmarks.dtx} -%\usepackage{ltmarks} - -% Fixing footnotes in functions and variables: this should be in l3doc! - -\newcommand\fixfootnote[2]{\footnotemark - \AddToHookNext{env/#1/after}{\footnotetext{#2}}} -\AddToHook{env/function/begin}{\def\footnote{\fixfootnote{function}}} -\AddToHook{env/variable/begin}{\def\footnote{\fixfootnote{variable}}} - \EnableCrossrefs \CodelineIndex \begin{document} @@ -293,6 +284,11 @@ % The \meta{pos\textsubscript{\itshape i}} argument can be either % \texttt{top}, \texttt{first}, or \texttt{last}. % +% Important to note is that the comparison is not with respect to +% the textual content of the marks but whether or not they +% originated from the same \cs{InsertMark} command (or the L3 layer +% version \cs{mark_insert:nn}). +% % If you wish to compare marks across different regions or across % different classes, you have to do it using the generic test only % available in the L3 programming layer or do it manually, i.e., @@ -809,6 +805,32 @@ \tl_new:c { g_@@_last-column_top_ #1 _tl } \tl_new:c { g_@@_last-column_first_ #1 _tl } \tl_new:c { g_@@_last-column_last_ #1 _tl } +% \end{macrocode} +% All marks will have an identication at the beginning of the form +% \cs{@@_id:n}\texttt\{\meta{number}\texttt\} and therefore the +% initial empty values should have that too, so that data extraction +% is going to be uniform. +% \changes{v1.0g}{2024/05/31}{Initialize all marks with an id, use 0 +% when a new class is made (gh/1359)} +% \begin{macrocode} + \tl_set:cn { g_@@_page_top_ #1 _tl }{ \@@_id:n{0} } + \tl_set:cn { g_@@_page_first_ #1 _tl }{ \@@_id:n{0} } + \tl_set:cn { g_@@_page_last_ #1 _tl }{ \@@_id:n{0} } + \tl_set:cn { g_@@_previous-page_top_ #1 _tl }{ \@@_id:n{0} } + \tl_set:cn { g_@@_previous-page_first_ #1 _tl }{ \@@_id:n{0} } + \tl_set:cn { g_@@_previous-page_last_ #1 _tl }{ \@@_id:n{0} } + \tl_set:cn { g_@@_column_top_ #1 _tl }{ \@@_id:n{0} } + \tl_set:cn { g_@@_column_first_ #1 _tl }{ \@@_id:n{0} } + \tl_set:cn { g_@@_column_last_ #1 _tl }{ \@@_id:n{0} } + \tl_set:cn { g_@@_previous-column_top_ #1 _tl }{ \@@_id:n{0} } + \tl_set:cn { g_@@_previous-column_first_ #1 _tl }{ \@@_id:n{0} } + \tl_set:cn { g_@@_previous-column_last_ #1 _tl }{ \@@_id:n{0} } + \tl_set:cn { g_@@_first-column_top_ #1 _tl }{ \@@_id:n{0} } + \tl_set:cn { g_@@_first-column_first_ #1 _tl }{ \@@_id:n{0} } + \tl_set:cn { g_@@_first-column_last_ #1 _tl }{ \@@_id:n{0} } + \tl_set:cn { g_@@_last-column_top_ #1 _tl }{ \@@_id:n{0} } + \tl_set:cn { g_@@_last-column_first_ #1 _tl }{ \@@_id:n{0} } + \tl_set:cn { g_@@_last-column_last_ #1 _tl }{ \@@_id:n{0} } } % \end{macrocode} % \end{macro} @@ -1408,7 +1430,18 @@ % \begin{macrocode} \@kernel@before@insertmark \hook_use:n { insertmark } - \unrestored@protected@xdef \g_@@_tmp_tl {#2} + \unrestored@protected@xdef \g_@@_tmp_tl + { +% \end{macrocode} +% To ensure that marks are unique we insert a hidden sequence +% marker at the beginning of the content of the mark containing the +% sequence number of the mark. +% \changes{v1.0f}{2024/05/30}{Use sequence marker to make all marks +% unique on nearby regions (gh/1359)} +% \begin{macrocode} + \@@_id:n{ \int_use:N\g_@@_int } + #2 + } %<*trace> \@@_debug:n{ \iow_term:x { Marks:~ set~#1~<-~ '\tl_to_str:V \g_@@_tmp_tl' ~ \msg_line_context: } } @@ -1421,9 +1454,11 @@ % becomes empty, but not immediately; otherwise we just put % \cs{g_@@_tmp_tl} in. % \begin{macrocode} - \tl_if_empty:NTF \g_@@_tmp_tl - { \exp_not:n { \prg_do_nothing: } } - { \exp_not:o { \g_@@_tmp_tl } } +% this is no longer needed with 1.0f +% \tl_if_empty:NTF \g_@@_tmp_tl +% { \exp_not:n { \prg_do_nothing: } } +% { \exp_not:o { \g_@@_tmp_tl } } + \exp_not:o { \g_@@_tmp_tl } } \group_end: % \end{macrocode} @@ -1445,15 +1480,43 @@ % \end{macro} % % +% \begin{macro}{\@@_id:n} +% A hidden marker is placed into every mark added by +% \cs{mark_insert:nn}. It will will not show up in the output but +% its argument (a counter value that is incremented) makes all +% marks unique so the test for \enquote{equal} is not fooled by two +% different marks having the same mark text. +% \changes{v1.0f}{2024/05/30}{Use sequence marker to make all marks +% unique on nearby regions (gh/1359)} +% \begin{macrocode} +\cs_new_protected:Npn \@@_id:n #1 { } +% \end{macrocode} +% \end{macro} +% +% % \begin{macro}[int]{\@kernel@before@insertmark} % \begin{macro}{insertmark} % By default \cs{label}, \cs{index}, and \cs{glossary} do nothing % when the mark is inserted. % \begin{macrocode} +\int_new:N \g_@@_int \cs_new:Npn \@kernel@before@insertmark { \cs_set_eq:NN \label \scan_stop: \cs_set_eq:NN \index \scan_stop: \cs_set_eq:NN \glossary \scan_stop: +% \end{macrocode} +% We count each mark and use that to place a hidden marker in front +% of the mark text. To ensure that there is no overflow (very +% unlikely but you never know) we restart every 100000 marks. Thus, +% if somebody puts more than that number of marks on a single page +% you could construct a scenario in which that approach fails. +% \changes{v1.0f}{2024/05/30}{Use sequence marker to make all marks +% unique on nearby regions (gh/1359)} +% \begin{macrocode} + \int_compare:nNnTF \g_@@_int < {99999} + { \int_gincr:N \g_@@_int } + { \int_gzero:N \g_@@_int } + } % \end{macrocode} % The public hook to augment the setup. @@ -1473,10 +1536,20 @@ % % If used with an unknown class or region they generate an error % (fairly low-level because we are in an expandable context). +% +% Each mark starts with an id and while the id does not print it is +% nevertheless better to remove it when returning the mark, so that +% downstream manipulation of the data doesn't have to deal with it. +% \changes{v1.0g}{2024/05/31}{Remove the id when returning the mark value (gh/1359)} % \begin{macrocode} -\cs_new:Npn \mark_use_first:nn #1#2 { \exp_not:v { g_@@_#1_first_#2_tl } } -\cs_new:Npn \mark_use_last:nn #1#2 { \exp_not:v { g_@@_#1_last_#2_tl } } -\cs_new:Npn \mark_use_top:nn #1#2 { \exp_not:v { g_@@_#1_top_#2_tl } } +\cs_new:Npn \mark_use_first:nn #1#2 { \@@_use:v { g_@@_#1_first_#2_tl } } +\cs_new:Npn \mark_use_last:nn #1#2 { \@@_use:v { g_@@_#1_last_#2_tl } } +\cs_new:Npn \mark_use_top:nn #1#2 { \@@_use:v { g_@@_#1_top_#2_tl } } +% \end{macrocode} +% This is what the \cs{use_none:nn} accomplishes. +% \begin{macrocode} +\cs_new:Npn \@@_use:n #1 { \exp_not:o { \use_none:nn #1 } } +\cs_generate_variant:Nn \@@_use:n { v } % \end{macrocode} % \end{macro} % @@ -1854,6 +1927,12 @@ % \begin{macrocode} \seq_map_inline:Nn \g_@@_classes_seq { +% \end{macrocode} +% The \texttt{previous-page} updates need to come before the +% updates for \texttt{page} region because otherwise the values +% to copy are already overwritten. +% necessary values. +% \begin{macrocode} \tl_gset_eq:cc { g_@@_previous-page_top_ ##1 _tl } { g_@@_page_top_ ##1 _tl } \tl_gset_eq:cc { g_@@_previous-page_first_ ##1 _tl } @@ -1861,16 +1940,48 @@ \tl_gset_eq:cc { g_@@_previous-page_last_ ##1 _tl } { g_@@_page_last_ ##1 _tl } % \end{macrocode} -% The \texttt{page} updates need to come after the corresponding -% updates for \texttt{previous-page} otherwise we loose the -% necessary value. +% To update the \texttt{top} we only have to copy what is in +% \texttt{first-column}: % \begin{macrocode} \tl_gset_eq:cc { g_@@_page_top_ ##1 _tl } { g_@@_first-column_top_ ##1 _tl } - \tl_gset_eq:cc { g_@@_ page_first_ ##1 _tl } - { g_@@_first-column_first_ ##1 _tl } - \tl_gset_eq:cc { g_@@_page_last_ ##1 _tl } - { g_@@_last-column_last_ ##1 _tl } + +% \end{macrocode} +% Updating the \texttt{first} mark for the \texttt{page} region is +% more complicated. We first have to find out of there is any mark +% in the first column (this can be done by comparing the \texttt{top} and +% the \texttt{first} mark of of that region). +% \changes{v1.0f}{2024/05/30}{Correct logic for first mark in page +% region if first column contains no marks (gh/1359)} +% \begin{macrocode} + \tl_if_eq:ccTF { g__@@_first-column_top_ ##1 _tl } + { g__@@_first-column_first_ ##1 _tl } + { +% \end{macrocode} +% If there is no mark in the first column we copy the first mark of +% the last column. If that doesn't contain a mark we still get the +% right result because the first mark is then equal to the top mark. +% \begin{macrocode} + \tl_gset_eq:cc { g_@@_page_first_ ##1 _tl } + { g_@@_last-column_first_ ##1 _tl } + } + { +% \end{macrocode} +% On the other hand, if there is a mark in the first column we copy +% over the \texttt{first} mark from that column. +% \begin{macrocode} + \tl_gset_eq:cc { g_@@_page_first_ ##1 _tl } + { g_@@_first-column_first_ ##1 _tl } + } +% \end{macrocode} +% The logic for the \texttt{last} page mark is again simple, we can +% just copy the value in the \texttt{last} mark of the last column. +% If that column doesn't contain any marks, then the value in +% \texttt{last} will be automatically the same as the \texttt{last} +% from the first column. +% \begin{macrocode} + \tl_gset_eq:cc { g_@@_page_last_ ##1 _tl } + { g_@@_last-column_last_ ##1 _tl } } } %<*trace> diff --git a/Master/texmf-dist/source/latex-dev/base/ltmeta.dtx b/Master/texmf-dist/source/latex-dev/base/ltmeta.dtx index 1e4bdaed2ca..cc3e62811df 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltmeta.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltmeta.dtx @@ -16,19 +16,12 @@ %<*driver> % \fi \ProvidesFile{ltmeta.dtx} - [2024/02/11 v1.0b LaTeX Kernel (Document Metadata)] + [2024/05/16 v1.0b LaTeX Kernel (Document Metadata)] % \iffalse % \documentclass{l3doc} \GetFileInfo{ltmeta.dtx} -% Fixing footnotes in functions and variables: this should be in l3doc! - -\newcommand\fixfootnote[2]{\footnotemark - \AddToHookNext{env/#1/after}{\footnotetext{#2}}} -\AddToHook{env/function/begin}{\def\footnote{\fixfootnote{function}}} -\AddToHook{env/variable/begin}{\def\footnote{\fixfootnote{variable}}} - \EnableCrossrefs \CodelineIndex \begin{document} diff --git a/Master/texmf-dist/source/latex-dev/base/ltpara.dtx b/Master/texmf-dist/source/latex-dev/base/ltpara.dtx index e9741ff935e..f102d68e0d6 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltpara.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltpara.dtx @@ -17,21 +17,12 @@ %<*driver> % \fi \ProvidesFile{ltpara.dtx} - [2024/02/11 v1.0m LaTeX Kernel (paragraph hooks)] + [2024/05/16 v1.0m LaTeX Kernel (paragraph hooks)] % \iffalse % \documentclass{l3doc} \GetFileInfo{ltpara.dtx} -%\usepackage{ltpara} - -% Fixing footnotes in functions and variables: this should be in l3doc! - -\newcommand\fixfootnote[2]{\footnotemark - \AddToHookNext{env/#1/after}{\footnotetext{#2}}} -\AddToHook{env/function/begin}{\def\footnote{\fixfootnote{function}}} -\AddToHook{env/variable/begin}{\def\footnote{\fixfootnote{variable}}} - \EnableCrossrefs \CodelineIndex \begin{document} @@ -1265,7 +1256,7 @@ % redo the \cs{everypar} setting from the kernel, otherwise that % gets lost (as it happens before that file is loaded). % \begin{macrocode} -\everypar{\@nodocument} %% To get an error if text appears before the +\everypar{\@nodocument} %% To get an error if text appears before the \document % \end{macrocode} % % diff --git a/Master/texmf-dist/source/latex-dev/base/ltproperties.dtx b/Master/texmf-dist/source/latex-dev/base/ltproperties.dtx index 4a5fa78b5fe..0fd8f22e0ef 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltproperties.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltproperties.dtx @@ -2,7 +2,7 @@ % % File: ltproperties.dtx % -% Copyright (C) 2021-2023 The LaTeX Project +% Copyright (C) 2023-2024 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 @@ -30,7 +30,7 @@ %<*driver> % \fi \ProvidesFile{ltproperties.dtx} - [2024/02/11 v1.0d LaTeX Kernel (Properties)] + [2024/04/17 v1.0e LaTeX Kernel (Properties)] % \iffalse % \documentclass[full]{l3doc} @@ -274,7 +274,7 @@ % \cs{property_if_exist_p:n} \Arg{property} % \cs{property_if_exist:nTF} \Arg{property} \Arg{true code} \Arg{false code} % \end{syntax} -% \LaTeXe{}-interface: \cs{IfPropertyExistTF}.\\ +% \LaTeXe{}-interface: \cs{IfPropertyExistsTF}.\\ % Tests if the \meta{property} has been declared. % \end{function} % @@ -283,7 +283,7 @@ % \cs{property_if_recorded_p:n} \Arg{label} % \cs{property_if_recorded:nTF} \Arg{label} \Arg{true code} \Arg{false code} % \end{syntax} -% \LaTeXe{}-interface: \cs{IfLabelExistTF}\\ +% \LaTeXe{}-interface: \cs{IfLabelExistsTF}\\ % Tests if the \meta{label} is known. This is also true if the label has been % set with the standard \cs{label} command. % \end{function} @@ -348,16 +348,16 @@ % If \Arg{property} has not been declared an error is issued. % \end{function} % -% \begin{function}{\IfPropertyExistTF} +% \begin{function}{\IfPropertyExistsTF,\IfPropertyExistsT,\IfPropertyExistsF} % \begin{syntax} -% \cs{IfPropertyExistTF} \Arg{property} \Arg{true code} \Arg{false code} +% \cs{IfPropertyExistsTF} \Arg{property} \Arg{true code} \Arg{false code} % \end{syntax} % Tests if the \meta{property} has been declared. % \end{function} % -% \begin{function}{\IfLabelExistTF} +% \begin{function}{\IfLabelExistsTF,\IfLabelExistsT,\IfLabelExistsF} % \begin{syntax} -% \cs{IfLabelExistTF} \Arg{label} \Arg{true code} \Arg{false code} +% \cs{IfLabelExistsTF} \Arg{label} \Arg{true code} \Arg{false code} % \end{syntax} % Tests if the \meta{label} has been recorded. This is also true if a label % has been set with the standard \cs{label} command. @@ -746,9 +746,13 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\IfPropertyExistTF} +% \begin{macro}{\IfPropertyExistsTF,\IfPropertyExistsT,\IfPropertyExistsF} +% \changes{v1.0e}{2024-04-17}{Renamed \cs{IfPropertyExistTF} to +% \cs{IfPropertyExistsTF} (gh/1262)} % \begin{macrocode} -\cs_new_eq:NN \IfPropertyExistTF \property_if_exist:eTF +\cs_new_eq:NN \IfPropertyExistsTF \property_if_exist:eTF +\cs_new:Npn \IfPropertyExistsT #1#2 {\property_if_exist:eTF {#1}{#2}{} } +\cs_new:Npn \IfPropertyExistsF #1 {\property_if_exist:eTF {#1}{} } % \end{macrocode} % \end{macro} % @@ -771,9 +775,13 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\IfLabelExistTF} +% \begin{macro}{\IfLabelExistsTF,\IfLabelExistsT,\IfLabelExistsF} +% \changes{v1.0e}{2024-04-17}{Renamed \cs{IfLabelExistTF} to +% \cs{IfLabelExistsTF} (gh/1262)} % \begin{macrocode} -\cs_new_eq:NN \IfLabelExistTF \property_if_recorded:eTF +\cs_new_eq:NN \IfLabelExistsTF \property_if_recorded:eTF +\cs_new:Npn \IfLabelExistsT #1#2 {\property_if_exist:eTF {#1}{#2}{} } +\cs_new:Npn \IfLabelExistsF #1 {\property_if_exist:eTF {#1}{} } % \end{macrocode} % \end{macro} % @@ -947,8 +955,8 @@ %<latexrelease>\let \RefProperty \@undefined %<latexrelease>\let \RefUndefinedWarn \@undefined %<latexrelease> -%<latexrelease>\let \IfPropertyExistTF \@undefined -%<latexrelease>\let \IfLabelExistTF \@undefined +%<latexrelease>\let \IfPropertyExistsTF \@undefined +%<latexrelease>\let \IfLabelExistsTF \@undefined %<latexrelease>\let \IfPropertyRecordedTF \@undefined %<latexrelease> %<latexrelease>\let\new@label@record \@undefined diff --git a/Master/texmf-dist/source/latex-dev/base/lttemplates.dtx b/Master/texmf-dist/source/latex-dev/base/lttemplates.dtx index d27c232fe0a..7192359e726 100644 --- a/Master/texmf-dist/source/latex-dev/base/lttemplates.dtx +++ b/Master/texmf-dist/source/latex-dev/base/lttemplates.dtx @@ -36,7 +36,7 @@ %<*driver> % \fi \ProvidesFile{lttemplates.dtx} - [2024-02-15 v1.0b LaTeX Kernel (Prototype document functions)] + [2024-04-17 v1.0c LaTeX Kernel (Prototype document functions)] % \iffalse \documentclass{l3doc} \GetFileInfo{lttemplates.dtx} @@ -225,7 +225,9 @@ % value, which will be used in by the template if the \meta{key} is % not set explicitly. The \meta{default} should be of the correct % form to be accepted by the \meta{key type} of the \meta{key}: this -% is not checked by the code. +% is not checked by the code. Expressions for numerical values are +% evaluated when the template is used, thus for example values given +% in terms of |em| or |ex| will be set respecting the prevailing font. % \end{function} % % \begin{table} @@ -318,7 +320,7 @@ % \toprule % \multicolumn{1}{l}{Key-type} & Description of binding \\ % \midrule -% boolean & Boolean variable, \emph{e.g}.~\cs{l_tmpa_bool} \\ +% \ & Boolean variable, \emph{e.g}.~\cs{l_tmpa_bool} \\ % choice % & List of choice implementations % (see Section~\ref{sec:choices-key}) \\ @@ -469,9 +471,9 @@ % the general idea of fixing some settings. % \end{function} % -% \begin{function}{\IfInstanceExistT, \IfInstanceExistF, \IfInstanceExistTF} +% \begin{function}{\IfInstanceExistsT, \IfInstanceExisstF, \IfInstanceExistsTF} % \begin{syntax} -% \cs{IfInstanceExistTF} \Arg{type} \Arg{instance} \Arg{true code} \Arg{false code} +% \cs{IfInstanceExistsTF} \Arg{type} \Arg{instance} \Arg{true code} \Arg{false code} % \end{syntax} % Tests if the named \meta{instance} of a \meta{type} exists, and % then inserts the appropriate code into the input stream. @@ -1913,7 +1915,8 @@ { \@@_find_global: } } \tl_set:Nn \l_@@_key_name_tl {#1} - \use:c { @@_assign_ \l_@@_keytype_tl : } + \cs_if_exist_use:cF { @@_assign_ \l_@@_keytype_tl : } + { \@@_assign_variable: } } { \msg_error:nnn { template } { unknown-attribute } {#1} } } @@ -2096,103 +2099,20 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\@@_assign_integer:} -% \begin{macro}{\@@_assign_length:} -% \begin{macro}{\@@_assign_muskip:} -% \begin{macro}{\@@_assign_real:} -% \begin{macro}{\@@_assign_skip:} -% All of the calculated assignments use the same underlying code, with -% only the low-level assignment function changing. -% \begin{macrocode} -\cs_new_protected:Npn \@@_assign_integer: - { - \bool_if:NTF \l_@@_global_bool - { \@@_assign_variable:N \int_gset:Nn } - { \@@_assign_variable:N \int_set:Nn } - } -\cs_new_protected:Npn \@@_assign_length: - { - \bool_if:NTF \l_@@_global_bool - { \@@_assign_variable:N \dim_gset:Nn } - { \@@_assign_variable:N \dim_set:Nn } -} -\cs_new_protected:Npn \@@_assign_muskip: - { - \bool_if:NTF \l_@@_global_bool - { \@@_assign_variable:N \muskip_gset:Nn } - { \@@_assign_variable:N \muskip_set:Nn } - } -\cs_new_protected:Npn \@@_assign_real: - { - \bool_if:NTF \l_@@_global_bool - { \@@_assign_variable:N \fp_gset:Nn } - { \@@_assign_variable:N \fp_set:Nn } - } -\cs_new_protected:Npn \@@_assign_skip: - { - \bool_if:NTF \l_@@_global_bool - { \@@_assign_variable:N \skip_gset:Nn } - { \@@_assign_variable:N \skip_set:Nn } - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@@_assign_tokenlist:} -% \begin{macro}{\@@_assign_tokenlist_aux:NN} -% Life would be easy here if it were not for \cs{KeyValue}. To deal -% correctly with that, we need to allow for the recovery a stored value -% at point of use. +% \begin{macro}{\@@_assign_variable:} +% \begin{macro}{\@@_assign_variable:N, \@@_assign_variable:c} +% A general-purpose function for all of the other assignments. +% As long as the value is not coming from another variable, the stored +% value is simply transferred for output. % \begin{macrocode} -\cs_new_protected:Npn \@@_assign_tokenlist: - { - \bool_if:NTF \l_@@_global_bool - { \@@_assign_tokenlist_aux:NN \tl_gset:NV \tl_gset:Nn } - { \@@_assign_tokenlist_aux:NN \tl_set:NV \tl_set:Nn } - } -\cs_new_protected:Npn \@@_assign_tokenlist_aux:NN #1#2 +\cs_new_protected:Npn \@@_assign_variable: { - \@@_if_key_value:VTF \l_@@_value_tl - { - \@@_key_to_value: - \tl_put_right:Ne \l_@@_assignments_tl - { - #1 \exp_not:V \l_@@_var_tl - { \exp_not:V \l_@@_value_tl } - } - } + \@@_assign_variable:c { - \tl_put_right:Ne \l_@@_assignments_tl - { - #2 \exp_not:V \l_@@_var_tl - { \exp_not:V \l_@@_value_tl } - } + \@@_map_var_type: _ + \bool_if:NT \l_@@_global_bool { g } set:Nn } } -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@@_assign_commalist:} -% Very similar for commas lists, so some code is shared. -% \begin{macrocode} -\cs_new_protected:Npn \@@_assign_commalist: - { - \bool_if:NTF \l_@@_global_bool - { \@@_assign_tokenlist_aux:NN \clist_gset:NV \clist_gset:Nn } - { \@@_assign_tokenlist_aux:NN \clist_set:NV \clist_set:Nn } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_assign_variable:N} -% A general-purpose function for all of the numerical assignments. -% As long as the value is not coming from another variable, the stored -% value is simply transferred for output. -% \begin{macrocode} \cs_new_protected:Npn \@@_assign_variable:N #1 { \@@_if_key_value:VT \l_@@_value_tl @@ -2203,8 +2123,10 @@ { \exp_not:V \l_@@_value_tl } } } +\cs_generate_variant:Nn \@@_assign_variable:N { c } % \end{macrocode} % \end{macro} +% \end{macro} % % \begin{macro}{\@@_key_to_value:} % \begin{macro}{\@@_key_to_value_auxi:w} @@ -2653,15 +2575,16 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\IfInstanceExistT, \IfInstanceExistF, \IfInstanceExistTF} +% \begin{macro}{\IfInstanceExistsT, \IfInstanceExistsF, \IfInstanceExistsTF} % \changes{2024-02-15}{v1.0b}{New macros} +% \changes{2024-04-17}{v1.0c}{Use plural names} % More direct translation. % \begin{macrocode} -\cs_new:Npn \IfInstanceExistTF #1#2 +\cs_new:Npn \IfInstanceExistsTF #1#2 { \@@_if_instance_exist:nnTF {#1} {#2} } -\cs_new:Npn \IfInstanceExistT #1#2 +\cs_new:Npn \IfInstanceExistsT #1#2 { \@@_if_instance_exist:nnT {#1} {#2} } -\cs_new:Npn \IfInstanceExistF #1#2 +\cs_new:Npn \IfInstanceExistsF #1#2 { \@@_if_instance_exist:nnF {#1} {#2} } % \end{macrocode} % \end{macro} diff --git a/Master/texmf-dist/source/latex-dev/base/lttextcomp.dtx b/Master/texmf-dist/source/latex-dev/base/lttextcomp.dtx index c67bac00dd8..7f247747d6a 100644 --- a/Master/texmf-dist/source/latex-dev/base/lttextcomp.dtx +++ b/Master/texmf-dist/source/latex-dev/base/lttextcomp.dtx @@ -37,7 +37,7 @@ % % \ProvidesFile{lttextcomp.dtx} - [2024/02/08 v1.1a LaTeX Kernel (text companion symbols)] + [2024/04/24 v1.1c LaTeX Kernel (text companion symbols)] % \iffalse \documentclass{ltxdoc} \begin{document} @@ -1525,16 +1525,19 @@ % \section{The \texttt{textcomp} package} % % +% For any rollback request before 2018-08-11 we make an attempt by +% loading the 2018 version. +% \changes{v2.1b}{2024/04/24} +% {Load the 2018 version when rolling back prior to 2018-08-11 +% (gh/1333)} % \begin{macrocode} %<*TS1sty> -\providecommand\DeclareRelease[3]{} -\providecommand\DeclareCurrentRelease[2]{} - +\DeclareRelease{}{1997-12-01}{textcomp-2018-08-11.sty} \DeclareRelease{}{2018-08-11}{textcomp-2018-08-11.sty} \DeclareCurrentRelease{}{2020-02-02} \ProvidesPackage{textcomp} - [2020/02/02 v2.0n Standard LaTeX package] + [2024/04/24 v2.1b Standard LaTeX package] % \end{macrocode} % % A precaution in case this is used without rebuilding the format. @@ -1590,8 +1593,8 @@ } % \end{macrocode} % +% \changes{v2.1a}{2024/04/22}{Drop default option \texttt{info} (gh/1333)} % \begin{macrocode} -\ExecuteOptions{info} \ProcessOptions\relax % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex-dev/base/ltvers.dtx b/Master/texmf-dist/source/latex-dev/base/ltvers.dtx index be7011a537b..0b8b6f753da 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltvers.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltvers.dtx @@ -112,10 +112,10 @@ %</2ekernel> %<latexrelease>\edef\latexreleaseversion %<*2ekernel|latexrelease> - {2024-06-01} + {2024-11-01} %</2ekernel|latexrelease> %<*2ekernel> -\def\patch@level{-2} +\def\patch@level{0} % \end{macrocode} % % \begin{macro}{\development@branch@name} |