diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex-dev/base/latexrelease.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex-dev/base/latexrelease.sty | 3727 |
1 files changed, 3294 insertions, 433 deletions
diff --git a/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty b/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty index b5ac7332d94..bb34f36cd02 100644 --- a/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty +++ b/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty @@ -8,7 +8,9 @@ %% ltvers.dtx (with options: `latexrelease') %% latexrelease.dtx (with options: `latexrelease') %% ltdirchk.dtx (with options: `latexrelease') +%% ltexpl.dtx (with options: `latexrelease') %% ltdefns.dtx (with options: `latexrelease') +%% lthooks.dtx (with options: `latexrelease') %% ltalloc.dtx (with options: `latexrelease') %% ltcntrl.dtx (with options: `latexrelease') %% lterror.dtx (with options: `latexrelease') @@ -28,6 +30,8 @@ %% ltidxglo.dtx (with options: `latexrelease') %% ltbibl.dtx (with options: `latexrelease') %% ltpage.dtx (with options: `latexrelease') +%% ltfilehook.dtx (with options: `latexrelease') +%% ltshipout.dtx (with options: `latexrelease') %% ltoutput.dtx (with options: `latexrelease') %% ltclass.dtx (with options: `latexrelease,tracerollback') %% ltspace.dtx (with options: `latexrelease') @@ -442,6 +446,91 @@ of this package available from CTAN} \fi \edef\filename@base{#1}} \EndIncludeInRelease +%%% From File: ltexpl.dtx +\IncludeInRelease{2020/10/01}% + {expl3}{Pre-load expl3}% +\expandafter\ifx\csname tex\string _let:D\endcsname\relax + \expandafter\@firstofone +\else + \GenericInfo{}{Skipping: expl3 code already part of the format}% + \expandafter\@gobble +\fi + {% + \IfFileExists{expl3.ltx} + {% + \ifnum0% + \ifdefined\pdffilesize 1\fi + \ifdefined\filesize 1\fi + \ifdefined\luatexversion\ifnum\luatexversion>94 1\fi\fi + \ifdefined\kanjiskip 1\fi + >0 % + \expandafter\@firstofone + \else + \@latex@error{% + LaTeX requires the e-TeX primitives and additional\MessageBreak + functionality available in the engines:\MessageBreak + - pdfTeX v1.40\MessageBreak + - XeTeX v0.99992\MessageBreak + - LuaTeX v0.95\MessageBreak + - e-(u)pTeX mid-2012\MessageBreak + or later% + }\@ehd \expandafter\@gobble + \fi + } + {% + \@latex@error{LaTeX requires expl3}\@ehd + \@gobble + }% + {% + \input expl3.ltx + \ifdefined\NewDocumentCommand + \else + \IfFileExists{xparse.ltx} + {\input xparse.ltx } + {}% + \fi + }% + } +\EndIncludeInRelease + +\IncludeInRelease{2020/02/02}% + {expl3}{Pre-load expl3}% +\IfFileExists{expl3.ltx} + {% + \ifnum0% + \ifdefined\pdffilesize 1\fi + \ifdefined\filesize 1\fi + \ifdefined\luatexversion\ifnum\luatexversion>94 1\fi\fi + >0 % + \else + \message{Skipping expl3-dependent extensions} + \expandafter\@gobbletwo + \fi + } + {% + \message{Skipping expl3-dependent extensions}% + \@gobbletwo + }% +\input{expl3.ltx} +\EndIncludeInRelease +\ExplSyntaxOn +\IncludeInRelease{2020/10/01}{expl3~2020-10-01}% + {expl3~macros~added~for~the~2020-10-01~release}% +\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_gset_eq:NN \@expl@cs@replacement@spec@@N \cs_replacement_spec:N +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}{expl3~2020-10-01}% + {expl3~macros~added~for~the~2020-10-01~release}% +\cs_undefine:N \@expl@cs@to@str@@N +\cs_undefine:N \@expl@str@if@eq@@nnTF +\cs_undefine:N \@expl@cs@prefix@spec@@N +\cs_undefine:N \@expl@cs@argument@spec@@N +\cs_undefine:N \@expl@cs@replacement@spec@@N +\EndIncludeInRelease +\ExplSyntaxOff %%% From File: ltdefns.dtx \IncludeInRelease{2020/10/01}% {\typeout}{Allow "par" in \typeout}% @@ -456,6 +545,45 @@ of this package available from CTAN} \def\typeout#1{\begingroup\set@display@protect \immediate\write\@unused{#1}\endgroup} \EndIncludeInRelease +\IncludeInRelease{2020/10/01}{\MakeRobust}{\MakeRobust}% +\def\MakeRobust#1{% + \count@=\escapechar + \escapechar=`\\ + \@ifundefined{\expandafter\@gobble\string#1}{% + \@latex@error{The control sequence `\string#1' is undefined!% + \MessageBreak There is nothing here to make robust}% + \@eha + }% + {% + \@ifundefined{\expandafter\@gobble\string#1\space}% + {% + \expandafter\@kernel@rename@newcommand + \csname\expandafter\@gobble\string#1\space\endcsname + #1% + \edef\reserved@a{\string#1}% + \def\reserved@b{#1}% + \edef\reserved@b{\expandafter\strip@prefix\meaning\reserved@b}% + \xdef#1{% + \ifx\reserved@a\reserved@b + \noexpand\x@protect\noexpand#1% + \fi + \noexpand\protect\expandafter\noexpand + \csname\expandafter\@gobble\string#1\space\endcsname}% + }% + {\@latex@info{The control sequence `\string#1' is already robust}}% + }% + \escapechar=\count@ +}% +\def\@kernel@rename@newcommand#1#2{% + \robust@command@chk@safe#2% + {\@if@newcommand#2% + {\afterassignment\global + \global\@copy@newcommand#1#2% + \global\let#2\@undefined + \global\expandafter\let\csname\string#2\endcsname\@undefined}% + {\global\let#1=#2}}% + {\global\let#1=#2}} +\EndIncludeInRelease \IncludeInRelease{2019/10/01}{\MakeRobust}{\MakeRobust}% \def\MakeRobust#1{% \@ifundefined{\expandafter\@gobble\string#1}{% @@ -481,6 +609,7 @@ of this package available from CTAN} {\@latex@info{The control sequence `\string#1' is already robust}}% }% }% +\let\@kernel@rename@newcommand\@undefined \EndIncludeInRelease \IncludeInRelease{2015/01/01}{\MakeRobust}{\MakeRobust}% \def\MakeRobust#1{% @@ -507,9 +636,27 @@ of this package available from CTAN} {\@latex@info{The control sequence `\string#1' is already robust}}% }% }% +\let\@kernel@rename@newcommand\@undefined \EndIncludeInRelease \IncludeInRelease{0000/00/00}{\MakeRobust}{\MakeRobust}% \let\MakeRobust\@undefined +\let\@kernel@rename@newcommand\@undefined +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\kernel@make@fragile}{Undo robustness}% +\def\kernel@make@fragile#1{% + \@ifundefined{\expandafter\@gobble\string#1\space}% + {}% + {% + \global\expandafter\let\expandafter #1\csname + \expandafter\@gobble\string#1\space\endcsname + \expandafter\@kernel@rename@newcommand + \csname\expandafter\@gobble\string#1\expandafter\endcsname + \csname\expandafter\@gobble\string#1\space\endcsname + \global\expandafter\let\csname + \expandafter\@gobble\string#1\space\endcsname\@undefined + }% +} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% {\kernel@make@fragile}{Undo robustness}% @@ -524,6 +671,210 @@ of this package available from CTAN} }% } \EndIncludeInRelease +\IncludeInRelease{2020-10-01}{\robust@command@act} + {Add \robust@command@act}% +\long\def\robust@command@act#1#2#3#4{% + \robust@command@chk@safe#2% + {\expandafter\robust@command@act@loop + \expandafter#2% + #1{\@nnil\@nnil}% + \robust@command@act@end}% + {\robust@command@act@end}% + {#3}{#4}}% +\long\def\robust@command@act@loop#1#2{\robust@command@act@loop@aux#1#2} +\long\def\robust@command@act@loop@aux#1#2#3{% + \ifx\@nnil#2% + \else + #2{#1}% + {\robust@command@act@do{#3}}% + {\expandafter\robust@command@act@loop\expandafter#1}% + \fi} +\long\def\robust@command@act@do#1% + \fi#2% + \robust@command@act@end#3#4{% + \fi + #1#4} +\long\def\robust@command@act@end#1#2{#1#2} +\long\def\robust@command@chk@safe#1{% + \begingroup + \escapechar=`\\ + \expandafter\endgroup\expandafter + \robust@command@act@chk@args\meaning#1:->\@nil} +\def\robust@command@act@chk@args#1:->#2\@nil{% + \@expl@str@if@eq@@nnTF{#1}{macro}% + {\@firstoftwo}% + {\@expl@str@if@eq@@nnTF{#1}{\protected macro}% + {\@firstoftwo}% + {\@secondoftwo}}} +\EndIncludeInRelease +\IncludeInRelease{0000-00-00}{\robust@command@act} + {Add \robust@command@act}% +\let\robust@command@act\@undefined +\let\robust@command@act@loop\@undefined +\let\robust@command@act@loop@aux\@undefined +\let\robust@command@act@do\@undefined +\let\robust@command@act@end\@undefined +\let\robust@command@chk@safe\@undefined +\let\robust@command@act@chk@args\@undefined +\EndIncludeInRelease +\IncludeInRelease{2020-10-01}{\DeclareCommandCopy} + {Add \NewCommandCopy, \RenewCommandCopy, and \DeclareCommandCopy}% +\def\NewCommandCopy{% + \declare@commandcopy + {\@firstofone}% + {\@firstoftwo\@notdefinable}} +\def\RenewCommandCopy{% + \declare@commandcopy + {\@latex@error{Command \@backslashchar\reserved@a\space undefined}\@ehc + \@firstofone}% + {\@firstofone}} +\def\DeclareCommandCopy{% + \declare@commandcopy + {\@firstofone}% + {\@firstofone}} +\long\def\declare@commandcopy#1#2#3#4{% + \edef\reserved@a{\@expl@cs@to@str@@N#3}% + \@ifundefined\reserved@a{#1}{#2}% + {\robust@command@act + \@declarecommandcopylisthook#4% + \declare@commandcopy@let{#3#4}}} +\def\@declarecommandcopylisthook{% + {\@if@DeclareRobustCommand \@copy@DeclareRobustCommand}% + {\@if@newcommand \@copy@newcommand}} +\long\def\declare@commandcopy@let#1#2{\let#1=#2\relax} +\EndIncludeInRelease +\IncludeInRelease{0000-00-00}{\DeclareCommandCopy} + {Undefine \NewCommandCopy, \RenewCommandCopy, and \DeclareCommandCopy}% +\let\NewCommandCopy\@undefined +\let\RenewCommandCopy\@undefined +\let\DeclareCommandCopy\@undefined +\let\declare@commandcopy\@undefined +\let\@declarecommandcopylisthook\@undefined +\let\declare@commandcopy@let\@undefined +\EndIncludeInRelease +\IncludeInRelease{2020-10-01}{\ShowCommand}% + {Add \ShowCommand}% +\long\def\ShowCommand#1{% + \robust@command@act + \@showcommandlisthook#1% + \show#1} +\def\@showcommandlisthook{% + {\@if@DeclareRobustCommand \@show@DeclareRobustCommand}% + {\@if@newcommand \@show@newcommand}} +\EndIncludeInRelease +\IncludeInRelease{0000-00-00}{\ShowCommand} + {Undefine \ShowCommand}% +\let\ShowCommand\@undefined +\let\@showcommandlisthook\@undefined +\EndIncludeInRelease +\IncludeInRelease{2020-10-01}{\@if@DeclareRobustCommand} + {Add \@if@DeclareRobustCommand, \@if@newcommand, + \@copy@DeclareRobustCommand, \@copy@newcommand, + \@show@DeclareRobustCommand, \@show@newcommand}% +\long\def\@if@DeclareRobustCommand#1{% + \begingroup + \escapechar=`\\ + \edef\reserved@a{\string#1}% + \edef\reserved@b{\detokenize{#1}}% + \xdef\@gtempa{% + \ifx\reserved@a\reserved@b + \noexpand\x@protect + \noexpand#1% + \fi + \noexpand\protect + \expandafter\noexpand\csname\@expl@cs@to@str@@N#1 \endcsname}% + \endgroup + \ifx\@gtempa#1\relax + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\long\def\@copy@DeclareRobustCommand#1#2{% + \begingroup + \escapechar=`\\ + \edef\reserved@a{\string#1}% + \edef\reserved@b{\detokenize{#1}}% + \edef\reserved@a{% + \endgroup + \def\noexpand#1{% + \ifx\reserved@a\reserved@b + \noexpand\x@protect + \noexpand#1% + \fi + \noexpand\protect + \expandafter\noexpand\csname\@expl@cs@to@str@@N#1 \endcsname}% + \noexpand\copy@kernel@robust@command + \expandafter\noexpand\csname\@expl@cs@to@str@@N#1 \endcsname + \expandafter\noexpand\csname\@expl@cs@to@str@@N#2 \endcsname}% + \reserved@a} +\long\def\copy@kernel@robust@command#1#2{% + \robust@command@chk@safe#2% + {\@if@newcommand#2% + {\@copy@newcommand}% + {\declare@commandcopy@let}} + {\declare@commandcopy@let}% + #1#2} +\long\def\@show@DeclareRobustCommand#1{% + \typeout{> \string#1=robust macro:}% + \typeout{->\@expl@cs@replacement@spec@@N#1.^^J}% + \expandafter\show@kernel@robust@command + \csname\@expl@cs@to@str@@N#1 \endcsname} +\long\def\show@kernel@robust@command#1{% + \robust@command@chk@safe#1% + {\@if@newcommand#1% + {\@show@newcommand}% + {\show}}% + {\show}% + #1} +\long\def\@if@newcommand#1{% + \edef\reserved@a{% + \noexpand\@protected@testopt + \noexpand#1% + \expandafter\noexpand\csname\@backslashchar\@expl@cs@to@str@@N#1\endcsname}% + \edef\reserved@b{% + \unexpanded\expandafter\expandafter\expandafter + {\expandafter\@carcube#1{}{}{}\@nil}}% + \ifx\reserved@a\reserved@b + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\long\def\@copy@newcommand#1#2{% + \edef#1{\noexpand\@protected@testopt + \noexpand#1% + \expandafter\noexpand\csname\@backslashchar\@expl@cs@to@str@@N#1\endcsname + \unexpanded\expandafter\expandafter\expandafter + {\expandafter\@gobblethree#2}}% + \expandafter + \let\csname\@backslashchar\@expl@cs@to@str@@N#1\expandafter\endcsname + \csname\@backslashchar\@expl@cs@to@str@@N#2\endcsname} +\long\def\@show@newcommand#1{% + \typeout{> \string#1=robust macro:}% + \typeout{->\@expl@cs@replacement@spec@@N#1.^^J}% + \expandafter\@show@newcommand@aux + \csname\@backslashchar\@expl@cs@to@str@@N#1\expandafter\endcsname + \expandafter{#1}} +\long\def\@show@newcommand@aux#1#2{% + \typeout{> \string#1=\@expl@cs@prefix@spec@@N#1macro:}% + \edef\reserved@a{% + default \string##1=\expandafter\detokenize\@gobblethree#2.^^J% + \@expl@cs@argument@spec@@N#1->\@expl@cs@replacement@spec@@N#1}% + \showtokens\expandafter\expandafter\expandafter{\expandafter\reserved@a}} +\EndIncludeInRelease +\IncludeInRelease{0000-00-00}{\@if@DeclareRobustCommand} + {Undefine \@if@DeclareRobustCommand, \@if@newcommand, + \@copy@DeclareRobustCommand, \@copy@newcommand, + \@show@DeclareRobustCommand, \@show@newcommand}% +\let\@if@DeclareRobustCommand\@undefined +\let\@copy@DeclareRobustCommand\@undefined +\let\@show@DeclareRobustCommand\@undefined +\let\@if@newcommand\@undefined +\let\@copy@newcommand\@undefined +\let\@show@newcommand\@undefined +\let\copy@kernel@robust@command\@undefined +\let\show@kernel@robust@command\@undefined +\let\@show@newcommand@aux\@undefined +\EndIncludeInRelease \IncludeInRelease{2018-04-01}{\@ifundefined} {Leave commands undefined in \@ifundefined}% \def\@ifundefined#1{% @@ -631,6 +982,925 @@ of this package available from CTAN} \kernel@make@fragile\underbar \EndIncludeInRelease +%% +%% File: lthooks.dtx (C) Copyright 2020 Frank Mittelbach, +%% Phelype Oleinik & LaTeX Team +%%% From File: lthooks.dtx +\def\lthooksversion{v1.0a} +\def\lthooksdate{2020/08/31} +\IncludeInRelease{2020/10/01}% + {\NewHook}{The hook management}% +\ExplSyntaxOn +\bool_new:N \g__hook_debug_bool +\cs_new_eq:NN \__hook_debug:n \use_none:n +\cs_new_protected:Npn \hook_debug_on: + { + \bool_gset_true:N \g__hook_debug_bool + \__hook_debug_gset: + } +\cs_new_protected:Npn \hook_debug_off: + { + \bool_gset_false:N \g__hook_debug_bool + \__hook_debug_gset: + } +\cs_new_protected:Npn \__hook_debug_gset: + { + \cs_gset_protected:Npx \__hook_debug:n ##1 + { \bool_if:NT \g__hook_debug_bool {##1} } + } +\cs_new_eq:NN \__hook_str_compare:nn \__str_if_eq:nn +\bool_new:N \l__hook_tmpa_bool +\tl_new:N \l__hook_return_tl +\tl_new:N \l__hook_tmpa_tl +\tl_new:N \l__hook_tmpb_tl +\seq_new:N \g__hook_all_seq +\tl_new:N \g__hook_removal_list_tl +\tl_new:N \l__hook_cur_hook_tl +\prop_new:N \l__hook_work_prop +\tl_new:N \g__hook_hook_curr_name_tl +\seq_new:N \g__hook_name_stack_seq +\cs_new_eq:NN \__hook_tmp:w ? +\cs_generate_variant:Nn \tl_gremove_once:Nn { Nx } +\scan_new:N \s__hook_mark +\cs_new_protected:Npn \hook_new:n #1 + { + \exp_args:Nx \__hook_new:n + { \__hook_parse_label_default:nn {#1} { top-level } } + } +\cs_new_protected:Npn \__hook_new:n #1 { + \hook_if_exist:nTF {#1} + { \msg_error:nnn { hooks } { exists } {#1} } + { \seq_gput_right:Nn \g__hook_all_seq {#1} + \tl_new:c { g__hook_#1_code_tl } + \__hook_declare:n {#1} + \clist_new:c {g__hook_#1_labels_clist} + \tl_new:c { g__hook_#1_reversed_tl } + \__hook_include_legacy_code_chunk:n {#1} + } +} +\cs_new_protected:Npn \__hook_declare:n #1 + { + \__hook_if_exist:nF {#1} + { + \prop_new:c { g__hook_#1_code_prop } + \tl_new:c { g__hook_#1_code_next_tl } + } + } +\cs_new_protected:Npn \hook_new_reversed:n #1 { + \hook_new:n {#1} + \tl_gset:cn { g__hook_#1_reversed_tl } { - } +} +\cs_new_protected:Npn \hook_new_pair:nn #1#2 { + \hook_new:n {#1} \hook_new_reversed:n {#2} +} +\cs_new_protected:Npn \__hook_include_legacy_code_chunk:n #1 + { + \debug_suspend: + \tl_if_exist:cT { @#1hook } + { + \tl_if_empty:cF { @#1hook } + { + \exp_args:Nnnv \__hook_hook_gput_code_do:nnn {#1} + { legacy } { @#1hook } + \tl_gclear:c { @#1hook } + } + } + \debug_resume: + } +\cs_new:Npn \__hook_parse_label_default:nn #1 #2 + { + \tl_if_novalue:nTF {#1} + { \__hook_currname_or_default:n {#2} } + { \tl_trim_spaces_apply:nN {#1} \__hook_parse_dot_label:nn {#2} } + } +\cs_generate_variant:Nn \__hook_parse_label_default:nn { V } +\cs_new:Npn \__hook_parse_dot_label:nn #1 #2 + { + \tl_if_empty:nTF {#1} + { + \msg_expandable_error:nnn { hooks } { empty-label } {#2} + #2 + } + { + \str_if_eq:nnTF {#1} { . } + { \__hook_currname_or_default:n {#1} } + { \__hook_parse_dot_label:nw {#2} #1 ./ \s__hook_mark } + } + } +\cs_new:Npn \__hook_parse_dot_label:nw #1 #2 ./ #3 \s__hook_mark + { + \tl_if_empty:nTF {#2} + { \__hook_parse_dot_label_aux:nw {#1} #3 \s__hook_mark } + { + \tl_if_empty:nTF {#3} + {#2} + { \__hook_parse_dot_label_cleanup:w #2 ./ #3 \s__hook_mark } + } + } +\cs_new:Npn \__hook_parse_dot_label_cleanup:w #1 ./ \s__hook_mark {#1} +\cs_new:Npn \__hook_parse_dot_label_aux:nw #1 #2 ./ \s__hook_mark + { \__hook_currname_or_default:n {#1} / #2 } +\cs_new:Npn \__hook_currname_or_default:n #1 + { + \tl_if_empty:NTF \g__hook_hook_curr_name_tl + { + \tl_if_empty:NTF \@currname + {#1} + { \@currname } + } + { \g__hook_hook_curr_name_tl } + } +\cs_new_protected:Npn \hook_gput_code:nnn #1 #2 + { + \exp_args:Nxx \__hook_gput_code:nnn + { \__hook_parse_label_default:nn {#1} { top-level } } + { \__hook_parse_label_default:nn {#2} { top-level } } + } +\cs_new_protected:Npn \__hook_gput_code:nnn #1 #2 #3 + { + \__hook_if_marked_removal:nnTF {#1} {#2} + { \__hook_unmark_removal:nn {#1} {#2} } + { + \hook_if_exist:nTF {#1} + { + \__hook_hook_gput_code_do:nnn {#1} {#2} {#3} + \__hook_update_hook_code:n {#1} + } + { \__hook_try_declaring_generic_hook:nnn {#1} {#2} {#3} } + } + } +\cs_generate_variant:Nn \__hook_gput_code:nnn { nxv } +\cs_new_protected:Npn \__hook_hook_gput_code_do:nnn #1 #2 #3 + { + \__hook_debug:n{\iow_term:x{****~ Add~ to~ + \hook_if_exist:nF {#1} { undeclared~ } + hook~ #1~ (#2) + \on@line\space <-~ \tl_to_str:n{#3}} } + \prop_get:cnNTF { g__hook_#1_code_prop } {#2} \l__hook_return_tl + { + \prop_gput:cno { g__hook_#1_code_prop } {#2} + { \l__hook_return_tl #3 } + } + { \prop_gput:cnn { g__hook_#1_code_prop } {#2} {#3} } + } +\cs_new_protected:Npn \__hook_gput_undeclared_hook:nnn #1 #2 #3 + { + \__hook_declare:n {#1} + \__hook_hook_gput_code_do:nnn {#1} {#2} {#3} + } +\cs_new_protected:Npn \__hook_try_declaring_generic_hook:nnn #1 + { + \__hook_try_declaring_generic_hook:nNNnn {#1} + \hook_gput_code:nnn \__hook_gput_undeclared_hook:nnn + } +\cs_new_protected:Npn \__hook_try_declaring_generic_next_hook:nn #1 + { + \__hook_try_declaring_generic_hook:nNNnn {#1} + \hook_gput_next_code:nn \__hook_gput_next_do:nn + } +\cs_new_protected:Npn \__hook_try_declaring_generic_hook:nNNnn #1 + { + \__hook_if_file_hook:wTF #1 / / \s__hook_mark + { + \exp_args:Ne \__hook_try_declaring_generic_hook_split:nNNnn + { \exp_args:Ne \__hook_file_hook_normalize:n {#1} } + } + { \__hook_try_declaring_generic_hook_split:nNNnn {#1} } + } +\cs_new_protected:Npn \__hook_try_declaring_generic_hook_split:nNNnn #1 #2 #3 + { + \__hook_try_declaring_generic_hook:wnTF #1 / / / \scan_stop: {#1} + { #2 } + { #3 } {#1} + } +\prg_new_protected_conditional:Npnn \__hook_try_declaring_generic_hook:wn + #1 / #2 / #3 / #4 \scan_stop: #5 { TF } + { + \tl_if_empty:nTF {#2} + { \prg_return_false: } + { + \prop_if_in:NnTF \c__hook_generics_prop {#1} + { + \hook_if_exist:nF {#5} { \hook_new:n {#5} } + \prop_if_in:NnTF \c__hook_generics_reversed_ii_prop {#2} + { \tl_gset:cn { g__hook_#5_reversed_tl } { - } } + { + \prop_if_in:NnT \c__hook_generics_reversed_iii_prop {#3} + { \tl_gset:cn { g__hook_#5_reversed_tl } { - } } + } + \prg_return_true: + } + { \prg_return_false: } + } + } +\prg_new_conditional:Npnn \__hook_if_file_hook:w + #1 / #2 / #3 \s__hook_mark { TF } + { + \str_if_eq:nnTF {#1} { file } + { + \bool_lazy_or:nnTF + { \tl_if_empty_p:n {#3} } + { \str_if_eq_p:nn {#3} { / } } + { \prg_return_false: } + { + \prop_if_in:NnTF \c__hook_generics_file_prop {#2} + { \prg_return_true: } + { \prg_return_false: } + } + } + { \prg_return_false: } + } +\cs_new:Npn \__hook_file_hook_normalize:n #1 + { \__hook_strip_double_slash:n {#1} } +\cs_new:Npn \__hook_strip_double_slash:n #1 + { \__hook_strip_double_slash:w #1 // \s__hook_mark } +\cs_new:Npn \__hook_strip_double_slash:w #1 // #2 \s__hook_mark + { + \tl_if_empty:nTF {#2} + {#1} + { \__hook_strip_double_slash:w #1 / #2 \s__hook_mark } + } +\prop_const_from_keyval:Nn \c__hook_generics_prop + {env=,file=,package=,class=,include=} +\prop_const_from_keyval:Nn \c__hook_generics_reversed_ii_prop {after=,end=} +\prop_const_from_keyval:Nn \c__hook_generics_reversed_iii_prop {after=} +\prop_const_from_keyval:Nn \c__hook_generics_file_prop {before=,after=} +\cs_new_protected:Npn \hook_gremove_code:nn #1 #2 + { + \exp_args:Nxx \__hook_gremove_code:nn + { \__hook_parse_label_default:nn {#1} { top-level } } + { \__hook_parse_label_default:nn {#2} { top-level } } + } +\cs_new_protected:Npn \__hook_gremove_code:nn #1 #2 + { + \__hook_if_exist:nTF {#1} + { + \str_if_eq:nnTF {#2} {*} + { \prop_gclear:c { g__hook_#1_code_prop } } + { + \prop_get:cnNTF { g__hook_#1_code_prop } {#2} \l__hook_return_tl + { \__hook_gremove_code_do:nn } + { \__hook_mark_removal:nn } + {#1} {#2} + } + \hook_if_exist:nT {#1} + { \__hook_update_hook_code:n {#1} } + } + { \__hook_mark_removal:nn {#1} {#2} } + } +\cs_new_protected:Npn \__hook_gremove_code_do:nn #1 #2 + { \prop_gremove:cn { g__hook_#1_code_prop } {#2} } +\cs_new_protected:Npn \__hook_mark_removal:nn #1 #2 + { + \tl_gput_right:Nx \g__hook_removal_list_tl + { \__hook_removal_tl:nn {#1} {#2} } + } +\cs_new_protected:Npn \__hook_unmark_removal:nn #1 #2 + { + \tl_gremove_once:Nx \g__hook_removal_list_tl + { \__hook_removal_tl:nn {#1} {#2} } + } +\prg_new_protected_conditional:Npnn \__hook_if_marked_removal:nn #1 #2 { TF } + { + \exp_args:NNx \tl_if_in:NnTF \g__hook_removal_list_tl + { \__hook_removal_tl:nn {#1} {#2} } + { \prg_return_true: } { \prg_return_false: } + } +\cs_new:Npn \__hook_removal_tl:nn #1 #2 + { & \tl_to_str:n {#2} $ \tl_to_str:n {#1} $ } +\prop_new:c {g__hook_??_code_prop} +\prop_new:c {g__hook_??_code_tl} +\tl_new:c {g__hook_??_reversed_tl} +\cs_new_protected:Npn \hook_gset_rule:nnnn #1#2#3#4 + { + \use:x + { + \__hook_gset_rule:nnnn + { \__hook_parse_label_default:nn {#1} { top-level } } + { \__hook_parse_label_default:nn {#2} { top-level } } + {#3} + { \__hook_parse_label_default:nn {#4} { top-level } } + } + } +\cs_new_protected:Npn \__hook_gset_rule:nnnn #1#2#3#4 + { + \__hook_declare:n {#1} + \__hook_rule_gclear:nnn {#1} {#2} {#4} + \debug_suspend: + \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} } + \debug_resume: + } +\cs_new_protected:Npn \__hook_rule_before_gset:nnn #1#2#3 + { + \tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl } + { \__hook_label_ordered:nnTF {#2} {#3} { < } { > } } + } +\cs_new_eq:cN { __hook_rule_<_gset:nnn } \__hook_rule_before_gset:nnn +\cs_new_protected:Npn \__hook_rule_after_gset:nnn #1#2#3 + { + \tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#3} {#2} _tl } + { \__hook_label_ordered:nnTF {#3} {#2} { < } { > } } + } +\cs_new_eq:cN { __hook_rule_>_gset:nnn } \__hook_rule_after_gset:nnn +\cs_new_protected:Npn \__hook_rule_voids_gset:nnn #1#2#3 + { + \tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl } + { \__hook_label_ordered:nnTF {#2} {#3} { -> } { <- } } + } +\cs_new_protected:cpn { __hook_rule_incompatible-error_gset:nnn } #1#2#3 + { \tl_gset:cn { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl } { xE } } +\cs_new_protected:cpn { __hook_rule_incompatible-warning_gset:nnn } #1#2#3 + { \tl_gset:cn { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl } { xW } } +\cs_new_protected:Npn \__hook_rule_unrelated_gset:nnn #1#2#3 { } +\cs_new_protected:Npn \__hook_rule_gclear:nnn #1#2#3 + { \cs_undefine:c { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl } } +\cs_new:Npn \__hook_label_pair:nn #1#2 + { + \if_case:w \__hook_str_compare:nn {#1} {#2} \exp_stop_f: + #1 | #1 % 0 + \or: #1 | #2 % +1 + \else: #2 | #1 % -1 + \fi: + } +\prg_new_conditional:Npnn \__hook_label_ordered:nn #1#2 { TF } + { + \if_int_compare:w \__hook_str_compare:nn {#1} {#2} > 0 \exp_stop_f: + \prg_return_true: + \else + \prg_return_false: + \fi: + } +\cs_new:Npn \__hook_if_label_case:nnnnn #1#2 + { + \cs:w use_ + \if_case:w \__hook_str_compare:nn {#1} {#2} + i \or: ii \else: iii \fi: :nnn + \cs_end: + } +\cs_new_eq:NN \__hook_update_hook_code:n \use_none:n +\cs_new_protected:Npn \__hook_initialize_all: { + \cs_gset_eq:NN \__hook_update_hook_code:n \__hook_initialize_hook_code:n + \__hook_debug:n { \prop_gclear:N \g__hook_used_prop } + \seq_map_inline:Nn \g__hook_all_seq + { + \__hook_update_hook_code:n {##1} + } + \__hook_debug:n + { \iow_term:x{^^JAll~ initialized~ (non-empty)~ hooks:} + \prop_map_inline:Nn \g__hook_used_prop + { \iow_term:x{^^J~ ##1~ ->~ + \exp_not:v {g__hook_##1_code_tl}~ } + } + } + \cs_gset_eq:NN \hook_use:n \__hook_use_initialized:n + \cs_gset_eq:NN \__hook_preamble_hook:n \use_none:n +} +\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_include_legacy_code_chunk:n {#1} + \hook_if_exist:nT {#1} + { + \prop_if_empty:cTF {g__hook_#1_code_prop} + { \tl_gset:co {g__hook_#1_code_tl} + {\cs:w g__hook_#1_code_next_tl \cs_end: } } + { + \__hook_if_reversed:nTF {#1} + { \cs_set_eq:NN \__hook_tl_gput:NV \tl_gput_left:NV + \cs_set_eq:NN \__hook_clist_gput:NV \clist_gput_left:NV } + { \cs_set_eq:NN \__hook_tl_gput:NV \tl_gput_right:NV + \cs_set_eq:NN \__hook_clist_gput:NV \clist_gput_right:NV } + \prop_set_eq:Nc \l__hook_work_prop { g__hook_#1_code_prop } + \__hook_initialize_single:cccn + { g__hook_#1_code_tl } { g__hook_#1_code_next_tl } + { g__hook_#1_labels_clist } {#1} + \__hook_debug:n{ \exp_args:NNx \prop_gput:Nnn + \g__hook_used_prop {#1}{} } + } + } +} +\prop_new:N\g__hook_used_prop +\cs_new:Npn \__hook_tl_csname:n #1 { l__hook_label_#1_tl } +\cs_new:Npn \__hook_seq_csname:n #1 { l__hook_label_#1_seq } +\seq_new:N \l__hook_labels_seq +\int_new:N \l__hook_labels_int +\tl_new:N \l__hook_front_tl +\tl_new:N \l__hook_rear_tl +\tl_new:c { \__hook_tl_csname:n { 0 } } +\cs_new_protected:Npn \__hook_initialize_single:NNNn #1#2#3#4 { + \debug_suspend: + \seq_clear:N \l__hook_labels_seq + \int_zero:N \l__hook_labels_int + \tl_set:Nn \l__hook_cur_hook_tl {#4} + \prop_map_inline:Nn \l__hook_work_prop + { + \int_incr:N \l__hook_labels_int + \seq_put_right:Nn \l__hook_labels_seq {##1} + \tl_set:cn { \__hook_tl_csname:n {##1} }{0} + \seq_clear_new:c { \__hook_seq_csname:n {##1} } + } + \prop_map_inline:Nn \l__hook_work_prop + { + \prop_map_inline:Nn \l__hook_work_prop + { + \__hook_if_label_case:nnnnn {##1} {####1} + { \prop_map_break: } + { \__hook_apply_label_pair:nnn {##1} {####1} } + { \__hook_apply_label_pair:nnn {####1} {##1} } + {#4} + } + } + \__hook_debug:n { \__hook_debug_label_data:N \l__hook_work_prop } + \tl_set:Nn \l__hook_rear_tl { 0 } + \tl_set:cn { \__hook_tl_csname:n { 0 } } { 0 } + \seq_map_inline:Nn \l__hook_labels_seq + { + \int_compare:nNnT { \cs:w \__hook_tl_csname:n {##1} \cs_end: } = 0 + { + \tl_set:cn { \__hook_tl_csname:n { \l__hook_rear_tl } }{##1} + \tl_set:Nn \l__hook_rear_tl {##1} + } + } + \tl_set_eq:Nc \l__hook_front_tl { \__hook_tl_csname:n { 0 } } + \tl_gclear:N #1 + \clist_gclear:N #3 + \bool_while_do:nn { ! \str_if_eq_p:Vn \l__hook_front_tl { 0 } } + { + \int_decr:N \l__hook_labels_int + \prop_get:NVN \l__hook_work_prop \l__hook_front_tl \l__hook_return_tl + \__hook_tl_gput:NV #1 \l__hook_return_tl + \__hook_clist_gput:NV #3 \l__hook_front_tl + \__hook_debug:n{ \iow_term:x{Handled~ code~ for~ \l__hook_front_tl} } + \seq_map_inline:cn { \__hook_seq_csname:n { \l__hook_front_tl } } + { + \tl_set:cx { \__hook_tl_csname:n {##1} } + { \int_eval:n + { \cs:w \__hook_tl_csname:n {##1} \cs_end: - 1 } + } + \int_compare:nNnT + { \cs:w \__hook_tl_csname:n {##1} \cs_end: } = 0 + { + \tl_set:cn { \__hook_tl_csname:n { \l__hook_rear_tl } } {##1} + \tl_set:Nn \l__hook_rear_tl {##1} + } + } + \tl_set_eq:Nc \l__hook_front_tl + { \__hook_tl_csname:n { \l__hook_front_tl } } + } + \int_compare:nNnF \l__hook_labels_int = 0 + { + \iow_term:x{====================} + \iow_term:x{Error:~ label~ rules~ are~ incompatible:} + \__hook_debug_label_data:N \l__hook_work_prop + \iow_term:x{====================} + } + \tl_gput_right:Nn #1 {#2} + \debug_resume: +} +\cs_generate_variant:Nn \__hook_initialize_single:NNNn {ccc} +\cs_new:Npn \__hook_tl_gput:NV {\ERROR} +\cs_new:Npn \__hook_clist_gput:NV {\ERROR} +\cs_new_protected:Npn \__hook_apply_label_pair:nnn #1#2#3 + { + \__hook_label_if_exist_apply:nnnF {#1} {#2} {#3} + { + \__hook_label_if_exist_apply:nnnF {#1} {#2} { ?? } { } + } + } +\cs_new_protected:Npn \__hook_label_if_exist_apply:nnnF #1#2#3 + { + \if_cs_exist:w g__hook_ #3 _rule_ #1 | #2 _tl \cs_end: + \__hook_apply_rule:nnn {#1} {#2} {#3} + \exp_after:wN \use_none:n + \else: + \use:nn + \fi: + } +\cs_new_protected:Npn \__hook_apply_rule:nnn #1#2#3 + { + \cs:w __hook_apply_ + \cs:w g__hook_#3_reversed_tl \cs_end: rule_ + \cs:w g__hook_ #3 _rule_ #1 | #2 _tl \cs_end: :nnn \cs_end: + {#1} {#2} {#3} + } +\cs_new_protected:cpn { __hook_apply_rule_<:nnn } #1#2#3 + { + \__hook_debug:n { \__hook_msg_pair_found:nnn {#1} {#2} {#3} } + \tl_set:cx { \__hook_tl_csname:n {#2} } + { \int_eval:n{ \cs:w \__hook_tl_csname:n {#2} \cs_end: + 1 } } + \seq_put_right:cn{ \__hook_seq_csname:n {#1} }{#2} + } +\cs_new_protected:cpn { __hook_apply_rule_>:nnn } #1#2#3 + { + \__hook_debug:n { \__hook_msg_pair_found:nnn {#1} {#2} {#3} } + \tl_set:cx { \__hook_tl_csname:n {#1} } + { \int_eval:n{ \cs:w \__hook_tl_csname:n {#1} \cs_end: + 1 } } + \seq_put_right:cn{ \__hook_seq_csname:n {#2} }{#1} + } +\cs_new_protected:cpn { __hook_apply_rule_xE:nnn } #1#2#3 + { + \__hook_debug:n { \__hook_msg_pair_found:nnn {#1} {#2} {#3} } + \msg_error:nnnnnn { hooks } { labels-incompatible } + {#1} {#2} {#3} { 1 } + \use:c { __hook_apply_rule_->:nnn } {#1} {#2} {#3} + \use:c { __hook_apply_rule_<-:nnn } {#1} {#2} {#3} + } +\cs_new_protected:cpn { __hook_apply_rule_xW:nnn } #1#2#3 + { + \__hook_debug:n { \__hook_msg_pair_found:nnn {#1} {#2} {#3} } + \msg_warning:nnnnnn { hooks } { labels-incompatible } + {#1} {#2} {#3} { 0 } + } +\cs_new_protected:cpn { __hook_apply_rule_->:nnn } #1#2#3 + { + \__hook_debug:n + { + \__hook_msg_pair_found:nnn {#1} {#2} {#3} + \iow_term:x{--->~ Drop~ '#2'~ code~ from~ + \iow_char:N \\ g__hook_ \l__hook_cur_hook_tl _code_prop ~ + because~ of~ '#1' } + } + \prop_put:Nnn \l__hook_work_prop {#2} { } + } +\cs_new_protected:cpn { __hook_apply_rule_<-:nnn } #1#2#3 + { + \__hook_debug:n + { + \__hook_msg_pair_found:nnn {#1} {#2} {#3} + \iow_term:x{--->~ Drop~ '#1'~ code~ from~ + \iow_char:N \\ g__hook_ \l__hook_cur_hook_tl _code_prop ~ + because~ of~ '#2' } + } + \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_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} ~ + rule~ \__hook_label_pair:nn {#1} {#2}:~ + \use:c { g__hook_#3_rule_ \__hook_label_pair:nn {#1} {#2} _tl } ~ + found} + } +\cs_new_protected:Npn \__hook_debug_label_data:N #1 { + \iow_term:x{Code~ labels~ for~ sorting:} + \iow_term:x{~ \seq_use:Nnnn\l__hook_labels_seq {~and~}{,~}{~and~} } + \iow_term:x{^^J Data~ structure~ for~ label~ rules:} + \prop_map_inline:Nn #1 + { + \iow_term:x{~ ##1~ =~ \tl_use:c{ \__hook_tl_csname:n {##1} }~ ->~ + \seq_use:cnnn{ \__hook_seq_csname:n {##1} }{~->~}{~->~}{~->~} + } + } + \iow_term:x{} +} +\cs_new_protected:Npn \hook_log:n #1 + { + \exp_args:Nx \__hook_log:n + { \__hook_parse_label_default:nn {#1} { top-level } } + } +\cs_new_protected:Npn \__hook_log:n #1 + { + \__hook_preamble_hook:n {#1} + \iow_term:x{^^JThe~ hook~ '#1':} + \hook_if_exist:nF {#1} + { \iow_term:x {~Hook~ is~ not~ declared!} } + \__hook_if_exist:nTF {#1} + { + \iow_term:x{~Code~ chunks:} + \prop_if_empty:cTF {g__hook_#1_code_prop} + { \iow_term:x{\@spaces ---} } + { + \prop_map_inline:cn {g__hook_#1_code_prop} + { \iow_term:x{\@spaces ##1~ ->~ \tl_to_str:n{##2} } } + } + \iow_term:x{~Extra~ code~ next~ invocation:} + \iow_term:x{\@spaces + \tl_if_empty:cTF { g__hook_#1_code_next_tl } + {---} + {->~ \exp_args:Nv + \__hook_log_next_code:n {g__hook_#1_code_next_tl} } } + \iow_term:x { ~Rules: } + \bool_set_true:N \l__hook_tmpa_bool + \__hook_list_rules:nn {#1} + { + \bool_set_false:N \l__hook_tmpa_bool + \iow_term:x + { + \@spaces ##2~ with~ + \str_if_eq:nnT {##3} {??} { default~ } + relation~ ##1 } + } + \bool_if:NT \l__hook_tmpa_bool + { \iow_term:x { \@spaces --- } } + \bool_lazy_and:nnT + { \hook_if_exist_p:n {#1} } + { ! \hook_if_empty_p:n {#1} } + { \iow_term:x { ~Execution~ order + \bool_if:NTF \l__hook_tmpa_bool + { \__hook_if_reversed:nT {#1} + { ~ (after~ reversal) } + } + { ~ (after~ + \__hook_if_reversed:nT {#1} {reversal~ and~} + applying~ rules) + } + : + } + \iow_term:x + { \@spaces \clist_use:cn {g__hook_#1_labels_clist} { ,~ } } + } + } + { \iow_term:n { ~The~hook~is~empty. } } + \iow_term:n { } + } +\cs_new:Npn \__hook_log_next_code:n #1 { + \exp_args:No \tl_to_str:n {\use_none:nn #1} +} +\cs_new_protected:Npn \__hook_list_rules:nn #1 #2 + { + \cs_set_protected:Npn \__hook_tmp:w ##1 ##2 ##3 {#2} + \prop_map_inline:cn { g__hook_#1_code_prop } + { + \prop_map_inline:cn { g__hook_#1_code_prop } + { + \__hook_if_label_case:nnnnn {##1} {####1} + { \prop_map_break: } + { \__hook_list_one_rule:nnn {##1} {####1} } + { \__hook_list_one_rule:nnn {####1} {##1} } + {#1} + } + } + } +\cs_new_protected:Npn \__hook_list_one_rule:nnn #1#2#3 + { + \__hook_list_if_rule_exists:nnnF {#1} {#2} {#3} { } + { \__hook_list_if_rule_exists:nnnF {#1} {#2} { ?? } { } } + } +\cs_new_protected:Npn \__hook_list_if_rule_exists:nnnF #1#2#3 + { + \if_cs_exist:w g__hook_ #3 _rule_ #1 | #2 _tl \cs_end: + \exp_args:Nv \__hook_tmp:w + { g__hook_ #3 _rule_ #1 | #2 _tl } { #1 | #2 } {#3} + \fi: + } +\cs_new_protected:Npn \__hook_debug_print_rules:n #1 + { + \iow_term:n { The~hook~#1~contains~the~rules: } + \cs_set_protected:Npn \__hook_tmp:w ##1 + { + \__hook_list_rules:nn {#1} + { + \iow_term:x + { + > ##1 {####2} ##1 => ##1 {####1} + \str_if_eq:nnT {####3} {??} { ~(default) } + } + } + } + \exp_args:No \__hook_tmp:w { \use:nn { ~ } { ~ } } + } +\cs_new_protected:Npn \hook_gput_next_code:nn #1 + { + \exp_args:Nx \__hook_gput_next_code:nn + { \__hook_parse_label_default:nn {#1} { top-level } } + } +\cs_new_protected:Npn \__hook_gput_next_code:nn #1 #2 + { + \__hook_declare:n {#1} + \hook_if_exist:nTF {#1} + { \__hook_gput_next_do:nn {#1} {#2} } + { \__hook_try_declaring_generic_next_hook:nn {#1} {#2} } + } +\cs_new_protected:Npn \__hook_gput_next_do:nn #1 + { + \exp_args:Nc \__hook_gput_next_do:Nnn + { g__hook_#1_code_next_tl } {#1} + } +\cs_new_protected:Npn \__hook_gput_next_do:Nnn #1 #2 + { + \tl_if_empty:cT { g__hook_#2_code_tl } + { \__hook_update_hook_code:n {#2} } + \tl_if_empty:NT #1 + { \tl_gset:Nn #1 { \tl_gclear:c { g__hook_#2_code_next_tl } } } + \tl_gput_right:Nn #1 + } +\cs_new_protected:Npn \hook_use:n #1 + { + \tl_if_exist:cTF { g__hook_#1_code_tl } + { + \__hook_preamble_hook:n {#1} + \cs:w g__hook_#1_code_tl \cs_end: + } + { \__hook_use:wn #1 / \s__hook_mark {#1} } + } +\cs_new:Npn \__hook_use_initialized:n #1 + { + \tl_if_exist:cTF { g__hook_#1_code_tl } + { \cs:w g__hook_#1_code_tl \cs_end: } + { \__hook_use:wn #1 / \s__hook_mark {#1} } + } +\cs_new_protected:Npn \__hook_preamble_hook:n #1 + { \__hook_initialize_hook_code:n {#1} } +\cs_new:Npn \__hook_use:wn #1 / #2 \s__hook_mark #3 + { + \str_if_eq:nnTF {#1} { file } + { \__hook_try_file_hook:n {#3} } + { } % Hook doesn't exist + } +\cs_new_protected:Npn \__hook_try_file_hook:n #1 + { + \__hook_if_file_hook:wTF #1 / / \s__hook_mark + { + \exp_args:Ne \__hook_if_exist_use:n + { \exp_args:Ne \__hook_file_hook_normalize:n {#1} } + } + { \__hook_if_exist_use:n {#1} } % file/ generic hook (e.g. file/before) + } +\cs_new_protected:Npn \__hook_if_exist_use:n #1 + { + \tl_if_exist:cT { g__hook_#1_code_tl } + { + \__hook_preamble_hook:n {#1} + \cs:w g__hook_#1_code_tl \cs_end: + } + } +\cs_new_protected:Npn \hook_use_once:n #1 + { + \tl_if_exist:cT { g__hook_#1_code_tl } + { + \clist_gput_left:Nn \g__hook_execute_immediately_clist {#1} + \hook_use:n {#1} + } + } +\prg_new_conditional:Npnn \hook_if_empty:n #1 { p , T , F , TF } + { + \__hook_if_exist:nTF {#1} + { + \bool_lazy_and:nnTF + { \prop_if_empty_p:c { g__hook_#1_code_prop } } + { \tl_if_empty_p:c { g__hook_#1_code_next_tl } } + { \prg_return_true: } + { \prg_return_false: } + } + { \prg_return_true: } + } +\prg_new_conditional:Npnn \hook_if_exist:n #1 { p , T , F , TF } + { + \tl_if_exist:cTF { g__hook_#1_code_tl } + { \prg_return_true: } + { \prg_return_false: } + } +\prg_new_conditional:Npnn \__hook_if_exist:n #1 { p , T , F , TF } + { + \prop_if_exist:cTF { g__hook_#1_code_prop } + { \prg_return_true: } + { \prg_return_false: } + } +\prg_new_conditional:Npnn \__hook_if_reversed:n #1 { p , T , F , TF } + { + \if_int_compare:w \cs:w g__hook_#1_reversed_tl \cs_end: 1 < 0 \exp_stop_f: + \prg_return_true: + \else: + \prg_return_false: + \fi: + } +\clist_new:N \g__hook_execute_immediately_clist +\msg_new:nnnn { hooks } { labels-incompatible } + { + Labels~`#1'~and~`#2'~are~incompatible + \str_if_eq:nnF {#3} {??} { ~in~hook~`#3' } .~ + \int_compare:nNnTF {#4} = { 1 } + { The~ code~ for~ both~ labels~ will~ be~ dropped. } + { You~ may~ see~ errors~ later. } + } + { LaTeX~found~two~incompatible~labels~in~the~same~hook.~ + This~indicates~an~incompatibility~between~packages. } +\msg_new:nnnn { hooks } { exists } + { Hook~`#1'~ has~ already~ been~ declared. } + { There~ already~ exists~ a~ hook~ declaration~ with~ this~ + name.\\ + Please~ use~ a~ different~ name~ for~ your~ hook.} +\msg_new:nnn { hooks } { empty-label } + { Empty~code~label~\msg_line_context:.~Using~`#1'~instead. } +\msg_new:nnnn { hooks } { unknown-rule } + { Unknown~ relationship~ `#3'~ + between~ labels~ `#2'~ and~ `#4'~ + \str_if_eq:nnF {#1} {??} { ~in~hook~`#1' }. ~ + Perhaps~ a~ missspelling? + } + { + The~ relation~ used~ not~ known~ to~ the~ system.~ Allowed~ values~ are~ + `before'~ or~ `<',~ + `after'~ or~ `>',~ + `incompatible-warning',~ + `incompatible-error',~ + `voids'~ or~ + `unrelated'. + } +\msg_new:nnn { hooks } { should-not-happen } + { + ERROR!~This~should~not~happen.~#1 \\ + Please~report~at~https://github.com/latex3/latex2e. + } +\NewDocumentCommand \NewHook { m }{ \hook_new:n {#1} } +\NewDocumentCommand \NewReversedHook { m }{ \hook_new_reversed:n {#1} } +\NewDocumentCommand \NewMirroredHookPair { mm }{ \hook_new_pair:nn {#1}{#2} } +\NewDocumentCommand \AddToHook { m o +m } + { + \clist_if_in:NnTF \g__hook_execute_immediately_clist {#1} + {#3} + { \hook_gput_code:nnn {#1} {#2} {#3} } + } +\NewDocumentCommand \AddToHookNext { m +m } + { \hook_gput_next_code:nn {#1} {#2} } +\NewDocumentCommand \RemoveFromHook { m o } + { \hook_gremove_code:nn {#1} {#2} } +\seq_gpush:Nn \g__hook_name_stack_seq { } +\cs_new_protected:Npn \__hook_curr_name_push:n #1 + { + \seq_gpush:Nn \g__hook_name_stack_seq {#1} + \tl_gset:Nn \g__hook_hook_curr_name_tl {#1} + } +\cs_new_protected:Npn \__hook_curr_name_pop: + { + \seq_gpop:NN \g__hook_name_stack_seq \l__hook_return_tl + \seq_get:NNTF \g__hook_name_stack_seq \l__hook_return_tl + { \tl_gset_eq:NN \g__hook_hook_curr_name_tl \l__hook_return_tl } + { + \msg_error:nnn { hooks } { should-not-happen } + { Tried~to~pop~from~an~empty~default~label~stack. } + } + } +\NewDocumentCommand \DeclareDefaultHookLabel { m } + { + \seq_gpop:NN \g__hook_name_stack_seq \l__hook_return_tl + \__hook_curr_name_push:n {#1} + } +\newcommand \UseHook { \hook_use:n } +\newcommand \UseOneTimeHook { \hook_use_once:n } +\cs_new_protected:Npn \ShowHook { \hook_log:n } +\cs_new_protected:Npn \DebugHooksOn { \hook_debug_on: } +\cs_new_protected:Npn \DebugHooksOff { \hook_debug_off: } +\NewDocumentCommand \DeclareHookRule { m m m m } + { \hook_gset_rule:nnnn {#1}{#2}{#3}{#4} } +\NewDocumentCommand \DeclareDefaultHookRule { m m m } + { \hook_gset_rule:nnnn {??}{#1}{#2}{#3} } +\@onlypreamble\DeclareDefaultHookRule +\NewDocumentCommand \ClearHookRule { m m m } +{ \hook_gset_rule:nnnn {#1}{#2}{unrelated}{#3} } +\NewExpandableDocumentCommand \IfHookExistsTF { m } + { \hook_if_exist:nTF {#1} } +\NewExpandableDocumentCommand \IfHookEmptyTF { m } + { \hook_if_empty:nTF {#1} } +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 +\cs_new_eq:NN \@expl@@@initialize@all@@ + \__hook_initialize_all: +\cs_new_eq:NN \@expl@@@hook@curr@name@push@@n + \__hook_curr_name_push:n +\cs_new_eq:NN \@expl@@@hook@curr@name@pop@@ + \__hook_curr_name_pop: +\ExplSyntaxOff +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\NewHook}{The hook management}% + +\def \NewHook#1{} +\def \NewReversedHook#1{} +\def \NewMirroredHookPair#1#2{} + +\long\def \AddToHook#1#2{} + +\def \AddToHookNext#1{\@gobble@AddToHook@args} +\providecommand\@gobble@AddToHook@args[2][]{} + +\def\RemoveFromHook#1{\@gobble@RemoveFromHook@arg} +\providecommand\@gobble@RemoveFromHook@arg[1][]{} + +\def \UseHook #1{} +\def \UseOneTimeHook #1{} +\def \ShowHook #1{} +\let \DebugHooksOn \@empty +\let \DebugHooksOff\@empty + +\def \DeclareHookRul#1#2#3#4{} +\def \DeclareDefaultHookRule #1#2#3{} +\def \ClearHookRule#1#2#3{} +\def \IfHookExistTF #1#2#3{#3} +\def \IfHookEmptyTF #1#2#3{#2} + +\EndIncludeInRelease +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% From File: ltalloc.dtx %%% From File: ltcntrl.dtx %%% From File: lterror.dtx @@ -654,6 +1924,42 @@ of this package available from CTAN} {\@ifnextchar[\@makebox\mbox}}% \expandafter\let\csname makebox \endcsname\@undefined \EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@imakepicbox}{default units}% +\long\def\@imakepicbox(#1,#2)[#3]#4{% + \@defaultunitsset\@tempdimc{#2}\unitlength + \vbox to\@tempdimc + {\let\mb@b\vss \let\mb@l\hss\let\mb@r\hss + \let\mb@t\vss + \@tfor\reserved@a :=#3\do{% + \if s\reserved@a + \let\mb@l\relax\let\mb@r\relax + \else + \expandafter\let\csname mb@\reserved@a\endcsname\relax + \fi}% + \mb@t + \@defaultunitsset\@tempdimc{#1}\unitlength + \hb@xt@\@tempdimc{\mb@l #4\mb@r}% + \mb@b + \kern\z@}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@imakepicbox}{default units}% +\long\def\@imakepicbox(#1,#2)[#3]#4{% + \vbox to#2\unitlength + {\let\mb@b\vss \let\mb@l\hss\let\mb@r\hss + \let\mb@t\vss + \@tfor\reserved@a :=#3\do{% + \if s\reserved@a + \let\mb@l\relax\let\mb@r\relax + \else + \expandafter\let\csname mb@\reserved@a\endcsname\relax + \fi}% + \mb@t + \hb@xt@ #1\unitlength{\mb@l #4\mb@r}% + \mb@b + \kern\z@}} +\EndIncludeInRelease \IncludeInRelease{2015/01/01}% {\savebox}{Make \savebox robust}% \DeclareRobustCommand\savebox[1]{% @@ -843,13 +2149,13 @@ of this package available from CTAN} \EndIncludeInRelease \IncludeInRelease{2019/10/01}% {\cases}{Make commands robust}% -\DeclareRobustCommand\cases[1]{\left\{\,\vcenter{\normalbaselines\m@th +\DeclareRobustCommand*\cases[1]{\left\{\,\vcenter{\normalbaselines\m@th \ialign{$##\hfil$&\quad{##}\hfil\crcr#1\crcr}}\right.} -\DeclareRobustCommand\matrix[1]{\null\,\vcenter{\normalbaselines\m@th +\DeclareRobustCommand*\matrix[1]{\null\,\vcenter{\normalbaselines\m@th \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr \mathstrut\crcr\noalign{\kern-\baselineskip} #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,} -\DeclareRobustCommand\pmatrix[1]{\left(\matrix{#1}\right)} +\DeclareRobustCommand*\pmatrix[1]{\left(\matrix{#1}\right)} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% {\cases}{Make commands robust}% @@ -974,6 +2280,94 @@ of this package available from CTAN} \EndIncludeInRelease %%% From File: ltpictur.dtx \IncludeInRelease{2020/10/01}% + {\@defaultunitsset}{default units}% +\def\@defaultunitsset#1#2#3{% + \@defaultunits#1\dimexpr#2#3\relax\relax\@nnil} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@defaultunitsset}{default units}% +\let\@defaultunitsset\@undefined +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@picture}{default units}% +\def\@picture(#1,#2)(#3,#4){% + \@defaultunitsset\@picht{#2}\unitlength + \@defaultunitsset\@tempdimc{#1}\unitlength + \setbox\@picbox\hb@xt@\@tempdimc\bgroup + \@defaultunitsset\@tempdimc{#3}\unitlength + \hskip -\@tempdimc + \@defaultunitsset\@tempdimc{#4}\unitlength + \lower\@tempdimc\hbox\bgroup + \ignorespaces} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@picture}{default units}% +\def\@picture(#1,#2)(#3,#4){% + \@picht#2\unitlength + \setbox\@picbox\hb@xt@#1\unitlength\bgroup + \hskip -#3\unitlength + \lower #4\unitlength\hbox\bgroup + \ignorespaces} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\put}{default units}% +\expandafter\let\csname put \endcsname\@undefind +\long\def\put(#1,#2)#3{% + \@killglue + \@defaultunitsset\@tempdimc{#2}\unitlength + \raise\@tempdimc + \hb@xt@\z@{% + \@defaultunitsset\@tempdimc{#1}\unitlength + \kern\@tempdimc + #3\hss}% + \ignorespaces} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\put}{default units}% +\expandafter\let\csname put \endcsname\@undefind +\long\def\put(#1,#2)#3{% + \@killglue\raise#2\unitlength + \hb@xt@\z@{\kern#1\unitlength #3\hss}% + \ignorespaces} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\multiput}{default units}% +\expandafter\let\csname multiput \endcsname\@undefind +\def\multiput(#1,#2)#3{% + \@defaultunitsset\@xdim{#1}\unitlength + \@defaultunitsset\@ydim{#2}\unitlength + \@multiput(} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\multiput}{default units}% +\expandafter\let\csname multiput \endcsname\@undefind +\def\multiput(#1,#2)#3{% + \@xdim #1\unitlength + \@ydim #2\unitlength + \@multiput(} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@multiput}{default units}% +\long\def\@multiput(#1,#2)#3#4{% + \@killglue\@multicnt #3\relax + \@whilenum \@multicnt >\z@\do + {\raise\@ydim\hb@xt@\z@{\kern\@xdim #4\hss}% + \advance\@multicnt\m@ne + \@defaultunitsset{\advance\@xdim}{#1}\unitlength + \@defaultunitsset{\advance\@ydim}{#2}\unitlength}% + \ignorespaces} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@multiput}{default units}% +\long\def\@multiput(#1,#2)#3#4{% + \@killglue\@multicnt #3\relax + \@whilenum \@multicnt >\z@\do + {\raise\@ydim\hb@xt@\z@{\kern\@xdim #4\hss}% + \advance\@multicnt\m@ne + \advance\@xdim#1\unitlength\advance\@ydim#2\unitlength}% + \ignorespaces} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% {\@istackcr}{\shortstack calc support}% \def\@istackcr[#1]{\cr\noalign{\@vspace@calcify{#1}}\ignorespaces} \EndIncludeInRelease @@ -982,17 +2376,191 @@ of this package available from CTAN} \def\@istackcr[#1]{\cr\noalign{\vskip #1}\ignorespaces} \EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\line}{default units}% +\expandafter\let\csname line \endcsname\@undefind +\def\line(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax + \@defaultunitsset\@linelen{#3}\unitlength + \ifdim\@linelen<\z@\@badlinearg\else + \ifnum\@xarg =\z@ \@vline + \else \ifnum\@yarg =\z@ \@hline \else \@sline\fi + \fi + \fi} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\line}{default units}% +\expandafter\let\csname line \endcsname\@undefind +\def\line(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax + \@linelen #3\unitlength + \ifdim\@linelen<\z@\@badlinearg\else + \ifnum\@xarg =\z@ \@vline + \else \ifnum\@yarg =\z@ \@hline \else \@sline\fi + \fi + \fi} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\vector}{default units}% +\expandafter\let\csname vector \endcsname\@undefind +\def\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax + \@tempcnta \ifnum\@xarg<\z@ -\@xarg\else\@xarg\fi + \ifnum\@tempcnta<5\relax + \@defaultunitsset\@linelen{#3}\unitlength + \ifdim\@linelen<\z@\@badlinearg\else + \ifnum\@xarg =\z@ \@vvector + \else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi + \fi + \fi + \else\@badlinearg\fi} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\vector}{default units}% +\expandafter\let\csname vector \endcsname\@undefind +\def\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax + \@tempcnta \ifnum\@xarg<\z@ -\@xarg\else\@xarg\fi + \ifnum\@tempcnta<5\relax + \@linelen #3\unitlength + \ifdim\@linelen<\z@\@badlinearg\else + \ifnum\@xarg =\z@ \@vvector + \else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi + \fi + \fi + \else\@badlinearg\fi} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\dashbox}{default units}% +\expandafter\let\csname dashbox \endcsname\@undefind +\def\dashbox#1(#2,#3){\leavevmode\hb@xt@\z@{\baselineskip \z@skip +\lineskip \z@skip +\@defaultunitsset\@dashdim{#2}\unitlength +\@dashcnt \@dashdim \advance\@dashcnt 200 +\@defaultunitsset\@dashdim{#1}\unitlength +\divide\@dashcnt \@dashdim +\ifodd\@dashcnt\@dashdim \z@ +\advance\@dashcnt \@ne \divide\@dashcnt \tw@ +\else \divide\@dashdim \tw@ \divide\@dashcnt \tw@ +\advance\@dashcnt \m@ne +\setbox\@dashbox \hbox{\vrule \@height \@halfwidth \@depth \@halfwidth +\@width \@dashdim}\put(0,0){\copy\@dashbox}% +\put(0,#3){\copy\@dashbox}% +\put(#2,0){\hskip-\@dashdim\copy\@dashbox}% +\put(#2,#3){\hskip-\@dashdim\box\@dashbox}% +\multiply\@dashdim \thr@@ +\fi +\setbox\@dashbox \hbox{% + \@defaultunitsset\@tempdimc{#1}\unitlength + \vrule \@height \@halfwidth \@depth \@halfwidth \@width \@tempdimc + \hskip\@tempdimc}% +\@tempcnta\z@ +\put(0,0){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt +\do{\copy\@dashbox\advance\@tempcnta \@ne }}\@tempcnta\z@ +\put(0,#3){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt +\do{\copy\@dashbox\advance\@tempcnta \@ne }}% +\@defaultunitsset\@dashdim{#3}\unitlength +\@dashcnt \@dashdim \advance\@dashcnt 200 +\@defaultunitsset\@dashdim{#1}\unitlength +\divide\@dashcnt \@dashdim +\ifodd\@dashcnt \@dashdim \z@ +\advance\@dashcnt \@ne \divide\@dashcnt \tw@ +\else +\divide\@dashdim \tw@ \divide\@dashcnt \tw@ +\advance\@dashcnt \m@ne +\setbox\@dashbox\hbox{\hskip -\@halfwidth +\vrule \@width \@wholewidth +\@height \@dashdim}\put(0,0){\copy\@dashbox}% +\put(#2,0){\copy\@dashbox}% +\put(0,#3){\lower\@dashdim\copy\@dashbox}% +\put(#2,#3){\lower\@dashdim\copy\@dashbox}% +\multiply\@dashdim \thr@@ +\fi +\@defaultunitsset\@tempdimb{#1}\unitlength +\setbox\@dashbox\hbox{% + \vrule \@width \@wholewidth \@height\@tempdimb}% +\@tempcnta\z@ +\put(0,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta <\@dashcnt +\do{\vskip\@tempdimb\copy\@dashbox\advance\@tempcnta \@ne }% +\vskip\@dashdim}}\@tempcnta\z@ +\put(#2,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta<\@dashcnt +\do{\vskip\@tempdimb\copy\@dashbox\advance\@tempcnta \@ne }% +\vskip\@dashdim}}}\@makepicbox(#2,#3)} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\dashbox}{default units}% +\expandafter\let\csname dashbox \endcsname\@undefind +\def\dashbox#1(#2,#3){% +\leavevmode\hb@xt@\z@{\baselineskip \z@skip +\lineskip \z@skip +\@dashdim #2\unitlength +\@dashcnt \@dashdim \advance\@dashcnt 200 +\@dashdim #1\unitlength\divide\@dashcnt \@dashdim +\ifodd\@dashcnt\@dashdim \z@ +\advance\@dashcnt \@ne \divide\@dashcnt \tw@ +\else \divide\@dashdim \tw@ \divide\@dashcnt \tw@ +\advance\@dashcnt \m@ne +\setbox\@dashbox \hbox{% + \vrule \@height \@halfwidth \@depth \@halfwidth + \@width \@dashdim}\put(0,0){\copy\@dashbox}% +\put(0,#3){\copy\@dashbox}% +\put(#2,0){\hskip-\@dashdim\copy\@dashbox}% +\put(#2,#3){\hskip-\@dashdim\box\@dashbox}% +\multiply\@dashdim \thr@@ +\fi +\setbox\@dashbox \hbox{% + \vrule \@height \@halfwidth \@depth \@halfwidth + \@width #1\unitlength\hskip #1\unitlength}\@tempcnta\z@ +\put(0,0){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt +\do{\copy\@dashbox\advance\@tempcnta \@ne }}\@tempcnta\z@ +\put(0,#3){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt +\do{\copy\@dashbox\advance\@tempcnta \@ne }}% +\@dashdim #3\unitlength +\@dashcnt \@dashdim \advance\@dashcnt 200 +\@dashdim #1\unitlength\divide\@dashcnt \@dashdim +\ifodd\@dashcnt \@dashdim \z@ +\advance\@dashcnt \@ne \divide\@dashcnt \tw@ +\else +\divide\@dashdim \tw@ \divide\@dashcnt \tw@ +\advance\@dashcnt \m@ne +\setbox\@dashbox\hbox{\hskip -\@halfwidth +\vrule \@width \@wholewidth +\@height \@dashdim}\put(0,0){\copy\@dashbox}% +\put(#2,0){\copy\@dashbox}% +\put(0,#3){\lower\@dashdim\copy\@dashbox}% +\put(#2,#3){\lower\@dashdim\copy\@dashbox}% +\multiply\@dashdim \thr@@ +\fi +\setbox\@dashbox\hbox{\vrule \@width \@wholewidth +\@height #1\unitlength}\@tempcnta\z@ +\put(0,0){% + \hskip -\@halfwidth \vbox{\@whilenum \@tempcnta <\@dashcnt + \do{\vskip #1\unitlength\copy\@dashbox + \advance\@tempcnta\@ne }% + \vskip\@dashdim}}\@tempcnta\z@ +\put(#2,0){% + \hskip -\@halfwidth \vbox{\@whilenum \@tempcnta<\@dashcnt + \do{\vskip #1\unitlength\copy\@dashbox + \advance\@tempcnta \@ne }% + \vskip\@dashdim}}}\@makepicbox(#2,#3)} +\EndIncludeInRelease \IncludeInRelease{2016/03/31}% {\@ovhlinetrue}% {Avoid almost zero length leaders}% \newif\if@ovvline \@ovvlinetrue \newif\if@ovhline \@ovhlinetrue +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@ovhlinetrue}% + {Avoid almost zero length leaders}% +\let\if@ovvline\@undefined +\let\if@ovhline\@undefined +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@oval}{default units}% \def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue \@ovvlinefalse \@ovhlinefalse - \@tfor\reserved@a :=#3\do{\csname @ov\reserved@a false\endcsname}% - \@ovxx #1\unitlength - \@ovyy #2\unitlength + \@tfor\reserved@a :=#3\do{% + \csname @ov\reserved@a false\endcsname}% + \@defaultunitsset\@ovxx{#1}\unitlength + \@defaultunitsset\@ovyy{#2}\unitlength \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx \@ovvlinetrue \else \@ovyy \ifdim \@ovyy =\@ovxx \else \@ovhlinetrue \fi\fi \advance \@tempdimb -2\p@ @@ -1010,27 +2578,39 @@ of this package available from CTAN} \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@ \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}% \endgroup} -\def\@ovvert#1#2{\vbox to\@ovyy{% - \if@ovb \@tempcntb \@tempcnta \advance \@tempcntb #1\relax - \kern -\@ovro \hbox{\char \@tempcntb}\nointerlineskip - \else \kern \@ovri \kern \@ovdy \fi - \if@ovvline \leaders\vrule \@width \@wholewidth \fi - \vfil \nointerlineskip - \if@ovt \@tempcntb \@tempcnta \advance \@tempcntb #2\relax - \hbox{\char \@tempcntb}% - \else \kern \@ovdy \kern \@ovro \fi}} -\def\@ovhorz{\hb@xt@\@ovxx{\kern \@ovro - \if@ovr \else \kern \@ovdx \fi - \if@ovhline \leaders \hrule \@height \@wholewidth \fi - \hfil - \if@ovl \else \kern \@ovdx \fi - \kern \@ovri}} +\EndIncludeInRelease +\IncludeInRelease{2016/03/31}% + {\@oval}{default units}% +\def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen + \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue + \@ovvlinefalse \@ovhlinefalse + \@tfor\reserved@a :=#3\do{% + \csname @ov\reserved@a false\endcsname}% + \@ovxx #1\unitlength + \@ovyy #2\unitlength + \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx \@ovvlinetrue + \else \@ovyy \ifdim \@ovyy =\@ovxx \else \@ovhlinetrue + \fi\fi + \advance \@tempdimb -2\p@ + \@getcirc \@tempdimb + \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa + \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@ + \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@ + \ifdim \@ovdx >\z@ \@ovhlinetrue \fi + \ifdim \@ovdy >\z@ \@ovvlinetrue \fi + \@circlefnt \setbox\@tempboxa + \hbox{\if@ovr \@ovvert32\kern -\@tempdima \fi + \if@ovl + \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx + \fi + \if@ovt \@ovhorz \kern -\@ovxx \fi + \if@ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro + \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@ + \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}% + \endgroup} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\@ovhlinetrue}% - {Avoid almost zero length leaders}% -\let\if@ovvline\@undefined -\let\if@ovhline\@undefined + {\@oval}{default units}% \def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue \@tfor\reserved@a :=#3\do @@ -1053,6 +2633,21 @@ of this package available from CTAN} \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@ \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}% \endgroup} +\EndIncludeInRelease +\IncludeInRelease{2016/03/31}% + {\@ovvert}{Avoid almost zero length leaders}% +\def\@ovvert#1#2{\vbox to\@ovyy{% + \if@ovb \@tempcntb \@tempcnta \advance \@tempcntb #1\relax + \kern -\@ovro \hbox{\char \@tempcntb}\nointerlineskip + \else \kern \@ovri \kern \@ovdy \fi + \if@ovvline \leaders\vrule \@width \@wholewidth \fi + \vfil \nointerlineskip + \if@ovt \@tempcntb \@tempcnta \advance \@tempcntb #2\relax + \hbox{\char \@tempcntb}% + \else \kern \@ovdy \kern \@ovro \fi}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@ovvert}{Avoid almost zero length leaders}% \def\@ovvert#1#2{\vbox to\@ovyy{% \if@ovb \@tempcntb \@tempcnta \advance \@tempcntb #1\relax \kern -\@ovro \hbox{\char \@tempcntb}\nointerlineskip @@ -1061,12 +2656,181 @@ of this package available from CTAN} \if@ovt \@tempcntb \@tempcnta \advance \@tempcntb #2\relax \hbox{\char \@tempcntb}% \else \kern \@ovdy \kern \@ovro \fi}} +\EndIncludeInRelease +\IncludeInRelease{2016/03/31}% + {\@ovhorz}{Avoid almost zero length leaders}% +\def\@ovhorz{\hb@xt@\@ovxx{\kern \@ovro + \if@ovr \else \kern \@ovdx \fi + \if@ovhline \leaders \hrule \@height \@wholewidth \fi + \hfil + \if@ovl \else \kern \@ovdx \fi + \kern \@ovri}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@ovhorz}{Avoid almost zero length leaders}% \def\@ovhorz{\hb@xt@\@ovxx{\kern \@ovro \if@ovr \else \kern \@ovdx \fi \leaders \hrule \@height \@wholewidth \hfil \if@ovl \else \kern \@ovdx \fi \kern \@ovri}} \EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@circle}{default units}% +\def\@circle#1{% + \begingroup \boxmaxdepth \maxdimen + \@defaultunitsset\@tempdimb{#1}\unitlength + \ifdim \@tempdimb >15.5\p@ \@getcirc\@tempdimb + \@ovro\ht\@tempboxa + \setbox\@tempboxa\hbox{\@circlefnt + \advance\@tempcnta\tw@ \char \@tempcnta + \advance\@tempcnta\m@ne \char \@tempcnta \kern -2\@tempdima + \advance\@tempcnta\tw@ + \raise \@tempdima \hbox{\char\@tempcnta}\raise \@tempdima + \box\@tempboxa}\ht\@tempboxa\z@ \dp\@tempboxa\z@ + \@put{-\@ovro}{-\@ovro}{\box\@tempboxa}% + \else \@circ\@tempdimb{96}\fi\endgroup} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@circle}{default units}% +\def\@circle#1{% + \begingroup \boxmaxdepth \maxdimen \@tempdimb #1\unitlength + \ifdim \@tempdimb >15.5\p@ \@getcirc\@tempdimb + \@ovro\ht\@tempboxa + \setbox\@tempboxa\hbox{\@circlefnt + \advance\@tempcnta\tw@ \char \@tempcnta + \advance\@tempcnta\m@ne \char \@tempcnta + \kern -2\@tempdima + \advance\@tempcnta\tw@ + \raise \@tempdima \hbox{\char\@tempcnta}% + \raise \@tempdima + \box\@tempboxa}\ht\@tempboxa\z@ \dp\@tempboxa\z@ + \@put{-\@ovro}{-\@ovro}{\box\@tempboxa}% + \else \@circ\@tempdimb{96}\fi\endgroup} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@dot}{default units}% +\def\@dot#1{% + \@defaultunitsset\@tempdimb{#1}\unitlength + \@circ\@tempdimb{112}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@dot}{default units}% +\def\@dot#1{\@tempdimb #1\unitlength \@circ\@tempdimb{112}} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@bezier}{default units}% +\def\@bezier#1(#2,#3)(#4,#5)(#6,#7){% + \ifnum #1=\z@ + \@defaultunitsset\@ovxx{#4}\unitlength + \@defaultunitsset{\advance\@ovxx}{-#2}\unitlength + \ifdim \@ovxx<\z@ \@ovxx -\@ovxx \fi + \@defaultunitsset\@ovdx{#6}\unitlength + \@defaultunitsset{\advance\@ovdx}{-#4}\unitlength + \ifdim \@ovdx<\z@ \@ovdx -\@ovdx \fi + \ifdim \@ovxx<\@ovdx \@ovxx \@ovdx \fi + \@defaultunitsset\@ovyy{#5}\unitlength + \@defaultunitsset{\advance\@ovyy}{-#3}\unitlength + \ifdim \@ovyy<\z@ \@ovyy -\@ovyy \fi + \@defaultunitsset\@ovdy{#7}\unitlength + \@defaultunitsset{\advance\@ovdy}{-#5}\unitlength + \ifdim \@ovdy<\z@ \@ovdy -\@ovdy \fi + \ifdim \@ovyy<\@ovdy \@ovyy \@ovdy \fi + \@multicnt + \ifdim \@ovxx>\@ovyy \@ovxx \else \@ovyy \fi + \@ovxx .5\@halfwidth \divide\@multicnt\@ovxx + \ifnum \qbeziermax<\@multicnt + \@multicnt\qbeziermax\relax + \fi + \else \@multicnt#1\relax \fi + \@tempcnta\@multicnt \advance\@tempcnta\@ne + \@defaultunitsset\@ovdx{#4}\unitlength + \@defaultunitsset{\advance\@ovdx}{-#2}\unitlength + \multiply\@ovdx \tw@ + \@defaultunitsset\@ovxx{#6}\unitlength + \@defaultunitsset{\advance\@ovxx}{-#2}\unitlength + \advance\@ovxx -\@ovdx \divide\@ovxx\@multicnt + \@defaultunitsset\@ovdy{#5}\unitlength + \@defaultunitsset{\advance\@ovdy}{-#3}\unitlength + \multiply\@ovdy \tw@ + \@defaultunitsset\@ovyy{#7}\unitlength + \@defaultunitsset{\advance\@ovyy}{-#3}\unitlength + \advance\@ovyy -\@ovdy \divide\@ovyy\@multicnt + \setbox\@tempboxa\hbox{% + \hskip -\@halfwidth + \vrule \@height\@halfwidth + \@depth \@halfwidth + \@width \@wholewidth}% + \put(#2,#3){% + \count@\z@ + \@whilenum{\count@<\@tempcnta}\do + {\@xdim\count@\@ovxx + \advance\@xdim\@ovdx + \divide\@xdim\@multicnt + \multiply\@xdim\count@ + \@ydim\count@\@ovyy + \advance\@ydim\@ovdy + \divide\@ydim\@multicnt + \multiply\@ydim\count@ + \raise \@ydim + \hb@xt@\z@{\kern\@xdim + \unhcopy\@tempboxa\hss}% + \advance\count@\@ne}}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@bezier}{default units}% +\def\@bezier#1(#2,#3)(#4,#5)(#6,#7){% + \ifnum #1=\z@ + \@ovxx #4\unitlength + \advance\@ovxx -#2\unitlength + \ifdim \@ovxx<\z@ \@ovxx -\@ovxx \fi + \@ovdx #6\unitlength + \advance\@ovdx -#4\unitlength + \ifdim \@ovdx<\z@ \@ovdx -\@ovdx \fi + \ifdim \@ovxx<\@ovdx \@ovxx \@ovdx \fi + \@ovyy #5\unitlength + \advance\@ovyy -#3\unitlength + \ifdim \@ovyy<\z@ \@ovyy -\@ovyy \fi + \@ovdy #7\unitlength + \advance\@ovdy -#5\unitlength + \ifdim \@ovdy<\z@ \@ovdy -\@ovdy \fi + \ifdim \@ovyy<\@ovdy \@ovyy \@ovdy \fi + \@multicnt + \ifdim \@ovxx>\@ovyy \@ovxx \else \@ovyy \fi + \@ovxx .5\@halfwidth \divide\@multicnt\@ovxx + \ifnum + \qbeziermax<\@multicnt \@multicnt\qbeziermax\relax + \fi + \else \@multicnt#1\relax \fi + \@tempcnta\@multicnt \advance\@tempcnta\@ne + \@ovdx #4\unitlength \advance\@ovdx -#2\unitlength + \multiply\@ovdx \tw@ + \@ovxx #6\unitlength \advance\@ovxx -#2\unitlength + \advance\@ovxx -\@ovdx \divide\@ovxx\@multicnt + \@ovdy #5\unitlength \advance\@ovdy -#3\unitlength + \multiply\@ovdy \tw@ + \@ovyy #7\unitlength \advance\@ovyy -#3\unitlength + \advance\@ovyy -\@ovdy \divide\@ovyy\@multicnt + \setbox\@tempboxa\hbox{% + \hskip -\@halfwidth + \vrule \@height\@halfwidth + \@depth \@halfwidth + \@width \@wholewidth}% + \put(#2,#3){% + \count@\z@ + \@whilenum{\count@<\@tempcnta}\do + {\@xdim\count@\@ovxx + \advance\@xdim\@ovdx + \divide\@xdim\@multicnt + \multiply\@xdim\count@ + \@ydim\count@\@ovyy + \advance\@ydim\@ovdy + \divide\@ydim\@multicnt + \multiply\@ydim\count@ + \raise \@ydim + \hb@xt@\z@{\kern\@xdim + \unhcopy\@tempboxa\hss}% + \advance\count@\@ne}}} +\EndIncludeInRelease \IncludeInRelease{2019/10/01}% {\bezier}{Make commands robust}% \MakeRobust\bezier @@ -1104,8 +2868,8 @@ of this package available from CTAN} \IncludeInRelease{2019/10/01}% {\title}{Make commands robust}% \DeclareRobustCommand\title[1]{\gdef\@title{#1}} -\DeclareRobustCommand\author[1]{\gdef\@author{#1}} -\DeclareRobustCommand\date[1]{\gdef\@date{#1}} +\DeclareRobustCommand*\author[1]{\gdef\@author{#1}} +\DeclareRobustCommand*\date[1]{\gdef\@date{#1}} \DeclareRobustCommand\thanks[1]{\footnotemark \protected@xdef\@thanks{\@thanks \protect\footnotetext[\the\c@footnote]{#1}}% @@ -1125,11 +2889,17 @@ of this package available from CTAN} \kernel@make@fragile\and \EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\addcontentsline}{fourth argument}% +\def\addcontentsline#1#2#3{% + \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}{}% + \protected@file@percent}} +\EndIncludeInRelease \IncludeInRelease{2018/12/01}% {\addcontentsline}{Mask line endings}% -\def\addcontentsline#1#2#3{% + \def\addcontentsline#1#2#3{% \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}% - \protected@file@percent}} + \protected@file@percent}} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% {\addcontentsline}{Mask line endings}% @@ -1182,9 +2952,11 @@ of this package available from CTAN} \let\noprotrusion\@undefined \EndIncludeInRelease %%% From File: ltfiles.dtx -\IncludeInRelease{2020/06/05}% +\IncludeInRelease{2020/10/01}% {\document}{Added hook to load l3backend code}% -\def\document{\endgroup +\def\document{% + \UseOneTimeHook{begindocument/before}% + \@kernel@after@begindocument@before \@expl@sys@load@backend@@ \ifx\@unusedoptionlist\@empty\else \@latex@warning@no@line{Unused global option(s):^^J% @@ -1224,8 +2996,9 @@ of this package available from CTAN} \fi \@noskipsecfalse \let \@refundefined \relax - \let\AtBeginDocument\@firstofone - \@begindocumenthook + \@kernel@before@begindocument + \UseOneTimeHook{begindocument}% + \@kernel@after@begindocument \ifdim\topskip<1sp\global\topskip 1sp\relax\fi \global\@maxdepth\maxdepth \global\let\@begindocumenthook\@undefined @@ -1237,11 +3010,23 @@ of this package available from CTAN} \@preamblecmds \global\let \@nodocument \relax \global\let\do\noexpand + \UseOneTimeHook{begindocument/end}% \ignorespaces} -\EndIncludeInRelease +\NewHook{begindocument} +\NewHook{begindocument/before} +\NewHook{begindocument/end} +\edef \@kernel@after@begindocument@before {% + \let\expandafter\noexpand\csname + g__hook_env/document/begin_code_tl\endcsname + \noexpand\@empty} +\let \@kernel@before@begindocument \@empty +\let \@kernel@after@begindocument \@empty + +\EndIncludeInRelease \IncludeInRelease{2017/04/15}% {\document}{Save language for hyphenation}% + \def\document{\endgroup \ifx\@unusedoptionlist\@empty\else \@latex@warning@no@line{Unused global option(s):^^J% @@ -1353,29 +3138,39 @@ of this package available from CTAN} \EndIncludeInRelease \IncludeInRelease{2020/10/01}% {\includeonly}{Spaces in file names}% +\def\include#1{\relax + \ifnum\@auxout=\@partaux + \@latex@error{\string\include\space cannot be nested}\@eha + \else + \set@curr@file{#1}% + \edef\@curr@file{\@strip@tex@ext\@curr@file}% + \expandafter\@include\expandafter{\@curr@file} % deliberate space + \fi} \def\includeonly#1{% \@partswtrue \let\@partlist\@empty \@for\reserved@a:=#1 \do - { - \expandafter\set@curr@file@trim@spaces\expandafter{\reserved@a}% + {% + \expandafter\set@curr@file\expandafter{\reserved@a}% \ifx\@partlist\@empty - \edef\@partlist{\@curr@file}% + \edef\@partlist{\@strip@tex@ext\@curr@file}% \else - \edef\@partlist{\@partlist,\@curr@file}% + \edef\@partlist{\@partlist,\@strip@tex@ext\@curr@file}% \fi }% } \@onlypreamble\includeonly -\def\include#1{\relax - \ifnum\@auxout=\@partaux - \@latex@error{\string\include\space cannot be nested}\@eha - \else - \set@curr@file@trim@spaces{#1}% - \expandafter\@include\expandafter{\@curr@file} % deliberate space - \fi} -\def\set@curr@file@trim@spaces#1{% - \@expl@tl@trim@spaces@apply@@nN {#1} \set@curr@file } +\def\reserved@a#1{% +\def\@strip@tex@ext##1{% + \expandafter\@strip@tex@ext@aux + ##1\@nil\@nil + #1\@nil\relax\@nnil} +\def\@strip@tex@ext@aux##1#1\@nil##2\@nnil{% + \ifx\relax##2\@empty + \expandafter\@cdr\expandafter\@empty\@cdr{}##1% + \else##1\fi}}% +\expandafter\reserved@a +\expandafter{\detokenize{.tex}} \EndIncludeInRelease \IncludeInRelease{2019/10/01}% {\includeonly}{Spaces in file names}% @@ -1394,7 +3189,9 @@ of this package available from CTAN} \expandafter\@include\@curr@file \fi} -\let\set@curr@file@trim@spaces\@undefined +\let\@strip@tex@ext\@undefined +\let\@strip@tex@ext@aux\@undefined + \EndIncludeInRelease \IncludeInRelease{0000/00/00}% {\includeonly}{Spaces in file names}% @@ -1409,7 +3206,7 @@ of this package available from CTAN} \EndIncludeInRelease \IncludeInRelease{2020/10/01}% - {\@include}{Spaces in file names}% + {\@include}{Spaces in file names and hooks}% \def\@include#1 {% \clearpage \if@filesw @@ -1428,7 +3225,15 @@ of this package available from CTAN} \immediate\openout\@partaux "#1.aux" \immediate\write\@partaux{\relax}% \fi + \@filehook@set@CurrentFile + \UseHook{include/before}% + \UseHook{include/before/#1}% \@input@{#1.tex}% + \UseHook{include/end/#1}% + \UseHook{include/end}% + \clearpage + \UseHook{include/after/#1}% + \UseHook{include/after}% \clearpage \@writeckpt{#1}% \if@filesw @@ -1440,7 +3245,6 @@ of this package available from CTAN} \fi \let\@auxout\@mainaux} \EndIncludeInRelease - \IncludeInRelease{0000/00/00}% {\@include}{Spaces in file names}% \def\@include#1 {% @@ -1475,17 +3279,7 @@ of this package available from CTAN} \EndIncludeInRelease \IncludeInRelease{2019/10/01}% - {\set@curr@file}{Quote file names}% -\def\set@curr@file#1{% - \begingroup - \escapechar\m@ne - \xdef\@curr@file{% - \expandafter\expandafter\expandafter\unquote@name - \expandafter\expandafter\expandafter{% - \expandafter\string - \csname\@firstofone#1\@empty\endcsname}}% - \endgroup -} + {\quote@name}{Quote file names}% \def\quote@name#1{"\quote@@name#1\@gobble""} \def\quote@@name#1"{#1\quote@@name} \def\unquote@name#1{\quote@@name#1\@gobble"} @@ -1520,12 +3314,11 @@ of this package available from CTAN} \reserved@a} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\set@curr@file}{Quote file names}% + {\quote@name}{Quote file names}% \let\quote@name\@undefined \let\quote@@name\@undefined \let\unquote@name\@undefined -\let\set@curr@file\@undefined \let\IfFileExists@\@undefined @@ -1559,24 +3352,29 @@ of this package available from CTAN} \EndIncludeInRelease \IncludeInRelease{2019/10/01}% - {\InputIfFileExists}{Don't lose the file name}% -\DeclareRobustCommand \InputIfFileExists[2]{% - \IfFileExists{#1}% - {% - \expandafter\@swaptwoargs\expandafter - {\@filef@und}{#2\@addtofilelist{#1}\@@input}}} + {\@swaptwoargs}{Don't lose the file name}% \long\def\@swaptwoargs#1#2{#2#1} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\InputIfFileExists}{Don't lose the file name}% -\long\def \InputIfFileExists#1#2{% - \IfFileExists{#1}% - {#2\@addtofilelist{#1}\@@input \@filef@und}} - + {\@swaptwoargs}{Don't lose the file name}% \let\@swaptwoargs\@undefined \EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@iinput}{Change in file error handling}% +\def\@iinput#1{% + \InputIfFileExists{#1}{}% + {\filename@parse\@curr@file + \edef\reserved@a{\noexpand\@missingfileerror + {\filename@area\filename@base}% + {\ifx\filename@ext\relax tex\else\filename@ext\fi}}% + \reserved@a + \edef\reserved@a{\noexpand\@iinput{% + \@missingfile@area\@missingfile@base.\@missingfile@ext}}% + \reserved@a}} +\EndIncludeInRelease \IncludeInRelease{2019/10/01}% {\@iinput}{Quote file names}% + \def\@iinput#1{% \InputIfFileExists{#1}{}% {\filename@parse\@curr@file @@ -1595,6 +3393,65 @@ of this package available from CTAN} {\ifx\filename@ext\relax tex\else\filename@ext\fi}}% \reserved@a}} \EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@missingfileerror}{Do not load missing file immediately}% +\gdef\@missingfileerror#1#2{% + \typeout{^^J! LaTeX Error: File `#1.#2' not found.^^J^^J% + Type X to quit or <RETURN> to proceed,^^J% + or enter new name. (Default extension: #2)^^J}% + \message{Enter file name: }% + {\endlinechar\m@ne + \global\read\m@ne to\@gtempa}% + \ifx\@gtempa\@empty + \let\@missingfile@area\@empty + \let\@missingfile@base\@empty + \def\@missingfile@ext{tex}% + \else + \def\reserved@b{\batchmode\read-1 to \reserved@a}% + \def\reserved@a{x}\ifx\reserved@a\@gtempa\reserved@b\fi + \def\reserved@a{X}\ifx\reserved@a\@gtempa\reserved@b\fi + \filename@parse\@gtempa + \edef\filename@ext{% + \ifx\filename@ext\relax#2\else\filename@ext\fi}% + \edef\reserved@a{% + \noexpand\IfFileExists + {\filename@area\filename@base.\filename@ext}% + {\def\noexpand\@missingfile@area{\filename@area}% + \def\noexpand\@missingfile@base{\filename@base}% + \def\noexpand\@missingfile@ext {\filename@ext}}% + {\noexpand\@missingfileerror + {\filename@area\filename@base}{\filename@ext}}}% + \reserved@a + \fi +} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@missingfileerror}{Do not load missing file immediately}% + +\gdef\@missingfileerror#1#2{% + \typeout{^^J! LaTeX Error: File `#1.#2' not found.^^J^^J% + Type X to quit or <RETURN> to proceed,^^J% + or enter new name. (Default extension: #2)^^J}% + \message{Enter file name: }% + {\endlinechar\m@ne + \global\read\m@ne to\@gtempa}% + \ifx\@gtempa\@empty + \else + \def\reserved@a{x}\ifx\reserved@a\@gtempa\batchmode\@@end\fi + \def\reserved@a{X}\ifx\reserved@a\@gtempa\batchmode\@@end\fi + \filename@parse\@gtempa + \edef\filename@ext{% + \ifx\filename@ext\relax#2\else\filename@ext\fi}% + \edef\reserved@a{% + \noexpand\InputIfFileExists + {\filename@area\filename@base.\filename@ext}% + {}% + {\noexpand\@missingfileerror + {\filename@area\filename@base}{\filename@ext}}}% + \reserved@a + \fi} + +\EndIncludeInRelease %%% From File: ltoutenc.dtx \IncludeInRelease{2017/04/15}{\DeclareTextCompositeCommand} {test for undeclared accent}% @@ -1643,7 +3500,7 @@ of this package available from CTAN} \EndIncludeInRelease \IncludeInRelease{2019/10/01}% {\UseTextAccent}{Make commands robust}% -\DeclareRobustCommand\UseTextAccent[3]{% +\DeclareRobustCommand*\UseTextAccent[3]{% \hmode@start@before@group {% \let\hmode@start@before@group\@firstofone @@ -1651,7 +3508,7 @@ of this package available from CTAN} \@use@text@encoding{#1}% #2{\@use@text@encoding\@curr@enc#3}% }} -\DeclareRobustCommand\UseTextSymbol[2]{% +\DeclareRobustCommand*\UseTextSymbol[2]{% \hmode@start@before@group {% \def\@wrong@font@char{\MessageBreak @@ -2072,7 +3929,7 @@ of this package available from CTAN} %%% From File: ltpage.dtx \IncludeInRelease{2019/10/01}% {\markboth}{Make commands robust}% -\DeclareRobustCommand\markboth[2]{% +\DeclareRobustCommand*\markboth[2]{% \begingroup \let\label\relax \let\index\relax \let\glossary\relax \unrestored@protected@xdef\@themark {{#1}{#2}}% @@ -2080,7 +3937,7 @@ of this package available from CTAN} \mark{\the\@temptokena}% \endgroup \if@nobreak\ifvmode\nobreak\fi\fi} -\DeclareRobustCommand\markright[1]{% +\DeclareRobustCommand*\markright[1]{% \begingroup \let\label\relax \let\index\relax \let\glossary\relax \expandafter\@markright\@themark {#1}% @@ -2096,6 +3953,752 @@ of this package available from CTAN} \kernel@make@fragile\markright \EndIncludeInRelease +%% +%% File: ltfilehook.dtx (C) Copyright 2020 Frank Mittelbach, +%% Phelype Oleinik & LaTeX Team +%%% From File: ltshipout.dtx +\providecommand\ltfilehookversion{v1.0a} +\providecommand\ltfilehookdate{2020/08/30} +\IncludeInRelease{2020/10/01}% + {\CurrentFile}{Hook management file}% +\ExplSyntaxOn +\tl_new:N \CurrentFile +\tl_new:N \CurrentFilePath +\tl_new:N \CurrentFileUsed +\tl_new:N \CurrentFilePathUsed +\ExplSyntaxOff +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\CurrentFile}{Hook management file}% + +\let \CurrentFile \@undefined +\let \CurrentFilePath \@undefined +\let \CurrentFileUsed \@undefined +\let \CurrentFilePathUsed \@undefined + +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\__filehook_file_parse_full_name:nN}{File helpers}% +\ExplSyntaxOn +\cs_new:Npn \__filehook_file_parse_full_name:nN #1 + { + \exp_args:Nf \file_parse_full_name_apply:nN + { + \exp_args:Nf \__filehook_full_name:nn + { \file_full_name:n {#1} } {#1} + } + } +\cs_new:Npn \__filehook_full_name:nn #1 #2 + { + \tl_if_empty:nTF {#1} + { \tl_trim_spaces:n {#2} } + { \tl_trim_spaces:n {#1} } + } +\cs_new:Npn \__filehook_if_no_extension:nTF #1 + { + \exp_args:Ne \tl_if_empty:nTF + { \file_parse_full_name_apply:nN {#1} \use_iii:nnn } + } +\cs_new_protected:Npn \__filehook_drop_extension:N #1 + { + \tl_gset:Nx #1 + { + \exp_args:NV \__filehook_file_parse_full_name:nN #1 + \__filehook_drop_extension_aux:nnn + } + } +\cs_new:Npn \__filehook_drop_extension_aux:nnn #1 #2 #3 + { \tl_if_empty:nF {#1} { #1 / } #2 } +\tl_new:N \l__filehook_internal_tl +\seq_new:N \g__filehook_input_file_seq +\cs_new_protected:Npn \__filehook_file_push: + { + \seq_gpush:Nx \g__filehook_input_file_seq + { + { \CurrentFilePathUsed } { \CurrentFileUsed } + { \CurrentFilePath } { \CurrentFile } + } + } +\cs_new_protected:Npn \__filehook_file_pop: + { + \seq_gpop:NNTF \g__filehook_input_file_seq \l__filehook_internal_tl + { \exp_after:wN \__filehook_file_pop_assign:nnnn \l__filehook_internal_tl } + { + \msg_error:nnn { hooks } { should-not-happen } + { Tried~to~pop~from~an~empty~file~name~stack. } + } + } +\cs_new_protected:Npn \__filehook_file_pop_assign:nnnn #1 #2 #3 #4 + { + \tl_set:Nn \CurrentFilePathUsed {#1} + \tl_set:Nn \CurrentFileUsed {#2} + \tl_set:Nn \CurrentFilePath {#3} + \tl_set:Nn \CurrentFile {#4} + } +\ExplSyntaxOff +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\InputIfFileExists}{Hook management (files)}% +\let\InputIfFileExists\@undefined +\DeclareRobustCommand \InputIfFileExists[2]{% + \IfFileExists{#1}% + {% + \@expl@@@filehook@file@push@@ + \@filehook@set@CurrentFile + \edef\reserved@a{\@filef@und + \@expl@@@filehook@file@pop@assign@@nnnn + {\CurrentFilePathUsed}% + {\CurrentFileUsed}% + {\CurrentFilePath}% + {\CurrentFile}}% + \expandafter\@swaptwoargs\expandafter + {\reserved@a}% + {% + #2% + \@addtofilelist{#1}% + \UseHook{file/before}% + \UseHook{file/before/\CurrentFile}% + \@@input + }% + \UseHook{file/after/\CurrentFile}% + \UseHook{file/after}% + \@expl@@@filehook@file@pop@@ + }% +} +\EndIncludeInRelease +\IncludeInRelease{2019/10/01}% + {\InputIfFileExists}{Hook management (files)}% + +\DeclareRobustCommand \InputIfFileExists[2]{% + \IfFileExists{#1}% + {% + \expandafter\@swaptwoargs\expandafter + {\@filef@und}{#2\@addtofilelist{#1}\@@input}}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\InputIfFileExists}{Hook management (files)}% +\long\def \InputIfFileExists#1#2{% + \IfFileExists{#1}% + {#2\@addtofilelist{#1}\@@input \@filef@und}} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\__filehook_subst_add:nn}{Declaring file substitution}% +\ExplSyntaxOn +\cs_new_protected:Npn \__filehook_subst_add:nn #1 #2 + { + \group_begin: + \cs_set:cpx { } { \exp_not:o { \cs:w\cs_end: } } + \int_set:Nn \tex_escapechar:D { -1 } + \cs_gset:cpx { @file-subst@ \__filehook_subst_file_normalize:n {#1} } + { \__filehook_subst_file_normalize:n {#2} } + \group_end: + } +\cs_new_protected:Npn \__filehook_subst_remove:n #1 + { + \group_begin: + \cs_set:cpx { } { \exp_not:o { \cs:w\cs_end: } } + \int_set:Nn \tex_escapechar:D { -1 } + \cs_undefine:c { @file-subst@ \__filehook_subst_file_normalize:n {#1} } + \group_end: + } +\cs_new:Npn \__filehook_subst_file_normalize:n #1 + { + \exp_after:wN \__filehook_subst_empty_name_chk:NN + \cs:w \exp_after:wN \cs_end: + \cs:w \__filehook_file_parse_full_name:nN {#1} \use_ii_iii:nnn \cs_end: + } +\cs_new:Npn \__filehook_subst_empty_name_chk:NN #1 #2 + { \if_meaning:w #1 #2 .tex \else: \token_to_str:N #2 \fi: } +\cs_gset:Npn \use_ii_iii:nnn #1 #2 #3 {#2 #3} +\ExplSyntaxOff +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\declare@file@substitution}{File substitution}% +\ExplSyntaxOn +\cs_new_eq:NN \declare@file@substitution \__filehook_subst_add:nn +\cs_new_eq:NN \undeclare@file@substitution \__filehook_subst_remove:n +\ExplSyntaxOff +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\declare@file@substitution}{File substitution}% + +\let \declare@file@substitution \@undefined +\let \undeclare@file@substitution \@undefined + +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\set@curr@file}{Setting current file name}% +\def\set@curr@file#1{% + \begingroup + \escapechar\m@ne + \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}% + \endgroup} +\EndIncludeInRelease +\IncludeInRelease{2019/10/01}% + {\set@curr@file}{Setting current file name}% +\def\set@curr@file#1{% + \begingroup + \escapechar\m@ne + \xdef\@curr@file{% + \expandafter\expandafter\expandafter\unquote@name + \expandafter\expandafter\expandafter{% + \expandafter\string + \csname\@firstofone#1\@empty\endcsname}}% + \endgroup +} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\set@curr@file}{Setting current file name}% +\let\set@curr@file\@undefined +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@kernel@make@file@csname}{Make file csname}% +\def\@kernel@make@file@csname#1#2#3{% + \xdef#1{\expandafter\@set@curr@file@aux + \csname\expandafter#2\@firstofone#3\@nil\endcsname}} +\def\@set@curr@file@aux#1{% + \expandafter\ifx\csname\endcsname#1% + .tex\else\string#1\fi} +\def\@filehook@set@CurrentFile{% + \@expl@@@filehook@set@curr@file@@N{\@curr@file}% + \CurrentFileUsed\CurrentFilePathUsed + \ifx\@curr@file@reqd\@curr@file + \let\CurrentFile\CurrentFileUsed + \let\CurrentFilePath\CurrentFilePathUsed + \else + \@expl@@@filehook@set@curr@file@@N{\@curr@file@reqd}% + \CurrentFile\CurrentFilePath + \fi} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {@@_set_curr_file:N}{Set curr file}% +\ExplSyntaxOn +\cs_new_protected:Npn \__filehook_set_curr_file:N #1 + { \exp_args:NV \__filehook_set_curr_file:nNN #1 } +\cs_new_protected:Npn \__filehook_set_curr_file:nNN #1 + { + \__filehook_file_parse_full_name:nN {#1} + \__filehook_set_curr_file_assign:nnnNN + } +\cs_new_protected:Npn \__filehook_set_curr_file_assign:nnnNN #1 #2 #3 #4 #5 + { + \str_set:Nn #5 {#1} + \str_set:Nn #4 {#2#3} + } +\ExplSyntaxOff +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\__filehook_resolve_file_subst:w}{Replace files detect loops}% +\ExplSyntaxOn +\cs_new:Npn \__filehook_resolve_file_subst:w #1 \@nil + { \__filehook_file_parse_full_name:nN {#1} \__filehook_file_subst_begin:nnn } +\cs_new:Npn \__filehook_normalize_file_name:w #1 \@nil + { \__filehook_file_parse_full_name:nN {#1} \__filehook_file_name_compose:nnn } +\cs_new:Npn \__filehook_file_name_compose:nnn #1 #2 #3 + { \tl_if_empty:nF {#1} { #1 / } #2#3 } +\flag_new:n { __filehook_file_replaced } +\cs_new:Npn \__filehook_if_file_replaced:TF #1 #2 + { \flag_if_raised:nTF { __filehook_file_replaced } {#1} {#2} } +\cs_new:Npn \__filehook_file_subst_begin:nnn #1 #2 #3 + { + \__filehook_file_subst_tortoise_hare:nn { #2#3 } { #2#3 } + { \__filehook_file_name_compose:nnn {#1} {#2} {#3} } + } +\ExplSyntaxOff +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\__filehook_file_subst_tortoise_hare:nn}{Tortoise and Hare}% +\ExplSyntaxOn +\cs_new:Npn \__filehook_file_subst_tortoise_hare:nn #1 #2 #3 + { + \cs_if_exist:cTF { @file-subst@ #2 } + { + \flag_if_raised:nF { __filehook_file_replaced } + { \flag_raise:n { __filehook_file_replaced } } + \cs_if_exist:cTF { @file-subst@ \use:c { @file-subst@ #2 } } + { + \__filehook_file_subst_loop:cc + { @file-subst@ #1 } + { @file-subst@ \use:c { @file-subst@ #2 } } + } + { \use:c { @file-subst@ #2 } } + } + { #3 } + } +\cs_new:Npn \__filehook_file_subst_loop:NN #1 #2 + { + \token_if_eq_meaning:NNTF #1 #2 + { + .tex + \__filehook_file_subst_cycle_error:cN { @file-subst@ #1 } #1 + } + { \__filehook_file_subst_tortoise_hare:nn {#1} {#2} {#2} } + } +\cs_generate_variant:Nn \__filehook_file_subst_loop:NN { cc } +\cs_new:Npn \__filehook_file_subst_cycle_error:NN #1 #2 + { + \__kernel_msg_expandable_error:nnff { kernel } { file-cycle } + {#1} { \use:c { @file-subst@ #1 } } + \token_if_eq_meaning:NNF #1 #2 + { \__filehook_file_subst_cycle_error:cN { @file-subst@ #1 } #2 } + } +\cs_generate_variant:Nn \__filehook_file_subst_cycle_error:NN { c } +\__kernel_msg_new:nnn { kernel } { file-cycle } + { File~loop!~#1~replaced~by~#2... } +\ExplSyntaxOff +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\disable@package@load}{Disable packages}% +\def\disable@package@load#1#2{% + \global\@namedef{@pkg-disable@#1.\@pkgextension}{#2}} +\def\@disable@packageload@do#1#2{% + \@ifundefined{@pkg-disable@#1}{#2}% + {\@nameuse{@pkg-disable@#1}}} +\def\reenable@package@load#1{% + \global\expandafter\let + \csname @pkg-disable@#1.\@pkgextension \endcsname \@undefined} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\disable@package@load}{Disable packages}% + +\let\disable@package@load \@undefined +\let\@disable@packageload@do\@undefined +\let\reenable@package@load \@undefined +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@expl@@@filehook@if@no@extension@@nTF}{2e tmp interfaces}% +\ExplSyntaxOn +\cs_new_eq:NN \@expl@@@filehook@if@no@extension@@nTF + \__filehook_if_no_extension:nTF +\cs_new_eq:NN \@expl@@@filehook@set@curr@file@@N + \__filehook_set_curr_file:N +\cs_new_eq:NN \@expl@@@filehook@resolve@file@subst@@w + \__filehook_resolve_file_subst:w +\cs_new_eq:NN \@expl@@@filehook@normalize@file@name@@w + \__filehook_normalize_file_name:w +\cs_new_eq:NN \@expl@@@filehook@if@file@replaced@@TF + \__filehook_if_file_replaced:TF + +\cs_new_eq:NN \@expl@@@filehook@drop@extension@@N + \__filehook_drop_extension:N +\cs_new_eq:NN \@expl@@@filehook@file@push@@ + \__filehook_file_push: +\cs_new_eq:NN \@expl@@@filehook@file@pop@@ + \__filehook_file_pop: +\cs_new_eq:NN \@expl@@@filehook@file@pop@assign@@nnnn + \__filehook_file_pop_assign:nnnn +\ExplSyntaxOff +\EndIncludeInRelease +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% +%% File: ltshipout.dtx (C) Copyright 2020 Frank Mittelbach, LaTeX Team +%% +%%% From File: ltshipout.dtx +\providecommand\ltshipoutversion{v1.0a} +\providecommand\ltshipoutdate{2020/08/31} +\IncludeInRelease{2020/10/01}% + {\shipout}{Hook mangement (shipout)}% +\ExplSyntaxOn +\bool_new:N \g__shipout_debug_bool +\cs_new_eq:NN \__shipout_debug:n \use_none:n +\cs_new_protected:Npn \shipout_debug_on: + { + \bool_gset_true:N \g__shipout_debug_bool + \__shipout_debug_gset: + } +\cs_new_protected:Npn \shipout_debug_off: + { + \bool_gset_false:N \g__shipout_debug_bool + \__shipout_debug_gset: + } +\cs_new_protected:Npn \__shipout_debug_gset: + { + \cs_gset_protected:Npx \__shipout_debug:n ##1 + { \bool_if:NT \g__shipout_debug_bool {##1} } + } +\box_new:N \l_shipout_box +\cs_set_eq:NN \ShipoutBox \l_shipout_box +\cs_set:Npn\__shipout_execute: { + \tl_set:Nx \l__shipout_group_level_tl + { \int_value:w \tex_currentgrouplevel:D } + \tex_afterassignment:D \__shipout_execute_test_level: + \tex_setbox:D \l_shipout_box +} +\cs_gset_eq:NN \shipout \__shipout_execute: +\tl_new:N \l__shipout_group_level_tl + +\cs_new:Npn \__shipout_execute_test_level: { + \int_compare:nNnT + \l__shipout_group_level_tl < \tex_currentgrouplevel:D + \tex_aftergroup:D + \__shipout_execute_cont: +} +\cs_new:Npn \__shipout_execute_cont: { + \box_if_empty:NTF \l_shipout_box + { \PackageWarning{ltshipout}{Ignoring~ void~ shipout~ box} } + { + \bool_gset_false:N \g__shipout_discard_bool + \cs_set_eq:NN \__shipout_saved_protect: \protect + \set@typeset@protect + \__shipout_get_box_size:N \l_shipout_box + \hook_use:n {shipout/before} + \int_gincr:N \g_shipout_totalpages_int + \bool_if:NTF \g__shipout_discard_bool + { \PackageInfo{ltshipout}{Completed~ page~ discarded} + \bool_gset_false:N \g__shipout_discard_bool + \tex_deadcycles:D \c_zero_int + } + { \box_if_empty:NTF \l_shipout_box + { \PackageWarning{ltshipout}{ + Shipout~ box~ was~ voided~ by~ hook,\MessageBreak + ignoring~ shipout~ box } + } + { + \int_gincr:N \g_shipout_readonly_int + \__shipout_debug:n { + \typeout{Absolute~ page~ =~ \int_use:N \g_shipout_readonly_int + \space (target:~ \@abspage@last)} + } + \__shipout_get_box_size:N \l_shipout_box + \hook_if_empty:nF {shipout/foreground} + { \__shipout_add_foreground_picture:n + { \hook_use:n {shipout/foreground} } } + \hook_if_empty:nF {shipout/background} + { \__shipout_add_background_picture:n + { \@kernel@before@shipout@background + \hook_use:n {shipout/background} } } + \__shipout_execute_firstpage_hook: + \int_compare:nNnT \@abspage@last = \g_shipout_readonly_int + { \hook_if_empty:nF {shipout/lastpage} + { \__shipout_debug:n { \typeout{Executing~ lastpage~ hook~ + on~ page~ \int_use:N \g_shipout_readonly_int } } + \__shipout_add_foreground_box:n { \UseHook{shipout/lastpage} + \@kernel@after@shipout@lastpage } + } + \bool_gset_true:N \g__shipout_lastpage_handled_bool + } + \cs_set_eq:NN \protect \exp_not:N + \tex_shipout:D \box_use:N \l_shipout_box + } + } + \cs_set_eq:NN \protect \__shipout_saved_protect: + } +} +\cs_new_eq:NN \__shipout_saved_protect: \protect +\hook_new:n{shipout/before} +\hook_new:n{shipout/foreground} +\hook_new:n{shipout/background} +\hook_new:n{shipout/firstpage} +\hook_new:n{shipout/lastpage} +\let\@kernel@after@shipout@lastpage\@empty +\let\@kernel@before@shipout@background\@empty +\cs_new:Npn \__shipout_execute_firstpage_hook: { + \hook_if_empty:nF {shipout/firstpage} + { \__shipout_add_background_box:n { \UseHook{shipout/firstpage} } } + \cs_gset_eq:NN \__shipout_execute_firstpage_hook: \prg_do_nothing: + \cs_gset:Npn \__shipout_add_firstpage_material:Nn ##1 ##2 { + \@latex@warning{ + First~ page~ is~ already~ shipped~ out,~ ignoring\MessageBreak + \string##1 } + } +} +\bool_new:N \g__shipout_lastpage_handled_bool +\cs_new:Npn \__shipout_add_firstpage_material:Nn #1#2 { + \AddToHook{shipout/firstpage}{#2} +} +\cs_new:Npn \__shipout_get_box_size:N #1 { + \dim_set:Nn \l_shipout_box_ht_dim { \box_ht:N #1 } + \dim_set:Nn \l_shipout_box_dp_dim { \box_dp:N #1 } + \dim_set:Nn \l_shipout_box_wd_dim { \box_wd:N #1 } + \dim_set:Nn \l_shipout_box_ht_plus_dp_dim { \l_shipout_box_ht_dim + + \l_shipout_box_dp_dim } +} +\dim_new:N \l_shipout_box_ht_dim +\dim_new:N \l_shipout_box_dp_dim +\dim_new:N \l_shipout_box_wd_dim +\dim_new:N \l_shipout_box_ht_plus_dp_dim +\bool_new:N \g__shipout_discard_bool +\box_new:N \l__shipout_tmp_box +\tl_new:N \l__shipout_saved_badness_tl +\cs_new:Npn \__shipout_add_background_box:n #1 +{ \__shipout_get_box_size:N \l_shipout_box + \box_if_vertical:NTF \l_shipout_box + { + \tl_set:Nx \l__shipout_saved_badness_tl + { \vfuzz=\the\vfuzz\relax + \vbadness=\the\vbadness\relax } + \vfuzz=\c_max_dim + \vbadness=\c_max_int + \vbox_set_to_ht:Nnn \l_shipout_box \l_shipout_box_ht_plus_dp_dim + { + \hbox_set:Nn \l__shipout_tmp_box + { \l__shipout_saved_badness_tl #1 } + \box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim + \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim + \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim + \skip_zero:N \baselineskip + \skip_zero:N \lineskip + \skip_zero:N \lineskiplimit + \box_use:N \l__shipout_tmp_box + \vbox_unpack:N \l_shipout_box + \kern \c_zero_dim + } + \box_set_ht:Nn \l_shipout_box \l_shipout_box_ht_dim + \box_set_dp:Nn \l_shipout_box \l_shipout_box_dp_dim + \l__shipout_saved_badness_tl + } + { + \box_if_horizontal:NT \l_shipout_box + { + \tl_set:Nx \l__shipout_saved_badness_tl + { \hfuzz=\the\hfuzz\relax + \hbadness=\the\hbadness\relax } + \hfuzz=\c_max_dim + \hbadness=\c_max_int + \hbox_set_to_wd:Nnn \l_shipout_box \l_shipout_box_wd_dim + { + \hbox_set:Nn \l__shipout_tmp_box + { \l__shipout_saved_badness_tl #1 } + \box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim + \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim + \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim + \box_move_up:nn + \l_shipout_box_ht_dim + { \box_use:N \l__shipout_tmp_box } + \hbox_unpack:N \l_shipout_box + } + \l__shipout_saved_badness_tl + } + } +} +\cs_new:Npn \__shipout_add_foreground_box:n #1 +{ + \box_if_vertical:NTF \l_shipout_box + { + \tl_set:Nx \l__shipout_saved_badness_tl + { \vfuzz=\the\vfuzz\relax + \vbadness=\the\vbadness\relax } + \vfuzz=\c_max_dim + \vbadness=\c_max_int + \vbox_set_to_ht:Nnn \l_shipout_box \l_shipout_box_ht_plus_dp_dim + { + \hbox_set:Nn \l__shipout_tmp_box + { \l__shipout_saved_badness_tl #1 } + \box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim + \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim + \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim + \skip_zero:N \baselineskip + \skip_zero:N \lineskip + \skip_zero:N \lineskiplimit + \vbox_unpack:N \l_shipout_box + \kern -\l_shipout_box_ht_plus_dp_dim + \box_use:N \l__shipout_tmp_box + \kern \l_shipout_box_ht_plus_dp_dim + } + \l__shipout_saved_badness_tl + \box_set_ht:Nn \l_shipout_box \l_shipout_box_ht_dim + \box_set_dp:Nn \l_shipout_box \l_shipout_box_dp_dim + } + { + \box_if_horizontal:NT \l_shipout_box + { + \tl_set:Nx \l__shipout_saved_badness_tl + { \hfuzz=\the\hfuzz\relax + \hbadness=\the\hbadness\relax } + \hfuzz=\c_max_dim + \hbadness=\c_max_int + \hbox_set_to_wd:Nnn \l_shipout_box \l_shipout_box_wd_dim + { + \hbox_unpack:N \l_shipout_box + \kern -\box_wd:N \l_shipout_box + \hbox_set:Nn \l__shipout_tmp_box + { \l__shipout_saved_badness_tl #1 } + \box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim + \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim + \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim + \box_move_up:nn { \box_ht:N \l_shipout_box } + { \box_use:N \l__shipout_tmp_box } + \kern \box_wd:N \l_shipout_box + }% + \l__shipout_saved_badness_tl + } + } +} +\cs_new:Npn \__shipout_init_page_origins: { + \tl_const:Nx \c__shipout_horigin_tl + { + \cs_if_exist_use:NTF \pdfvariable { horigin } + { \cs_if_exist_use:NF \pdfhorigin { 1in } } + } + \tl_const:Nx \c__shipout_vorigin_tl + { + \cs_if_exist_use:NTF \pdfvariable { vorigin } + { \cs_if_exist_use:NF \pdfvorigin { 1in } } + } + \cs_gset_eq:NN \__shipout_init_page_origins: \prg_do_nothing: +} +\cs_new:Npn \__shipout_picture_overlay:n #1 { + \__shipout_init_page_origins: + \kern -\c__shipout_horigin_tl \scan_stop: + \vbox_to_zero:n { + \kern -\c__shipout_vorigin_tl \scan_stop: + \unitlength 1pt \scan_stop: + \hbox_set_to_wd:Nnn \l__shipout_tmp_box \c_zero_dim { \ignorespaces #1 } + \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim + \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim + \box_use:N \l__shipout_tmp_box + \tex_vss:D + } +} +\cs_new:Npn \__shipout_add_background_picture:n #1 { + \__shipout_add_background_box:n { \__shipout_picture_overlay:n {#1} } +} +\cs_new:Npn \__shipout_add_foreground_picture:n #1 { + \__shipout_add_foreground_box:n { \__shipout_picture_overlay:n {#1} } +} +\cs_new:Npn \shipout_discard: { + \bool_gset_true:N \g__shipout_discard_bool +} +\int_new:N \g_shipout_readonly_int +\cs_new_eq:NN \ReadonlyShipoutCounter \g_shipout_readonly_int +\int_new:N \g_shipout_totalpages_int +\cs_new_eq:NN \c@totalpages \g_shipout_totalpages_int +\cs_new:Npn \thetotalpages { \arabic{totalpages} } +\xdef\@abspage@last{\number\maxdimen} +\g@addto@macro \@kernel@after@enddocument { + \int_compare:nNnT \@abspage@last = \maxdimen + { + \xdef\@abspage@last{ \int_eval:n {\g_shipout_readonly_int + 1} } + } +} +\g@addto@macro \@kernel@after@enddocument@afterlastpage { + \int_compare:nNnF \g_shipout_readonly_int = 0 + { + \if@filesw + \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_lazy_and:nnF + { \hook_if_empty_p:n {shipout/lastpage} } + { \tl_if_empty_p:N \@kernel@after@shipout@lastpage } + { + \tex_shipout:D\vbox to\textheight + { + \hbox:n { \UseHook{shipout/lastpage} + \@kernel@after@shipout@lastpage } + \__shipout_excuse_extra_page: + \null + } + \cs_gset_eq:NN \@extra@page@added \relax + } + } + } +} +\cs_new:Npn \__shipout_excuse_extra_page: { + \vfil + \begin{center} + \bfseries Temporary~ page! + \end{center} + \LaTeX{}~ was~ unable~ to~ guess~ the~ total~ number~ of~ pages~ + correctly.~ ~ As~ there~ was~ some~ unprocessed~ data~ that~ + should~ have~ been~ added~ to~ the~ final~ page~ this~ extra~ + page~ has~ been~ added~ to~ receive~ it. + \par + If~ you~ rerun~ the~ document~ (without~ altering~ it)~ this~ + surplus~ page~ will~ go~ away,~ because~ \LaTeX{}~ now~ knows~ + how~ many~ pages~ to~ expect~ for~ this~ document. + \vfil +} +\def\PreviousTotalPages{0} +\g@addto@macro\@kernel@before@begindocument + {\ifnum\@abspage@last<\maxdimen + \xdef\PreviousTotalPages{\@abspage@last}\fi} +\cs_new_eq:NN \DiscardShipoutBox \shipout_discard: +\DeclareRobustCommand \AtBeginDvi {\__shipout_add_firstpage_material:Nn \AtBeginDvi} +\cs_new_eq:NN \DebugShipoutsOn \shipout_debug_on: +\cs_new_eq:NN \DebugShipoutsOff \shipout_debug_off: +\cs_set_eq:NN \@expl@@@shipout@add@firstpage@material@@Nn + \__shipout_add_firstpage_material:Nn +\cs_set_eq:NN \@expl@@@shipout@add@background@box@@n + \__shipout_add_background_box:n +\cs_set_eq:NN \@expl@@@shipout@add@foreground@box@@n + \__shipout_add_foreground_box:n +\cs_set_eq:NN \@expl@@@shipout@add@background@picture@@n + \__shipout_add_background_picture:n +\cs_set_eq:NN \@expl@@@shipout@add@foreground@picture@@n + \__shipout_add_foreground_picture:n +\ExplSyntaxOff +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\shipout}{The hook management (shipout)}% +\expandafter\let\expandafter\shipout\csname tex_shipout:D\endcsname + +\let \ShipoutBox\@undefined +\let \ReadonlyShipoutCounter \@undefined +\let \c@totalpages \@undefined +\let \thetotalpages \@undefined + +\let \DiscardShipoutBox \@undefined +\let \DebugShipoutsOn \@undefined +\let \DebugShipoutsOff \@undefined + +\DeclareRobustCommand \AtBeginDvi [1]{% + \global \setbox \@begindvibox + \vbox{\unvbox \@begindvibox #1}% +} + +\let \AtBeginShipout \@undefined +\let \AtBeginShipoutNext \@undefined + +\let \AtBeginShipoutFirst \@undefined + +\let \ShipoutBoxHeight \@undefined +\let \ShipoutBoxDepth \@undefined +\let \ShipoutBoxWidth \@undefined + +\let \AtBeginShipoutDiscard \@undefined + +\let \AtBeginShipoutAddToBox \@undefined +\let \AtBeginShipoutAddToBoxForeground \@undefined +\let \AtBeginShipoutUpperLeft \@undefined +\let \AtBeginShipoutUpperLeftForeground \@undefined + + + +\let \AtEndDvi \@undefined + +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\AtEndDvi}{atenddvi emulation}% +\ExplSyntaxOn +\cs_new:Npn \AtEndDvi {\AddToHook{shipout/lastpage}} +\ExplSyntaxOff +\disable@package@load{atenddvi} + {\PackageWarning{atenddvi} + {Functionality of this package is already\MessageBreak + provided by LaTeX.\MessageBreak\MessageBreak + It is there no longer necessary to load it\MessageBreak + and you can safely remove it.\MessageBreak + Found on}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\AtEndDvi}{atenddvi emulation}% +\let \AtEndDvi \@undefined +\EndIncludeInRelease +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% From File: ltoutput.dtx \IncludeInRelease{2015/10/01}% {\bx@ZZ}{Extended float list}% @@ -2891,6 +5494,7 @@ of this package available from CTAN} \IncludeInRelease{2020/10/01}{\@pushfilename}% {Add \@expl@push@filename@@ and \@expl@push@filename@aux@@}% \def\@pushfilename{% + \@expl@@@hook@curr@name@push@@n{}% \@expl@push@filename@@ \xdef\@currnamestack{% {\@currname}% @@ -2913,11 +5517,12 @@ of this package available from CTAN} \IncludeInRelease{2020/10/01}{\@popfilename}% {Add \@expl@pop@filename@@}% -\def\@popfilename{\expandafter\@p@pfilename\@currnamestack\@nil +\def\@popfilename{\@expl@@@hook@curr@name@pop@@ + \expandafter\@p@pfilename\@currnamestack\@nil \@expl@pop@filename@@} \EndIncludeInRelease -\IncludeInRelease{0000/00/00}{\@pushfilename}% +\IncludeInRelease{0000/00/00}{\@popfilename}% {Add \@expl@push@filename@@ and \@expl@push@filename@aux@@}% \def\@popfilename{\expandafter\@p@pfilename\@currnamestack\@nil} \EndIncludeInRelease @@ -3143,39 +5748,79 @@ of this package available from CTAN} \reserved@a} \EndIncludeInRelease \IncludeInRelease{2020/10/01}% - {\@onefilewithoptions}{Unused options issue}% + {\@onefilewithoptions}{Hooks and unused options issue}% \def\@onefilewithoptions#1[#2][#3]#4{% \@pushfilename \xdef\@currname{#1}% \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}% + {\makeatletter + \@reset@ptions + \IfFileExists{\@currname.\@currext}{}% + {\@missing@onefilewithoptions{#2}}% + \ifx\@currname\@empty + \expandafter\@gobble + \else + \@disable@packageload@do{\@currname.\@currext}% + {\@expl@@@filehook@file@push@@ + \set@curr@file{\@currname.\@currext}% + \@filehook@set@CurrentFile + \load@onefile@withoptions{#2}% + \@expl@@@filehook@file@pop@@}% + \expandafter\@firstofone + \fi}% + {\@ifl@ter\@currext{\@currname}{#3}{}% + {\@latex@warning@no@line + {You have requested,\on@line, + version\MessageBreak + `#3' of \@cls@pkg\space \@currname,\MessageBreak + but only version\MessageBreak + `\csname ver@\@currname.\@currext\endcsname'\MessageBreak + is available}}% + \ifx\@currext\@clsextension\let\LoadClass\@twoloadclasserror\fi}% + \@popfilename + \@reset@ptions} +\@onlypreamble\@onefilewithoptions +\let\@unprocessedoptions\@undefined + +\def\@missing@onefilewithoptions#1{% + \@missingfileerror\@currname\@currext + \xdef\@currname{\@missingfile@area\@missingfile@base}% + \global\let\@currext\@missingfile@ext} +\def\load@onefile@withoptions#1{% \let\CurrentOption\@empty \@reset@ptions - \makeatletter \def\reserved@a{% - \@ifl@aded\@currext{#1}% - {\@if@ptions\@currext{#1}{#2}{}% - {\@latex@error - {Option clash for \@cls@pkg\space #1}% - {The package #1 has already been loaded - with options:\MessageBreak - \space\space[\@ptionlist{#1.\@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{#1.\@currext},#2\MessageBreak - to your \noexpand\documentclass declaration may fix this.% - \MessageBreak - Try typing \space <return> \space to proceed.}}}% - {\@pass@ptions\@currext{#2}{#1}% - \global\expandafter - \let\csname ver@\@currname.\@currext\endcsname\@empty - \expandafter\let\csname\@currname.\@currext-h@@k\endcsname\@empty - \InputIfFileExists - {\@currname.\@currext}% - {}% - {\@missingfileerror\@currname\@currext}% + \@pass@ptions\@currext{#1}{\@currname}% + \global\expandafter + \let\csname ver@\@currname.\@currext\endcsname\@empty + \expandafter\let\csname\@currname.\@currext-h@@k\endcsname\@empty + \ifx\@currext\@pkgextension + \UseHook{package/before}% + \UseHook{package/before/\@currname}% + \else + \ifx\@currext\@clsextension + \UseHook{class/before}% + \UseHook{class/before/\@currname}% + \fi + \fi + \InputIfFileExists{\@currname.\@currext}{}{}% \expandafter\let\csname unprocessedoptions-\@currname.\@currext\endcsname \@@unprocessedoptions \csname\@currname.\@currext-h@@k\endcsname @@ -3188,24 +5833,20 @@ of this package available from CTAN} \fi \expandafter\let \csname unprocessedoptions-\@currname.\@currext\endcsname - \@undefined}% - \@ifl@ter\@currext{#1}{#3}{}% - {\@latex@warning@no@line - {You have requested,\on@line, - version\MessageBreak - `#3' of \@cls@pkg\space #1,\MessageBreak - but only version\MessageBreak - `\csname ver@#1.\@currext\endcsname'\MessageBreak - is available}}% - \ifx\@currext\@clsextension\let\LoadClass\@twoloadclasserror\fi - \@popfilename - \@reset@ptions}% + \@undefined + \ifx\@currext\@pkgextension + \UseHook{package/after/\@currname}% + \UseHook{package/after}% + \else + \ifx\@currext\@clsextension + \UseHook{class/after/\@currname}% + \UseHook{class/after}% + \fi + \fi}% \reserved@a} -\@onlypreamble\@onefilewithoptions -\let\@unprocessedoptions\@undefined \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\@onefilewithoptions}{Unused options issue}% + {\@onefilewithoptions}{Hooks and unused options issue}% \def\load@onefilewithoptions#1[#2][#3]#4{% \@pushfilename @@ -3256,6 +5897,152 @@ of this package available from CTAN} \@popfilename \@reset@ptions}% \reserved@a} + +\let \load@onefile@withoptions \@undefined +\let \@missing@onefilewithoptions \@undefined + +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\AtBeginDocument}{Use hook system}% +\DeclareRobustCommand\AtBeginDocument{\AddToHook{begindocument}} +\DeclareRobustCommand\AtEndDocument {\AddToHook{enddocument}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\AtBeginDocument}{Use hook system}% + +\DeclareRobustCommand\AtBeginDocument{\g@addto@macro\@begindocumenthook} +\DeclareRobustCommand\AtEndDocument{\g@addto@macro\@enddocumenthook} + +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\filec@ntents}{Define \q@curr@file directly (gh/220)}% +\def\filecontents{\@tempswatrue\@fileswtrue + \@ifnextchar[\filec@ntents@opt\filec@ntents +} +\@namedef{filecontents*}{\@tempswafalse\@fileswtrue + \@ifnextchar[\filec@ntents@opt\filec@ntents +} +\def\filec@ntents@opt[#1]{% + \edef\@fortmp{\zap@space#1 \@empty}% + \@for\reserved@a:=\@fortmp\do{% + \ifcsname filec@ntents@\reserved@a\endcsname + \csname filec@ntents@\reserved@a\endcsname + \else + \@latex@error{Unknown filecontents option \reserved@a}% + {Valid options are force (or overwrite), nosearch, noheader}% + \fi}% + \filec@ntents +} +\let\filec@ntents@force\@fileswfalse +\let\filec@ntents@overwrite\@fileswfalse % alternative name +\let\filec@ntents@noheader\@tempswafalse +\def\filec@ntents@nosearch{% + \let\filec@ntents@checkdir\@currdir + \def\filec@ntents@where{in current directory}} +\let\filec@ntents@checkdir\@empty +\def\filec@ntents@where{exists on the system} +\begingroup% +\@tempcnta=1 +\loop + \catcode\@tempcnta=12 % + \advance\@tempcnta\@ne % +\ifnum\@tempcnta<32 % +\repeat % +\catcode`\*=11 % +\catcode`\^^M\active% +\catcode`\^^L\active\let^^L\relax% +\catcode`\^^I\active% +\gdef\filec@ntents#1{% + \set@curr@file{\filec@ntents@checkdir#1}% + \edef\q@curr@file{"\@curr@file"}% + \chardef\reserved@c\ifx\directlua\@undefined 15 \else 127 \fi% + \openin\@inputcheck\q@curr@file \space % + \ifeof\@inputcheck% + \@latex@warning@no@line% + {Writing file `\@currdir\@curr@file'}% + \ch@ck7\reserved@c\write\relax% + \immediate\openout\reserved@c\q@curr@file\relax% + \else% + \if@filesw% + \@latex@warning@no@line% + {File `\@curr@file' already \filec@ntents@where.\MessageBreak% + Not generating it from this source}% + \let\write\@gobbletwo% + \let\closeout\@gobble% + \else% + \edef\reserved@a{#1}% + \edef\reserved@a{\detokenize\expandafter{\reserved@a}}% + \edef\reserved@b{\detokenize\expandafter{\jobname}}% + \ifx\reserved@a\reserved@b% + \@fileswtrue% + \else% + \edef\reserved@b{\reserved@b\detokenize{.tex}}% + \ifx\reserved@a\reserved@b + \@fileswtrue% + \fi% + \fi% + \ch@ck7\reserved@c\write\relax% + \if@filesw% % Foul ... trying to overwrite \jobname! + \@latex@error{Trying to overwrite `\jobname.tex'}{You can't % + write to the file you are reading from!\MessageBreak% + Data is written to screen instead.}% + \else% + \@latex@warning@no@line% + {Writing or overwriting file `\@currdir\@curr@file'}% + \immediate\openout\reserved@c\q@curr@file\relax% + \fi% + \fi% + \fi% + \closein\@inputcheck% + \if@tempswa% + \immediate\write\reserved@c{% + \@percentchar\@percentchar\space% + \expandafter\@gobble\string\LaTeX2e file `\@curr@file'^^J% + \@percentchar\@percentchar\space generated by the % + `\@currenvir' \expandafter\@gobblefour\string\newenvironment^^J% + \@percentchar\@percentchar\space from source `\jobname' on % + \number\year/\two@digits\month/\two@digits\day.^^J% + \@percentchar\@percentchar}% + \fi% + \let\do\@makeother\dospecials% + \count@ 128\relax% + \loop% + \catcode\count@ 11\relax% + \advance\count@ \@ne% + \ifnum\count@<\@cclvi% + \repeat% + \edef\E{\@backslashchar end\string{\@currenvir\string}}% + \edef\reserved@b{% + \def\noexpand\reserved@b% + ####1\E####2\E####3\relax}% + \reserved@b{% + \ifx\relax##3\relax% + \immediate\write\reserved@c{##1}% + \else% + \edef^^M{\noexpand\end{\@currenvir}}% + \ifx\relax##1\relax% + \else% + \@latex@warning{Writing text `##1' before % + \string\end{\@currenvir}\MessageBreak as last line of \@curr@file}% + \immediate\write\reserved@c{##1}% + \fi% + \ifx\relax##2\relax% + \else% + \@latex@warning{% + Ignoring text `##2' after \string\end{\@currenvir}}% + \fi% + \fi% + ^^M}% + \catcode`\^^L\active% + \let\L\@undefined% + \def^^L{\expandafter\ifx\csname L\endcsname\relax\fi ^^J^^J}% + \catcode`\^^I\active% + \let\I\@undefined% + \def^^I{\expandafter\ifx\csname I\endcsname\relax\fi\space}% + \catcode`\^^M\active% + \edef^^M##1^^M{% + \noexpand\reserved@b##1\E\E\relax}}% +\endgroup% \EndIncludeInRelease \IncludeInRelease{2019/10/01}% {\filec@ntents}{Spaces in file names + optional arg}% @@ -3977,6 +6764,18 @@ of this package available from CTAN} \let\float@count\@undefined \let\extrafloats\@undefined \EndIncludeInRelease +\IncludeInRelease{2020/10/01} + {\alloc@}{emulate alloc@}% +\def\alloc@#1#2#3#4{\e@alloc#2#3{\count1#1}#4\float@count} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\alloc@}{emulate alloc@}% +\def\alloc@#1#2#3#4#5{\global\advance\count1#1\@ne + \ch@ck#1#4#2% + \allocationnumber\count1#1% + \global#3#5\allocationnumber + \wlog{\string#5=\string#2\the\allocationnumber}} +\EndIncludeInRelease \IncludeInRelease{2015/10/01} {\newinsert}{Extended \newinsert}% \ifx\numexpr\@undefined @@ -4437,75 +7236,6 @@ of this package available from CTAN} \def\mdseries@sf{m} \def\mdseries@tt{m} -\def\expand@font@defaults{% - \edef\rmdef@ult{\rmdefault}% - \edef\sfdef@ult{\sfdefault}% - \edef\ttdef@ult{\ttdefault}% - \series@maybe@drop@one@m\bfdefault\bfdef@ult - \series@maybe@drop@one@m\mddefault\mddef@ult - \@expandfontdefaultshook -} - -\DeclareRobustCommand\bfseries{% - \not@math@alphabet\bfseries\mathbf - \expand@font@defaults - \ifx\bfdefault\bfdefault@previous\else - \expandafter\def\expandafter\bfdefault - \expandafter{\bfdefault\@empty}% - \let\bfseries@previous\bfdefault - \let\bfseries@rm\bfdef@ult - \let\bfseries@sf\bfdef@ult - \let\bfseries@tt\bfdef@ult - \@setbfseriesdefaultshook - \fi - \ifx\f@family\rmdef@ult \fontseries\bfseries@rm - \else\ifx\f@family\sfdef@ult \fontseries\bfseries@sf - \else\ifx\f@family\ttdef@ult \fontseries\bfseries@tt - \else \fontseries\bfdefault - \fi\fi\fi - \selectfont -} - -\DeclareRobustCommand\mdseries{% - \not@math@alphabet\mdseries\relax - \expand@font@defaults - \ifx\mddefault\mddefault@previous\else - \expandafter\def\expandafter\mddefault\expandafter{\mddefault\@empty}% - \let\mdseries@previous\mddefault - \let\mdseries@rm\mddef@ult - \let\mdseries@sf\mddef@ult - \let\mdseries@tt\mddef@ult - \@setmdseriesdefaultshook - \fi - \ifx\f@family\rmdef@ult \fontseries\mdseries@rm - \else\ifx\f@family\sfdef@ult \fontseries\mdseries@sf - \else\ifx\f@family\ttdef@ult \fontseries\mdseries@tt - \else \fontseries\mddefault - \fi\fi\fi - \selectfont -} - -\DeclareRobustCommand\rmfamily{% - \not@math@alphabet\rmfamily\mathrm - \prepare@family@series@update{rm}\rmdefault - \@rmfamilyhook - \selectfont} -\DeclareRobustCommand\sffamily{% - \not@math@alphabet\sffamily\mathsf - \prepare@family@series@update{sf}\sfdefault - \@sffamilyhook - \selectfont} -\DeclareRobustCommand\ttfamily{% - \not@math@alphabet\ttfamily\mathtt - \prepare@family@series@update{tt}\ttdefault - \@ttfamilyhook - \selectfont} -\let\@expandfontdefaultshook\@empty -\let\@setbfseriesdefaultshook\@empty -\let\@setmdseriesdefaultshook\@empty -\let\@rmfamilyhook\@empty -\let\@sffamilyhook\@empty -\let\@ttfamilyhook\@empty \def\@meta@family@list{\@elt{rm}\@elt{sf}\@elt{tt}} \def\prepare@family@series@update#1#2{% \if@forced@series @@ -4557,13 +7287,16 @@ of this package available from CTAN} } \def\init@series@setup{% \ifx\bfseries@rm@kernel\bfseries@rm - \expandafter\in@\expandafter{\rmdefault}{cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}% + \expandafter\in@\expandafter{\rmdefault}% + {cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}% \ifin@ \else \def\bfseries@rm{b}\fi\fi \ifx\bfseries@sf@kernel\bfseries@sf - \expandafter\in@\expandafter{\sfdefault}{cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}% + \expandafter\in@\expandafter{\sfdefault}% + {cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}% \ifin@ \else \def\bfseries@sf{b}\fi\fi \ifx\bfseries@tt@kernel\bfseries@tt - \expandafter\in@\expandafter{\ttdefault}{cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}% + \expandafter\in@\expandafter{\ttdefault}% + {cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}% \ifin@ \else \def\bfseries@tt{b}\fi\fi \reset@font \ifx\seriesdefault\seriesdefault@kernel @@ -4586,9 +7319,154 @@ of this package available from CTAN} \let\mdseries@rm\@undefined \let\mdseries@sf\@undefined \let\mdseries@tt\@undefined -\let\expand@font@defaults\@undefined \expandafter\let\csname ver@mweights.sty\endcsname\@undefined +\let\@meta@family@list\@undefined +\let\prepare@family@series@update\@undefined +\let\update@series@target@value\@undefined + +\let\init@series@setup\relax + +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\bfseries}{Custom series with hooks}% + +\def\expand@font@defaults{% + \edef\rmdef@ult{\rmdefault}% + \edef\sfdef@ult{\sfdefault}% + \edef\ttdef@ult{\ttdefault}% + \series@maybe@drop@one@m\bfdefault\bfdef@ult + \series@maybe@drop@one@m\mddefault\mddef@ult + \UseHook{expand@font@defaults}% +} + +\DeclareRobustCommand\bfseries{% + \not@math@alphabet\bfseries\mathbf + \expand@font@defaults + \ifx\bfdefault\bfdefault@previous\else + \expandafter\def\expandafter\bfdefault + \expandafter{\bfdefault\@empty}% + \let\bfseries@previous\bfdefault + \let\bfseries@rm\bfdef@ult + \let\bfseries@sf\bfdef@ult + \let\bfseries@tt\bfdef@ult + \UseHook{bfseries/defaults}% + \fi + \ifx\f@family\rmdef@ult \fontseries\bfseries@rm + \else\ifx\f@family\sfdef@ult \fontseries\bfseries@sf + \else\ifx\f@family\ttdef@ult \fontseries\bfseries@tt + \else \fontseries\bfdefault + \fi\fi\fi + \UseHook{bfseries}% + \selectfont +} + +\DeclareRobustCommand\mdseries{% + \not@math@alphabet\mdseries\relax + \expand@font@defaults + \ifx\mddefault\mddefault@previous\else + \expandafter\def\expandafter\mddefault\expandafter{\mddefault\@empty}% + \let\mdseries@previous\mddefault + \let\mdseries@rm\mddef@ult + \let\mdseries@sf\mddef@ult + \let\mdseries@tt\mddef@ult + \UseHook{mdseries/defaults}% + \fi + \ifx\f@family\rmdef@ult \fontseries\mdseries@rm + \else\ifx\f@family\sfdef@ult \fontseries\mdseries@sf + \else\ifx\f@family\ttdef@ult \fontseries\mdseries@tt + \else \fontseries\mddefault + \fi\fi\fi + \UseHook{mdseries}% + \selectfont +} + +\DeclareRobustCommand\rmfamily{% + \not@math@alphabet\rmfamily\mathrm + \prepare@family@series@update{rm}\rmdefault + \UseHook{rmfamily}% + \selectfont} +\DeclareRobustCommand\sffamily{% + \not@math@alphabet\sffamily\mathsf + \prepare@family@series@update{sf}\sfdefault + \UseHook{sffamily}% + \selectfont} +\DeclareRobustCommand\ttfamily{% + \not@math@alphabet\ttfamily\mathtt + \prepare@family@series@update{tt}\ttdefault + \UseHook{ttfamily}% + \selectfont} +\NewHook{rmfamily} +\NewHook{sffamily} +\NewHook{ttfamily} +\NewHook{normalfont} +\NewHook{expand@font@defaults} +\NewHook{bfseries} +\NewHook{bfseries/defaults} +\NewHook{mdseries} +\NewHook{mdseries/defaults} +\let\@rmfamilyhook\@empty +\let\@sffamilyhook\@empty +\let\@ttfamilyhook\@empty +\let\@defaulfamilyhook\@empty +\EndIncludeInRelease +\IncludeInRelease{2020/02/02}% + {\bfseries}{Custom series with hooks}% + +\def\expand@font@defaults{% + \edef\rmdef@ult{\rmdefault}% + \edef\sfdef@ult{\sfdefault}% + \edef\ttdef@ult{\ttdefault}% + \edef\bfdef@ult{\bfdefault}% + \edef\mddef@ult{\mddefault}% + \edef\famdef@ult{\familydefault}% +} + +\DeclareRobustCommand\bfseries{% + \not@math@alphabet\bfseries\mathbf + \expand@font@defaults + \ifx\f@family\rmdef@ult \fontseries\bfseries@rm + \else\ifx\f@family\sfdef@ult \fontseries\bfseries@sf + \else\ifx\f@family\ttdef@ult \fontseries\bfseries@tt + \else \fontseries\bfdefault + \fi\fi\fi + \selectfont +} + +\DeclareRobustCommand\mdseries{% + \not@math@alphabet\mdseries\relax + \expand@font@defaults + \ifx\f@family\rmdef@ult \fontseries\mdseries@rm + \else\ifx\f@family\sfdef@ult \fontseries\mdseries@sf + \else\ifx\f@family\ttdef@ult \fontseries\mdseries@tt + \else \fontseries\mddefault + \fi\fi\fi + \selectfont +} + +\DeclareRobustCommand\rmfamily{% + \not@math@alphabet\rmfamily\mathrm + \prepare@family@series@update{rm}\rmdefault + \@rmfamilyhook + \selectfont} +\DeclareRobustCommand\sffamily{% + \not@math@alphabet\sffamily\mathsf + \prepare@family@series@update{sf}\sfdefault + \@sffamilyhook + \selectfont} +\DeclareRobustCommand\ttfamily{% + \not@math@alphabet\ttfamily\mathtt + \prepare@family@series@update{tt}\ttdefault + \@ttfamilyhook + \selectfont} + + +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\bfseries}{Custom series with hooks}% + +\let\expand@font@defaults\@undefined + \DeclareRobustCommand\bfseries {\not@math@alphabet\bfseries\mathbf \fontseries\bfdefault\selectfont} @@ -4605,21 +7483,13 @@ of this package available from CTAN} {\not@math@alphabet\ttfamily\mathtt \fontfamily\ttdefault\selectfont} -\let\@expandfontdefaultshook\@undefined -\let\@setbfseriesdefaultshook\@undefined -\let\@setmdseriesdefaultshook\@undefined \let\@rmfamilyhook\@undefined \let\@sffamilyhook\@undefined \let\@ttfamilyhook\@undefined -\let\@meta@family@list\@undefined -\let\prepare@family@series@update\@undefined -\let\update@series@target@value\@undefined - -\let\init@series@setup\relax \EndIncludeInRelease \IncludeInRelease{2020/10/01}% - {\IfFontSeriesContext}{Font series context}% + {\IfFontSeriesContextTF}{Font series context}% \DeclareRobustCommand\IfFontSeriesContextTF[1]{% \expand@font@defaults \@font@series@contextfalse @@ -4653,7 +7523,7 @@ of this package available from CTAN} \newif\if@font@series@context \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\IfFontSeriesContext}{Font series context}% + {\IfFontSeriesContextTF}{Font series context}% \let\IfFontSeriesContextTF\@undefined \let\test@font@series@context\@undefined @@ -4737,10 +7607,11 @@ of this package available from CTAN} \edef\f@family{\familydefault}% \edef\f@series{\seriesdefault}% \edef\f@shape{\shapedefault}% - \@defaultfamilyhook + \UseHook{normalfont}% + \@defaultfamilyhook % hookname from 2020/02 will vanish \selectfont} \let\reset@font\normalfont -\let\@defaultfamilyhook\@empty +\let\@defaultfamilyhook\@empty %FMi sort out \EndIncludeInRelease \IncludeInRelease{0000/00/00}% {\normalfont}{Add hook to \normalfont}% @@ -4759,7 +7630,7 @@ of this package available from CTAN} %%% From File: fontdef.dtx \IncludeInRelease{2017/01/01}% {\encodingdefault}{TU encoding default}% -\ifx\Umathchar\@undefined +\ifx\Umathcode\@undefined \renewcommand\encodingdefault{OT1} \fontencoding{\encodingdefault} \renewcommand\rmdefault{cmr} @@ -6448,6 +9319,18 @@ of this package available from CTAN} \let\reinstall@nfss@defs\relax \EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\reinstall@nfss@defs}{NFSS series init}% +\g@addto@macro\@kernel@after@begindocument@before + {\reinstall@nfss@defs\init@series@setup} +\EndIncludeInRelease +\IncludeInRelease{2020/02/02}% + {\reinstall@nfss@defs}{NFSS series init}% +\AtBeginDocument{\reinstall@nfss@defs\init@series@setup} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\reinstall@nfss@defs}{NFSS series init}% +\EndIncludeInRelease %%% From File: ltfsstrc.dtx %% Copyright (C) 1989-97 by Frank Mittelbach and Rainer Sch\"opf. %% Copyright (C) 1994-97 by LaTeX3 project. All rights reserved. @@ -6614,6 +9497,7 @@ of this package available from CTAN} %%% From File: ltxref.dtx \IncludeInRelease{2020/10/01}% {\refstepcounter}{Add \@currentcounter}% +\def\@currentcounter{} \def\refstepcounter#1{\stepcounter{#1}% \edef\@currentcounter{#1}% \protected@edef\@currentlabel @@ -6625,6 +9509,7 @@ of this package available from CTAN} \EndIncludeInRelease \IncludeInRelease{2019/10/01}% {\refstepcounter}{Add \labelformat and \Ref}% +\let\@currentcounter\@undefined \def\refstepcounter#1{\stepcounter{#1}% \protected@edef\@currentlabel {\csname p@#1\expandafter\endcsname\csname the#1\endcsname}% @@ -6645,6 +9530,102 @@ of this package available from CTAN} \EndIncludeInRelease %%% From File: ltmiscen.dtx +\IncludeInRelease{2020/10/01}% + {\enddocument}{Use Hooks}% +\def\enddocument{% + \UseOneTimeHook{enddocument}% + \@kernel@after@enddocument + \@checkend{document}% + \clearpage + \UseOneTimeHook{enddocument/afterlastpage}% + \@kernel@after@enddocument@afterlastpage + \begingroup + \if@filesw + \immediate\closeout\@mainaux + \let\@setckpt\@gobbletwo + \let\@newl@bel\@testdef + \@tempswafalse + \makeatletter \@@input\jobname.aux + \fi + \UseHook{enddocument/afteraux}% + \UseOneTimeHook{enddocument/info}% + \endgroup + \UseOneTimeHook{enddocument/end}% + \deadcycles\z@\@@end} +\NewHook{enddocument} +\NewHook{enddocument/afterlastpage} +\NewHook{enddocument/afteraux} +\NewHook{enddocument/info} +\NewHook{enddocument/end} +\AddToHook{enddocument/info}[kernel/filelist]{\@dofilelist} +\AddToHook{enddocument/info}[kernel/warnings]{\@enddocument@kernel@warnings} +\DeclareHookRule{enddocument/info}{kernel/filelist}{before}{kernel/warnings} +\let\@kernel@after@enddocument\@empty +\let\@kernel@after@enddocument@afterlastpage\@empty +\def\@enddocument@kernel@warnings{% + \ifdim \font@submax >\fontsubfuzz\relax + \@font@warning{Size substitutions with differences\MessageBreak + up to \font@submax\space have occurred.\@gobbletwo}% + \fi + \@defaultsubs + \@refundefined + \if@filesw + \ifx \@multiplelabels \relax + \if@tempswa + \@latex@warning@no@line{Label(s) may have changed. + Rerun to get cross-references right}% + \fi + \else + \@multiplelabels + \fi + \ifx \@extra@page@added \relax + \@latex@warning@no@line{Temporary extra page added at the end. + Rerun to get it removed}% + \fi + \fi +} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\enddocument}{Use Hooks}% + +\def\enddocument{% + \let\AtEndDocument\@firstofone + \@enddocumenthook + \@checkend{document}% + \clearpage + \begingroup + \if@filesw + \immediate\closeout\@mainaux + \let\@setckpt\@gobbletwo + \let\@newl@bel\@testdef + \@tempswafalse + \makeatletter \@@input\jobname.aux + \fi + \@dofilelist + \ifdim \font@submax >\fontsubfuzz\relax + \@font@warning{Size substitutions with differences\MessageBreak + up to \font@submax\space have occurred.\@gobbletwo}% + \fi + \@defaultsubs + \@refundefined + \if@filesw + \ifx \@multiplelabels \relax + \if@tempswa + \@latex@warning@no@line{Label(s) may have changed. + Rerun to get cross-references right}% + \fi + \else + \@multiplelabels + \fi + \fi + \endgroup + \deadcycles\z@\@@end} + +\let\@kernel@after@enddocument\@undefined +\let\@kernel@after@enddocument@afterlastpage\@undefined +\let\@enddocument@kernel@warnings\@undefined + +\EndIncludeInRelease \IncludeInRelease{2018/12/01}% {\protected@file@percent}{Mask line endings}% \protected\def\protected@file@percent{} @@ -6685,6 +9666,55 @@ of this package available from CTAN} }% } \EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\begin}{Use hook system}% +\DeclareRobustCommand*\begin[1]{% + \UseHook{env/#1/before}% + \@ifundefined{#1}% + {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}% + {\def\reserved@a{\def\@currenvir{#1}% + \edef\@currenvline{\on@line}% + \@execute@begin@hook{#1}% + \csname #1\endcsname}}% + \@ignorefalse + \begingroup\@endpefalse\reserved@a} +\def\@execute@begin@hook #1{% + \expandafter\ifx\csname #1\endcsname\document + \endgroup + \gdef\@execute@begin@hook##1{\UseHook{env/##1/begin}}% + \@expl@@@initialize@all@@ + \fi + \UseHook{env/#1/begin}% +} +\edef\end + {\unexpanded{% + \romannumeral + \ifx\protect\@typeset@protect + \expandafter %1 + \expandafter %2 + \expandafter %1 + \expandafter %3 expands the \csname inside \end<space> + \expandafter %1 + \expandafter %2 expands \end<space> + \expandafter %1 expands the \else + \z@ + \else + \expandafter\z@\expandafter\protect + \fi + }% + \expandafter\noexpand\csname end \endcsname + } +\@namedef{end }#1{% + \romannumeral + \IfHookEmptyTF{env/#1/end}% + {\expandafter\z@}% + {\z@\UseHook{env/#1/end}}% + \csname end#1\endcsname\@checkend{#1}% + \expandafter\endgroup\if@endpe\@doendpe\fi + \UseHook{env/#1/after}% + \if@ignore\@ignorefalse\ignorespaces\fi +} +\EndIncludeInRelease \IncludeInRelease{2019/10/01}% {\begin}{Making \begin/\end robust}% \DeclareRobustCommand\begin[1]{% @@ -6720,8 +9750,34 @@ of this package available from CTAN} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% {\begin}{Making \begin/\end robust}% -\kernel@make@fragile\begin -\kernel@make@fragile\end +\def\begin#1{% + \@ifundefined{#1}% + {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}% + {\def\reserved@a{\def\@currenvir{#1}% + \edef\@currenvline{\on@line}% + \csname #1\endcsname}}% + \@ignorefalse + \begingroup\@endpefalse\reserved@a} +\def\end#1{% + \csname end#1\endcsname\@checkend{#1}% + \expandafter\endgroup\if@endpe\@doendpe\fi + \if@ignore\@ignorefalse\ignorespaces\fi} + +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\AtBeginEnvironment}{Hooks for environments}% +\newcommand\AtBeginEnvironment[2][.] {\AddToHook{env/#2/begin}[#1]} +\newcommand\AtEndEnvironment[2][.] {\AddToHook{env/#2/end}[#1]} +\newcommand\BeforeBeginEnvironment[2][.]{\AddToHook{env/#2/before}[#1]} +\newcommand\AfterEndEnvironment[2][.] {\AddToHook{env/#2/after}[#1]} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\AtBeginEnvironment}{Hooks for environments}% + +\let\AtBeginEnvironment\@undefined +\let\AtEndEnvironment\@undefined +\let\BeforeBeginEnvironment\@undefined +\let\AfterEndEnvironment\@undefined \EndIncludeInRelease \IncludeInRelease{2020/02/02}% @@ -6937,23 +9993,23 @@ of this package available from CTAN} \long\def\@firstofone#1{#1} \ifx\e@alloc@attribute@count\@undefined \countdef\e@alloc@attribute@count=258 + \e@alloc@attribute@count=\z@ \fi \def\newattribute#1{% \e@alloc\attribute\attributedef \e@alloc@attribute@count\m@ne\e@alloc@top#1% } -\e@alloc@attribute@count=\z@ \def\setattribute#1#2{#1=\numexpr#2\relax} \def\unsetattribute#1{#1=-"7FFFFFFF\relax} \ifx\e@alloc@ccodetable@count\@undefined \countdef\e@alloc@ccodetable@count=259 + \e@alloc@ccodetable@count=\z@ \fi \def\newcatcodetable#1{% \e@alloc\catcodetable\chardef \e@alloc@ccodetable@count\m@ne{"8000}#1% \initcatcodetable\allocationnumber } -\e@alloc@ccodetable@count=\z@ \newcatcodetable\catcodetable@initex \newcatcodetable\catcodetable@string \begingroup @@ -7036,31 +10092,32 @@ of this package available from CTAN} \endgroup \ifx\e@alloc@luafunction@count\@undefined \countdef\e@alloc@luafunction@count=260 + \e@alloc@luafunction@count=\z@ \fi \def\newluafunction{% \e@alloc\luafunction\e@alloc@chardef \e@alloc@luafunction@count\m@ne\e@alloc@top } -\e@alloc@luafunction@count=\z@ \ifx\e@alloc@whatsit@count\@undefined \countdef\e@alloc@whatsit@count=261 + \e@alloc@whatsit@count=\z@ \fi \def\newwhatsit#1{% \e@alloc\whatsit\e@alloc@chardef \e@alloc@whatsit@count\m@ne\e@alloc@top#1% } -\e@alloc@whatsit@count=\z@ \ifx\e@alloc@bytecode@count\@undefined \countdef\e@alloc@bytecode@count=262 + \e@alloc@bytecode@count=\z@ \fi \def\newluabytecode#1{% \e@alloc\luabytecode\e@alloc@chardef \e@alloc@bytecode@count\m@ne\e@alloc@top#1% } -\e@alloc@bytecode@count=\z@ \ifx\e@alloc@luachunk@count\@undefined \countdef\e@alloc@luachunk@count=263 + \e@alloc@luachunk@count=\z@ \fi \def\newluachunkname#1{% \e@alloc\luachunk\e@alloc@chardef @@ -7068,7 +10125,12 @@ of this package available from CTAN} {\escapechar\m@ne \directlua{lua.name[\the\allocationnumber]="\string#1"}}% } -\e@alloc@luachunk@count=\z@ +\def\now@and@everyjob#1{% + \everyjob\expandafter{\the\everyjob + #1% + }% + #1% +} \begingroup \attributedef\attributezero=0 % \chardef \charzero =0 % @@ -7194,20 +10256,24 @@ of this package available from CTAN} }% \input{expl3.ltx} \EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@expl@tl@trim@spaces@apply@@nN} - {l3 macro for use in include}% \ExplSyntaxOn -\cs_new_eq:NN \@expl@tl@trim@spaces@apply@@nN \tl_trim_spaces_apply:nN -\ExplSyntaxOff -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@expl@tl@trim@spaces@apply@@nN} - {l3 macro for use in include}% - -\let\@expl@tl@trim@spaces@apply@@nN\@undefined - +\IncludeInRelease{2020/10/01}{expl3~2020-10-01}% + {expl3~macros~added~for~the~2020-10-01~release}% +\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_gset_eq:NN \@expl@cs@replacement@spec@@N \cs_replacement_spec:N +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}{expl3~2020-10-01}% + {expl3~macros~added~for~the~2020-10-01~release}% +\cs_undefine:N \@expl@cs@to@str@@N +\cs_undefine:N \@expl@str@if@eq@@nnTF +\cs_undefine:N \@expl@cs@prefix@spec@@N +\cs_undefine:N \@expl@cs@argument@spec@@N +\cs_undefine:N \@expl@cs@replacement@spec@@N \EndIncludeInRelease +\ExplSyntaxOff %%% From File: ltfinal.dtx \IncludeInRelease{2015/01/01}% {\newmarks}{Extended Allocation}% @@ -7343,7 +10409,7 @@ of this package available from CTAN} \IncludeInRelease{2018/04/01}% {\UTFviii@invalid}{UTF-8 default}% \ifnum0% - \ifx\Umathchar\@undefined\else 1\fi + \ifx\Umathcode\@undefined\else 1\fi \ifx\mubyte\@undefined\else 1\fi \ifx\charsubdef\@undefined\else 1\fi =\z@ @@ -7467,211 +10533,6 @@ of this package available from CTAN} \let\DeclareFontEncoding@saved\@undefined \let\inputencodingname\@undefined \EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\ShowHook}{The hook management}% -\input lthooks.ltx -\input ltshipout.ltx -\input ltfilehook.ltx -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\ShowHook}{The hook management}% - - -\DeclareRobustCommand*\begin[1]{% - \@ifundefined{#1}% - {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}% - {\def\reserved@a{\def\@currenvir{#1}% - \edef\@currenvline{\on@line}% - \csname #1\endcsname}}% - \@ignorefalse - \begingroup\@endpefalse\reserved@a} - -\@namedef{end }#1{% - \csname end#1\endcsname\@checkend{#1}% - \expandafter\endgroup\if@endpe\@doendpe\fi - \if@ignore\@ignorefalse\ignorespaces\fi} - -\DeclareDocumentCommand \NewHook {m}{} -\DeclareDocumentCommand \NewReversedHook {m}{} -\DeclareDocumentCommand \NewMirroredHookPair {mm}{} - -\DeclareDocumentCommand \AddToHookNext {m+m}{} -\DeclareDocumentCommand \RemoveFromHook {mo}{} -\def \UseHook #1{} -\def \UseOneTimeHook #1{} -\def \ShowHook #1{} -\let \DebugHookOn \@empty -\let \DebugHookOff\@empty - -\DeclareDocumentCommand \DeclareHookRule {mmmm}{} -\DeclareDocumentCommand \DeclareDefaultHookRule {mmm}{} -\DeclareDocumentCommand \ClearHookRule {mmm}{} -\DeclareExpandableDocumentCommand \IfHookExistTF {mmm}{#3} -\DeclareExpandableDocumentCommand \IfHookEmptyTF {mmm}{#2} - -\DeclareRobustCommand\AtBeginDocument{\g@addto@macro\@begindocumenthook} -\DeclareRobustCommand\AtEndDocument{\g@addto@macro\@enddocumenthook} - -\let\AtBeginEnvironment \@undefined -\let\AtEndEnvironment \@undefined -\let\BeforeBeginEnvironment \@undefined -\let\AfterEndEnvironment \@undefined - -\def\@pushfilename{% - \@expl@push@filename@@ - \xdef\@currnamestack{% - {\@currname}% - {\@currext}% - {\the\catcode`\@}% - \@currnamestack}% - \@expl@push@filename@aux@@} -\def\@popfilename{\expandafter\@p@pfilename\@currnamestack\@nil - \@expl@pop@filename@@} - - -% next goes away again when etoolbox is updated ... -\expandafter\let\csname ver@etoolbox.sty\endcsname\@undefined - -\def\document{\endgroup - \@expl@sys@load@backend@@ - \ifx\@unusedoptionlist\@empty\else - \@latex@warning@no@line{Unused global option(s):^^J% - \@spaces[\@unusedoptionlist]}% - \fi - \@colht\textheight - \@colroom\textheight \vsize\textheight - \columnwidth\textwidth - \@clubpenalty\clubpenalty - \if@twocolumn - \advance\columnwidth -\columnsep - \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue - \fi - \hsize\columnwidth \linewidth\hsize - \begingroup\@floatplacement\@dblfloatplacement - \makeatletter\let\@writefile\@gobbletwo - \global \let \@multiplelabels \relax - \@input{\jobname.aux}% - \endgroup - \if@filesw - \immediate\openout\@mainaux\jobname.aux - \immediate\write\@mainaux{\relax}% - \fi - \process@table - \let\glb@currsize\@empty % Force math initialization. - \normalsize - \everypar{}% - \ifx\normalsfcodes\@empty - \ifnum\sfcode`\.=\@m - \let\normalsfcodes\frenchspacing - \else - \let\normalsfcodes\nonfrenchspacing - \fi - \fi - \ifx\document@default@language\m@ne - \chardef\document@default@language\language - \fi - \@noskipsecfalse - \let \@refundefined \relax - \let\AtBeginDocument\@firstofone - \@begindocumenthook - \ifdim\topskip<1sp\global\topskip 1sp\relax\fi - \global\@maxdepth\maxdepth - \global\let\@begindocumenthook\@undefined - \ifx\@listfiles\@undefined - \global\let\@filelist\relax - \global\let\@addtofilelist\@gobble - \fi - \gdef\do##1{\global\let ##1\@notprerr}% - \@preamblecmds - \global\let \@nodocument \relax - \global\let\do\noexpand - \ignorespaces} - -\def\enddocument{% - \let\AtEndDocument\@firstofone - \@enddocumenthook - \@checkend{document}% - \clearpage - \begingroup - \if@filesw - \immediate\closeout\@mainaux - \let\@setckpt\@gobbletwo - \let\@newl@bel\@testdef - \@tempswafalse - \makeatletter \@@input\jobname.aux - \fi - \@dofilelist - \ifdim \font@submax >\fontsubfuzz\relax - \@font@warning{Size substitutions with differences\MessageBreak - up to \font@submax\space have occurred.\@gobbletwo}% - \fi - \@defaultsubs - \@refundefined - \if@filesw - \ifx \@multiplelabels \relax - \if@tempswa - \@latex@warning@no@line{Label(s) may have changed. - Rerun to get cross-references right}% - \fi - \else - \@multiplelabels - \fi - \fi - \endgroup - \deadcycles\z@\@@end} - -\expandafter\let\csname ver@atveryend.sty\endcsname\@undefined -\let\AfterLastShipout \@undefined -\let\AtVeryEndDocument \@undefined -\let\AtEndAfterFileList \@undefined -\let\AtVeryVeryEnd \@undefined -\let\BeforeClearDocument \@undefined - - -\expandafter\let\expandafter\shipout\csname tex_shipout:D\endcsname - -\let \ShipoutBox\@undefined -\let \ReadonlyShipoutCounter \@undefined -\let \c@totalpages \@undefined -\let \thetotalpages \@undefined - -\let \DiscardShipoutBox \@undefined -\let \DebugShipoutOn \@undefined -\let \DebugShipoutOff \@undefined - -\DeclareRobustCommand \AtBeginDvi [1]{% - \global \setbox \@begindvibox - \vbox{\unvbox \@begindvibox #1}% -} - -\let \AtBeginShipout \@undefined -\let \AtBeginShipoutNext \@undefined - -\let \AtBeginShipoutFirst \@undefined - -\let \ShipoutBoxHeight \@undefined -\let \ShipoutBoxDepth \@undefined -\let \ShipoutBoxWidth \@undefined - -\let \AtBeginShipoutDiscard \@undefined - -\let \AtBeginShipoutAddToBox \@undefined -\let \AtBeginShipoutAddToBoxForeground \@undefined -\let \AtBeginShipoutUpperLeft \@undefined -\let \AtBeginShipoutUpperLeftForeground \@undefined - -\expandafter\let\csname ver@atbegshi.sty\endcsname \@undefined - -\let \EveryShipout \@undefined -\let \AtNextShipout \@undefined -\expandafter \let \csname ver@everyshi.sty\endcsname \@undefined - -\let \AtEndDvi \@undefined -\expandafter\let \csname ver@atenddvi.sty\endcsname \@undefined - -\AtBeginDocument{\reinstall@nfss@defs\init@series@setup} - -\EndIncludeInRelease \endinput %% %% End of file `latexrelease.sty'. |