summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/base/latexrelease.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/base/latexrelease.sty')
-rw-r--r--Master/texmf-dist/tex/latex/base/latexrelease.sty877
1 files changed, 795 insertions, 82 deletions
diff --git a/Master/texmf-dist/tex/latex/base/latexrelease.sty b/Master/texmf-dist/tex/latex/base/latexrelease.sty
index 4602d4f9a39..558d4177c49 100644
--- a/Master/texmf-dist/tex/latex/base/latexrelease.sty
+++ b/Master/texmf-dist/tex/latex/base/latexrelease.sty
@@ -20,6 +20,7 @@
%% lterror.dtx (with options: `latexrelease')
%% ltpar.dtx (with options: `latexrelease')
%% ltpara.dtx (with options: `latexrelease')
+%% ltmeta.dtx (with options: `latexrelease')
%% ltspace.dtx (with options: `latexrelease')
%% ltlogos.dtx (with options: `latexrelease')
%% ltfiles.dtx (with options: `latexrelease')
@@ -47,6 +48,7 @@
%% ltfloat.dtx (with options: `latexrelease')
%% ltidxglo.dtx (with options: `latexrelease')
%% ltbibl.dtx (with options: `latexrelease')
+%% ltmarks.dtx (with options: `latexrelease')
%% ltpage.dtx (with options: `latexrelease')
%% ltclass.dtx (with options: `latexrelease,tracerollback')
%% ltfilehook.dtx (with options: `latexrelease')
@@ -63,7 +65,7 @@
%% (but please observe conditions on bug reports sent to that address!)
%%
%%
-%% Copyright (C) 1993-2021
+%% Copyright (C) 1993-2022
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -288,7 +290,7 @@
}
%%% From File: ltvers.dtx
\edef\latexreleaseversion
- {2021-11-15}
+ {2022-06-01}
\newif\if@includeinrelease
\@includeinreleasefalse
\def\IncludeInRelease#1{%
@@ -381,7 +383,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}%
@@ -396,7 +398,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
@@ -407,7 +421,7 @@
\@skipping@modulefalse
\fi}
\ProvidesPackage{latexrelease}
- [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)]
\NeedsTeXFormat{LaTeX2e}[1996/06/01]
\@ifundefined{sourceLaTeXdate}{%
@@ -471,7 +485,7 @@ of this package available from CTAN}
\catcode58=11 % :
\catcode126=10 % ~
\catcode32=09 % <space>
- \xdef\latexrelease@postexpl{\unexpanded{%
+ \xdef\latexrelease@postltexpl{\unexpanded{%
\cs_gset_protected:Npn \__latexrelease_declare_command:w
{ \@star@or@long \__latexrelease_declare_command:Nw }
\cs_gset_protected:Npn \__latexrelease_declare_command:Nw #1
@@ -511,26 +525,32 @@ of this package available from CTAN}
{ \cs_set_eq:NN #3 \tex_undefined:D \use:n }
}
\tl_clear_new:N \l__latexrelease_restores_tl
-\cs_gset:Npn \__latexrelease_tmp:w #1 #2
+\cs_gset:Npn \__latexrelease_redefines:w #1 #2
{
- \quark_if_recursion_tail_stop_do:Nn #1
- { \cs_undefine:N \__latexrelease_tmp:w }
+ \quark_if_recursion_tail_stop:N #1
\tl_put_right:Nn \l__latexrelease_restores_tl {#1}
\cs_set_eq:cN { __latexrelease_ \cs_to_str:N #1 } #1
\cs_set_eq:NN #1 #2
- \__latexrelease_tmp:w
+ \__latexrelease_redefines:w
}
-\__latexrelease_tmp:w
+\__latexrelease_redefines:w
\__kernel_chk_if_free_cs:N \use_none:n
\e@alloc \__latexrelease_e@alloc:NnnnnN
\__kernel_msg_error:nnx \use_none:nnn
\msg_new:nnnn \msg_gset:nnnn
- \NewDocumentCommand \DeclareDocumentCommand
+ % \NewDocumentCommand \DeclareDocumentCommand % after ltcmd.dtx
\newcommand \__latexrelease_declare_command:w
\__kernel_msg_error:nnn \use_none:nnn % needed while redirect for kernel msgs doesn't work
\q_recursion_tail \q_recursion_tail
\q_recursion_stop
\msg_redirect_name:nnn { hooks } { exists } { none }
+\cs_gset_protected:Npn \latexrelease@postltcmd
+ {
+ \__latexrelease_redefines:w
+ \NewDocumentCommand \DeclareDocumentCommand
+ \q_recursion_tail \q_recursion_tail
+ \q_recursion_stop
+ }
}}%
\endgroup
%%% From File: ltdirchk.dtx
@@ -847,6 +867,40 @@ of this package available from CTAN}
\let\tracingstacklevels\@undefined
\fi
\EndIncludeInRelease
+\IncludeInRelease{2022/06/01}{\obeylines}%
+ {Add a redirection to obeylines and obeyspaces}%
+\begingroup
+\catcode`\^^M=\active % these lines must end with %
+ \gdef\obeylines{\catcode`\^^M\active%
+ \let^^M\obeyedline%
+ }%
+ \global\let^^M\par % this is in case ^^M appears in a \write
+\endgroup
+\protected\gdef\obeyedline{\par}
+\global\let\obeyedspace\space
+\begingroup
+\catcode`\ =\active%
+\gdef\obeyspaces{\catcode`\ \active\let =\obeyedspace}%
+\global\let =\space%
+\endgroup
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}{\obeylines}%
+ {Add a redirection to obeylines and obeyspaces}%
+
+\expandafter\let\csname obeylines \endcsname\@undefined
+\expandafter\let\csname obeyspace \endcsname\@undefined
+
+\begingroup
+\catcode`\^^M=\active % these lines must end with %
+ \gdef\obeylines{\catcode`\^^M\active \let^^M\par %
+ }%
+ \global\let^^M\RawParEnd % this is in case ^^M appears in a \write
+\endgroup
+\def\obeyspaces{\catcode`\ \active}
+
+\let\obeyedline\@undefined
+\let\obeyedspace\@undefined
+\EndIncludeInRelease
\IncludeInRelease{2021/06/01}{\loggingall}
{\tracingstacklevels and \tracinglostchars=3}%
\edef\loggingall{%
@@ -1110,6 +1164,14 @@ of this package available from CTAN}
\e@alloc\luafunction\e@alloc@chardef
\e@alloc@luafunction@count\m@ne\e@alloc@top
}
+\def\newluacmd{%
+ \e@alloc\luafunction\luadef
+ \e@alloc@luafunction@count\m@ne\e@alloc@top
+}
+\def\newprotectedluacmd{%
+ \e@alloc\luafunction{\protected\luadef}
+ \e@alloc@luafunction@count\m@ne\e@alloc@top
+}
\ifx\e@alloc@whatsit@count\@undefined
\countdef\e@alloc@whatsit@count=261
\e@alloc@whatsit@count=\z@
@@ -1290,6 +1352,7 @@ of this package available from CTAN}
}%
\input{expl3.ltx}
\EndIncludeInRelease
+\@ifundefined{ExplSyntaxOff}{}{\latexrelease@postltexpl}
\IncludeInRelease{2020/10/01}{\@expl@cs@to@str@@N}%
{expl3 macros added for the 2020-10-01 release}%
\ExplSyntaxOn
@@ -1311,6 +1374,42 @@ of this package available from CTAN}
\let \@expl@cs@replacement@spec@@N \@undefined
\let \@expl@str@map@function@@NN \@undefined
\EndIncludeInRelease
+\IncludeInRelease{2022/06/01}%
+ {\fpeval}{fp and int calculations}%
+\ExplSyntaxOn
+\cs_new_eq:NN \fpeval \fp_eval:n
+\cs_new_eq:NN \inteval \int_eval:n
+\cs_new_eq:NN \dimeval \dim_eval:n
+\cs_new_eq:NN \skipeval \skip_eval:n
+\ExplSyntaxOff
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+ {\fpeval}{fp and int calculations}%
+
+\let\fpeval\@undefined
+\let\inteval\@undefined
+\let\dimeval\@undefined
+\let\skipeval\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2022/06/01}%
+ {\ExpandArgs}{Some pre-expansion commands}%
+\ExplSyntaxOn
+\cs_new_eq:NN \UseName \use:c
+\cs_new:Npn \ExpandArgs #1
+ {
+ \cs_if_exist_use:cF { exp_args:N #1 }
+ { \msg_expandable_error:nnn { kernel } { unknown-arg-expansion } {#1} }
+ }
+\msg_new:nnn { kernel } { unknown-arg-expansion }
+ { Unknown~arg~expansion~"#1" }
+\ExplSyntaxOff
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+ {\ExpandArgs}{Some pre-expansion commands}%
+
+\let\UseName\@undefined
+\let\ExpandArgs\@undefined
+\EndIncludeInRelease
%%% From File: ltdefns.dtx
\IncludeInRelease{2020/10/01}%
{\typeout}{Allow "par" in \typeout}%
@@ -1791,8 +1890,8 @@ of this package available from CTAN}
\EndIncludeInRelease
%%% From File: ltcmd.dtx
-\def\ltcmdversion{v1.0i}
-\def\ltcmddate{2021-12-02}
+\def\ltcmdversion{v1.0l}
+\def\ltcmddate{2022-03-18}
\edef\@latexrelease@catcode@null{\the\catcode`\^^@ }
\catcode`\^^@=12
\ExplSyntaxOn
@@ -2978,21 +3077,21 @@ of this package available from CTAN}
\cs_new_protected:Npn \__cmd_show_command_aux:nNNn #1 #2 #3 #4
{
\__cmd_split_signature:n {#4}
- \iow_term:x
+ \tl_show:x
{
- > ~ \token_to_str:N #2 = #1: \iow_newline:
+ \token_to_str:N #2 = #1: \iow_newline:
\tl_use:N \l__cmd_tmpa_tl
- -> \cs_replacement_spec:N #3 .
+ -> \cs_replacement_spec:N #3
}
}
\cs_new_protected:Npn \__cmd_show_environment:N #1
{
\exp_after:wN \__cmd_show_environment:Nnnw #1 \q__cmd
- \iow_term:x
+ \tl_show:x
{
- > ~ \token_to_str:N \end { \cs_to_str:N #1 } : \iow_newline:
+ \token_to_str:N \end { \cs_to_str:N #1 } : \iow_newline:
-> \exp_args:Nc \cs_replacement_spec:N
- { environment~ \cs_to_str:N #1 ~end~aux~ } .
+ { environment~ \cs_to_str:N #1 ~end~aux~ }
}
}
\cs_new_protected:Npn \__cmd_show_environment:Nnnw #1 #2 #3 #4 \q__cmd
@@ -3951,22 +4050,14 @@ 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 }
- {
- \token_if_macro:NT #1
- {
- \exp_after:wN \exp_after:wN
- \exp_after:wN \token_to_str:N
- \exp_after:wN \use_i_delimit_by_q_stop:nw
- #1 \scan_stop: \q_stop
- }
- }
+ { \exp_not:N \exp_not:n { \exp_not:e { \tl_head:N #1 } } }
}
{
- { \token_to_str:N \__cmd_start:nNNnnn } {#2}
- { \token_to_str:N \__cmd_start_expandable:nNNNNn } {#3}
- { \token_to_str:N \__cmd_start_env:nnnnn } {#4}
+ { \exp_not:N \__cmd_start:nNNnnn } {#2}
+ { \exp_not:N \__cmd_start_expandable:nNNNNn } {#3}
+ { \exp_not:N \__cmd_start_env:nnnnn } {#4}
{
- \exp_after:wN \token_to_str:N
+ \exp_after:wN \exp_not:N
\cs:w environment~
\exp_last_unbraced:Ne \use_none:nnn
{ \cs_to_str:N #1 } ~end~aux \cs_end:
@@ -4411,6 +4502,19 @@ of this package available from CTAN}
\cs_new:Npn \IfValueF { \tl_if_novalue:nT }
\cs_new:Npn \IfValueT { \tl_if_novalue:nF }
\cs_new:Npn \IfValueTF #1#2#3 { \tl_if_novalue:nTF {#1} {#3} {#2} }
+\IncludeInRelease{2022/06/01}%
+ {\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
+\EndIncludeInRelease
+\IncludeInRelease{2021/11/15}%
+ {\IfBlankTF}{Testing~for~empty~or~blank}%
+\cs_undefine:N \IfBlankF
+\cs_undefine:N \IfBlankT
+\cs_undefine:N \IfBlankTF
+
+\EndIncludeInRelease
\tl_new:N \ProcessedArgument
\cs_new_eq:NN \ReverseBoolean \__cmd_bool_reverse:N
\cs_new_eq:NN \SplitArgument \__cmd_split_argument:nnn
@@ -4437,12 +4541,12 @@ of this package available from CTAN}
\EndModuleRelease
\ExplSyntaxOff
-\@ifundefined{ExplSyntaxOff}{}{\latexrelease@postexpl}
+\@ifundefined{ExplSyntaxOff}{}{\latexrelease@postltcmd}
\catcode`\^^@=\@latexrelease@catcode@null\relax
%%% From File: lthooks.dtx
-\def\lthooksversion{v1.0s}
-\def\lthooksdate{2021/09/28}
+\def\lthooksversion{v1.0u}
+\def\lthooksdate{2022/05/19}
\ExplSyntaxOn
\NewModuleRelease{2020/10/01}{lthooks}
{The~hook~management~system}
@@ -5022,6 +5126,7 @@ of this package available from CTAN}
\tl_const:cn { c__hook_generic_env/./begin_tl } { + }
\tl_const:cn { c__hook_generic_env/./end_tl } { + }
\tl_const:cn { c__hook_generic_include/./end_tl } { - }
+\tl_const:cn { c__hook_generic_include/./excluded_tl } { + }
\clist_map_inline:nn { file , package , class , include }
{
\tl_const:cn { c__hook_deprecated_#1/./before_tl } { }
@@ -5083,6 +5188,39 @@ of this package available from CTAN}
\__hook_normalize_hook_rule_args:Nnnnn \__hook_gset_rule:nnnn
{#1} {#2} {#3} {#4}
}
+\IncludeInRelease{2022/06/01}{\__hook_gset_rule:nnnn}
+ {Refuse~setting~rule~for~one-time~hooks}
+\cs_new_protected:Npn \__hook_gset_rule:nnnn #1#2#3#4
+ {
+ \__hook_if_deprecated_generic:nT {#1}
+ {
+ \__hook_deprecated_generic_warn:n {#1}
+ \__hook_do_deprecated_generic:Nn \__hook_gset_rule:nnnn {#1}
+ {#2} {#3} {#4}
+ \__hook_clean_to_scan:w
+ }
+ \__hook_if_execute_immediately:nT {#1}
+ {
+ \msg_error:nnnnnn { hooks } { rule-too-late }
+ {#1} {#2} {#3} {#4}
+ \__hook_clean_to_scan:w
+ }
+ \__hook_init_structure:n {#1}
+ \__hook_rule_gclear:nnn {#1} {#2} {#4}
+ \cs_if_exist_use:cTF { __hook_rule_#3_gset:nnn }
+ {
+ {#1} {#2} {#4}
+ \__hook_update_hook_code:n {#1}
+ }
+ {
+ \msg_error:nnnnnn { hooks } { unknown-rule }
+ {#1} {#2} {#3} {#4}
+ }
+ \s__hook_mark
+ }
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}{\__hook_gset_rule:nnnn}
+ {Refuse~setting~rule~for~one-time~hooks}
\cs_new_protected:Npn \__hook_gset_rule:nnnn #1#2#3#4
{
\__hook_if_deprecated_generic:nT {#1}
@@ -5099,9 +5237,12 @@ of this package available from CTAN}
{#1} {#2} {#4}
\__hook_update_hook_code:n {#1}
}
- { \msg_error:nnnnnn { hooks } { unknown-rule }
- {#1} {#2} {#3} {#4} }
+ {
+ \msg_error:nnnnnn { hooks } { unknown-rule }
+ {#1} {#2} {#3} {#4}
+ }
}
+\EndIncludeInRelease
\cs_new_protected:Npn \__hook_rule_before_gset:nnn #1#2#3
{
\__hook_tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl }
@@ -5171,8 +5312,8 @@ of this package available from CTAN}
}
\cs_new_protected:Npn \__hook_initialize_hook_code:n #1
{
- \__hook_debug:n{ \iow_term:x{^^JUpdate~ code~ for~ hook~
- '#1' \on@line :^^J} }
+ \__hook_debug:n
+ { \iow_term:x { ^^J Update~code~for~hook~'#1' \on@line :^^J } }
\__hook_include_legacy_code_chunk:n {#1}
\__hook_if_usable:nT {#1}
{
@@ -5193,8 +5334,8 @@ of this package available from CTAN}
\prop_set_eq:Nc \l__hook_work_prop { g__hook_#1_code_prop }
\__hook_initialize_single:ccn
{ __hook~#1 } { g__hook_#1_labels_clist } {#1}
- \__hook_debug:n{ \exp_args:NNx \prop_gput:Nnn
- \g__hook_used_prop {#1}{} }
+ \__hook_debug:n
+ { \exp_args:NNx \prop_gput:Nnn \g__hook_used_prop {#1} { } }
}
}
}
@@ -5351,12 +5492,12 @@ of this package available from CTAN}
}
\prop_put:Nnn \l__hook_work_prop {#1} { }
}
-\cs_new_eq:cc { __hook_apply_-rule_<:nnn } { __hook_apply_rule_>:nnn }
-\cs_new_eq:cc { __hook_apply_-rule_>:nnn } { __hook_apply_rule_<:nnn }
+\cs_new_eq:cc { __hook_apply_-rule_<:nnn } { __hook_apply_rule_>:nnn }
+\cs_new_eq:cc { __hook_apply_-rule_>:nnn } { __hook_apply_rule_<:nnn }
\cs_new_eq:cc { __hook_apply_-rule_<-:nnn } { __hook_apply_rule_<-:nnn }
\cs_new_eq:cc { __hook_apply_-rule_->:nnn } { __hook_apply_rule_->:nnn }
-\cs_new_eq:cc { __hook_apply_-rule_xE:nnn } { __hook_apply_rule_xE:nnn }
-\cs_new_eq:cc { __hook_apply_-rule_xW:nnn } { __hook_apply_rule_xW:nnn }
+\cs_new_eq:cc { __hook_apply_-rule_xE:nnn } { __hook_apply_rule_xE:nnn }
+\cs_new_eq:cc { __hook_apply_-rule_xW:nnn } { __hook_apply_rule_xW:nnn }
\cs_new_protected:Npn \__hook_msg_pair_found:nnn #1#2#3
{
\iow_term:x{~ \str_if_eq:nnTF {#3} {??} {default} {~normal} ~
@@ -5652,9 +5793,9 @@ of this package available from CTAN}
\__hook_tl_gclear:c { __hook~#1 }
\__hook_tl_gclear:c { __hook_next~#1 }
\__hook_tl_gclear:c { __hook_toplevel~#1 }
- \prop_gclear:c { g__hook_#1_code_prop }
+ \prop_gclear_new:c { g__hook_#1_code_prop }
}
-\prg_new_conditional:Npnn \__hook_if_execute_immediately:n #1 { F, TF }
+\prg_new_conditional:Npnn \__hook_if_execute_immediately:n #1 { T, F, TF }
{
\__hook_if_usable:nTF {#1}
{
@@ -5777,7 +5918,8 @@ of this package available from CTAN}
This~command~was~ignored.
}
\msg_new:nnnn { hooks } { unknown-rule }
- { Unknown~ relationship~ '#3'~
+ {
+ Unknown~ relationship~ '#3'~
between~ labels~ '#2'~ and~ '#4'~
\str_if_eq:nnF {#1} {??} { ~in~hook~'#1' }. ~
Perhaps~ a~ misspelling?
@@ -5791,6 +5933,19 @@ of this package available from CTAN}
'voids'~ or~
'unrelated'.
}
+\msg_new:nnnn { hooks } { rule-too-late }
+ {
+ Sorting~rule~for~'#1'~hook~applied~too~late.\\
+ Try~setting~this~rule~earlier.
+ }
+ {
+ You~tried~to~set~the~ordering~of~hook~'#1'~using\\
+ \ \ \iow_char:N\\DeclareHookRule{#1}{#2}{#3}{#4}\\
+ but~hook~'#1'~was~already~used~as~a~one-time~hook,~
+ thus~sorting~is\\
+ no~longer~possible.~Declare~the~rule~
+ before~the~hook~is~used.
+ }
\msg_new:nnnn { hooks } { misused-top-level }
{
Illegal~use~of~\iow_char:N \\AddToHook{#1}[top-level]{...}.\\
@@ -6422,6 +6577,7 @@ of this package available from CTAN}
\EndModuleRelease
\ExplSyntaxOff
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% From File: ltalloc.dtx
%%% From File: ltcntrl.dtx
%%% From File: lterror.dtx
@@ -6470,7 +6626,7 @@ of this package available from CTAN}
%% File: ltpara.dtx (C) Copyright 2020-2021
%%% From File: ltpara.dtx
\def\ltparaversion{v1.0k}
-\def\ltparadate{2021/11/11}
+\def\ltparadate{2022/05/13}
\ExplSyntaxOn
@@ -6614,6 +6770,45 @@ of this package available from CTAN}
\EndModuleRelease
\ExplSyntaxOff
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% File: ltmeta.dtx (C) Copyright 2021, 2022
+%%% From File: ltmeta.dtx
+\def\ltmetaversion{v1.0b}
+\def\ltmetadate{2022/05/18}
+\NewModuleRelease{2022/06/01}{ltmeta}
+ {Document Metadata handling}
+\let \IfDocumentMetadataTF \@secondoftwo
+\protected\def\DocumentMetadata{%
+ \InputIfFileExists{documentmetadata-support.ltx}%
+ {}%
+ {%
+ \@latex@error{No support files for
+ \noexpand\DocumentMetadata found}
+ {Is the 'LaTeX-lab' bundle installed?%
+ \MessageBreak
+ Without it, the declaration is ignored.}%
+ \let\DocumentMetadata\@gobble
+ }%
+ \let \IfDocumentMetadataTF \@firstoftwo
+ \DocumentMetadata
+}
+\NewDocumentCommand\MakeLinkTarget{sO{}m}{%
+ \ifvmode
+ \special{}%
+ \else
+ \@savsf\spacefactor
+ \smash{}%
+ \spacefactor\@savsf
+ \fi}
+\NewDocumentCommand\LinkTargetOn{}{}
+\NewDocumentCommand\LinkTargetOff{}{}
+\NewDocumentCommand\NextLinkTarget{m}{}
+\IncludeInRelease{0000/00/00}{ltmeta}%
+ {Undo Document Metadata handling}
+
+\let\DocumentMetadata\@undefined
+
+\EndModuleRelease
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% From File: ltspace.dtx
\IncludeInRelease{2019/10/01}%
{\pagebreak}{Make commands robust}%
@@ -7200,7 +7395,7 @@ of this package available from CTAN}
\else \@include#1 \fi}
\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
+\IncludeInRelease{2022/06/01}%
{\@include}{Spaces in file names and hooks}%
\def\@include#1 {%
\ifx\@nodocument\relax
@@ -7238,6 +7433,8 @@ of this package available from CTAN}
\else
\deadcycles\z@
\@nameuse{cp@#1}%
+ \UseHook{include/excluded}%
+ \UseOneTimeHook{include/#1/excluded}%
\fi
\let\@auxout\@mainaux
\else
@@ -7248,9 +7445,59 @@ of this package available from CTAN}
\NewHook{include/before}
\NewReversedHook{include/end}
\NewReversedHook{include/after}
+\NewHook{include/excluded}
\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+ {\@include}{Spaces in file names and hooks}%
+\EndIncludeInRelease
+\def\@include#1 {%
+\ifx\@nodocument\relax
+ \clearpage
+ \if@filesw
+ \immediate\write\@mainaux{\string\@input{#1.aux}}%
+ \fi
+ \@tempswatrue
+ \if@partsw
+ \@tempswafalse
+ \edef\reserved@b{#1}%
+ \@for\reserved@a:=\@partlist\do
+ {\ifx\reserved@a\reserved@b\@tempswatrue\fi}%
+ \fi
+ \if@tempswa
+ \let\@auxout\@partaux
+ \if@filesw
+ \immediate\openout\@partaux "#1.aux"
+ \immediate\write\@partaux{\relax}%
+ \fi
+ \@filehook@set@CurrentFile
+ \UseHook{include/before}%
+ \UseOneTimeHook{include/#1/before}%
+ \@input@{#1.tex}%
+ \UseOneTimeHook{include/#1/end}%
+ \UseHook{include/end}%
+ \clearpage
+ \UseOneTimeHook{include/#1/after}%
+ \UseHook{include/after}%
+ \clearpage
+ \@writeckpt{#1}%
+ \if@filesw
+ \immediate\closeout\@partaux
+ \fi
+ \else
+ \deadcycles\z@
+ \@nameuse{cp@#1}%
+ \fi
+ \let\@auxout\@mainaux
+\else
+\@latex@warning{%
+ \noexpand\include should only be used after \string\begin{document}}%
+\@input@{#1}%
+\fi}
+\NewHook{include/before}
+\NewReversedHook{include/end}
+\NewReversedHook{include/after}
\IncludeInRelease{0000/00/00}%
- {\@include}{Spaces in file names}%
+ {\@include}{Spaces in file names and hooks}%
\def\@include#1 {%
\clearpage
\if@filesw
@@ -7612,6 +7859,7 @@ of this package available from CTAN}
\expandafter
\let\csname\string\T1\string\c-g\endcsname\@undefined
\EndIncludeInRelease
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% From File: ltcounts.dtx
\IncludeInRelease{2015/01/01}{\@stpelt}
@@ -8091,6 +8339,7 @@ of this package available from CTAN}
\hbadness\z@\showboxdepth\z@\ #1%
\color@endgroup}}
\EndIncludeInRelease
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% From File: ltfssaxes.dtx
%% Copyright (C) 1999-2020 Frank Mittelbach
\IncludeInRelease{2020/02/02}%
@@ -10728,8 +10977,47 @@ of this package available from CTAN}
%%% From File: ltpageno.dtx
%%% From File: ltxref.dtx
+\IncludeInRelease{2022/06/01}%
+ {\ref}{Add starred reference commands}%
+\def\@kernel@sref#1{\expandafter\@setref\csname r@#1\endcsname\@firstoftwo{#1}}
+\def\@kernel@spageref#1{\expandafter\@setref\csname r@#1\endcsname
+ \@secondoftwo{#1}}
+\let\@kernel@ref\@kernel@sref
+\let\@kernel@pageref\@kernel@spageref
+\NewDocumentCommand\ref{s}
+ {\IfBooleanTF{#1}{\@kernel@sref}{\@kernel@ref}}
+\NewDocumentCommand\pageref{s}
+ {\IfBooleanTF{#1}{\@kernel@spageref}{\@kernel@pageref}}
+\def\@kernel@pageref@exp#1{\csname cs_if_exist:cTF\endcsname
+ {r@#1}{\csname tl_item:cn\endcsname{r@#1}{2}}{0}}
+\def\@kernel@ref@exp#1{\csname cs_if_exist:cTF\endcsname
+ {r@#1}{\csname tl_item:cn\endcsname{r@#1}{1}}{0}}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+ {\ref}{Add starred reference commands}%
+\def\ref#1{\expandafter\@setref\csname r@#1\endcsname\@firstoftwo{#1}}
+\def\pageref#1{\expandafter\@setref\csname r@#1\endcsname
+ \@secondoftwo{#1}}
+
+\EndIncludeInRelease
+\IncludeInRelease{2022/06/01}%
+ {\Ref}{Add starred version}%
+\def\@currentcounter{}
+\def\refstepcounter#1{\stepcounter{#1}%
+ \edef\@currentcounter{#1}%
+ \protected@edef\@currentlabel
+ {\csname p@#1\expandafter\endcsname\csname the#1\endcsname}%
+}
+\def\labelformat#1{\expandafter\def\csname p@#1\endcsname##1}
+\def\@kernel@Ref#1{\protected@edef\@tempa{\@kernel@ref{#1}}%
+ \expandafter\MakeUppercase\@tempa}
+\def\@kernel@sRef#1{\protected@edef\@tempa{\@kernel@sref{#1}}%
+ \expandafter\MakeUppercase\@tempa}
+\NewDocumentCommand\Ref{s}
+ {\IfBooleanTF{#1}{\@kernel@sRef}{\@kernel@Ref}}
+\EndIncludeInRelease
\IncludeInRelease{2020/10/01}%
- {\refstepcounter}{Add \@currentcounter}%
+ {\Ref}{Add starred version}%
\def\@currentcounter{}
\def\refstepcounter#1{\stepcounter{#1}%
\edef\@currentcounter{#1}%
@@ -12695,6 +12983,24 @@ of this package available from CTAN}
\EndIncludeInRelease
%%% From File: ltidxglo.dtx
%%% From File: ltbibl.dtx
+\IncludeInRelease{2022/06/01}%
+ {\cite}{check for blank}%
+\DeclareRobustCommand\cite{%
+ \@ifnextchar [{\@tempswatrue\@citex@checkblank}{\@tempswafalse\@citex@checkblank[]}}
+\def\@citex@checkblank[#1]#2{%
+ \IfBlankTF {#2}%
+ {\@citex[#1]{\space}}%
+ {\@citex[#1]{#2}}%
+}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+ {\cite}{check for blank}%
+
+\DeclareRobustCommand\cite{%
+ \@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}
+\let\@citex@checkblank\@undefined
+
+\EndIncludeInRelease
\IncludeInRelease{2021/06/01}%
{\nocite}{Allow nocite in preamble}%
\def\nocite#1{\@bsphack
@@ -12725,9 +13031,350 @@ of this package available from CTAN}
\@esphack}
\EndIncludeInRelease
+%% File: ltmarks.dtx (C) Copyright 2022
+%%% From File: ltmarks.dtx
+\def\ltmarksversion{v1.0d}
+\def\ltmarksdate{2022/06/01}
+%% \end{function}
+
+\ExplSyntaxOn
+\NewModuleRelease{2022/06/01}{ltmarks}
+ {Marks~handling}
+\seq_new:N \g__mark_classes_seq
+\cs_new_protected:Npn \mark_new_class:n #1
+{
+ \seq_if_in:NnTF \g__mark_classes_seq {#1}
+ {
+ \msg_error:nnn { mark } { class-already-defined }
+ {#1}
+ }
+ { \__mark_new_class:nn {#1} }
+}
+\@onlypreamble \mark_new_class:n
+\cs_new_protected:Npn \__mark_new_class:nn #1
+{
+ \exp_args:Nc \newmarks {c__mark_class_ #1 _mark}
+ \seq_gput_right:Nn \g__mark_classes_seq {#1}
+ \tl_new:c { g__mark_page_top_ #1 _tl }
+ \tl_new:c { g__mark_page_first_ #1 _tl }
+ \tl_new:c { g__mark_page_last_ #1 _tl }
+ \tl_new:c { g__mark_previous-page_top_ #1 _tl }
+ \tl_new:c { g__mark_previous-page_first_ #1 _tl }
+ \tl_new:c { g__mark_previous-page_last_ #1 _tl }
+ \tl_new:c { g__mark_column_top_ #1 _tl }
+ \tl_new:c { g__mark_column_first_ #1 _tl }
+ \tl_new:c { g__mark_column_last_ #1 _tl }
+ \tl_new:c { g__mark_previous-column_top_ #1 _tl }
+ \tl_new:c { g__mark_previous-column_first_ #1 _tl }
+ \tl_new:c { g__mark_previous-column_last_ #1 _tl }
+ \tl_new:c { g__mark_first-column_top_ #1 _tl }
+ \tl_new:c { g__mark_first-column_first_ #1 _tl }
+ \tl_new:c { g__mark_first-column_last_ #1 _tl }
+ \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 }
+}
+\box_new:N \l__mark_box
+\tl_new:N \g__mark_tmp_tl
+\tl_new:N \g__mark_new_top_tl
+\cs_new_protected:Npn \__mark_update_structure:nn #1#2
+ {
+ \__mark_update_structure_alias:nn { previous-#1 } {#1}
+ \group_begin:
+ \dim_set_eq:NN \tex_splitmaxdepth:D \c_max_dim
+ \int_set_eq:NN \tex_vbadness:D \c_max_int
+ \dim_set_eq:NN \tex_vfuzz:D \c_max_dim
+ \vbox_set_to_ht:Nnn \l__mark_box { -.5\c_max_dim }
+ {
+ #2
+ \tex_unskip:D
+ \box_set_to_last:N \l__mark_box
+ \int_compare:nNnT \tex_lastnodetype:D < 0
+ {
+ \box_if_vertical:NT \l__mark_box
+ {
+ \vbox_set_to_ht:Nnn \l__mark_box { -.5\c_max_dim }
+ {
+ \vbox_unpack:N \l__mark_box
+ \tex_kern:D \c_zero_dim % ensure that box
+ % is not empty
+ }
+ \int_compare:nNnT \tex_badness:D > 0
+ { \vbox_unpack:N \l__mark_box }
+ }
+ }
+ \tex_kern:D \c_zero_dim
+ }
+ \int_compare:nNnTF \tex_badness:D > 0
+ {
+ \vbox_set_split_to_ht:NNn \l__mark_box \l__mark_box \c_max_dim
+ \seq_map_inline:Nn \g__mark_classes_seq
+ {
+ \tl_gset_eq:Nc \g__mark_new_top_tl { g__mark_#1_last_##1_tl }
+ \tl_gset_eq:cN { g__mark_#1_top_##1_tl } \g__mark_new_top_tl
+ \tl_gset:No \g__mark_tmp_tl
+ { \tex_splitbotmarks:D \use:c { c__mark_class_##1_mark } }
+ \tl_if_empty:NTF \g__mark_tmp_tl
+ {
+ \tl_gset_eq:cN { g__mark_#1_last_ ##1_tl }
+ \g__mark_new_top_tl
+ \tl_gset_eq:cN { g__mark_#1_first_##1_tl }
+ \g__mark_new_top_tl
+ }
+ {
+ \tl_gset_eq:cN { g__mark_#1_last_##1_tl } \g__mark_tmp_tl
+ \tl_gset:co { g__mark_#1_first_##1_tl }
+ {
+ \tex_splitfirstmarks:D
+ \use:c { c__mark_class_##1_mark }
+ }
+ }
+ }
+ }
+ {
+ \msg_error:nnn { mark } { infinite-shrinkage } {#1}
+ \seq_map_inline:Nn \g__mark_classes_seq
+ {
+ \tl_gset_eq:cc { g__mark_#1_top_ ##1_tl }
+ { g__mark_#1_last_ ##1_tl }
+ \tl_gset_eq:cc { g__mark_#1_first_##1_tl }
+ { g__mark_#1_last_ ##1_tl }
+ }
+ }
+ \group_end:
+ }
+\cs_new_protected:Npn \__mark_update_structure_alias:nn #1#2 {
+ \seq_map_inline:Nn \g__mark_classes_seq
+ {
+ \tl_gset_eq:cc { g__mark_ #1 _top_ ##1 _tl }
+ { g__mark_ #2 _top_ ##1 _tl }
+ \tl_gset_eq:cc { g__mark_ #1 _first_ ##1 _tl }
+ { g__mark_ #2 _first_ ##1 _tl }
+ \tl_gset_eq:cc { g__mark_ #1 _last_ ##1 _tl }
+ { g__mark_ #2 _last_ ##1 _tl }
+ }
+}
+\cs_new_protected:Npn \__mark_update_structure_to_err:n #1 {
+ \seq_map_inline:Nn \g__mark_classes_seq
+ {
+ \tl_gset:cn { g__mark_ #1 _top_ ##1 _tl } { \__mark_error:n {#1} }
+ \tl_gset:cn { g__mark_ #1 _first_ ##1 _tl } { \__mark_error:n {#1} }
+ \tl_gset:cn { g__mark_ #1 _last_ ##1 _tl } { \__mark_error:n {#1} }
+ }
+}
+\cs_new_protected:Npn \__mark_error:n #1 {
+ \msg_error:nnn { mark } { invalid-use } {#1}
+}
+\cs_new_protected:Npn \mark_insert:nn #1#2
+{
+ \seq_if_in:NnTF \g__mark_classes_seq {#1}
+ {
+ \group_begin:
+ \@kernel@before@insertmark
+ \hook_use:n { insertmark }
+ \unrestored@protected@xdef \g__mark_tmp_tl {#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 } }
+ }
+ \group_end:
+ \if@nobreak\ifvmode\nobreak\fi\fi
+ }
+ {
+ \msg_error:nnx { mark } { unknown-class }
+ { \tl_to_str:n {#1} }
+ }
+}
+\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:
+}
+\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 } }
+\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 }
+ { g__mark_ #1 _#4_ #2 _tl }
+ \prg_return_true:
+ \prg_return_false:
+}
+\prg_new_conditional:Npnn \mark_if_eq:nnnnnn #1#2#3#4#5#6 { T , F , TF }
+{
+ \tl_if_eq:ccTF { g__mark_ #1 _#3_ #2 _tl }
+ { g__mark_ #4 _#6_ #5 _tl }
+ \prg_return_true:
+ \prg_return_false:
+}
+\prop_gput:Nnn \g_msg_module_type_prop { mark } { LaTeX }
+\msg_new:nnnn { mark } { class-already-defined }
+ { Mark~class~'#1'~already~defined }
+ {
+ \c__msg_coding_error_text_tl
+ LaTeX~was~asked~to~define~a~new~mark~class~called~'#1':~
+ this~mark~class~already~exists.
+ \c__msg_return_text_tl
+ }
+\msg_new:nnnn { mark } { unknown-class }
+ { Unknown~mark~class~'#1'. }
+ {
+ \c__msg_coding_error_text_tl
+ LaTeX~was~asked~to~manipulate~a~mark~of~class~'#1',~
+ but~this~class~of~marks~does~not~exist.
+ }
+
+\msg_new:nnnn { mark } { invalid-use }
+ { Mark~region~'#1'~not ~usable }
+ {
+ \c__msg_coding_error_text_tl
+ The~region~'#1'~can~only~be~used~after~
+ all~columns~have~been~assembled.
+ \c__msg_return_text_tl
+ }
+\msg_new:nnnn { mark } { infinite-shrinkage }
+ { Infinite~shrinkage~found~in~'#1'. }
+ {
+ \c__msg_coding_error_text_tl
+ The~mark~region~'#1'~contains~some~infinite~negative~glue~
+ allowing~it~to~shrink~to~an~arbitrary~size.~
+ This~makes~it~impossible~to~split~the~region~apart~to~
+ get~at~its~marks.~They~are~lost.
+ }
+\bool_new:N \g__mark_debug_bool
+\cs_new_eq:NN \__mark_debug:n \use_none:n
+\cs_new_protected:Npn \mark_debug_on:
+ {
+ \bool_gset_true:N \g__mark_debug_bool
+ \__mark_debug_gset:
+ }
+\cs_new_protected:Npn \mark_debug_off:
+ {
+ \bool_gset_false:N \g__mark_debug_bool
+ \__mark_debug_gset:
+ }
+\cs_new_protected:Npn \__mark_debug_gset:
+ {
+ \cs_gset_protected:Npx \__mark_debug:n ##1
+ { \bool_if:NT \g__mark_debug_bool {##1} }
+ }
+\cs_new_eq:NN \DebugMarksOn \mark_debug_on:
+\cs_new_eq:NN \DebugMarksOff \mark_debug_off:
+\cs_new_eq:NN \NewMarkClass \mark_new_class:n
+\@onlypreamble \NewMarkClass
+\cs_new_eq:NN \InsertMark \mark_insert:nn
+\NewExpandableDocumentCommand \FirstMark { O{page} m }
+ { \mark_use_first:nn {#1}{#2} }
+\NewExpandableDocumentCommand \LastMark { O{page} m }
+ { \mark_use_last:nn {#1}{#2} }
+\NewExpandableDocumentCommand \TopMark { O{page} m }
+ { \mark_use_top:nn {#1}{#2} }
+\NewExpandableDocumentCommand \IfMarksEqualTF {O{page}mmm} {
+ \mark_if_eq:nnnnTF {#1}{#2}{#3}{#4}
+}
+\cs_new_protected:Npn \__mark_update_singlecol_structures: {
+ \box_if_vertical:NTF \@outputbox
+ {
+ \__mark_update_structure:nn {page}
+ { \vbox_unpack:N \@outputbox }
+ }
+ {
+ \__mark_update_structure:nn {page}
+ { \hbox_unpack:N \@outputbox }
+ }
+ \__mark_update_structure_alias:nn {previous-column}{previous-page}
+ \__mark_update_structure_alias:nn {column}{page}
+ \__mark_update_structure_alias:nn {first-column}{page}
+ \__mark_update_structure_alias:nn {last-column}{page}
+}
+\cs_new_protected:Npn \__mark_update_dblcol_structures: {
+ \box_if_vertical:NTF \@outputbox
+ {
+ \__mark_update_structure:nn {column}
+ { \vbox_unpack:N \@outputbox }
+ }
+ {
+ \__mark_update_structure:nn {column}
+ { \hbox_unpack:N \@outputbox }
+ }
+ \legacy_if:nTF {@firstcolumn}
+ {
+ \__mark_update_structure_alias:nn {first-column}{column}
+ \__mark_update_structure_to_err:n {last-column}
+ }
+ {
+ \__mark_update_structure_alias:nn {last-column}{column}
+ \seq_map_inline:Nn \g__mark_classes_seq
+ {
+ \tl_gset_eq:cc { g__mark_previous-page_top_ ##1 _tl }
+ { g__mark_page_top_ ##1 _tl }
+ \tl_gset_eq:cc { g__mark_previous-page_first_ ##1 _tl }
+ { g__mark_page_first_ ##1 _tl }
+ \tl_gset_eq:cc { g__mark_previous-page_last_ ##1 _tl }
+ { 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 }
+ { g__mark_first-column_first_ ##1 _tl }
+ \tl_gset_eq:cc { g__mark_page_last_ ##1 _tl }
+ { g__mark_last-column_last_ ##1 _tl }
+ }
+ }
+}
+\cs_new_eq:NN \@expl@@@mark@update@singlecol@structures@@
+ \__mark_update_singlecol_structures:
+\cs_new_eq:NN \@expl@@@mark@update@dblcol@structures@@
+ \__mark_update_dblcol_structures:
+\IncludeInRelease{0000/00/00}{ltmarks}%
+ {Undo~Marks~handling}
+
+\DeclareRobustCommand \NewMarkClass[1]{}
+\DeclareRobustCommand \InsertMark[2]{}
+\RenewExpandableDocumentCommand \FirstMark { O{} m } { }
+\RenewExpandableDocumentCommand \LastMark { O{} m } { }
+\RenewExpandableDocumentCommand \TopMark { O{} m } { }
+\RenewExpandableDocumentCommand \IfMarksEqualTF { O{} mmm }{ }
+
+\let \@expl@@@mark@update@singlecol@structures@@ \relax
+\let \@expl@@@mark@update@dblcol@structures@@ \relax
+
+
+\EndModuleRelease
+\ExplSyntaxOff
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% From File: ltpage.dtx
+\IncludeInRelease{2022/06/01}%
+ {\markboth}{New mark support}%
+\ExplSyntaxOn
+\DeclareRobustCommand*\markboth[2]{%
+ \begingroup
+ \let\label\relax \let\index\relax \let\glossary\relax
+ \unrestored@protected@xdef\@themark {{#1}{#2}}%
+ \@temptokena \expandafter{\@themark}%
+ \mark_insert:nn{2e-left}{#1}
+ \mark_insert:nn{2e-right}{#2}
+ \tl_if_empty:nF{#2}{ \mark_insert:nn{2e-right-nonempty}{#2} }
+ \mark{\the\@temptokena}%
+ \endgroup
+ \if@nobreak\ifvmode\nobreak\fi\fi}
+\DeclareRobustCommand*\markright[1]{%
+ \begingroup
+ \let\label\relax \let\index\relax \let\glossary\relax
+ \expandafter\@markright\@themark {#1}%
+ \@temptokena \expandafter{\@themark}%
+ \mark_insert:nn{2e-right}{#1}
+ \tl_if_empty:nF{#1}{ \mark_insert:nn{2e-right-nonempty}{#1} }
+ \mark{\the\@temptokena}%
+ \endgroup
+ \if@nobreak\ifvmode\nobreak\fi\fi}
+\ExplSyntaxOff
+\EndIncludeInRelease
\IncludeInRelease{2019/10/01}%
{\markboth}{Make commands robust}%
+
\DeclareRobustCommand*\markboth[2]{%
\begingroup
\let\label\relax \let\index\relax \let\glossary\relax
@@ -12744,6 +13391,7 @@ of this package available from CTAN}
\mark{\the\@temptokena}%
\endgroup
\if@nobreak\ifvmode\nobreak\fi\fi}
+
\EndIncludeInRelease
\IncludeInRelease{0000/00/00}%
{\markboth}{Make commands robust}%
@@ -13313,22 +13961,16 @@ of this package available from CTAN}
\xdef\@currpath{\ifx\reserved@b\@empty\else\reserved@b/\fi}%
\global\let\@currext#4%
\@ifl@aded\@currext\@currname
- {\@if@ptions\@currext{\@currname}{#2}{}%
- {\@latex@error
- {Option clash for \@cls@pkg\space \@currname}%
- {The package \@currname\space has already been loaded
- with options:\MessageBreak
- \space\space[\@ptionlist{\@currname.\@currext}]\MessageBreak
- There has now been an attempt to load it
- with options\MessageBreak
- \space\space[#2]\MessageBreak
- Adding the global options:\MessageBreak
- \space\space
- \@ptionlist{\@currname.\@currext},#2\MessageBreak
- to your \noexpand\documentclass declaration may fix this.%
- \MessageBreak
- Try typing \space <return> \space to proceed.}}%
- \@firstofone}%
+ {%
+ \@ifundefined{opt@fam@\@currname.\@currext}
+ {\@onefilewithoptions@clashchk{#2}}
+ {%
+ \@namedef{opt@\@currname.\@currext}{#2}%
+ \expandafter\expandafter\expandafter\ProcessKeyOptions
+ \expandafter\expandafter\expandafter
+ [\csname opt@fam@\@currname.\@currext\endcsname]%
+ }%
+ }%
{\makeatletter
\@reset@ptions
\IfFileExists{\@currpath\@currname.\@currext}{}%
@@ -13368,6 +14010,23 @@ of this package available from CTAN}
\ifx\@currext\@clsextension\let\LoadClass\@twoloadclasserror\fi}%
\@popfilename
\@reset@ptions}
+\def\@onefilewithoptions@clashchk#1{%
+ \@if@ptions\@currext{\@currname}{#1}{}%
+ {\@latex@error
+ {Option clash for \@cls@pkg\space \@currname}%
+ {The package \@currname\space has already been loaded
+ with options:\MessageBreak
+ \space\space[\@ptionlist{\@currname.\@currext}]\MessageBreak
+ There has now been an attempt to load it
+ with options\MessageBreak
+ \space\space[#1]\MessageBreak
+ Adding the global options:\MessageBreak
+ \space\space
+ \@ptionlist{\@currname.\@currext},#1\MessageBreak
+ to your \noexpand\documentclass declaration may fix this.%
+ \MessageBreak
+ Try typing \space <return> \space to proceed.}}%
+ \@firstofone}
\let\@currpkg@reqd\@empty
\@onlypreamble\@onefilewithoptions
\let\@unprocessedoptions\@undefined
@@ -13850,8 +14509,8 @@ of this package available from CTAN}
\endgroup%
\EndIncludeInRelease
%%% From File: ltfilehook.dtx
-\providecommand\ltfilehookversion{v1.0l}
-\providecommand\ltfilehookdate{2021/08/27}
+\providecommand\ltfilehookversion{v1.0m}
+\providecommand\ltfilehookdate{2022/04/01}
\IncludeInRelease{2020/10/01}%
{\CurrentFile}{Hook management file}%
\ExplSyntaxOn
@@ -14092,6 +14751,36 @@ of this package available from CTAN}
\let \undeclare@file@substitution \@gobble
\EndIncludeInRelease
+\IncludeInRelease{2022/06/01}%
+ {\set@curr@file}{Setting current file name}%
+\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~}%
+ \expandafter\def\csname\expandafter\endcsname
+ \expandafter{\csname\endcsname}%
+ \@expl@@@filehook@if@no@extension@@nTF{#1}%
+ {\@tempswatrue}{\@tempswafalse}%
+ \@kernel@make@file@csname\@curr@file
+ \@expl@@@filehook@resolve@file@subst@@w {#1}%
+ \@expl@@@filehook@if@file@replaced@@TF
+ {\@kernel@make@file@csname\@curr@file@reqd
+ \@expl@@@filehook@normalize@file@name@@w{#1}%
+ \if@tempswa \@expl@@@filehook@drop@extension@@N\@curr@file@reqd \fi}%
+ {\if@tempswa \@expl@@@filehook@drop@extension@@N\@curr@file \fi
+ \global\let\@curr@file@reqd\@curr@file}%
+ \@expl@@@filehook@clear@replacement@flag@@
+ \endgroup}
+\EndIncludeInRelease
\IncludeInRelease{2021/06/01}%
{\set@curr@file}{Setting current file name}%
\def\set@curr@file#1{%
@@ -14113,6 +14802,7 @@ of this package available from CTAN}
\global\let\@curr@file@reqd\@curr@file}%
\@expl@@@filehook@clear@replacement@flag@@
\endgroup}
+\let\set@curr@file@nosearch\@undefined
\EndIncludeInRelease
\IncludeInRelease{2020/10/01}%
{\set@curr@file}{Setting current file name}%
@@ -14133,6 +14823,7 @@ of this package available from CTAN}
\global\let\@curr@file@reqd\@curr@file}%
\@expl@@@filehook@clear@replacement@flag@@
\endgroup}
+\let\set@curr@file@nosearch\@undefined
\EndIncludeInRelease
\IncludeInRelease{2019/10/01}%
{\set@curr@file}{Setting current file name}%
@@ -14146,10 +14837,12 @@ of this package available from CTAN}
\csname\@firstofone#1\@empty\endcsname}}%
\endgroup
}
+\let\set@curr@file@nosearch\@undefined
\EndIncludeInRelease
\IncludeInRelease{0000/00/00}%
{\set@curr@file}{Setting current file name}%
\let\set@curr@file\@undefined
+\let\set@curr@file@nosearch\@undefined
\EndIncludeInRelease
\IncludeInRelease{2020/10/01}%
{\@kernel@make@file@csname}{Make file csname}%
@@ -14297,12 +14990,13 @@ of this package available from CTAN}
\EndIncludeInRelease
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
-%% Copyright (C) 2020-2021
+%% Copyright (C) 2020-2022
%% Frank Mittelbach, LaTeX Team
%%
%%% From File: ltshipout.dtx
-\providecommand\ltshipoutversion{v1.0j}
-\providecommand\ltshipoutdate{2021/06/09}
+\providecommand\ltshipoutversion{v1.0m}
+\providecommand\ltshipoutdate{2022/05/08}
+ % \cs{AtBeginDvi} is the existing \LaTeXe{} interface to fill the
\IncludeInRelease{2020/10/01}%
{\shipout}{Hook management (shipout)}%
\ExplSyntaxOn
@@ -14328,21 +15022,21 @@ of this package available from CTAN}
\box_new:N \l__shipout_raw_box
\sys_if_engine_luatex:TF
{
- \newluafunction \__shipout_finalize_box:
+ \newprotectedluacmd \__shipout_finalize_box:
\exp_args:Nx \everyjob {
\exp_not:V \everyjob
\exp_not:N \lua_now:n {
luatexbase.create_callback('pre_shipout_filter', 'list')
local~call, getbox, setbox = luatexbase.call_callback, tex.getbox, tex.setbox~
- lua.get_functions_table()[\the \__shipout_finalize_box:] = function()
- local~result = call('pre_shipout_filter', getbox(\the \l_shipout_box))
- if~not (result == true) then~
+ lua.get_functions_table()[\the \allocationnumber] = function()
+ local~head = getbox(\the \l_shipout_box)
+ local~result = call('pre_shipout_filter', head)
+ if~not (result == head) then~
setbox(\the \l_shipout_box, result~or~nil)
end~
end
}
}
- \protected \luadef \__shipout_finalize_box: \the \__shipout_finalize_box:
} {
\cs_set_eq:NN \__shipout_finalize_box: \scan_stop:
}
@@ -14415,8 +15109,8 @@ of this package available from CTAN}
\__shipout_add_foreground_box:n
{ \UseHook{shipout/lastpage}
\@kernel@after@shipout@lastpage }
+ \bool_gset_true:N \g__shipout_lastpage_handled_bool
}
- \bool_gset_true:N \g__shipout_lastpage_handled_bool
}
\__shipout_finalize_box:
\cs_set_eq:NN \protect \exp_not:N
@@ -14661,7 +15355,16 @@ of this package available from CTAN}
\iow_now:Nx \@auxout {
\gdef\string\@abspage@last {\int_use:N \g_shipout_readonly_int}}
\fi
- \bool_if:NF \g__shipout_lastpage_handled_bool
+ \bool_if:NTF \g__shipout_lastpage_handled_bool
+ {
+ \int_compare:nNnF \@abspage@last = \g_shipout_readonly_int
+ {
+ \@latex@warning@no@line{Hook~ 'shipout/lastpage'~ executed~
+ on~ wrong~ page~ (\@abspage@last\space not~
+ \int_use:N\g_shipout_readonly_int).\MessageBreak
+ Rerun~ to~ correct~ this}%
+ }
+ }
{
\bool_lazy_and:nnF
{ \hook_if_empty_p:n {shipout/lastpage} }
@@ -14754,7 +15457,7 @@ of this package available from CTAN}
\IncludeInRelease{2020/10/01}%
{\AtEndDvi}{atenddvi emulation}%
\ExplSyntaxOn
-\cs_new_protected:Npn \AtEndDvi {\AddToHook{shipout/lastpage}}
+\cs_new_protected:Npn \AtEndDvi #1 {\AddToHook{shipout/lastpage}{#1}}
\ExplSyntaxOff
\disable@package@load{atenddvi}
{\PackageWarning{atenddvi}
@@ -15746,6 +16449,16 @@ of this package available from CTAN}
{\newmarks}{Extended Allocation}%
\let\newmarks\@undefined
\EndIncludeInRelease
+\IncludeInRelease{2022/06/01}%
+ {2e-left}{Delayed legacy marks}%
+\NewMarkClass {2e-left}
+\NewMarkClass {2e-right}
+\NewMarkClass {2e-right-nonempty}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+ {2e-left}{Delayed legacy marks}%
+
+\EndIncludeInRelease
\IncludeInRelease{2015/01/01}%
{\newXeTeXintercharclass}{Extended Allocation}%
\ifx\XeTeXcharclass\@undefined