summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex-dev/base/latexrelease.sty')
-rw-r--r--Master/texmf-dist/tex/latex-dev/base/latexrelease.sty304
1 files changed, 191 insertions, 113 deletions
diff --git a/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty b/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty
index a7ea9bfd040..5a696389f15 100644
--- a/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty
+++ b/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty
@@ -122,6 +122,13 @@
\pkgcls@debug{\@spaces 4: #4}%
\def\pkgcls@name{#1}% % for info message
\def\pkgcls@arg {#3}% % for info message
+ \edef\pkgcls@ext{%
+ \ifx#4\@clsextension document class\else
+ \ifx#4\@pkgextension package\else
+ file
+ \fi
+ \fi
+ }% % for info message
\pkgcls@parse@date@arg{#3}%
\let\pkgcls@candidate\@empty
\begingroup
@@ -163,7 +170,7 @@
\ifnum \@parse@version0#1//00\@nil > \pkgcls@targetdate
\@latex@warning@no@line{Suspicious rollback/min-date date given\MessageBreak
A minimal date of #1 has been specified for
- \@cls@pkg\MessageBreak '\pkgcls@name'.\MessageBreak
+ \pkgcls@ext\MessageBreak '\pkgcls@name'.\MessageBreak
But this is in conflict
with a rollback request to \requestedpatchdate}
\fi
@@ -293,7 +300,7 @@
}
%%% From File: ltvers.dtx
\edef\latexreleaseversion
- {2024-06-01}
+ {2024-11-01}
\newif\if@includeinrelease
\@includeinreleasefalse
\def\IncludeInRelease#1{%
@@ -571,25 +578,6 @@ of this package available from CTAN}
"luatex",
tex.extraprimitives("core","omega", "aleph", "luatex")
)
- local i
- local t = { }
- for _,i in pairs(tex.extraprimitives("luatex")) do
- if not string.match(i,"^U") then
- if not string.match(i, "^luatex") then
- table.insert(t,i)
- end
- else
- if string.match(i,"^Uchar$") then
- table.insert(t,i)
- end
- end
- end
- for _,i in pairs(t) do
- tex.print(
- "\noexpand\\let\noexpand\\" .. i
- .. "\noexpand\\undefined"
- )
- end
}
\EndIncludeInRelease
\fi
@@ -1363,7 +1351,10 @@ of this package available from CTAN}
\cs_gset_eq:NN \@expl@cs@to@str@@N \cs_to_str:N
\cs_gset_eq:NN \@expl@str@if@eq@@nnTF \str_if_eq:nnTF
\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
\cs_gset_eq:NN \@expl@str@map@function@@NN \str_map_function:NN
\cs_gset_eq:NN \@expl@char@generate@@nn \char_generate:nn
@@ -1374,7 +1365,7 @@ of this package available from CTAN}
\let \@expl@cs@to@str@@N \@undefined
\let \@expl@str@if@eq@@nnTF \@undefined
\let \@expl@cs@prefix@spec@@N \@undefined
-\let \@expl@cs@argument@spec@@N \@undefined
+\let \@expl@cs@parameter@spec@@N \@undefined
\let \@expl@cs@replacement@spec@@N \@undefined
\let \@expl@str@map@function@@NN \@undefined
\EndIncludeInRelease
@@ -1797,7 +1788,7 @@ of this package available from CTAN}
\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}}
\long\def\@show@tokens#1{%
\edef\reserved@a{#1}%
\showtokens\expandafter
@@ -1845,7 +1836,7 @@ of this package available from CTAN}
\@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}}
\long\def\@show@normalenv#1{%
\@show@environment@begin#1%
@@ -1856,12 +1847,12 @@ of this package available from CTAN}
\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}}
\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}}
\EndIncludeInRelease
\IncludeInRelease{0000-00-00}{\ShowEnvironment}
@@ -1998,8 +1989,8 @@ of this package available from CTAN}
\EndIncludeInRelease
%%% From File: ltcmd.dtx
-\def\ltcmdversion{v1.2d}
-\def\ltcmddate{2024-03-21}
+\def\ltcmdversion{v1.2e}
+\def\ltcmddate{2024-04-17}
\edef\@latexrelease@catcode@null{\the\catcode`\^^@ }
\catcode`\^^@=12
\ExplSyntaxOn
@@ -4452,7 +4443,7 @@ of this package available from CTAN}
{
\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 } } }
}
{
@@ -7863,7 +7854,7 @@ of this package available from CTAN}
}
\ExplSyntaxOff
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%% From File: ltcmdhooks.dtx
+%% From File: ltcmdhooks.dtx
%% Copyright (C) 2020-2024
%% Frank Mittelbach, Phelype Oleinik, The LaTeX Project
%%% From File: lthooks.dtx
@@ -8025,7 +8016,7 @@ of this package available from CTAN}
\__hook_patch_debug:x { ++~command~can~be~patched~without~rescanning }
\int_set:Nn \l__hook_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 }
}
\int_compare:nNnTF { \l__hook_patch_num_args_int } > { \c_zero_int }
@@ -8100,7 +8091,7 @@ of this package available from CTAN}
\__hook_patch_debug:x { ++~command~can~be~patched~without~rescanning }
\int_set:Nn \l__hook_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 }
}
\int_compare:nNnTF { \l__hook_patch_num_args_int } > { \c_zero_int }
@@ -8233,7 +8224,7 @@ of this package available from CTAN}
{ ~ \__hook_double_hashes:w }
\cs_new_protected:Npn \__hook_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 } { }
{ \__hook_patch_expand_redefine:NNnn \c_false_bool #1 {#2} {#3} }
{
\__hook_patch_debug:x { ..~command~can~only~be~patched~by~rescanning }
@@ -9388,7 +9379,8 @@ of this package available from CTAN}
{ \__template_find_global: }
}
\tl_set:Nn \l__template_key_name_tl {#1}
- \use:c { __template_assign_ \l__template_keytype_tl : }
+ \cs_if_exist_use:cF { __template_assign_ \l__template_keytype_tl : }
+ { \__template_assign_variable: }
}
{ \msg_error:nnn { template } { unknown-attribute } {#1} }
}
@@ -9502,67 +9494,14 @@ of this package available from CTAN}
}
}
}
-\cs_new_protected:Npn \__template_assign_integer:
- {
- \bool_if:NTF \l__template_global_bool
- { \__template_assign_variable:N \int_gset:Nn }
- { \__template_assign_variable:N \int_set:Nn }
- }
-\cs_new_protected:Npn \__template_assign_length:
- {
- \bool_if:NTF \l__template_global_bool
- { \__template_assign_variable:N \dim_gset:Nn }
- { \__template_assign_variable:N \dim_set:Nn }
-}
-\cs_new_protected:Npn \__template_assign_muskip:
- {
- \bool_if:NTF \l__template_global_bool
- { \__template_assign_variable:N \muskip_gset:Nn }
- { \__template_assign_variable:N \muskip_set:Nn }
- }
-\cs_new_protected:Npn \__template_assign_real:
- {
- \bool_if:NTF \l__template_global_bool
- { \__template_assign_variable:N \fp_gset:Nn }
- { \__template_assign_variable:N \fp_set:Nn }
- }
-\cs_new_protected:Npn \__template_assign_skip:
- {
- \bool_if:NTF \l__template_global_bool
- { \__template_assign_variable:N \skip_gset:Nn }
- { \__template_assign_variable:N \skip_set:Nn }
- }
-\cs_new_protected:Npn \__template_assign_tokenlist:
+\cs_new_protected:Npn \__template_assign_variable:
{
- \bool_if:NTF \l__template_global_bool
- { \__template_assign_tokenlist_aux:NN \tl_gset:NV \tl_gset:Nn }
- { \__template_assign_tokenlist_aux:NN \tl_set:NV \tl_set:Nn }
- }
-\cs_new_protected:Npn \__template_assign_tokenlist_aux:NN #1#2
- {
- \__template_if_key_value:VTF \l__template_value_tl
- {
- \__template_key_to_value:
- \tl_put_right:Ne \l__template_assignments_tl
- {
- #1 \exp_not:V \l__template_var_tl
- { \exp_not:V \l__template_value_tl }
- }
- }
+ \__template_assign_variable:c
{
- \tl_put_right:Ne \l__template_assignments_tl
- {
- #2 \exp_not:V \l__template_var_tl
- { \exp_not:V \l__template_value_tl }
- }
+ \__template_map_var_type: _
+ \bool_if:NT \l__template_global_bool { g } set:Nn
}
}
-\cs_new_protected:Npn \__template_assign_commalist:
- {
- \bool_if:NTF \l__template_global_bool
- { \__template_assign_tokenlist_aux:NN \clist_gset:NV \clist_gset:Nn }
- { \__template_assign_tokenlist_aux:NN \clist_set:NV \clist_set:Nn }
- }
\cs_new_protected:Npn \__template_assign_variable:N #1
{
\__template_if_key_value:VT \l__template_value_tl
@@ -9573,6 +9512,7 @@ of this package available from CTAN}
{ \exp_not:V \l__template_value_tl }
}
}
+\cs_generate_variant:Nn \__template_assign_variable:N { c }
\cs_new_protected:Npn \__template_key_to_value:
{ \exp_after:wN \__template_key_to_value_auxi:w \l__template_value_tl }
\cs_new_protected:Npn \__template_key_to_value_auxi:w \KeyValue #1
@@ -9887,11 +9827,11 @@ of this package available from CTAN}
{ \__template_show_vars:nn {#1} {#2} }
\cs_new_protected:Npn \ShowInstanceValues #1#2
{ \__template_show_values:nn {#1} {#2} }
-\cs_new:Npn \IfInstanceExistTF #1#2
+\cs_new:Npn \IfInstanceExistsTF #1#2
{ \__template_if_instance_exist:nnTF {#1} {#2} }
-\cs_new:Npn \IfInstanceExistT #1#2
+\cs_new:Npn \IfInstanceExistsT #1#2
{ \__template_if_instance_exist:nnT {#1} {#2} }
-\cs_new:Npn \IfInstanceExistF #1#2
+\cs_new:Npn \IfInstanceExistsF #1#2
{ \__template_if_instance_exist:nnF {#1} {#2} }
\cs_new_protected:Npn \KeyValue #1 {#1}
\cs_new_protected:Npn \AssignTemplateKeys { \__template_assignments_pop: }
@@ -10086,7 +10026,7 @@ of this package available from CTAN}
\cs_set_eq:NN \par \para_end:
\cs_set_eq:NN \@@par \para_end:
\cs_set_eq:NN \endgraf \para_end:
-\everypar{\@nodocument} %% To get an error if text appears before the
+\everypar{\@nodocument} %% To get an error if text appears before the \document
\msg_new:nnnn { hooks } { para-mode }
{
Illegal~mode~ change~ in~ hook~ 'para/#1'.\\
@@ -14859,7 +14799,9 @@ of this package available from CTAN}
}
}
\prg_generate_conditional_variant:Nnn \property_if_exist:n {e} {TF}
-\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}{} }
\prg_new_conditional:Npnn \property_if_recorded:n #1 { p , T , F, TF }
% #1 label
{
@@ -14872,7 +14814,9 @@ of this package available from CTAN}
}
}
\prg_generate_conditional_variant:Nnn \property_if_recorded:n {e} {TF}
-\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}{} }
\prg_new_conditional:Npnn \property_if_recorded:nn #1#2 { p , T , F, TF }
% #1 label #2 property
{
@@ -14961,8 +14905,8 @@ of this package available from CTAN}
\let \RefProperty \@undefined
\let \RefUndefinedWarn \@undefined
-\let \IfPropertyExistTF \@undefined
-\let \IfLabelExistTF \@undefined
+\let \IfPropertyExistsTF \@undefined
+\let \IfLabelExistsTF \@undefined
\let \IfPropertyRecordedTF \@undefined
\let\new@label@record \@undefined
@@ -16078,6 +16022,23 @@ of this package available from CTAN}
\@ifnextchar[{\@rsbox{#1}}{\@irsbox{#1}[]}}
\expandafter\let\csname raisebox \endcsname\@undefined
\EndIncludeInRelease
+\IncludeInRelease{2024/06/01}%
+ {\@finalstrut}{final strut correction}%
+\def\@finalstrut#1{%
+ \unskip
+ \ifhmode \nobreak
+ \else
+ \vskip-\baselineskip
+ \fi
+ \vrule\@width\z@\@height\z@\@depth\dp#1}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+ {\@finalstrut}{final strut correction}%
+\def\@finalstrut#1{%
+ \unskip\ifhmode\nobreak\fi
+ \vrule\@width\z@\@height\z@\@depth\dp#1}
+
+\EndIncludeInRelease
%%% From File: lttab.dtx
\IncludeInRelease{2020/10/01}%
{\@itabcr}{Tabbing calc syntax}%
@@ -17264,6 +17225,24 @@ of this package available from CTAN}
\tl_new:c { g__mark_last-column_top_ #1 _tl }
\tl_new:c { g__mark_last-column_first_ #1 _tl }
\tl_new:c { g__mark_last-column_last_ #1 _tl }
+ \tl_set:cn { g__mark_page_top_ #1 _tl }{ \__mark_id:n{0} }
+ \tl_set:cn { g__mark_page_first_ #1 _tl }{ \__mark_id:n{0} }
+ \tl_set:cn { g__mark_page_last_ #1 _tl }{ \__mark_id:n{0} }
+ \tl_set:cn { g__mark_previous-page_top_ #1 _tl }{ \__mark_id:n{0} }
+ \tl_set:cn { g__mark_previous-page_first_ #1 _tl }{ \__mark_id:n{0} }
+ \tl_set:cn { g__mark_previous-page_last_ #1 _tl }{ \__mark_id:n{0} }
+ \tl_set:cn { g__mark_column_top_ #1 _tl }{ \__mark_id:n{0} }
+ \tl_set:cn { g__mark_column_first_ #1 _tl }{ \__mark_id:n{0} }
+ \tl_set:cn { g__mark_column_last_ #1 _tl }{ \__mark_id:n{0} }
+ \tl_set:cn { g__mark_previous-column_top_ #1 _tl }{ \__mark_id:n{0} }
+ \tl_set:cn { g__mark_previous-column_first_ #1 _tl }{ \__mark_id:n{0} }
+ \tl_set:cn { g__mark_previous-column_last_ #1 _tl }{ \__mark_id:n{0} }
+ \tl_set:cn { g__mark_first-column_top_ #1 _tl }{ \__mark_id:n{0} }
+ \tl_set:cn { g__mark_first-column_first_ #1 _tl }{ \__mark_id:n{0} }
+ \tl_set:cn { g__mark_first-column_last_ #1 _tl }{ \__mark_id:n{0} }
+ \tl_set:cn { g__mark_last-column_top_ #1 _tl }{ \__mark_id:n{0} }
+ \tl_set:cn { g__mark_last-column_first_ #1 _tl }{ \__mark_id:n{0} }
+ \tl_set:cn { g__mark_last-column_last_ #1 _tl }{ \__mark_id:n{0} }
}
\box_new:N \l__mark_box
\box_new:N \l__mark_ii_box
@@ -17408,12 +17387,14 @@ of this package available from CTAN}
\group_begin:
\@kernel@before@insertmark
\hook_use:n { insertmark }
- \unrestored@protected@xdef \g__mark_tmp_tl {#2}
+ \unrestored@protected@xdef \g__mark_tmp_tl
+ {
+ \__mark_id:n{ \int_use:N\g__mark_int }
+ #2
+ }
\tex_marks:D \use:c { c__mark_class_ #1 _mark }
{
- \tl_if_empty:NTF \g__mark_tmp_tl
- { \exp_not:n { \prg_do_nothing: } }
- { \exp_not:o { \g__mark_tmp_tl } }
+ \exp_not:o { \g__mark_tmp_tl }
}
\group_end:
\if@nobreak\ifvmode\nobreak\fi\fi
@@ -17423,15 +17404,23 @@ of this package available from CTAN}
{ \tl_to_str:n {#1} }
}
}
+\cs_new_protected:Npn \__mark_id:n #1 { }
+\int_new:N \g__mark_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:
+ \int_compare:nNnTF \g__mark_int < {99999}
+ { \int_gincr:N \g__mark_int }
+ { \int_gzero:N \g__mark_int }
+
}
\hook_new:n {insertmark}
-\cs_new:Npn \mark_use_first:nn #1#2 { \exp_not:v { g__mark_#1_first_#2_tl } }
-\cs_new:Npn \mark_use_last:nn #1#2 { \exp_not:v { g__mark_#1_last_#2_tl } }
-\cs_new:Npn \mark_use_top:nn #1#2 { \exp_not:v { g__mark_#1_top_#2_tl } }
+\cs_new:Npn \mark_use_first:nn #1#2 { \__mark_use:v { g__mark_#1_first_#2_tl } }
+\cs_new:Npn \mark_use_last:nn #1#2 { \__mark_use:v { g__mark_#1_last_#2_tl } }
+\cs_new:Npn \mark_use_top:nn #1#2 { \__mark_use:v { g__mark_#1_top_#2_tl } }
+\cs_new:Npn \__mark_use:n #1 { \exp_not:o { \use_none:nn #1 } }
+\cs_generate_variant:Nn \__mark_use:n { v }
\prg_new_conditional:Npnn \mark_if_eq:nnnn #1#2#3#4 { T , F , TF }
{
\tl_if_eq:ccTF { g__mark_ #1 _#3_ #2 _tl }
@@ -17546,10 +17535,19 @@ of this package available from CTAN}
{ g__mark_page_last_ ##1 _tl }
\tl_gset_eq:cc { g__mark_page_top_ ##1 _tl }
{ g__mark_first-column_top_ ##1 _tl }
- \tl_gset_eq:cc { g__mark_ page_first_ ##1 _tl }
+
+ \tl_if_eq:ccTF { g__mark_first-column_top_ ##1 _tl }
{ g__mark_first-column_first_ ##1 _tl }
- \tl_gset_eq:cc { g__mark_page_last_ ##1 _tl }
- { g__mark_last-column_last_ ##1 _tl }
+ {
+ \tl_gset_eq:cc { g__mark_page_first_ ##1 _tl }
+ { g__mark_last-column_first_ ##1 _tl }
+ }
+ {
+ \tl_gset_eq:cc { g__mark_page_first_ ##1 _tl }
+ { g__mark_first-column_first_ ##1 _tl }
+ }
+ \tl_gset_eq:cc { g__mark_page_last_ ##1 _tl }
+ { g__mark_last-column_last_ ##1 _tl }
}
}
}
@@ -17812,15 +17810,15 @@ of this package available from CTAN}
}%
\reserved@a}
\EndIncludeInRelease
-\IncludeInRelease{2021/11/15}%
- {\IfPackageLoadedtTF}{Test package loading}%
+\IncludeInRelease{2024/06/01}%
+ {\IfPackageLoadedTF}{Test package loading}%
\let \IfPackageLoadedTF \@ifpackageloaded
\let \IfClassLoadedTF \@ifclassloaded
\let \IfPackageLoadedWithOptionsTF \@ifpackagewith
\let \IfClassLoadedWithOptionsTF \@ifclasswith
\EndIncludeInRelease
\IncludeInRelease{0000/00/00}%
- {\IfPackageLoadedtTF}{Test package loading}%
+ {\IfPackageLoadedTF}{Test package loading}%
\let \IfPackageLoadedTF \@ifpackageloaded
\let \IfClassLoadedTF \@ifclassloaded
@@ -17828,6 +17826,63 @@ of this package available from CTAN}
\let \IfClassLoadedWithOptionsTF \@ifclasswith
\EndIncludeInRelease
+\IncludeInRelease{2024/06/01}%
+ {\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}{}}
+\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}{}}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+ {\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}{}}
+
+\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}{}}
+
+\EndIncludeInRelease
\IncludeInRelease{2020/10/01}%
{\ProvidesPackage}{Check name with \strcmp}%
\def\ProvidesPackage#1{%
@@ -18411,6 +18466,29 @@ of this package available from CTAN}
\DeclareRobustCommand\AtEndDocument{\g@addto@macro\@enddocumenthook}
\EndIncludeInRelease
+\IncludeInRelease{2024/11/01}%
+ {\@cls@pkg}{Allow for more extensions}%
+\def\@cls@pkg{%
+ \ifx\@currext\@clsextension
+ document class%
+ \else
+ \ifx\@currext\@pkgextension
+ package%
+ \else
+ file%
+ \fi
+ \fi}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+ {\@cls@pkg}{Allow for more extensions}%
+
+\def\@cls@pkg{%
+ \ifx\@currext\@clsextension
+ document class%
+ \else
+ package%
+ \fi}
+\EndIncludeInRelease
\IncludeInRelease{2020/10/01}%
{\filec@ntents}{Define \q@curr@file directly (gh/220)}%
\def\filecontents{\@tempswatrue\@fileswtrue