diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/base/latexrelease.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/base/latexrelease.sty | 877 |
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 |