From 79249345968fdf93852a9d6288e11ed512f00847 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 4 May 2021 22:31:00 +0000 Subject: latex-dev (5may21) git-svn-id: svn://tug.org/texlive/trunk@59080 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/latex-dev/base/atbegshi-ltx.sty | 2 +- .../tex/latex-dev/base/atveryend-ltx.sty | 4 +- Master/texmf-dist/tex/latex-dev/base/fontenc.sty | 2 +- Master/texmf-dist/tex/latex-dev/base/latex.ltx | 935 +++++++++--- .../texmf-dist/tex/latex-dev/base/latexrelease.sty | 1544 ++++++++++++++++---- Master/texmf-dist/tex/latex-dev/base/letter.cls | 2 +- Master/texmf-dist/tex/latex-dev/base/ltluatex.lua | 1 + Master/texmf-dist/tex/latex-dev/base/ltluatex.tex | 2 +- Master/texmf-dist/tex/latex-dev/base/ltpara.ltx | 171 --- Master/texmf-dist/tex/latex-dev/base/omlenc.def | 2 +- Master/texmf-dist/tex/latex-dev/base/omsenc.def | 2 +- Master/texmf-dist/tex/latex-dev/base/ot1enc.def | 2 +- Master/texmf-dist/tex/latex-dev/base/ot4enc.def | 2 +- .../tex/latex-dev/base/structuredlog.sty | 4 +- Master/texmf-dist/tex/latex-dev/base/t1enc.def | 2 +- .../tex/latex-dev/base/textcomp-2018-08-11.sty | 1 - Master/texmf-dist/tex/latex-dev/base/textcomp.sty | 1 - Master/texmf-dist/tex/latex-dev/base/tracefnt.sty | 5 +- Master/texmf-dist/tex/latex-dev/base/tuenc.def | 8 +- Master/texmf-dist/tex/latex-dev/graphics/color.sty | 4 +- .../texmf-dist/tex/latex-dev/graphics/dvipdf.def | 4 +- .../texmf-dist/tex/latex-dev/graphics/dvipsnam.def | 4 +- .../texmf-dist/tex/latex-dev/graphics/dvipsone.def | 4 +- .../texmf-dist/tex/latex-dev/graphics/dviwin.def | 4 +- Master/texmf-dist/tex/latex-dev/graphics/emtex.def | 4 +- .../texmf-dist/tex/latex-dev/graphics/epsfig.sty | 4 +- .../tex/latex-dev/graphics/graphics-2017-06-25.sty | 2 +- .../texmf-dist/tex/latex-dev/graphics/graphics.sty | 12 +- .../texmf-dist/tex/latex-dev/graphics/graphicx.sty | 8 +- .../texmf-dist/tex/latex-dev/graphics/keyval.sty | 4 +- .../texmf-dist/tex/latex-dev/graphics/lscape.sty | 4 +- .../texmf-dist/tex/latex-dev/graphics/pctex32.def | 4 +- .../texmf-dist/tex/latex-dev/graphics/pctexhp.def | 4 +- .../texmf-dist/tex/latex-dev/graphics/pctexps.def | 4 +- .../texmf-dist/tex/latex-dev/graphics/pctexwin.def | 4 +- .../texmf-dist/tex/latex-dev/graphics/rotating.sty | 8 +- .../texmf-dist/tex/latex-dev/graphics/tcidvi.def | 4 +- Master/texmf-dist/tex/latex-dev/graphics/trig.sty | 6 +- .../texmf-dist/tex/latex-dev/graphics/truetex.def | 4 +- Master/texmf-dist/tex/latex-dev/tools/array.sty | 4 +- Master/texmf-dist/tex/latex-dev/tools/bm.sty | 35 +- Master/texmf-dist/tex/latex-dev/tools/layout.sty | 10 +- .../texmf-dist/tex/latex-dev/tools/longtable.sty | 20 +- Master/texmf-dist/tex/latex-dev/tools/trace.sty | 23 +- 44 files changed, 2200 insertions(+), 680 deletions(-) delete mode 100644 Master/texmf-dist/tex/latex-dev/base/ltpara.ltx (limited to 'Master/texmf-dist/tex') diff --git a/Master/texmf-dist/tex/latex-dev/base/atbegshi-ltx.sty b/Master/texmf-dist/tex/latex-dev/base/atbegshi-ltx.sty index ae05a7a297e..672479a434c 100644 --- a/Master/texmf-dist/tex/latex-dev/base/atbegshi-ltx.sty +++ b/Master/texmf-dist/tex/latex-dev/base/atbegshi-ltx.sty @@ -47,7 +47,7 @@ %% %%% From File: ltshipout.dtx \providecommand\ltshipoutversion{v1.0i} -\providecommand\ltshipoutdate{2021/01/25} +\providecommand\ltshipoutdate{2021/03/17} \ProvidesPackage{atbegshi-ltx} [2021/01/10 v1.0c Emulation of the original atbegshi^^Jpackage with kernel methods] diff --git a/Master/texmf-dist/tex/latex-dev/base/atveryend-ltx.sty b/Master/texmf-dist/tex/latex-dev/base/atveryend-ltx.sty index 543e9332dc5..663b13db340 100644 --- a/Master/texmf-dist/tex/latex-dev/base/atveryend-ltx.sty +++ b/Master/texmf-dist/tex/latex-dev/base/atveryend-ltx.sty @@ -42,8 +42,8 @@ %% and covered by LPPL is defined by the unpacking scripts (with %% extension .ins) which are part of the distribution. %%% From File: ltfilehook.dtx -\providecommand\ltfilehookversion{v1.0g} -\providecommand\ltfilehookdate{2021/02/08} +\providecommand\ltfilehookversion{v1.0j} +\providecommand\ltfilehookdate{2021/04/29} \ProvidesPackage{atveryend-ltx} [2020/08/19 v1.0a Emulation of the original atvery package^^Jwith kernel methods] diff --git a/Master/texmf-dist/tex/latex-dev/base/fontenc.sty b/Master/texmf-dist/tex/latex-dev/base/fontenc.sty index 0bf32c52c98..ecc422cfe8a 100644 --- a/Master/texmf-dist/tex/latex-dev/base/fontenc.sty +++ b/Master/texmf-dist/tex/latex-dev/base/fontenc.sty @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. %%% From File: ltoutenc.dtx \ProvidesPackage{fontenc} - [2021/02/19 v2.0u + [2021/04/29 v2.0v Standard LaTeX package] \def\update@uclc@with@cyrillic{% \expandafter\def\expandafter\@uclclist\expandafter diff --git a/Master/texmf-dist/tex/latex-dev/base/latex.ltx b/Master/texmf-dist/tex/latex-dev/base/latex.ltx index 2d22e178de4..942de9c0a35 100644 --- a/Master/texmf-dist/tex/latex-dev/base/latex.ltx +++ b/Master/texmf-dist/tex/latex-dev/base/latex.ltx @@ -12,10 +12,12 @@ %% ltdefns.dtx (with options: `2ekernel') %% ltcmd.dtx (with options: `2ekernel') %% lthooks.dtx (with options: `2ekernel') +%% ltcmdhooks.dtx (with options: `2ekernel') %% ltalloc.dtx (with options: `2ekernel') %% ltcntrl.dtx (with options: `2ekernel') %% lterror.dtx (with options: `2ekernel') %% ltpar.dtx (with options: `2ekernel') +%% ltpara.dtx (with options: `2ekernel') %% ltspace.dtx (with options: `2ekernel') %% ltlogos.dtx (with options: `2ekernel') %% ltfiles.dtx (with options: `2ekernel') @@ -484,6 +486,8 @@ \errmessage{No room for a new #3}% \fi} \def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}} +\newread\@inputcheck +\newwrite\@unused \newdimen\maxdimen \maxdimen=16383.99999pt % the largest legal \newskip\hideskip \hideskip=-1000pt plus 1fill % negative but can grow \newdimen\p@ \p@=1pt % this saves macro space and time @@ -509,6 +513,12 @@ \finalhyphendemerits=5000 \adjdemerits=10000 \tracinglostchars=1 +\ifx\directlua\@undefined + % \tracingstacklevels=0 % added in 2021 +\else + \newcount\tracingstacklevels + % Code for \tracingstacklevels defined in ltfinal.dtx +\fi \uchyph=1 \defaulthyphenchar=`\- \defaultskewchar=-1 @@ -633,54 +643,25 @@ \gdef\loggingoutput{\tracingoutput\@ne \showboxbreadth\maxdimen\showboxdepth\maxdimen\errorstopmode} \gdef\showoutput{\loggingoutput\showoverfull} -\ifx\tracingscantokens\@undefined -\gdef\loggingall{% - \tracingstats\tw@ - \tracingpages\@ne - \tracinglostchars\@ne - \tracingparagraphs\@ne - \errorcontextlines\maxdimen - \loggingoutput - \tracingmacros\tw@ - \tracingcommands\tw@ - \tracingrestores\@ne - }% -\else -\gdef\loggingall{% +\edef\loggingall{% \tracingstats\tw@ \tracingpages\@ne - \tracinglostchars\tw@ + \tracinglostchars\thr@@ \tracingparagraphs\@ne \tracinggroups\@ne \tracingifs\@ne \tracingscantokens\@ne \tracingnesting\@ne \errorcontextlines\maxdimen - \loggingoutput + \ifdefined\tracingstacklevels \tracingstacklevels\maxdimen \fi + \noexpand \loggingoutput \tracingmacros\tw@ \tracingcommands\thr@@ \tracingrestores\@ne \tracingassigns\@ne }% -\fi -\gdef\tracingall{\showoverfull\loggingall} -\ifx\tracingscantokens\@undefined -\def\tracingnone{% - \tracingonline\z@ - \tracingcommands\z@ - \showboxdepth\m@ne - \showboxbreadth\m@ne - \tracingoutput\z@ - \errorcontextlines\m@ne - \tracingrestores\z@ - \tracingparagraphs\z@ - \tracingmacros\z@ - \tracinglostchars\@ne - \tracingpages\z@ - \tracingstats\z@ -}% -\else -\def\tracingnone{% +\def\tracingall{\showoverfull\loggingall} +\edef\tracingnone{% \tracingassigns\z@ \tracingrestores\z@ \tracingonline\z@ @@ -689,6 +670,7 @@ \showboxbreadth\m@ne \tracingoutput\z@ \errorcontextlines\m@ne + \ifdefined\tracingstacklevels \tracingstacklevels\z@ \fi \tracingnesting\z@ \tracingscantokens\z@ \tracingifs\z@ @@ -699,7 +681,6 @@ \tracingpages\z@ \tracingstats\z@ }% -\fi \def\hideoutput{% \tracingoutput\z@ \showboxbreadth\m@ne @@ -710,8 +691,8 @@ %%% From File: ltvers.dtx \def\fmtname{LaTeX2e} \edef\fmtversion - {2021-05-01} -\def\patch@level{-2} + {2021-06-01} +\def\patch@level{-3} \edef\development@branch@name{develop \the\year-\the\month-\the\day} \iffalse \def\reserved@a#1/#2/#3\@nil{% @@ -775,17 +756,37 @@ {There is an \string\EndIncludeRelease\space missing}% \@includeinreleasefalse \fi - \kernel@ifnextchar[% - {\@IncludeInRelease{#1}} - {\@IncludeInRelease{#1}[#1]}} + \ifnum0% + \ifx\new@moduledate\@empty\else 1\fi + \ifnum \expandafter\@parse@version#1//00\@nil=0 1\fi + =11 + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi + {\finish@module@release{#1}}% + {\kernel@ifnextchar[% + {\@IncludeInRelease{#1}} + {\@IncludeInRelease{#1}[#1]}}} +\def\finish@module@release#1#2#3{% + \toks@{[#1] #3}% + \ifnum\expandafter\@parse@version\new@moduledate//00\@nil + >\expandafter\@parse@version\fmtversion//00\@nil + \GenericInfo{}{Applying: \the\toks@}% + \else + \GenericInfo{}{Skipping: \the\toks@}% + \expandafter\gobble@finish@module@release + \fi} +\long\def\gobble@finish@module@release#1\EndModuleRelease{% + \EndModuleRelease} \def\@IncludeInRelease#1[#2]{\@IncludeInRele@se{#2}} \def\@IncludeInRele@se#1#2#3{% \toks@{[#1] #3}% \expandafter\ifx\csname\string#2+\@currname+IIR\endcsname\relax \ifnum\expandafter\@parse@version#1//00\@nil - >\expandafter\@parse@version\fmtversion//00\@nil + >\expandafter\@parse@version\fmtversion//00\@nil \GenericInfo{}{Skipping: \the\toks@}% - \expandafter\expandafter\expandafter\@gobble@IncludeInRelease + \expandafter\expandafter\expandafter\@gobble@IncludeInRelease \else \GenericInfo{}{Applying: \the\toks@}% \@includeinreleasetrue @@ -801,6 +802,9 @@ \@includeinreleasefalse \else \PackageError{latexrelease}{mis-matched EndIncludeInRelease}{}% +\fi +\if@skipping@module + \expandafter\new@module@skip \fi} \long\def\@gobble@IncludeInRelease#1\EndIncludeInRelease{% \@includeinreleasefalse @@ -810,6 +814,47 @@ #2#3\@end@check@IncludeInRelease{% \ifx\@check@IncludeInRelease#2\else \PackageError{latexrelease}{skipped IncludeInRelease for tag \string#2}{}% + \fi + \if@skipping@module + \expandafter\new@module@skip + \fi} +\let\if@skipping@module\iffalse +\def\@skipping@moduletrue{\let\if@skipping@module\iftrue} +\def\@skipping@modulefalse{\let\if@skipping@module\iffalse} +\let\new@modulename\@empty +\let\new@moduledate\@empty +\def\NewModuleRelease#1#2#3{% + \ifx\new@modulename\@empty \else + \@latex@error{Nested \noexpand\NewModuleRelease forbidden.}\@ehd \fi + \edef\new@moduledate{#1}% + \edef\new@modulename{#2}% + \GenericInfo{}{BEGIN module: \new@modulename\space (\new@moduledate)}% + \GenericInfo{}{ \@spaces\@spaces\@spaces\space#3\@gobble}% + \ifnum\sourceLaTeXdate<% + \expandafter\@parse@version\new@moduledate//00\@nil\relax + \ifnum\expandafter\@parse@version\fmtversion//00\@nil<% + \expandafter\@parse@version\new@moduledate//00\@nil\relax + \GenericInfo{}{Skipping module \new@modulename}% + \expandafter\expandafter + \expandafter\gobble@finish@module@release + \else + \GenericInfo{}{Applying module \new@modulename} + \@skipping@modulefalse + \fi + \else + \GenericInfo{}{Skipping module \new@modulename} + \@skipping@moduletrue + \expandafter\new@module@skip + \fi} +\long\def\new@module@skip#1\IncludeInRelease{\IncludeInRelease} +\def\EndModuleRelease{% + \ifx\new@modulename\@empty + \@latex@error{Extra \string\EndModuleRelease.}\@eha + \else + \GenericInfo{}{END module: \new@modulename\space (\new@moduledate)}% + \let\new@modulename\@empty + \let\new@moduledate\@empty + \@skipping@modulefalse \fi} %%% From File: ltluatex.dtx \ifx\directlua\@undefined\else @@ -991,8 +1036,12 @@ } \fi %%% From File: ltexpl.dtx -\let\@kernel@after@enddocument\@empty -\let\@kernel@after@enddocument@afterlastpage\@empty +\ifx\@kernel@after@enddocument\@undefined + \let \@kernel@after@enddocument \@empty + \let \@kernel@after@enddocument@afterlastpage \@empty + \let \@kernel@before@begindocument \@empty + \let \@kernel@after@begindocument \@empty +\fi \def\reserved@a#1{\ifdefined#1\else\def#1{}\fi} \reserved@a\@expl@sys@load@backend@@ \reserved@a\@expl@push@filename@@ @@ -1623,8 +1672,8 @@ \xdef#1{\the\toks@}% \endgroup} %%% From File: ltcmd.dtx -\def\ltcmdversion{v1.0a} -\def\ltcmddate{2021/01/21} +\def\ltcmdversion{v1.0d} +\def\ltcmddate{2021-04-19} \message{document commands,} \ExplSyntaxOn \tl_new:N \l__cmd_arg_spec_tl @@ -3330,7 +3379,7 @@ } \cs_new_protected:Npn \__cmd_get_arg_spec:NTF #1#2#3 { - \__cmd_cmd_if_xparse:NTF #1 + \__kernel_cmd_if_xparse:NTF #1 { \tl_set:Nx \ArgumentSpecification { \tl_item:Nn #1 { 2 } } #2 @@ -3430,7 +3479,7 @@ #1 {#2} {#4} \__cmd_tl_mapthread_loop:w #1#3 \q_mark } -\cs_new_protected:Npn \__cmd_cmd_if_xparse:NTF #1 +\cs_new_protected:Npn \__kernel_cmd_if_xparse:NTF #1 { \exp_args:Nf \str_case_e:nnTF { @@ -3883,8 +3932,9 @@ \cs_new_eq:NN \ShowDocumentEnvironmentArgSpec \__cmd_show_arg_spec:n \ExplSyntaxOff %%% From File: lthooks.dtx -\def\lthooksversion{v1.0h} -\def\lthooksdate{2021/01/15} +\def\lthooksversion{v1.0m} +\def\lthooksdate{2021/04/29} + \ExplSyntaxOn \bool_new:N \g__hook_debug_bool \cs_new_eq:NN \__hook_debug:n \use_none:n @@ -3949,24 +3999,34 @@ \cs_new_protected:Npn \__hook_tl_gclear:N #1 { \__hook_tl_gset_eq:NN #1 \c_empty_tl } \cs_generate_variant:Nn \__hook_tl_gclear:N { c } + + \cs_new_protected:Npn \hook_new:n #1 { \__hook_normalize_hook_args:Nn \__hook_new:n {#1} } \cs_new_protected:Npn \__hook_new:n #1 { - \hook_if_exist:nTF {#1} - { \msg_error:nnn { hooks } { exists } {#1} } + \__hook_if_declared:nTF {#1} + { \__kernel_msg_error:nnn { hooks } { exists } {#1} } + { + \tl_new:c { g__hook_#1_declared_tl } + \__hook_make_usable:n {#1} + } + } +\cs_new_protected:Npn \__hook_make_usable:n #1 + { + \tl_if_exist:cF { __hook~#1 } { \seq_gput_right:Nn \g__hook_all_seq {#1} \tl_new:c { __hook~#1 } - \__hook_declare:n {#1} - \clist_new:c {g__hook_#1_labels_clist} + \__hook_init_structure: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 +\cs_new_protected:Npn \__hook_init_structure:n #1 { - \__hook_if_exist:nF {#1} + \__hook_if_structure_exist:nF {#1} { \prop_new:c { g__hook_#1_code_prop } \tl_new:c { __hook_toplevel~#1 } @@ -3994,6 +4054,44 @@ } } } +\cs_new_protected:Npn \hook_disable:n #1 + { \__hook_normalize_hook_args:Nn \__hook_disable:n {#1} } +\cs_new_protected:Npn \__hook_disable:n #1 + { + \tl_gclear_new:c { g__hook_#1_declared_tl } + \cs_undefine:c { __hook~#1 } + } +\prg_new_conditional:Npnn \__hook_if_disabled:n #1 { p, T, F, TF } + { + \bool_lazy_and:nnTF + { \tl_if_exist_p:c { g__hook_#1_declared_tl } } + { ! \tl_if_exist_p:c { __hook~#1 } } + { \prg_return_true: } + { \prg_return_false: } + } +\cs_new_protected:Npn \hook_provide:n #1 + { \__hook_normalize_hook_args:Nn \__hook_provide:nn {#1} { } } +\cs_new_protected:Npn \hook_provide_reversed:n #1 + { \__hook_normalize_hook_args:Nn \__hook_provide:nn {#1} { - } } +\cs_new_protected:Npn \__hook_provide:nn #1 #2 + { + \__hook_if_disabled:nTF {#1} + { \__kernel_msg_warning:nnn { hooks } { provide-disabled } {#1} } + { + \__hook_if_declared:nTF {#1} + { + \str_if_eq:eeF { \tl_use:c { g__hook_#1_reversed_tl } } {#2} + { \__kernel_msg_error:nnn { hooks } { provide-error } {#1} } + } + { + \tl_new:c { g__hook_#1_declared_tl } + \__hook_make_usable:n {#1} + \tl_gset:cn { g__hook_#1_reversed_tl } {#2} + } + } + } +\cs_new_protected:Npn \hook_provide_pair:nn #1#2 + { \hook_provide:n {#1} \hook_provide_reversed:n {#2} } \cs_new:Npn \__hook_parse_label_default:n #1 { \tl_if_novalue:nTF {#1} @@ -4004,7 +4102,7 @@ { \tl_if_empty:nTF {#1} { - \msg_expandable_error:nn { hooks } { empty-label } + \__kernel_msg_expandable_error:nn { hooks } { empty-label } \__hook_currname_or_default: } { @@ -4032,7 +4130,7 @@ { \tl_if_empty:NTF \@currname { - \msg_expandable_error:nnn { hooks } { should-not-happen } + \__kernel_msg_expandable_error:nnn { hooks } { should-not-happen } { Empty~default~label. } \__hook_make_name:n { label-missing } } @@ -4089,12 +4187,16 @@ \__hook_if_marked_removal:nnTF {#1} {#2} { \__hook_unmark_removal:nn {#1} {#2} } { - \hook_if_exist:nTF {#1} + \__hook_if_usable: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} } + { + \__hook_if_disabled:nTF {#1} + { \__kernel_msg_error:nnn { hooks } { hook-disabled } {#1} } + { \__hook_try_declaring_generic_hook:nnn {#1} {#2} {#3} } + } } } } @@ -4102,17 +4204,17 @@ \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_if_usable:nF {#1} { undeclared~ } hook~ #1~ (#2) \on@line\space <-~ \tl_to_str:n{#3}} } \str_if_eq:nnTF {#2} { top-level } { \str_if_eq:eeTF { top-level } { \__hook_currname_or_default: } { - \__hook_declare:n {#1} + \__hook_init_structure:n {#1} \__hook_tl_gput_right:cn { __hook_toplevel~#1 } {#3} } - { \msg_error:nnn { hooks } { misused-top-level } {#1} } + { \__kernel_msg_error:nnn { hooks } { misused-top-level } {#1} } } { \prop_get:cnNTF { g__hook_#1_code_prop } {#2} \l__hook_return_tl @@ -4125,7 +4227,7 @@ } \cs_new_protected:Npn \__hook_gput_undeclared_hook:nnn #1 #2 #3 { - \__hook_declare:n {#1} + \__hook_init_structure:n {#1} \__hook_hook_gput_code_do:nnn {#1} {#2} {#3} } \cs_new_protected:Npn \__hook_try_declaring_generic_hook:nnn #1 @@ -4161,7 +4263,12 @@ { \prop_if_in:NnTF \c__hook_generics_prop {#1} { - \hook_if_exist:nF {#5} { \hook_new:n {#5} } + \__hook_if_usable:nF {#5} + { + \str_if_eq:nnT {#1} { cmd } + { \__hook_try_put_cmd_hook:n {#5} } + \__hook_make_usable:n {#5} + } \prop_if_in:NnTF \c__hook_generics_reversed_ii_prop {#2} { \tl_gset:cn { g__hook_#5_reversed_tl } { - } } { @@ -4201,7 +4308,7 @@ { \__hook_strip_double_slash:w #1/#2/#3 / #4 \s__hook_mark } } \prop_const_from_keyval:Nn \c__hook_generics_prop - {env=,file=,package=,class=,include=} + {cmd=,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=} @@ -4209,7 +4316,7 @@ { \__hook_normalize_hook_args:Nnn \__hook_gremove_code:nn {#1} {#2} } \cs_new_protected:Npn \__hook_gremove_code:nn #1 #2 { - \__hook_if_exist:nTF {#1} + \__hook_if_structure_exist:nTF {#1} { \str_if_eq:nnTF {#2} {*} { @@ -4227,7 +4334,7 @@ {#1} {#2} } } - \hook_if_exist:nT {#1} + \__hook_if_usable:nT {#1} { \__hook_update_hook_code:n {#1} } } { \__hook_mark_removal:nn {#1} {#2} } @@ -4262,14 +4369,14 @@ } \cs_new_protected:Npn \__hook_gset_rule:nnnn #1#2#3#4 { - \__hook_declare:n {#1} + \__hook_init_structure:n {#1} \__hook_rule_gclear:nnn {#1} {#2} {#4} \cs_if_exist_use:cTF { __hook_rule_#3_gset:nnn } { {#1} {#2} {#4} \__hook_update_hook_code:n {#1} } - { \msg_error:nnnnnn { hooks } { unknown-rule } + { \__kernel_msg_error:nnnnnn { hooks } { unknown-rule } {#1} {#2} {#3} {#4} } } \cs_new_protected:Npn \__hook_rule_before_gset:nnn #1#2#3 @@ -4310,7 +4417,7 @@ { \if_int_compare:w \__hook_str_compare:nn {#1} {#2} > 0 \exp_stop_f: \prg_return_true: - \else + \else: \prg_return_false: \fi: } @@ -4344,7 +4451,7 @@ \__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} + \__hook_if_usable:nT {#1} { \prop_if_empty:cTF {g__hook_#1_code_prop} { @@ -4488,7 +4595,7 @@ \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 } + \__kernel_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} @@ -4496,7 +4603,7 @@ \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 } + \__kernel_msg_warning:nnnnnn { hooks } { labels-incompatible } {#1} {#2} {#3} { 0 } } \cs_new_protected:cpn { __hook_apply_rule_->:nnn } #1#2#3 @@ -4564,8 +4671,10 @@ { \__hook_preamble_hook:n {#1} \__hook_log_cmd:x { ^^J ->~The~hook~'#1': } - \hook_if_exist:nF {#1} - { \__hook_log_line:x { is~not~declared! } } + \__hook_if_usable:nF {#1} + { \__hook_log_line:x { The~hook~is~not~declared. } } + \__hook_if_disabled:nT {#1} + { \__hook_log_line:x { The~hook~is~disabled. } } \hook_if_empty:nTF {#1} { #2 { The~hook~is~empty } } { @@ -4579,7 +4688,7 @@ \__hook_log_line:x { Document-level~(top-level)~code - \hook_if_exist:nT {#1} + \__hook_if_usable:nT {#1} { ~(executed~\__hook_if_reversed:nTF {#1} {first} {last} ) } : } \__hook_log_line_indent:x @@ -4610,7 +4719,7 @@ \bool_if:NT \l__hook_tmpa_bool { \__hook_log_line_indent:x { --- } } \bool_lazy_and:nnTF - { \hook_if_exist_p:n {#1} } + { \__hook_if_usable_p:n {#1} } { ! \hook_if_empty_p:n {#1} } { \__hook_log_line:x @@ -4632,10 +4741,12 @@ } } { + \__hook_log_line:x { Execution~order: } #2 { - Hook~ \hook_if_exist:nTF {#1} - {code~pool~empty} {not~declared} + \@spaces Not~set~because~the~hook~ \__hook_if_usable:nTF {#1} + { code~pool~is~empty } + { is~\__hook_if_disabled:nTF {#1} {disabled} {undeclared} } } } } @@ -4691,10 +4802,14 @@ { \__hook_normalize_hook_args:Nn \__hook_gput_next_code:nn {#1} } \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} } + \__hook_if_disabled:nTF {#1} + { \__kernel_msg_error:nnn { hooks } { hook-disabled } {#1} } + { + \__hook_init_structure:n {#1} + \__hook_if_usable: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 { @@ -4746,12 +4861,12 @@ { \__hook_if_file_hook:wTF #1 / / \s__hook_mark { - \exp_args:Ne \__hook_if_exist_use:n + \exp_args:Ne \__hook_if_usable_use:n { \exp_args:Ne \__hook_file_hook_normalize:n {#1} } } - { \__hook_if_exist_use:n {#1} } % file/ generic hook (e.g. file/before) + { \__hook_if_usable_use:n {#1} } % file/ generic hook (e.g. file/before) } -\cs_new_protected:Npn \__hook_if_exist_use:n #1 +\cs_new_protected:Npn \__hook_if_usable_use:n #1 { \tl_if_exist:cT { __hook~#1 } { @@ -4771,9 +4886,10 @@ } \cs_new_protected:Npn \__hook_use_once_store:n #1 { \prop_gput:Nnn \g__hook_execute_immediately_prop {#1} { } } + \prg_new_conditional:Npnn \hook_if_empty:n #1 { p , T , F , TF } { - \__hook_if_exist:nTF {#1} + \__hook_if_structure_exist:nTF {#1} { \bool_lazy_and:nnTF { \prop_if_empty_p:c { g__hook_#1_code_prop } } @@ -4787,18 +4903,24 @@ } { \prg_return_true: } } -\prg_new_conditional:Npnn \hook_if_exist:n #1 { p , T , F , TF } +\prg_new_conditional:Npnn \__hook_if_usable:n #1 { p , T , F , TF } { \tl_if_exist:cTF { __hook~#1 } { \prg_return_true: } { \prg_return_false: } } -\prg_new_conditional:Npnn \__hook_if_exist:n #1 { p , T , F , TF } +\prg_new_conditional:Npnn \__hook_if_structure_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_declared:n #1 { p, T, F, TF } + { + \tl_if_exist:cTF { g__hook_#1_declared_tl } + { \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: @@ -4807,47 +4929,54 @@ \prg_return_false: \fi: } -\msg_new:nnnn { hooks } { labels-incompatible } +\__kernel_msg_new:nnnn { hooks } { labels-incompatible } { - Labels~`#1'~and~`#2'~are~incompatible - \str_if_eq:nnF {#3} {??} { ~in~hook~`#3' } .~ + 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. } +\__kernel_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 } +\__kernel_msg_new:nnnn { hooks } { hook-disabled } + { Cannot~add~code~to~disabled~hook~'#1'. } + { + The~hook~'#1'~you~tried~to~add~code~to~was~previously~disabled~ + with~\iow_char:N\\hook_disable:n~or~\iow_char:N\\DisableHook,~so~ + it~cannot~have~code~added~to~it. + } +\__kernel_msg_new:nnn { hooks } { empty-label } { Empty~code~label~\msg_line_context:.~ - Using~`\__hook_currname_or_default:'~instead. + Using~'\__hook_currname_or_default:'~instead. } -\msg_new:nnn { hooks } { no-default-label } +\__kernel_msg_new:nnn { hooks } { no-default-label } { Missing~(empty)~default~label~\msg_line_context:. \\ This~command~was~ignored. } -\msg_new:nnnn { hooks } { unknown-rule } - { Unknown~ relationship~ `#3'~ - between~ labels~ `#2'~ and~ `#4'~ - \str_if_eq:nnF {#1} {??} { ~in~hook~`#1' }. ~ +\__kernel_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'. + 'before'~ or~ '<',~ + 'after'~ or~ '>',~ + 'incompatible-warning',~ + 'incompatible-error',~ + 'voids'~ or~ + 'unrelated'. } -\msg_new:nnnn { hooks } { misused-top-level } +\__kernel_msg_new:nnnn { hooks } { misused-top-level } { Illegal~\iow_char:N \\AddToHook{#1}[top-level]{...}.\\ 'top-level'~is~reserved~for~the~user's~document. @@ -4858,36 +4987,56 @@ '\__hook_currname_or_default:'~for~this~\@cls@pkg,~or~another~ suitable~label. } -\msg_new:nnn { hooks } { set-top-level } +\__kernel_msg_new:nnn { hooks } { set-top-level } { - You~cannot~change~the~default~label~#1~`top-level'.~Illegal \\ + You~cannot~change~the~default~label~#1~'top-level'.~Illegal \\ \use:nn { ~ } { ~ } \iow_char:N \\#2{#3} \\ \msg_line_context:. } -\msg_new:nnn { hooks } { ddhl-deprecated } +\__kernel_msg_new:nnn { hooks } { ddhl-deprecated } { \iow_char:N \\DeclareDefaultHookLabel~is~deprecated.\\ Use~\iow_char:N \\SetDefaultHookLabel~instead.\\ \\ The~deprecated~name~will~be~removed~in~the~next~release. } -\msg_new:nnn { hooks } { extra-pop-label } +\__kernel_msg_new:nnn { hooks } { extra-pop-label } { Extra~\iow_char:N \\PopDefaultHookLabel. \\ This~command~will~be~ignored. } -\msg_new:nnn { hooks } { missing-pop-label } +\__kernel_msg_new:nnn { hooks } { missing-pop-label } { Missing~\iow_char:N \\PopDefaultHookLabel. \\ - The~label~`#1'~was~pushed~but~never~popped.~Something~is~wrong. + The~label~'#1'~was~pushed~but~never~popped.~Something~is~wrong. } -\msg_new:nnn { hooks } { should-not-happen } +\__kernel_msg_new:nnn { hooks } { should-not-happen } { ERROR!~This~should~not~happen.~#1 \\ Please~report~at~https://github.com/latex3/latex2e. } +\__kernel_msg_new:nnn { hooks } { provide-disabled } + { + Can't~ provide~ hook~ '#1'~ because~ it~ is~ disabled! + } +\__kernel_msg_new:nnnn { hooks } { provide-error } + { + Hook~'#1'~ already~ declared~ as~ a~ + \__hook_if_reversed:nTF {#1} { reversed } { normal }~ hook! + } + { + You~ attempted~ to~ provide~ the~ hook~'#1'~ as~ a~ + \__hook_if_reversed:nTF {#1} { normal } { reversed }~ hook,~ but~ it~ + was~ already~ previously~ declared~ as~ a~ + \__hook_if_reversed:nTF {#1} { reversed } { normal }~ hook.~ + A~ redeclaration~ is~ not~ possible. + } \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 \ProvideHook { m }{ \hook_provide:n {#1} } +\NewDocumentCommand \ProvideReversedHook { m }{ \hook_provide_reversed:n {#1} } +\NewDocumentCommand \ProvideMirroredHookPair { mm }{ \hook_provide_pair:nn {#1}{#2} } +\NewDocumentCommand \DisableHook { m }{ \hook_disable:n {#1} } \NewDocumentCommand \AddToHook { m o +m } { \hook_gput_code:nnn {#1} {#2} {#3} } \NewDocumentCommand \AddToHookNext { m +m } @@ -4900,11 +5049,11 @@ \cs_new_protected:Npn \__hook_curr_name_push_aux:n #1 { \tl_if_blank:nTF {#1} - { \msg_error:nn { hooks } { no-default-label } } + { \__kernel_msg_error:nn { hooks } { no-default-label } } { \str_if_eq:nnTF {#1} { top-level } { - \msg_error:nnnnn { hooks } { set-top-level } + \__kernel_msg_error:nnnnn { hooks } { set-top-level } { to } { PushDefaultHookLabel } {#1} } { @@ -4917,7 +5066,7 @@ { \seq_gpop: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:nn { hooks } { extra-pop-label } } + { \__kernel_msg_error:nn { hooks } { extra-pop-label } } } \tl_gput_right:Nn \@kernel@after@enddocument@afterlastpage { \__hook_end_document_label_check: } @@ -4925,7 +5074,7 @@ { \seq_gpop:NNT \g__hook_name_stack_seq \l__hook_return_tl { - \msg_error:nnx { hooks } { missing-pop-label } + \__kernel_msg_error:nnx { hooks } { missing-pop-label } { \g__hook_hook_curr_name_tl } \tl_gset_eq:NN \g__hook_hook_curr_name_tl \l__hook_return_tl \__hook_end_document_label_check: @@ -4935,7 +5084,7 @@ { \seq_if_empty:NTF \g__hook_name_stack_seq { - \msg_error:nnnnn { hooks } { set-top-level } + \__kernel_msg_error:nnnnn { hooks } { set-top-level } { for } { SetDefaultHookLabel } {#1} } { \exp_args:Nx \__hook_set_default_label:n { \__hook_make_name:n {#1} } } @@ -4944,14 +5093,14 @@ { \str_if_eq:nnTF {#1} { top-level } { - \msg_error:nnnnn { hooks } { set-top-level } + \__kernel_msg_error:nnnnn { hooks } { set-top-level } { to } { SetDefaultHookLabel } {#1} } { \tl_gset:Nn \g__hook_hook_curr_name_tl {#1} } } \NewDocumentCommand \DeclareDefaultHookLabel { m } { - \msg_error:nn { hooks } { ddhl-deprecated } + \__kernel_msg_error:nn { hooks } { ddhl-deprecated } \SetDefaultHookLabel {#1} } \NewDocumentCommand \PushDefaultHookLabel { m } @@ -4977,15 +5126,328 @@ \@onlypreamble\DeclareDefaultHookRule \NewDocumentCommand \ClearHookRule { m m m } { \hook_gset_rule:nnnn {#1}{#2}{unrelated}{#3} } -\cs_new_eq:NN \IfHookExistsTF \hook_if_exist:nTF \cs_new_eq:NN \IfHookEmptyTF \hook_if_empty:nTF -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 +\cs_new_eq:NN \IfHookExistsTF \__hook_if_usable:nTF +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \cs_new_eq:NN \@expl@@@initialize@all@@ \__hook_initialize_all: \cs_new_eq:NN \@expl@@@hook@curr@name@pop@@ \__hook_curr_name_pop: \ExplSyntaxOff %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% File: ltcmdhooks.dtx (C) Copyright 2020-2021 +%% Frank Mittelbach, Phelype Oleinik, LaTeX Team +%%% From File: ltcmdhooks.dtx +\def\ltcmdhooksversion{v1.0a} +\def\ltcmdhooksdate{2021/04/30} +\ExplSyntaxOn +\tl_new:N \g_hook_patch_action_list_tl +\int_new:N \l__hook_patch_num_args_int +\tl_new:N \l__hook_patch_prefixes_tl +\tl_new:N \l__hook_patch_param_text_tl +\tl_new:N \l__hook_patch_replacement_tl +\prop_new:N \g__hook_delayed_patches_prop +\cs_new_protected:Npn \__hook_patch_debug:x #1 + { \__hook_debug:n { \iow_term:x { [lthooks]~#1 } } } +\cs_generate_variant:Nn \tl_rescan:nn { nV } +\cs_new_protected:Npn \__hook_try_put_cmd_hook:n #1 + { \__hook_try_put_cmd_hook:w #1 / / / \s__hook_mark {#1} } +\cs_new_protected:Npn \__hook_try_put_cmd_hook:w + #1 / #2 / #3 / #4 \s__hook_mark #5 + { + \__hook_debug:n { \iow_term:n { ->~Adding~cmd~hook~to~'#2'~(#3): } } + \str_case:nnTF {#3} + { { before } { } { after } { } } + { \exp_args:Nc \__hook_patch_cmd_or_delay:Nnn {#2} {#2} {#3} } + { \__kernel_msg_error:nnn { hooks } { wrong-cmd-hook } {#2} {#3} } + } +\cs_new_protected:Npn \__hook_patch_cmd_or_delay:Nnn #1 #2 #3 + { + \__hook_debug:n { \iow_term:n { ->~Add~generic~cmd~hook~for~#2~(#3). } } + \__hook_debug:n + { \iow_term:n { !~In~the~preamble:~delaying. } } + \prop_gput:Nnn \g__hook_delayed_patches_prop { #2 / #3 } + { \__hook_cmd_try_patch:nn {#2} {#3} } + } +\cs_new_protected:Npn \__hook_cmd_begindocument_code: + { + \cs_gset_eq:NN \__hook_patch_cmd_or_delay:Nnn \__hook_patch_command:Nnn + \prop_map_function:NN \g__hook_delayed_patches_prop { \use_ii:nn } + \prop_gclear:N \g__hook_delayed_patches_prop + \cs_undefine:N \__hook_cmd_begindocument_code: + } +\g@addto@macro \@kernel@after@begindocument + { \__hook_cmd_begindocument_code: } +\cs_new_protected:Npn \__hook_cmd_try_patch:nn #1 #2 + { + \__hook_debug:n + { \iow_term:x { ->~\string\begin{document}~try~cmd / #1 / #2. } } + \__hook_if_declared:nTF { cmd / #1 / #2 } + { + \__hook_debug:n + { \iow_term:n { .->~Giving~up:~hook~already~created. } } + } + { + \cs_if_exist:cT {#1} + { \exp_args:Nc \__hook_patch_command:Nnn {#1} {#1} {#2} } + } + } +\cs_new_protected:Npn \__hook_patch_command:Nnn #1 #2 #3 + { + \__hook_patch_debug:x { analyzing~'\token_to_str:N #1' } + \__hook_patch_debug:x { \token_to_str:N #1 = \token_to_meaning:N #1 } + \__hook_patch_check:NNnn \cs_if_exist:NTF #1 { undef } + { + \__hook_patch_debug:x { ++~control~sequence~is~defined } + \__hook_patch_check:NNnn \token_if_macro:NTF #1 { macro } + { + \__hook_patch_debug:x { ++~control~sequence~is~a~macro } + \__hook_patch_check:NNnn \__hook_if_public_command:NTF #1 { expl3 } + { + \__hook_patch_debug:x { ++~macro~is~not~private } + \robust@command@act + \g_hook_patch_action_list_tl #1 + \__hook_retokenize_patch:Nnn { #1 {#2} {#3} } + } + } + } + } +\cs_new_protected:Npn \__hook_patch_check:NNnn #1 #2 #3 #4 + { + #1 #2 {#4} + { + \__kernel_msg_error:nnxx { hooks } { cant-patch } + { \token_to_str:N #2 } {#3} + } + } +\use:x + { + \prg_new_protected_conditional:Npnn + \exp_not:N \__hook_if_public_command:N ##1 { TF } + { + \exp_not:N \exp_last_unbraced:Nf + \exp_not:N \__hook_if_public_command:w + { \exp_not:N \cs_to_str:N ##1 } + \tl_to_str:n { _ _ } \s__hook_mark + } + } +\exp_last_unbraced:NNNNo +\cs_new_protected:Npn \__hook_if_public_command:w + #1 \tl_to_str:n { _ _ } #2 \s__hook_mark + { + \tl_if_empty:nTF {#2} + { \prg_return_true: } + { \prg_return_false: } + } +\tl_gset:Nn \g_hook_patch_action_list_tl + { + { \@if@DeclareRobustCommand \__hook_patch_DeclareRobustCommand:Nnn } + { \@if@newcommand \__hook_patch_newcommand:Nnn } + { \__kernel_cmd_if_xparse:NTF \__hook_cmd_patch_xparse:Nnn } + } +\cs_new_protected:Npn \__hook_patch_DeclareRobustCommand:Nnn #1 + { + \exp_args:Nc \@if@newcommand { \cs_to_str:N #1 ~ } + { \exp_args:Nc \__hook_patch_newcommand:Nnn } + { \exp_args:NNc \__hook_patch_expand_redefine:NNnn \c_false_bool } + { \cs_to_str:N #1 ~ } + } +\cs_new_protected:Npn \__hook_patch_newcommand:Nnn #1 + { + \exp_args:NNc \__hook_patch_expand_redefine:NNnn \c_true_bool + { \c_backslash_str \cs_to_str:N #1 } + } +\cs_new_protected:Npn \__hook_cmd_patch_xparse:Nnn #1 + { + \exp_args:NNc \__hook_patch_expand_redefine:NNnn \c_false_bool + { \cs_to_str:N #1 ~ code } + } +\cs_new_protected:Npn \__hook_patch_expand_redefine:NNnn #1 #2 #3 #4 + { + \__hook_patch_debug:x { ++~command~can~be~patched~without~rescanning } + \int_set:Nn \l__hook_patch_num_args_int + { + \exp_args:Nf \str_count:n { \cs_argument_spec:N #2 } / 2 + \bool_if:NT #1 { -1 } + } + \int_compare:nNnTF { \l__hook_patch_num_args_int } > { \c_zero_int } + { + \tl_set:Nx \l__hook_patch_param_text_tl + { \bool_if:NTF #1 { [####1] } { ####1 } } + \tl_set:Nx \l__hook_patch_replacement_tl + { \bool_if:NTF #1 { [####1] } { {####1} } } + \int_step_inline:nnn { 2 } { \l__hook_patch_num_args_int } + { + \tl_put_right:Nn \l__hook_patch_param_text_tl { ## ####1 } + \tl_put_right:Nn \l__hook_patch_replacement_tl { { ## ####1 } } + } + } + { + \tl_clear:N \l__hook_patch_param_text_tl + \tl_clear:N \l__hook_patch_replacement_tl + } + \group_begin: + \int_set:Nn \tex_escapechar:D { `\/ } + \use:x + { + \group_end: + \tl_set:Nx \exp_not:N \l__hook_patch_prefixes_tl + { \exp_not:N \__hook_make_prefixes:w \cs_prefix_spec:N #2 / / } + } + \use:x + { + \l__hook_patch_prefixes_tl \tex_def:D + \exp_not:N #2 \exp_not:V \l__hook_patch_param_text_tl + { + \str_if_eq:nnT {#4} { before } + { \exp_not:N \UseHook { cmd / #3 / #4 } } + \exp_args:No \exp_not:o + { \exp_after:wN #2 \l__hook_patch_replacement_tl } + \str_if_eq:nnT {#4} { after } + { \exp_not:N \UseHook { cmd / #3 / #4 } } + } + } + } +\cs_new:Npn \__hook_make_prefixes:w / #1 / + { + \tl_if_empty:nF {#1} + { + \exp_not:c { tex_ \tl_trim_spaces:n {#1} :D } + \__hook_make_prefixes:w / + } + } +\cs_new_protected:Npn \__hook_retokenize_patch:Nnn #1 #2 #3 + { + \__hook_patch_debug:x { ..~command~can~only~be~patched~by~rescanning } + \str_if_eq:eeTF { \cs_argument_spec:N #1 } { } + { \__hook_patch_expand_redefine:NNnn \c_false_bool #1 {#2} {#3} } + { + \tl_set:Nx \l__hook_tmpa_tl + { + \int_compare:nNnTF { \char_value_catcode:n {`\@ } } = { 12 } + { \exp_not:N \makeatletter } { \exp_not:N \makeatother } + } + \tl_set:Nx \l__hook_tmpb_tl + { + \bool_if:NTF \l__kernel_expl_bool + { \ExplSyntaxOff } { \ExplSyntaxOn } + } + \use:x + { + \exp_not:N \__hook_try_patch_with_catcodes:Nnnnw + \exp_not:n { #1 {#2} {#3} } + { \prg_do_nothing: } + { \exp_not:V \l__hook_tmpa_tl } % @ + { \exp_not:V \l__hook_tmpb_tl } % _: + { + \exp_not:V \l__hook_tmpa_tl % @ + \exp_not:V \l__hook_tmpb_tl % _: + } + } + \q_recursion_tail \q_recursion_stop + { + \__kernel_msg_error:nnxx { hooks } { cant-patch } + { \c_backslash_str #2 } { retok } + } + } + } +\cs_new_protected:Npn \__hook_try_patch_with_catcodes:Nnnnw #1 #2 #3 #4 + { + \quark_if_recursion_tail_stop_do:nn {#4} { \use:n } + \__hook_patch_debug:x { ++~trying~to~patch~by~retokenization } + \__hook_cmd_if_scanable:NnTF {#1} {#4} + { + \__hook_patch_debug:x { ++~macro~can~be~retokenized~cleanly } + \__hook_patch_debug:x { ==~retokenizing~macro~now } + \__hook_patch_retokenize:Nnnn #1 {#2} {#3} {#4} + \use_i_delimit_by_q_recursion_stop:nw \use_none:n + } + { + \__hook_patch_debug:x { --~macro~cannot~be~retokenized~cleanly } + \__hook_try_patch_with_catcodes:Nnnnw #1 {#2} {#3} + } + } +\cs_new_eq:NN \kerneltmpDoNotUse ! +\cs_new_protected:Npn \__hook_patch_required_catcodes: + { + \char_set_catcode_escape:N \\ + \char_set_catcode_group_begin:N \{ + \char_set_catcode_group_end:N \} + \char_set_catcode_parameter:N \# + % \int_set:Nn \tex_endlinechar:D { -1 } + % \int_set:Nn \tex_newlinechar:D { -1 } + } +\prg_new_protected_conditional:Npnn \__hook_cmd_if_scanable:Nn #1 #2 { TF } + { + \cs_set_eq:NN \kerneltmpDoNotUse \scan_stop: + \cs_set_eq:NN \__hook_tmp:w \scan_stop: + \use:x + { + \cs_set:Npn \__hook_tmp:w + ####1 \tl_to_str:n { macro: } ####2 -> ####3 \s__hook_mark + { ####1 \def \kerneltmpDoNotUse ####2 {####3} } + \tl_set:Nx \exp_not:N \l__hook_tmpa_tl + { \exp_not:N \__hook_tmp:w \token_to_meaning:N #1 \s__hook_mark } + } + \tl_rescan:nV { #2 \__hook_patch_required_catcodes: } \l__hook_tmpa_tl + \token_if_eq_meaning:NNTF #1 \kerneltmpDoNotUse + { \prg_return_true: } + { \prg_return_false: } + } +\cs_new_protected:Npn \__hook_patch_retokenize:Nnnn #1 #2 #3 #4 + { + \cs_set_eq:NN \kerneltmpDoNotUse \scan_stop: + \cs_set_eq:NN \__hook_tmp:w \scan_stop: + \use:x + { + \cs_set:Npn \__hook_tmp:w + ####1 \tl_to_str:n { macro: } ####2 -> ####3 \s__hook_mark + { + ####1 \def \kerneltmpDoNotUse ####2 + { + \str_if_eq:nnT {#3} { before } + { \token_to_str:N \UseHook { cmd / #2 / #3 } } + ####3 + \str_if_eq:nnT {#3} { after } + { \token_to_str:N \UseHook { cmd / #2 / #3 } } + } + } + \tl_set:Nx \exp_not:N \l__hook_tmpa_tl + { \exp_not:N \__hook_tmp:w \token_to_meaning:N #1 \s__hook_mark } + } + \tl_rescan:nV { #4 \__hook_patch_required_catcodes: } \l__hook_tmpa_tl + \cs_set_eq:NN #1 \kerneltmpDoNotUse + } +\__kernel_msg_new:nnnn { hooks } { wrong-cmd-hook } + { + Command~hook~`cmd/#1/#2'~invalid.\\ + The~hook~should~be~`cmd/#1/before'~or~`cmd/#1/after'. + } + { + You~tried~to~add~a~hook~to~command~\iow_char:N \\#1,~but~`#2'~ + is~an~invalid~position.~Only~`before'~or~`after'~are~allowed. + } +\__kernel_msg_new:nnnn { hooks } { cant-patch } + { + Command~`#1'~cannot~have~hooks~because~it~ + \__hook_unpatchable_cases:n {#2} . + } + { + You~tried~to~add~a~hook~to~`#1',~but~LaTeX~was~not~able~to~ + add~the~hook~to~that~command~because~`#1'~ + \__hook_unpatchable_cases:n {#2} . + } +\cs_new:Npn \__hook_unpatchable_cases:n #1 + { + \str_case:nn {#1} + { + { undef } { doesn't~exist } + { macro } { is~not~a~macro } + { expl3 } { is~a~private~expl3~macro } + { retok } { can't~be~retokenized~cleanly } + } + } +\ExplSyntaxOff %%% From File: ltalloc.dtx \chardef\@xxxii=32 \mathchardef\@Mi=10001 @@ -5276,6 +5738,131 @@ Type H for immediate help.}% \def\@setpar#1{\def\par{#1}\def\@par{#1}} \def\@par{\let\par\@@par\par} \def\@restorepar{\def\par{\@par}} +%% File: ltpara.dtx (C) Copyright 2020-2021 +%%% From File: ltpara.dtx +\def\ltparaversion{v1.0f} +\def\ltparadate{2021/04/16} + + +\ExplSyntaxOn +\hook_new_pair:nn{para/before}{para/after} +\hook_new_pair:nn{para/begin}{para/end} +\let \@kernel@before@para@before \@empty +\let \@kernel@before@para@begin \@empty +\let \@kernel@after@para@end \@empty +\let \@kernel@after@para@after \@empty +\tl_new:N \g__para_standard_everypar_tl +\tl_gset:Nn \g__para_standard_everypar_tl { + \box_gset_to_last:N \g_para_indent_box + \group_begin: + \tex_par:D + \group_end: + \tex_everypar:D { \__kernel_msg_error:nnnn {para}{mode}{before}{vertical} } + \@kernel@before@para@before + \hook_use:n {para/before} + \group_begin: + \tex_everypar:D {} + \skip_zero:N \tex_parskip:D + \tex_noindent:D + \group_end: + \tex_everypar:D{\g__para_standard_everypar_tl} + \@kernel@before@para@begin + \hook_use:n {para/begin} + \if_mode_horizontal: \else: + \__kernel_msg_error:nnnn {para}{mode}{begin}{vertical} \fi: + \__para_handle_indent: +} +\tex_everypar:D{\g__para_standard_everypar_tl} +\newtoks \everypar + +\tl_gput_right:Nx \g__para_standard_everypar_tl { + \exp_not:N \the + \exp_not:N \toks + \the \allocationnumber + \c_space_tl +} +\box_new:N \g_para_indent_box + +\cs_new:Npn \__para_handle_indent: { + \box_use_drop:N \g_para_indent_box +} +\cs_new:Npn \para_omit_indent: { + \box_gclear:N \g_para_indent_box +} +\cs_set_eq:NN \IndentBox \g_para_indent_box +\cs_set_eq:NN \OmitIndent \para_omit_indent: +\cs_new_protected:Npn \para_end: { + \mode_if_horizontal:TF { + \mode_if_inner:F { + \tex_unskip:D + \hook_use:n{para/end} + \@kernel@after@para@end + \mode_if_horizontal:TF { + \if_int_compare:w 0 < \tex_lastnodetype:D + \tex_kern:D \c_zero_dim + \fi: + \tex_par:D + \hook_use:n{para/after} + \@kernel@after@para@after + } + { \__kernel_msg_error:nnnn {para}{mode}{end}{horizontal} } + } + } + \tex_par:D +} +\cs_new:Npn \para_raw_indent: { + \mode_if_vertical:TF + { + \tex_everypar:D { + \box_gset_to_last:N \g_para_indent_box + \tex_everypar:D { \g__para_standard_everypar_tl } + \__para_handle_indent: + \the\everypar } + } + { \__kernel_msg_error:nn {para}{raw} } + \tex_indent:D +} +\cs_new:Npn \para_raw_noindent: { + \mode_if_vertical:TF + { + \tex_everypar:D { + \tex_everypar:D { \g__para_standard_everypar_tl } + \the\everypar } + } + { \__kernel_msg_error:nn {para}{raw} } + \tex_noindent:D +} +\cs_new_eq:NN \para_raw_end: \tex_par:D +\cs_set_eq:NN \RawIndent \para_raw_indent: +\cs_set_eq:NN \RawNoindent \para_raw_noindent: +\cs_set_eq:NN \RawParEnd \para_raw_end: +\cs_set_eq:NN \par \para_end: +\cs_set_eq:NN \@@par \para_end: +\cs_set_eq:NN \endgraf \para_end: +\everypar{\@nodocument} %% To get an error if text appears before the +\__kernel_msg_new:nnnn {para} {mode} + { + Illegal~mode~ change~ in~ hook~ 'para/#1'.\\ + Hook~ code~ did~ not~ remain~ in~ #2~ mode. + } + { + Paragraph~ hooks~ cannot~ change~ the~ TeX~ mode~ without~ causing~ + endless~ recursion.~ The~ hook~ code~ in~ 'para/#1'~ needs~ to~ stay~ + in~ #2~ mode,~ but~ it~ didn't.~ Examine~ the~ hook~ + code~ with~ \ShowHook~ to~ find~ the~ issue. + } +\__kernel_msg_new:nnnn {para} {raw} + { + Paragraph started while not in vertical mode. + } + { + Starting a paragraph with \RawIndent or \RawNoindent + (or \para_raw_indent: or \para_raw_noindent:) is only + allowed if LaTeX is in vertical mode. + } + +\ExplSyntaxOff +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% From File: ltspace.dtx \message{spacing,} \DeclareRobustCommand\pagebreak{\@testopt{\@no@pgbk-}4} @@ -5523,8 +6110,6 @@ Type H for immediate help.}% \LaTeX\kern.15em2$_{\textstyle\varepsilon}$}} %%% From File: ltfiles.dtx \message{files,} -\newread\@inputcheck -\newwrite\@unused \newwrite\@mainaux \newwrite\@partaux \newif\if@filesw \@fileswtrue @@ -5597,8 +6182,6 @@ Type H for immediate help.}% \let\expandafter\noexpand\csname __hook env/document/begin\endcsname \noexpand\@empty} -\let \@kernel@before@begindocument \@empty -\let \@kernel@after@begindocument \@empty \@onlypreamble\document \let\normalsfcodes\@empty @@ -5726,16 +6309,18 @@ Type H for immediate help.}% \openin\@inputcheck"#1" % \ifeof\@inputcheck \ifx\input@path\@undefined - \def\reserved@a{#3}% + \let\reserved@a\@secondoftwo \else - \def\reserved@a{\@iffileonpath{#1}{#2}{#3}}% + \def\reserved@a{\@iffileonpath{#1}}% \fi \else \closein\@inputcheck \edef\@filef@und{"#1" }% - \def\reserved@a{#2}% + \let\reserved@a\@firstoftwo \fi - \reserved@a} + \expandafter\def\expandafter\reserved@a + \expandafter{\reserved@a{#2}{#3}}% +\reserved@a} \long\def\@iffileonpath#1{% \let\reserved@a\@secondoftwo \expandafter\@tfor\expandafter\reserved@b\expandafter @@ -6458,7 +7043,9 @@ Type H for immediate help.}% \DeclareRobustCommand\usefont[4]{\fontencoding{#1}% \edef\f@family{#2}% \set@target@series{#3}% - \edef\f@shape{#4}\selectfont + \edef\f@shape{#4}% + \let\delayed@f@adjustment\@empty + \selectfont \ignorespaces} \DeclareRobustCommand\linespread[1] {\set@fontsize{#1}\f@size\f@baselineskip} @@ -7402,6 +7989,7 @@ Type H for immediate help.}% \fi \let\delayed@f@adjustment\@empty \fi + \@forced@seriesfalse \xdef\font@name{% \csname\curr@fontshape/\f@size\endcsname}% \pickup@font @@ -8832,6 +9420,7 @@ Type H for immediate help.}% \edef\f@family{\familydefault}% \edef\f@series{\seriesdefault}% \edef\f@shape{\shapedefault}% + \let\delayed@f@adjustment\@empty \UseHook{normalfont}% \@defaultfamilyhook % hookname from 2020/02 will vanish \selectfont} @@ -9063,7 +9652,6 @@ Type H for immediate help.}% \egroup } \def\textcompsubstdefault{\rmsubstdefault} - \def\DeclareEncodingSubset#1#2{% \DeclareEncodingSubset@aux{#1}#2*\DeclareEncodingSubset@aux } @@ -10181,7 +10769,7 @@ Type H for immediate help.}% } \let\@eqnsel=\relax \def\nonumber{\global\@eqnswfalse} -\def\@eqncr{% +\protected\def\@eqncr{% {\ifnum0=`}\fi \@ifstar{% \global\@eqpen\@M\@yeqncr @@ -10203,7 +10791,7 @@ Type H for immediate help.}% \reserved@a \if@eqnsw\@eqnnum\stepcounter{equation}\fi \global\@eqnswtrue\global\@eqcnt\z@\cr} \let\@seqncr=\@eqncr -\@namedef{eqnarray*}{\def\@eqncr{\nonumber\@seqncr}\eqnarray} +\@namedef{eqnarray*}{\protected\def\@eqncr{\nonumber\@seqncr}\eqnarray} \@namedef{endeqnarray*}{\nonumber\endeqnarray} \def\lefteqn#1{\rlap{$\displaystyle #1$}} \DeclareRobustCommand{\ensuremath}{% @@ -10812,7 +11400,7 @@ Type H for immediate help.}% \def\@addfield{\global\setbox\@curline\hbox{\unhbox \@curline\unhbox\@curfield}} \def\@ifatmargin{\ifdim \wd\@curline =\z@} -\def\@tabcr{\@stopline \@ifstar{\penalty \@M \@xtabcr}\@xtabcr} +\protected\def\@tabcr{\@stopline \@ifstar{\penalty \@M \@xtabcr}\@xtabcr} \def\@xtabcr{\@ifnextchar[\@itabcr{\@startline\ignorespaces}} \def\@itabcr[#1]{\@vspace@calcify{#1}\@startline\ignorespaces} \def\tabbing{\lineskip \z@skip\let\>\@rtab\let\<\@ltab\let\=\@settab @@ -10930,14 +11518,14 @@ Type H for immediate help.}% \lineskip\z@skip\baselineskip\z@skip \ifhmode \@preamerr\z@ \@@par\fi \@preamble} -\def\@arraycr{% +\protected\def\@arraycr{% ${\ifnum0=`}\fi\@ifstar\@xarraycr\@xarraycr} \def\@xarraycr{\@ifnextchar[\@argarraycr{\ifnum0=`{\fi}${}\cr}} \def\@argarraycr[#1]{% \ifnum0=`{\fi}${}\ifdim #1>\z@ \@xargarraycr{#1}\else \@yargarraycr{#1}\fi} \let\tabularnewline\relax -\def\@tabularcr{% +\protected\def\@tabularcr{% {\ifnum0=`}\fi\@ifstar\@xtabularcr\@xtabularcr} \def\@xtabularcr{\@ifnextchar[\@argtabularcr{\ifnum0=`{\fi}\cr}} \def\@argtabularcr[#1]{% @@ -11171,7 +11759,7 @@ Type H for immediate help.}% \let\\\@stackcr \@ishortstack} \def\@ishortstack#1{\ialign{\mb@l {##}\unskip\mb@r\cr #1\crcr}\egroup} -\def\@stackcr{\@ifstar\@ixstackcr\@ixstackcr} +\protected\def\@stackcr{\@ifstar\@ixstackcr\@ixstackcr} \def\@ixstackcr{\@ifnextchar[\@istackcr{\cr\ignorespaces}} \def\@istackcr[#1]{\cr\noalign{\@vspace@calcify{#1}}\ignorespaces} \newif\if@negarg @@ -12046,12 +12634,6 @@ Type H for immediate help.}% \endgroup \@footnotemark } -%%\IncludeInRelease{0000/00/00}% -%% {\footref}{Add footref}% -%% -%%\let\footref\@undefined -%% -%%\EndIncludeInRelease %%% From File: ltidxglo.dtx \message{index,} \def\makeindex{% @@ -12409,14 +12991,15 @@ Type H for immediate help.}% \@onlypreamble\@process@ptions \def\@xprocess@ptions{% \ifx\@currext\@clsextension\else + \ifx\@classoptionslist\relax\else \@for\CurrentOption:=\@classoptionslist\do{% \ifx\CurrentOption\@empty\else - \@expandtwoargs\in@{,\CurrentOption,}{,\@declaredoptions,}% - \ifin@ + \@ifundefined{ds@\CurrentOption}{}{% \@use@ption \expandafter\let\csname ds@\CurrentOption\endcsname\@empty - \fi + }% \fi}% + \fi \fi \@process@pti@ns} \@onlypreamble\@xprocess@ptions @@ -12798,14 +13381,12 @@ Type H for immediate help.}% \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% + \ifx\@curr@file\reserved@b% \@fileswtrue% \else% \edef\reserved@b{\reserved@b\detokenize{.tex}}% - \ifx\reserved@a\reserved@b + \ifx\@curr@file\reserved@b \@fileswtrue% \fi% \fi% @@ -13077,8 +13658,8 @@ Type H for immediate help.}% \fi } %%% From File: ltfilehook.dtx -\providecommand\ltfilehookversion{v1.0g} -\providecommand\ltfilehookdate{2021/02/08} +\providecommand\ltfilehookversion{v1.0j} +\providecommand\ltfilehookdate{2021/04/29} \ExplSyntaxOn \tl_new:N \CurrentFile \tl_new:N \CurrentFilePath @@ -13116,7 +13697,8 @@ Type H for immediate help.}% \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 +\seq_if_exist:NF \g__filehook_input_file_seq + { \seq_new:N \g__filehook_input_file_seq } \cs_new_protected:Npn \__filehook_file_push: { \seq_gpush:Nx \g__filehook_input_file_seq @@ -13130,7 +13712,7 @@ Type H for immediate help.}% \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 } + \__kernel_msg_error:nnn { hooks } { should-not-happen } { Tried~to~pop~from~an~empty~file~name~stack. } } } @@ -13218,6 +13800,7 @@ Type H for immediate help.}% \begingroup \escapechar\m@ne \let\protect\string + \edef~{\string~}% \expandafter\def\csname\expandafter\endcsname \expandafter{\csname\endcsname}% \@expl@@@filehook@if@no@extension@@nTF{#1}% @@ -13340,7 +13923,7 @@ Type H for immediate help.}% \cs_new_eq:NN \@expl@@@filehook@drop@extension@@N \__filehook_drop_extension:N \cs_new_eq:NN \@expl@@@filehook@file@push@@ - \__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 @@ -13354,7 +13937,7 @@ Type H for immediate help.}% %% %%% From File: ltshipout.dtx \providecommand\ltshipoutversion{v1.0i} -\providecommand\ltshipoutdate{2021/01/25} +\providecommand\ltshipoutdate{2021/03/17} \ExplSyntaxOn \bool_new:N \g__shipout_debug_bool \cs_new_eq:NN \__shipout_debug:n \use_none:n @@ -14865,6 +15448,33 @@ Type H for immediate help.}% \countdef\xe@alloc@intercharclass=257 \xe@alloc@intercharclass=\z@ \fi +\ifx\directlua\@undefined +\else + \expanded{% + \everyjob{\the\everyjob + \noexpand%\directlua + \directlua{% + local function trace_stack_levels (input_ptr) + local tracingstacklevels = tex.count.tracingstacklevels + if tex.tracingmacros > 0 or input_ptr < tracingstacklevels then + if tracingstacklevels > 0 then + if input_ptr < tracingstacklevels then + return "\string\n\string~" .. string.rep(".",input_ptr) + else + return "\string~\string~" + end + else + return "\string\n" + end + else + return "" + end + end + luatexbase.add_to_callback('input_level_string', + trace_stack_levels,'tracingstacklevels') + }% + }}% +\fi \unitlength = 1pt \fboxsep = 3pt \fboxrule = .4pt @@ -15175,7 +15785,6 @@ Type H for immediate help.}% \let\@filelist\@gobble \def\@addtofilelist#1{\xdef\@filelist{\@filelist,#1}}% \@input{latex2e-first-aid-for-external-files.ltx} -\@input{ltpara.ltx} \makeatother \errorstopmode \dump diff --git a/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty b/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty index 529e3cd6df3..4bdca00b45e 100644 --- a/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty +++ b/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty @@ -14,10 +14,12 @@ %% ltdefns.dtx (with options: `latexrelease') %% ltcmd.dtx (with options: `latexrelease') %% lthooks.dtx (with options: `latexrelease') +%% ltcmdhooks.dtx (with options: `latexrelease') %% ltalloc.dtx (with options: `latexrelease') %% ltcntrl.dtx (with options: `latexrelease') %% lterror.dtx (with options: `latexrelease') %% ltpar.dtx (with options: `latexrelease') +%% ltpara.dtx (with options: `latexrelease') %% ltspace.dtx (with options: `latexrelease') %% ltlogos.dtx (with options: `latexrelease') %% ltfiles.dtx (with options: `latexrelease') @@ -52,6 +54,7 @@ %% ltoutput.dtx (with options: `latexrelease') %% ltfsscmp.dtx (with options: `latexrelease') %% ltfinal.dtx (with options: `latexrelease') +%% latexrelease.dtx (with options: `latexrelease-finish') %% %% This is a generated file. %% @@ -284,7 +287,7 @@ } %%% From File: ltvers.dtx \edef\latexreleaseversion - {2021-05-01} + {2021-06-01} \newif\if@includeinrelease \@includeinreleasefalse \def\IncludeInRelease#1{% @@ -293,17 +296,37 @@ {There is an \string\EndIncludeRelease\space missing}% \@includeinreleasefalse \fi - \kernel@ifnextchar[% - {\@IncludeInRelease{#1}} - {\@IncludeInRelease{#1}[#1]}} + \ifnum0% + \ifx\new@moduledate\@empty\else 1\fi + \ifnum \expandafter\@parse@version#1//00\@nil=0 1\fi + =11 + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi + {\finish@module@release{#1}}% + {\kernel@ifnextchar[% + {\@IncludeInRelease{#1}} + {\@IncludeInRelease{#1}[#1]}}} +\def\finish@module@release#1#2#3{% + \toks@{[#1] #3}% + \ifnum\expandafter\@parse@version\new@moduledate//00\@nil + >\expandafter\@parse@version\fmtversion//00\@nil + \GenericInfo{}{Applying: \the\toks@}% + \else + \GenericInfo{}{Skipping: \the\toks@}% + \expandafter\gobble@finish@module@release + \fi} +\long\def\gobble@finish@module@release#1\EndModuleRelease{% + \EndModuleRelease} \def\@IncludeInRelease#1[#2]{\@IncludeInRele@se{#2}} \def\@IncludeInRele@se#1#2#3{% \toks@{[#1] #3}% \expandafter\ifx\csname\string#2+\@currname+IIR\endcsname\relax \ifnum\expandafter\@parse@version#1//00\@nil - >\expandafter\@parse@version\fmtversion//00\@nil + >\expandafter\@parse@version\fmtversion//00\@nil \GenericInfo{}{Skipping: \the\toks@}% - \expandafter\expandafter\expandafter\@gobble@IncludeInRelease + \expandafter\expandafter\expandafter\@gobble@IncludeInRelease \else \GenericInfo{}{Applying: \the\toks@}% \@includeinreleasetrue @@ -319,6 +342,9 @@ \@includeinreleasefalse \else \PackageError{latexrelease}{mis-matched EndIncludeInRelease}{}% +\fi +\if@skipping@module + \expandafter\new@module@skip \fi} \long\def\@gobble@IncludeInRelease#1\EndIncludeInRelease{% \@includeinreleasefalse @@ -328,13 +354,55 @@ #2#3\@end@check@IncludeInRelease{% \ifx\@check@IncludeInRelease#2\else \PackageError{latexrelease}{skipped IncludeInRelease for tag \string#2}{}% + \fi + \if@skipping@module + \expandafter\new@module@skip + \fi} +\let\if@skipping@module\iffalse +\def\@skipping@moduletrue{\let\if@skipping@module\iftrue} +\def\@skipping@modulefalse{\let\if@skipping@module\iffalse} +\let\new@modulename\@empty +\let\new@moduledate\@empty +\def\NewModuleRelease#1#2#3{% + \ifx\new@modulename\@empty \else + \@latex@error{Nested \noexpand\NewModuleRelease forbidden.}\@ehd \fi + \edef\new@moduledate{#1}% + \edef\new@modulename{#2}% + \GenericInfo{}{BEGIN module: \new@modulename\space (\new@moduledate)}% + \GenericInfo{}{ \@spaces\@spaces\@spaces\space#3\@gobble}% + \ifnum\sourceLaTeXdate<% + \expandafter\@parse@version\new@moduledate//00\@nil\relax + \ifnum\expandafter\@parse@version\fmtversion//00\@nil<% + \expandafter\@parse@version\new@moduledate//00\@nil\relax + \GenericInfo{}{Skipping module \new@modulename}% + \expandafter\expandafter + \expandafter\gobble@finish@module@release + \else + \GenericInfo{}{Applying module \new@modulename} + \@skipping@modulefalse + \fi + \else + \GenericInfo{}{Skipping module \new@modulename} + \@skipping@moduletrue + \expandafter\new@module@skip + \fi} +\long\def\new@module@skip#1\IncludeInRelease{\IncludeInRelease} +\def\EndModuleRelease{% + \ifx\new@modulename\@empty + \@latex@error{Extra \string\EndModuleRelease.}\@eha + \else + \GenericInfo{}{END module: \new@modulename\space (\new@moduledate)}% + \let\new@modulename\@empty + \let\new@moduledate\@empty + \@skipping@modulefalse \fi} \ProvidesPackage{latexrelease} - [2021/01/23 v1.0l LaTeX release emulation and tests + [2021/04/29 v1.0n LaTeX release emulation and tests (including releases up to \latexreleaseversion)] \NeedsTeXFormat{LaTeX2e}[1996/06/01] -\edef\sourceLaTeXdate{% - \expandafter\@parse@version\fmtversion//00\@nil} +\@ifundefined{sourceLaTeXdate}{% + \edef\sourceLaTeXdate{% + \expandafter\@parse@version\fmtversion//00\@nil}}{}% \DeclareOption*{% \def\@IncludeInRelease#1[#2]{\@IncludeInRele@se{#1}}% \let\requestedpatchdate\CurrentOption} @@ -385,6 +453,76 @@ of this package available from CTAN} \fi \let\fmtversion\requestedpatchdate \let\currentLaTeXdate\requestedLaTeXdate +\csname ExplSyntaxOn\endcsname +\csname ExplSyntaxOff\endcsname +\begingroup + \endlinechar=-1 + \catcode95=11 % _ + \catcode58=11 % : + \catcode126=10 % ~ + \catcode32=09 % + \xdef\latexrelease@postexpl{\unexpanded{% +\cs_gset_protected:Npn \__latexrelease_declare_command:w + { \@star@or@long \__latexrelease_declare_command:Nw } +\cs_gset_protected:Npn \__latexrelease_declare_command:Nw #1 + { \cs_if_exist:NTF #1 { \renew@command } { \new@command } #1 } +\cs_gset_protected:Npn \__latexrelease_e@alloc:NnnnnN #1 #2 #3 #4 #5 #6 + { + \cs_if_free:NTF #6 + { \use:n } + { + \exp_after:wN \__latexrelease_e@alloc:N + \token_to_meaning:N #6 \scan_stop: {#2} #6 + } + { \__latexrelease_e@alloc #1 {#2} {#3} {#4} {#5} #6 } + } +\cs_gset_protected:Npn \__latexrelease_e@alloc:N #1 + { + \if_int_compare:w 0 < 0 + \if_int_compare:w 10 < 9#1 ~ 1 \fi: + \if_charcode:w " #1 1 \fi: \exp_stop_f: + \tex_afterassignment:D \__latexrelease_e@alloc:w + \@tempcnta #1 + \use_i:nnn + \fi: + \use:n + { + \if_meaning:w \scan_stop: #1 + \exp_after:wN \use_iv:nnnn + \fi: + \__latexrelease_e@alloc:N + } + } +\cs_gset_protected:Npn \__latexrelease_e@alloc:w #1 \scan_stop: #2 #3 + { + #2 \__latexrelease_tmp:w = \@tempcnta + \token_if_eq_meaning:NNTF #3 \__latexrelease_tmp:w + { \int_set_eq:NN \allocationnumber \@tempcnta \use_none:n } + { \cs_set_eq:NN #3 \tex_undefined:D \use:n } + } +\tl_clear_new:N \l__latexrelease_restores_tl +\cs_gset:Npn \__latexrelease_tmp:w #1 #2 + { + \quark_if_recursion_tail_stop_do:Nn #1 + { \cs_undefine:N \__latexrelease_tmp:w } + \tl_put_right:Nn \l__latexrelease_restores_tl {#1} + \cs_set_eq:cN { __latexrelease_ \cs_to_str:N #1 } #1 + \cs_set_eq:NN #1 #2 + \__latexrelease_tmp:w + } +\__latexrelease_tmp:w + \__kernel_chk_if_free_cs:N \use_none:n + \e@alloc \__latexrelease_e@alloc:NnnnnN + \__kernel_msg_error:nnx \use_none:nnn + \msg_new:nnnn \msg_gset:nnnn + \NewDocumentCommand \DeclareDocumentCommand + \newcommand \__latexrelease_declare_command:w + \__kernel_msg_error:nnn \use_none:nnn % needed while redirect for kernel msgs doesn't work + \q_recursion_tail \q_recursion_tail + \q_recursion_stop +\msg_redirect_name:nnn { hooks } { exists } { none } + }}% +\endgroup %%% From File: ltdirchk.dtx \ifx\directlua\undefined\else \IncludeInRelease{2015/10/01}{\luatexluafunction} @@ -682,6 +820,45 @@ of this package available from CTAN} \global\chardef#1\allocationnumber \wlog{\string#1=\string\insert\the\allocationnumber}} \EndIncludeInRelease +\IncludeInRelease{2021/06/01}{\tracingstacklevels}% + {tracingstacklevels}% +\ifx\directlua\@undefined + % \tracingstacklevels=0 % added in 2021 +\else + \newcount\tracingstacklevels + % Code for \tracingstacklevels defined in ltfinal.dtx +\fi +\EndIncludeInRelease + +\IncludeInRelease{0000/00/00}{\tracingstacklevels}% + {tracingstacklevels}% +\ifx\directlua\@undefined +\else + \let\tracingstacklevels\@undefined +\fi +\EndIncludeInRelease +\IncludeInRelease{2021/06/01}{\loggingall} + {\tracingstacklevels and \tracinglostchars=3}% +\edef\loggingall{% + \tracingstats\tw@ + \tracingpages\@ne + \tracinglostchars\thr@@ + \tracingparagraphs\@ne + \tracinggroups\@ne + \tracingifs\@ne + \tracingscantokens\@ne + \tracingnesting\@ne + \errorcontextlines\maxdimen + \ifdefined\tracingstacklevels \tracingstacklevels\maxdimen \fi + \noexpand \loggingoutput + \tracingmacros\tw@ + \tracingcommands\thr@@ + \tracingrestores\@ne + \tracingassigns\@ne +}% +\def\tracingall{\showoverfull\loggingall} +\EndIncludeInRelease + \IncludeInRelease{2015/01/01}{\loggingall}{etex tracing}% \ifx\tracingscantokens\@undefined \gdef\loggingall{% @@ -715,6 +892,7 @@ of this package available from CTAN} \fi \gdef\tracingall{\showoverfull\loggingall} \EndIncludeInRelease + \IncludeInRelease{0000/00/00}{\loggingall}{etex tracing}% \gdef\loggingall{\tracingcommands\tw@\tracingstats\tw@ \tracingpages\@ne\tracinglostchars\@ne @@ -722,6 +900,30 @@ of this package available from CTAN} \errorcontextlines\maxdimen\loggingoutput} \gdef\tracingall{\loggingall\showoverfull} \EndIncludeInRelease +\IncludeInRelease{2015/01/01}{\tracingnone}% + {turn off etex tracing}% +\edef\tracingnone{% + \tracingassigns\z@ + \tracingrestores\z@ + \tracingonline\z@ + \tracingcommands\z@ + \showboxdepth\m@ne + \showboxbreadth\m@ne + \tracingoutput\z@ + \errorcontextlines\m@ne + \ifdefined\tracingstacklevels \tracingstacklevels\z@ \fi + \tracingnesting\z@ + \tracingscantokens\z@ + \tracingifs\z@ + \tracinggroups\z@ + \tracingparagraphs\z@ + \tracingmacros\z@ + \tracinglostchars\@ne + \tracingpages\z@ + \tracingstats\z@ +}% +\EndIncludeInRelease + \IncludeInRelease{2015/01/01}{\tracingnone}% {turn off etex tracing}% \ifx\tracingscantokens\@undefined @@ -760,6 +962,14 @@ of this package available from CTAN} \tracingstats\z@ }% \fi +\EndIncludeInRelease + +\IncludeInRelease{0000/00/00}{\tracingnone}% + {turn off etex tracing}% +\let\tracingnone\@undefined +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}{\hideoutput}% + {hide output from tracing}% \def\hideoutput{% \tracingoutput\z@ \showboxbreadth\m@ne @@ -767,9 +977,9 @@ of this package available from CTAN} \tracingonline\m@ne }% \EndIncludeInRelease -\IncludeInRelease{0000/00/00}{\tracingnone}% - {turn off etex tracing}% -\let\tracingnone\@undefined + +\IncludeInRelease{0000/00/00}{\hideoutput}% + {hide output from tracing}% \let\hideoutput\@undefined \EndIncludeInRelease \ifx\directlua\@undefined\else @@ -983,14 +1193,20 @@ of this package available from CTAN} \fi %%% From File: ltexpl.dtx \IncludeInRelease{2020/10/01}% - {kernel@enddocument hooks}{Define kernel enddocument Hooks}% -\let\@kernel@after@enddocument\@empty -\let\@kernel@after@enddocument@afterlastpage\@empty + {kernel@enddocument hooks}{Define several kernel hooks} +\ifx\@kernel@after@enddocument\@undefined + \let \@kernel@after@enddocument \@empty + \let \@kernel@after@enddocument@afterlastpage \@empty + \let \@kernel@before@begindocument \@empty + \let \@kernel@after@begindocument \@empty +\fi \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {kernel@enddocument hooks}{Define kernel enddocument Hooks}% + {kernel@enddocument hooks}{Define several kernel hooks} \let\@kernel@after@enddocument\@undefined \let\@kernel@after@enddocument@afterlastpage\@undefined +\let\@kernel@before@begindocument\@undefined +\let\@kernel@after@begindocument\@undefined \EndIncludeInRelease \IncludeInRelease{2020/10/01}% {\@expl@sys@load@backend@@}{Roll forward support}% @@ -1565,13 +1781,13 @@ of this package available from CTAN} \EndIncludeInRelease %%% From File: ltcmd.dtx -\def\ltcmdversion{v1.0a} -\def\ltcmddate{2021/01/21} +\def\ltcmdversion{v1.0d} +\def\ltcmddate{2021-04-19} \edef\@latexrelease@catcode@null{\the\catcode`\^^@ } \catcode`\^^@=12 -\IncludeInRelease{2021/05/01}% - {\NewDocumentCommand}{Document commands}% \ExplSyntaxOn +\NewModuleRelease{2020/10/01}{ltcmd} + {Document~command~parser}% \tl_new:N \l__cmd_arg_spec_tl \tl_new:N \l__cmd_args_tl \tl_new:N \l__cmd_args_i_tl @@ -3275,7 +3491,7 @@ of this package available from CTAN} } \cs_new_protected:Npn \__cmd_get_arg_spec:NTF #1#2#3 { - \__cmd_cmd_if_xparse:NTF #1 + \__kernel_cmd_if_xparse:NTF #1 { \tl_set:Nx \ArgumentSpecification { \tl_item:Nn #1 { 2 } } #2 @@ -3377,7 +3593,7 @@ of this package available from CTAN} #1 {#2} {#4} \__cmd_tl_mapthread_loop:w #1#3 \q_mark } -\cs_new_protected:Npn \__cmd_cmd_if_xparse:NTF #1 +\cs_new_protected:Npn \__kernel_cmd_if_xparse:NTF #1 { \exp_args:Nf \str_case_e:nnTF { @@ -3830,31 +4046,21 @@ of this package available from CTAN} \cs_new_eq:NN \ShowDocumentEnvironmentArgSpec \__cmd_show_arg_spec:n \cs_gset_eq:NN \__kernel_chk_if_free_cs:N \__cmd_chk_if_free_cs:N \cs_undefine:N \__cmd_chk_if_free_cs:N -\ExplSyntaxOff -\EndIncludeInRelease -\catcode`\^^@=\@latexrelease@catcode@null\relax -\IncludeInRelease{2020/10/01}% - {\NewDocumentCommand}{Document commands}% -\@ifundefined{NewDocumentCommand} - {% - \IfFileExists{xparse.ltx} - {\input xparse.ltx } - {\@latex@error{LaTeX requires xparse}\@ehd}% - } - {} -\EndIncludeInRelease +\IncludeInRelease{0000/00/00}{ltcmd}% + {Document~command~parser}% -\IncludeInRelease{0000/00/00}% - {\NewDocumentCommand}{Document commands}% - -\EndIncludeInRelease +\EndModuleRelease +\ExplSyntaxOff +\@ifundefined{ExplSyntaxOff}{}{\latexrelease@postexpl} +\catcode`\^^@=\@latexrelease@catcode@null\relax %%% From File: lthooks.dtx -\def\lthooksversion{v1.0h} -\def\lthooksdate{2021/01/15} -\IncludeInRelease{2020/10/01}% - {\NewHook}{The hook management}% +\def\lthooksversion{v1.0m} +\def\lthooksdate{2021/04/29} + \ExplSyntaxOn +\NewModuleRelease{2020/10/01}{lthooks} + {The~hook~management~system} \bool_new:N \g__hook_debug_bool \cs_new_eq:NN \__hook_debug:n \use_none:n \cs_new_protected:Npn \hook_debug_on: @@ -3918,24 +4124,34 @@ of this package available from CTAN} \cs_new_protected:Npn \__hook_tl_gclear:N #1 { \__hook_tl_gset_eq:NN #1 \c_empty_tl } \cs_generate_variant:Nn \__hook_tl_gclear:N { c } + + \cs_new_protected:Npn \hook_new:n #1 { \__hook_normalize_hook_args:Nn \__hook_new:n {#1} } \cs_new_protected:Npn \__hook_new:n #1 { - \hook_if_exist:nTF {#1} - { \msg_error:nnn { hooks } { exists } {#1} } + \__hook_if_declared:nTF {#1} + { \__kernel_msg_error:nnn { hooks } { exists } {#1} } + { + \tl_new:c { g__hook_#1_declared_tl } + \__hook_make_usable:n {#1} + } + } +\cs_new_protected:Npn \__hook_make_usable:n #1 + { + \tl_if_exist:cF { __hook~#1 } { \seq_gput_right:Nn \g__hook_all_seq {#1} \tl_new:c { __hook~#1 } - \__hook_declare:n {#1} - \clist_new:c {g__hook_#1_labels_clist} + \__hook_init_structure: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 +\cs_new_protected:Npn \__hook_init_structure:n #1 { - \__hook_if_exist:nF {#1} + \__hook_if_structure_exist:nF {#1} { \prop_new:c { g__hook_#1_code_prop } \tl_new:c { __hook_toplevel~#1 } @@ -3963,6 +4179,64 @@ of this package available from CTAN} } } } +\IncludeInRelease{2021/06/01}% + {\hook_disable:n}{Disable~hooks} +\cs_new_protected:Npn \hook_disable:n #1 + { \__hook_normalize_hook_args:Nn \__hook_disable:n {#1} } +\cs_new_protected:Npn \__hook_disable:n #1 + { + \tl_gclear_new:c { g__hook_#1_declared_tl } + \cs_undefine:c { __hook~#1 } + } +\prg_new_conditional:Npnn \__hook_if_disabled:n #1 { p, T, F, TF } + { + \bool_lazy_and:nnTF + { \tl_if_exist_p:c { g__hook_#1_declared_tl } } + { ! \tl_if_exist_p:c { __hook~#1 } } + { \prg_return_true: } + { \prg_return_false: } + } +\EndIncludeInRelease +\IncludeInRelease{2020/10/01} + {\hook_disable:n}{Disable~hooks} + +\cs_new_protected:Npn \hook_disable:n #1 {} + +\EndIncludeInRelease +\IncludeInRelease{2021/06/01}% + {\hook_provide:n}{Providing~hooks} +\cs_new_protected:Npn \hook_provide:n #1 + { \__hook_normalize_hook_args:Nn \__hook_provide:nn {#1} { } } +\cs_new_protected:Npn \hook_provide_reversed:n #1 + { \__hook_normalize_hook_args:Nn \__hook_provide:nn {#1} { - } } +\cs_new_protected:Npn \__hook_provide:nn #1 #2 + { + \__hook_if_disabled:nTF {#1} + { \__kernel_msg_warning:nnn { hooks } { provide-disabled } {#1} } + { + \__hook_if_declared:nTF {#1} + { + \str_if_eq:eeF { \tl_use:c { g__hook_#1_reversed_tl } } {#2} + { \__kernel_msg_error:nnn { hooks } { provide-error } {#1} } + } + { + \tl_new:c { g__hook_#1_declared_tl } + \__hook_make_usable:n {#1} + \tl_gset:cn { g__hook_#1_reversed_tl } {#2} + } + } + } +\cs_new_protected:Npn \hook_provide_pair:nn #1#2 + { \hook_provide:n {#1} \hook_provide_reversed:n {#2} } +\EndIncludeInRelease +\IncludeInRelease{2020/10/01} + {\hook_provide:n}{Providing~hooks} + +\cs_new_protected:Npn \hook_provide_reversed:n #1 {} +\cs_new_protected:Npn \hook_provide:n #1 {} +\cs_new_protected:Npn \hook_provide_pair:nn #1#2 {} + +\EndIncludeInRelease \cs_new:Npn \__hook_parse_label_default:n #1 { \tl_if_novalue:nTF {#1} @@ -3973,7 +4247,7 @@ of this package available from CTAN} { \tl_if_empty:nTF {#1} { - \msg_expandable_error:nn { hooks } { empty-label } + \__kernel_msg_expandable_error:nn { hooks } { empty-label } \__hook_currname_or_default: } { @@ -4001,7 +4275,7 @@ of this package available from CTAN} { \tl_if_empty:NTF \@currname { - \msg_expandable_error:nnn { hooks } { should-not-happen } + \__kernel_msg_expandable_error:nnn { hooks } { should-not-happen } { Empty~default~label. } \__hook_make_name:n { label-missing } } @@ -4058,12 +4332,16 @@ of this package available from CTAN} \__hook_if_marked_removal:nnTF {#1} {#2} { \__hook_unmark_removal:nn {#1} {#2} } { - \hook_if_exist:nTF {#1} + \__hook_if_usable: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} } + { + \__hook_if_disabled:nTF {#1} + { \__kernel_msg_error:nnn { hooks } { hook-disabled } {#1} } + { \__hook_try_declaring_generic_hook:nnn {#1} {#2} {#3} } + } } } } @@ -4071,17 +4349,17 @@ of this package available from CTAN} \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_if_usable:nF {#1} { undeclared~ } hook~ #1~ (#2) \on@line\space <-~ \tl_to_str:n{#3}} } \str_if_eq:nnTF {#2} { top-level } { \str_if_eq:eeTF { top-level } { \__hook_currname_or_default: } { - \__hook_declare:n {#1} + \__hook_init_structure:n {#1} \__hook_tl_gput_right:cn { __hook_toplevel~#1 } {#3} } - { \msg_error:nnn { hooks } { misused-top-level } {#1} } + { \__kernel_msg_error:nnn { hooks } { misused-top-level } {#1} } } { \prop_get:cnNTF { g__hook_#1_code_prop } {#2} \l__hook_return_tl @@ -4094,7 +4372,7 @@ of this package available from CTAN} } \cs_new_protected:Npn \__hook_gput_undeclared_hook:nnn #1 #2 #3 { - \__hook_declare:n {#1} + \__hook_init_structure:n {#1} \__hook_hook_gput_code_do:nnn {#1} {#2} {#3} } \cs_new_protected:Npn \__hook_try_declaring_generic_hook:nnn #1 @@ -4122,6 +4400,37 @@ of this package available from CTAN} { #2 } { #3 } {#1} } +\IncludeInRelease{2021/06/01}% + {\__hook_try_declaring_generic_hook:wn}{Support~cmd~hooks} +\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_usable:nF {#5} + { + \str_if_eq:nnT {#1} { cmd } + { \__hook_try_put_cmd_hook:n {#5} } + \__hook_make_usable: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: } + } + } +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\__hook_try_declaring_generic_hook:wn}{Support~cmd~hooks} + \prg_new_protected_conditional:Npnn \__hook_try_declaring_generic_hook:wn #1 / #2 / #3 / #4 \scan_stop: #5 { TF } { @@ -4130,7 +4439,7 @@ of this package available from CTAN} { \prop_if_in:NnTF \c__hook_generics_prop {#1} { - \hook_if_exist:nF {#5} { \hook_new:n {#5} } + \__hook_if_declared: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 } { - } } { @@ -4142,6 +4451,8 @@ of this package available from CTAN} { \prg_return_false: } } } + +\EndIncludeInRelease \prg_new_conditional:Npnn \__hook_if_file_hook:w #1 / #2 / #3 \s__hook_mark { TF } { @@ -4170,7 +4481,7 @@ of this package available from CTAN} { \__hook_strip_double_slash:w #1/#2/#3 / #4 \s__hook_mark } } \prop_const_from_keyval:Nn \c__hook_generics_prop - {env=,file=,package=,class=,include=} + {cmd=,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=} @@ -4178,7 +4489,7 @@ of this package available from CTAN} { \__hook_normalize_hook_args:Nnn \__hook_gremove_code:nn {#1} {#2} } \cs_new_protected:Npn \__hook_gremove_code:nn #1 #2 { - \__hook_if_exist:nTF {#1} + \__hook_if_structure_exist:nTF {#1} { \str_if_eq:nnTF {#2} {*} { @@ -4196,7 +4507,7 @@ of this package available from CTAN} {#1} {#2} } } - \hook_if_exist:nT {#1} + \__hook_if_usable:nT {#1} { \__hook_update_hook_code:n {#1} } } { \__hook_mark_removal:nn {#1} {#2} } @@ -4231,14 +4542,14 @@ of this package available from CTAN} } \cs_new_protected:Npn \__hook_gset_rule:nnnn #1#2#3#4 { - \__hook_declare:n {#1} + \__hook_init_structure:n {#1} \__hook_rule_gclear:nnn {#1} {#2} {#4} \cs_if_exist_use:cTF { __hook_rule_#3_gset:nnn } { {#1} {#2} {#4} \__hook_update_hook_code:n {#1} } - { \msg_error:nnnnnn { hooks } { unknown-rule } + { \__kernel_msg_error:nnnnnn { hooks } { unknown-rule } {#1} {#2} {#3} {#4} } } \cs_new_protected:Npn \__hook_rule_before_gset:nnn #1#2#3 @@ -4279,7 +4590,7 @@ of this package available from CTAN} { \if_int_compare:w \__hook_str_compare:nn {#1} {#2} > 0 \exp_stop_f: \prg_return_true: - \else + \else: \prg_return_false: \fi: } @@ -4313,7 +4624,7 @@ of this package available from CTAN} \__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} + \__hook_if_usable:nT {#1} { \prop_if_empty:cTF {g__hook_#1_code_prop} { @@ -4457,7 +4768,7 @@ of this package available from CTAN} \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 } + \__kernel_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} @@ -4465,7 +4776,7 @@ of this package available from CTAN} \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 } + \__kernel_msg_warning:nnnnnn { hooks } { labels-incompatible } {#1} {#2} {#3} { 0 } } \cs_new_protected:cpn { __hook_apply_rule_->:nnn } #1#2#3 @@ -4533,8 +4844,10 @@ of this package available from CTAN} { \__hook_preamble_hook:n {#1} \__hook_log_cmd:x { ^^J ->~The~hook~'#1': } - \hook_if_exist:nF {#1} - { \__hook_log_line:x { is~not~declared! } } + \__hook_if_usable:nF {#1} + { \__hook_log_line:x { The~hook~is~not~declared. } } + \__hook_if_disabled:nT {#1} + { \__hook_log_line:x { The~hook~is~disabled. } } \hook_if_empty:nTF {#1} { #2 { The~hook~is~empty } } { @@ -4548,7 +4861,7 @@ of this package available from CTAN} \__hook_log_line:x { Document-level~(top-level)~code - \hook_if_exist:nT {#1} + \__hook_if_usable:nT {#1} { ~(executed~\__hook_if_reversed:nTF {#1} {first} {last} ) } : } \__hook_log_line_indent:x @@ -4579,7 +4892,7 @@ of this package available from CTAN} \bool_if:NT \l__hook_tmpa_bool { \__hook_log_line_indent:x { --- } } \bool_lazy_and:nnTF - { \hook_if_exist_p:n {#1} } + { \__hook_if_usable_p:n {#1} } { ! \hook_if_empty_p:n {#1} } { \__hook_log_line:x @@ -4601,10 +4914,12 @@ of this package available from CTAN} } } { + \__hook_log_line:x { Execution~order: } #2 { - Hook~ \hook_if_exist:nTF {#1} - {code~pool~empty} {not~declared} + \@spaces Not~set~because~the~hook~ \__hook_if_usable:nTF {#1} + { code~pool~is~empty } + { is~\__hook_if_disabled:nTF {#1} {disabled} {undeclared} } } } } @@ -4660,10 +4975,14 @@ of this package available from CTAN} { \__hook_normalize_hook_args:Nn \__hook_gput_next_code:nn {#1} } \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} } + \__hook_if_disabled:nTF {#1} + { \__kernel_msg_error:nnn { hooks } { hook-disabled } {#1} } + { + \__hook_init_structure:n {#1} + \__hook_if_usable: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 { @@ -4715,12 +5034,12 @@ of this package available from CTAN} { \__hook_if_file_hook:wTF #1 / / \s__hook_mark { - \exp_args:Ne \__hook_if_exist_use:n + \exp_args:Ne \__hook_if_usable_use:n { \exp_args:Ne \__hook_file_hook_normalize:n {#1} } } - { \__hook_if_exist_use:n {#1} } % file/ generic hook (e.g. file/before) + { \__hook_if_usable_use:n {#1} } % file/ generic hook (e.g. file/before) } -\cs_new_protected:Npn \__hook_if_exist_use:n #1 +\cs_new_protected:Npn \__hook_if_usable_use:n #1 { \tl_if_exist:cT { __hook~#1 } { @@ -4740,9 +5059,10 @@ of this package available from CTAN} } \cs_new_protected:Npn \__hook_use_once_store:n #1 { \prop_gput:Nnn \g__hook_execute_immediately_prop {#1} { } } + \prg_new_conditional:Npnn \hook_if_empty:n #1 { p , T , F , TF } { - \__hook_if_exist:nTF {#1} + \__hook_if_structure_exist:nTF {#1} { \bool_lazy_and:nnTF { \prop_if_empty_p:c { g__hook_#1_code_prop } } @@ -4756,18 +5076,24 @@ of this package available from CTAN} } { \prg_return_true: } } -\prg_new_conditional:Npnn \hook_if_exist:n #1 { p , T , F , TF } +\prg_new_conditional:Npnn \__hook_if_usable:n #1 { p , T , F , TF } { \tl_if_exist:cTF { __hook~#1 } { \prg_return_true: } { \prg_return_false: } } -\prg_new_conditional:Npnn \__hook_if_exist:n #1 { p , T , F , TF } +\prg_new_conditional:Npnn \__hook_if_structure_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_declared:n #1 { p, T, F, TF } + { + \tl_if_exist:cTF { g__hook_#1_declared_tl } + { \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: @@ -4776,47 +5102,54 @@ of this package available from CTAN} \prg_return_false: \fi: } -\msg_new:nnnn { hooks } { labels-incompatible } +\__kernel_msg_new:nnnn { hooks } { labels-incompatible } { - Labels~`#1'~and~`#2'~are~incompatible - \str_if_eq:nnF {#3} {??} { ~in~hook~`#3' } .~ + 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. } +\__kernel_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 } +\__kernel_msg_new:nnnn { hooks } { hook-disabled } + { Cannot~add~code~to~disabled~hook~'#1'. } + { + The~hook~'#1'~you~tried~to~add~code~to~was~previously~disabled~ + with~\iow_char:N\\hook_disable:n~or~\iow_char:N\\DisableHook,~so~ + it~cannot~have~code~added~to~it. + } +\__kernel_msg_new:nnn { hooks } { empty-label } { Empty~code~label~\msg_line_context:.~ - Using~`\__hook_currname_or_default:'~instead. + Using~'\__hook_currname_or_default:'~instead. } -\msg_new:nnn { hooks } { no-default-label } +\__kernel_msg_new:nnn { hooks } { no-default-label } { Missing~(empty)~default~label~\msg_line_context:. \\ This~command~was~ignored. } -\msg_new:nnnn { hooks } { unknown-rule } - { Unknown~ relationship~ `#3'~ - between~ labels~ `#2'~ and~ `#4'~ - \str_if_eq:nnF {#1} {??} { ~in~hook~`#1' }. ~ +\__kernel_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'. + 'before'~ or~ '<',~ + 'after'~ or~ '>',~ + 'incompatible-warning',~ + 'incompatible-error',~ + 'voids'~ or~ + 'unrelated'. } -\msg_new:nnnn { hooks } { misused-top-level } +\__kernel_msg_new:nnnn { hooks } { misused-top-level } { Illegal~\iow_char:N \\AddToHook{#1}[top-level]{...}.\\ 'top-level'~is~reserved~for~the~user's~document. @@ -4827,36 +5160,67 @@ of this package available from CTAN} '\__hook_currname_or_default:'~for~this~\@cls@pkg,~or~another~ suitable~label. } -\msg_new:nnn { hooks } { set-top-level } +\__kernel_msg_new:nnn { hooks } { set-top-level } { - You~cannot~change~the~default~label~#1~`top-level'.~Illegal \\ + You~cannot~change~the~default~label~#1~'top-level'.~Illegal \\ \use:nn { ~ } { ~ } \iow_char:N \\#2{#3} \\ \msg_line_context:. } -\msg_new:nnn { hooks } { ddhl-deprecated } +\__kernel_msg_new:nnn { hooks } { ddhl-deprecated } { \iow_char:N \\DeclareDefaultHookLabel~is~deprecated.\\ Use~\iow_char:N \\SetDefaultHookLabel~instead.\\ \\ The~deprecated~name~will~be~removed~in~the~next~release. } -\msg_new:nnn { hooks } { extra-pop-label } +\__kernel_msg_new:nnn { hooks } { extra-pop-label } { Extra~\iow_char:N \\PopDefaultHookLabel. \\ This~command~will~be~ignored. } -\msg_new:nnn { hooks } { missing-pop-label } +\__kernel_msg_new:nnn { hooks } { missing-pop-label } { Missing~\iow_char:N \\PopDefaultHookLabel. \\ - The~label~`#1'~was~pushed~but~never~popped.~Something~is~wrong. + The~label~'#1'~was~pushed~but~never~popped.~Something~is~wrong. } -\msg_new:nnn { hooks } { should-not-happen } +\__kernel_msg_new:nnn { hooks } { should-not-happen } { ERROR!~This~should~not~happen.~#1 \\ Please~report~at~https://github.com/latex3/latex2e. } +\__kernel_msg_new:nnn { hooks } { provide-disabled } + { + Can't~ provide~ hook~ '#1'~ because~ it~ is~ disabled! + } +\__kernel_msg_new:nnnn { hooks } { provide-error } + { + Hook~'#1'~ already~ declared~ as~ a~ + \__hook_if_reversed:nTF {#1} { reversed } { normal }~ hook! + } + { + You~ attempted~ to~ provide~ the~ hook~'#1'~ as~ a~ + \__hook_if_reversed:nTF {#1} { normal } { reversed }~ hook,~ but~ it~ + was~ already~ previously~ declared~ as~ a~ + \__hook_if_reversed:nTF {#1} { reversed } { normal }~ hook.~ + A~ redeclaration~ is~ not~ possible. + } \NewDocumentCommand \NewHook { m }{ \hook_new:n {#1} } \NewDocumentCommand \NewReversedHook { m }{ \hook_new_reversed:n {#1} } \NewDocumentCommand \NewMirroredHookPair { mm }{ \hook_new_pair:nn {#1}{#2} } +\IncludeInRelease{2021/06/01}% + {\hook_provide:n}{Providing~hooks} +\NewDocumentCommand \ProvideHook { m }{ \hook_provide:n {#1} } +\NewDocumentCommand \ProvideReversedHook { m }{ \hook_provide_reversed:n {#1} } +\NewDocumentCommand \ProvideMirroredHookPair { mm }{ \hook_provide_pair:nn {#1}{#2} } +\NewDocumentCommand \DisableHook { m }{ \hook_disable:n {#1} } +\EndIncludeInRelease +\IncludeInRelease{2020/10/01} + {\hook_provide:n}{Providing~hooks} + +\def \ProvideHook#1{} +\def \ProvideReversedHook#1{} +\def \ProvideMirroredHookPair#1#2{} + +\EndIncludeInRelease \NewDocumentCommand \AddToHook { m o +m } { \hook_gput_code:nnn {#1} {#2} {#3} } \NewDocumentCommand \AddToHookNext { m +m } @@ -4864,7 +5228,8 @@ of this package available from CTAN} \NewDocumentCommand \RemoveFromHook { m o } { \hook_gremove_code:nn {#1} {#2} } \tl_gset:Nn \g__hook_hook_curr_name_tl { top-level } -\seq_gput_right:Nn \g__hook_name_stack_seq { top-level } +\seq_if_empty:NT \g__hook_name_stack_seq + { \seq_gput_right:Nn \g__hook_name_stack_seq { top-level } } \cs_set_protected:Npn \__hook_tmp:w #1 #2 #3 { \quark_if_recursion_tail_stop:n {#1} @@ -4875,16 +5240,17 @@ of this package available from CTAN} \q_recursion_tail \q_recursion_tail \q_recursion_tail \q_recursion_stop \tl_gset:Nx \g__hook_hook_curr_name_tl { \@currname } +\seq_gpop_right:NN \g__hook_name_stack_seq \l__hook_tmpa_tl \cs_new_protected:Npn \__hook_curr_name_push:n #1 { \exp_args:Nx \__hook_curr_name_push_aux:n { \__hook_make_name:n {#1} } } \cs_new_protected:Npn \__hook_curr_name_push_aux:n #1 { \tl_if_blank:nTF {#1} - { \msg_error:nn { hooks } { no-default-label } } + { \__kernel_msg_error:nn { hooks } { no-default-label } } { \str_if_eq:nnTF {#1} { top-level } { - \msg_error:nnnnn { hooks } { set-top-level } + \__kernel_msg_error:nnnnn { hooks } { set-top-level } { to } { PushDefaultHookLabel } {#1} } { @@ -4897,7 +5263,7 @@ of this package available from CTAN} { \seq_gpop: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:nn { hooks } { extra-pop-label } } + { \__kernel_msg_error:nn { hooks } { extra-pop-label } } } \tl_gput_right:Nn \@kernel@after@enddocument@afterlastpage { \__hook_end_document_label_check: } @@ -4905,7 +5271,7 @@ of this package available from CTAN} { \seq_gpop:NNT \g__hook_name_stack_seq \l__hook_return_tl { - \msg_error:nnx { hooks } { missing-pop-label } + \__kernel_msg_error:nnx { hooks } { missing-pop-label } { \g__hook_hook_curr_name_tl } \tl_gset_eq:NN \g__hook_hook_curr_name_tl \l__hook_return_tl \__hook_end_document_label_check: @@ -4915,90 +5281,553 @@ of this package available from CTAN} { \seq_if_empty:NTF \g__hook_name_stack_seq { - \msg_error:nnnnn { hooks } { set-top-level } + \__kernel_msg_error:nnnnn { hooks } { set-top-level } { for } { SetDefaultHookLabel } {#1} } { \exp_args:Nx \__hook_set_default_label:n { \__hook_make_name:n {#1} } } } -\cs_new_protected:Npn \__hook_set_default_label:n #1 +\cs_new_protected:Npn \__hook_set_default_label:n #1 + { + \str_if_eq:nnTF {#1} { top-level } + { + \__kernel_msg_error:nnnnn { hooks } { set-top-level } + { to } { SetDefaultHookLabel } {#1} + } + { \tl_gset:Nn \g__hook_hook_curr_name_tl {#1} } + } +\NewDocumentCommand \DeclareDefaultHookLabel { m } + { + \__kernel_msg_error:nn { hooks } { ddhl-deprecated } + \SetDefaultHookLabel {#1} + } +\NewDocumentCommand \PushDefaultHookLabel { m } + { \__hook_curr_name_push:n {#1} } +\NewDocumentCommand \PopDefaultHookLabel { } + { \__hook_curr_name_pop: } +\cs_gset_protected:Npn \@expl@push@filename@aux@@ #1#2#3 + { + \__hook_curr_name_push:n {#3} + \str_gset:Nx \g_file_curr_name_str {#3} + #1 #2 {#3} + } +\cs_new:Npn \UseHook { \hook_use:n } +\cs_new:Npn \UseOneTimeHook { \hook_use_once:n } +\cs_new_protected:Npn \ShowHook { \hook_show:n } +\cs_new_protected:Npn \LogHook { \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} } +\cs_new_eq:NN \IfHookEmptyTF \hook_if_empty:nTF +\cs_new_eq:NN \IfHookExistsTF \__hook_if_usable:nTF +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\cs_new_eq:NN \@expl@@@initialize@all@@ + \__hook_initialize_all: +\cs_new_eq:NN \@expl@@@hook@curr@name@pop@@ + \__hook_curr_name_pop: +\IncludeInRelease{0000/00/00}% + {lthooks}{The~hook~management}% + +\def \NewHook#1{} +\def \NewReversedHook#1{} +\def \NewMirroredHookPair#1#2{} + +\def \DisableHook #1{} + +\long\def\AddToHookNext#1#2{} + +\def\AddToHook#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 \DeclareHookRule #1#2#3#4{} +\def \DeclareDefaultHookRule #1#2#3{} +\def \ClearHookRule #1#2#3{} +\long\def \IfHookExistsTF #1#2#3{#3} +\long\def \IfHookEmptyTF #1#2#3{#2} + +\EndModuleRelease +\ExplSyntaxOff +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% File: ltcmdhooks.dtx (C) Copyright 2020-2021 +%% Frank Mittelbach, Phelype Oleinik, LaTeX Team +%%% From File: ltcmdhooks.dtx +\def\ltcmdhooksversion{v1.0a} +\def\ltcmdhooksdate{2021/04/30} +\ExplSyntaxOn +\NewModuleRelease{2021/06/01}{ltcmdhooks} + {The~hook~management~system~for~commands} +\tl_new:N \g_hook_patch_action_list_tl +\int_new:N \l__hook_patch_num_args_int +\tl_new:N \l__hook_patch_prefixes_tl +\tl_new:N \l__hook_patch_param_text_tl +\tl_new:N \l__hook_patch_replacement_tl +\prop_new:N \g__hook_delayed_patches_prop +\cs_new_protected:Npn \__hook_patch_debug:x #1 + { \__hook_debug:n { \iow_term:x { [lthooks]~#1 } } } +\cs_generate_variant:Nn \tl_rescan:nn { nV } +\cs_new_protected:Npn \__hook_try_put_cmd_hook:n #1 + { \__hook_try_put_cmd_hook:w #1 / / / \s__hook_mark {#1} } +\cs_new_protected:Npn \__hook_try_put_cmd_hook:w + #1 / #2 / #3 / #4 \s__hook_mark #5 + { + \__hook_debug:n { \iow_term:n { ->~Adding~cmd~hook~to~'#2'~(#3): } } + \str_case:nnTF {#3} + { { before } { } { after } { } } + { \exp_args:Nc \__hook_patch_cmd_or_delay:Nnn {#2} {#2} {#3} } + { \__kernel_msg_error:nnn { hooks } { wrong-cmd-hook } {#2} {#3} } + } +\cs_new_protected:Npn \__hook_patch_cmd_or_delay:Nnn #1 #2 #3 + { + \__hook_debug:n { \iow_term:n { ->~Add~generic~cmd~hook~for~#2~(#3). } } + \__hook_debug:n + { \iow_term:n { !~In~the~preamble:~delaying. } } + \prop_gput:Nnn \g__hook_delayed_patches_prop { #2 / #3 } + { \__hook_cmd_try_patch:nn {#2} {#3} } + } +\cs_new_protected:Npn \__hook_cmd_begindocument_code: + { + \cs_gset_eq:NN \__hook_patch_cmd_or_delay:Nnn \__hook_patch_command:Nnn + \prop_map_function:NN \g__hook_delayed_patches_prop { \use_ii:nn } + \prop_gclear:N \g__hook_delayed_patches_prop + \cs_undefine:N \__hook_cmd_begindocument_code: + } +\g@addto@macro \@kernel@after@begindocument + { \__hook_cmd_begindocument_code: } +\cs_new_protected:Npn \__hook_cmd_try_patch:nn #1 #2 + { + \__hook_debug:n + { \iow_term:x { ->~\string\begin{document}~try~cmd / #1 / #2. } } + \__hook_if_declared:nTF { cmd / #1 / #2 } + { + \__hook_debug:n + { \iow_term:n { .->~Giving~up:~hook~already~created. } } + } + { + \cs_if_exist:cT {#1} + { \exp_args:Nc \__hook_patch_command:Nnn {#1} {#1} {#2} } + } + } +\cs_new_protected:Npn \__hook_patch_command:Nnn #1 #2 #3 + { + \__hook_patch_debug:x { analyzing~'\token_to_str:N #1' } + \__hook_patch_debug:x { \token_to_str:N #1 = \token_to_meaning:N #1 } + \__hook_patch_check:NNnn \cs_if_exist:NTF #1 { undef } + { + \__hook_patch_debug:x { ++~control~sequence~is~defined } + \__hook_patch_check:NNnn \token_if_macro:NTF #1 { macro } + { + \__hook_patch_debug:x { ++~control~sequence~is~a~macro } + \__hook_patch_check:NNnn \__hook_if_public_command:NTF #1 { expl3 } + { + \__hook_patch_debug:x { ++~macro~is~not~private } + \robust@command@act + \g_hook_patch_action_list_tl #1 + \__hook_retokenize_patch:Nnn { #1 {#2} {#3} } + } + } + } + } +\cs_new_protected:Npn \__hook_patch_check:NNnn #1 #2 #3 #4 + { + #1 #2 {#4} + { + \__kernel_msg_error:nnxx { hooks } { cant-patch } + { \token_to_str:N #2 } {#3} + } + } +\use:x + { + \prg_new_protected_conditional:Npnn + \exp_not:N \__hook_if_public_command:N ##1 { TF } + { + \exp_not:N \exp_last_unbraced:Nf + \exp_not:N \__hook_if_public_command:w + { \exp_not:N \cs_to_str:N ##1 } + \tl_to_str:n { _ _ } \s__hook_mark + } + } +\exp_last_unbraced:NNNNo +\cs_new_protected:Npn \__hook_if_public_command:w + #1 \tl_to_str:n { _ _ } #2 \s__hook_mark + { + \tl_if_empty:nTF {#2} + { \prg_return_true: } + { \prg_return_false: } + } +\tl_gset:Nn \g_hook_patch_action_list_tl + { + { \@if@DeclareRobustCommand \__hook_patch_DeclareRobustCommand:Nnn } + { \@if@newcommand \__hook_patch_newcommand:Nnn } + { \__kernel_cmd_if_xparse:NTF \__hook_cmd_patch_xparse:Nnn } + } +\cs_new_protected:Npn \__hook_patch_DeclareRobustCommand:Nnn #1 + { + \exp_args:Nc \@if@newcommand { \cs_to_str:N #1 ~ } + { \exp_args:Nc \__hook_patch_newcommand:Nnn } + { \exp_args:NNc \__hook_patch_expand_redefine:NNnn \c_false_bool } + { \cs_to_str:N #1 ~ } + } +\cs_new_protected:Npn \__hook_patch_newcommand:Nnn #1 + { + \exp_args:NNc \__hook_patch_expand_redefine:NNnn \c_true_bool + { \c_backslash_str \cs_to_str:N #1 } + } +\cs_new_protected:Npn \__hook_cmd_patch_xparse:Nnn #1 + { + \exp_args:NNc \__hook_patch_expand_redefine:NNnn \c_false_bool + { \cs_to_str:N #1 ~ code } + } +\cs_new_protected:Npn \__hook_patch_expand_redefine:NNnn #1 #2 #3 #4 + { + \__hook_patch_debug:x { ++~command~can~be~patched~without~rescanning } + \int_set:Nn \l__hook_patch_num_args_int + { + \exp_args:Nf \str_count:n { \cs_argument_spec:N #2 } / 2 + \bool_if:NT #1 { -1 } + } + \int_compare:nNnTF { \l__hook_patch_num_args_int } > { \c_zero_int } + { + \tl_set:Nx \l__hook_patch_param_text_tl + { \bool_if:NTF #1 { [####1] } { ####1 } } + \tl_set:Nx \l__hook_patch_replacement_tl + { \bool_if:NTF #1 { [####1] } { {####1} } } + \int_step_inline:nnn { 2 } { \l__hook_patch_num_args_int } + { + \tl_put_right:Nn \l__hook_patch_param_text_tl { ## ####1 } + \tl_put_right:Nn \l__hook_patch_replacement_tl { { ## ####1 } } + } + } + { + \tl_clear:N \l__hook_patch_param_text_tl + \tl_clear:N \l__hook_patch_replacement_tl + } + \group_begin: + \int_set:Nn \tex_escapechar:D { `\/ } + \use:x + { + \group_end: + \tl_set:Nx \exp_not:N \l__hook_patch_prefixes_tl + { \exp_not:N \__hook_make_prefixes:w \cs_prefix_spec:N #2 / / } + } + \use:x + { + \l__hook_patch_prefixes_tl \tex_def:D + \exp_not:N #2 \exp_not:V \l__hook_patch_param_text_tl + { + \str_if_eq:nnT {#4} { before } + { \exp_not:N \UseHook { cmd / #3 / #4 } } + \exp_args:No \exp_not:o + { \exp_after:wN #2 \l__hook_patch_replacement_tl } + \str_if_eq:nnT {#4} { after } + { \exp_not:N \UseHook { cmd / #3 / #4 } } + } + } + } +\cs_new:Npn \__hook_make_prefixes:w / #1 / + { + \tl_if_empty:nF {#1} + { + \exp_not:c { tex_ \tl_trim_spaces:n {#1} :D } + \__hook_make_prefixes:w / + } + } +\cs_new_protected:Npn \__hook_retokenize_patch:Nnn #1 #2 #3 + { + \__hook_patch_debug:x { ..~command~can~only~be~patched~by~rescanning } + \str_if_eq:eeTF { \cs_argument_spec:N #1 } { } + { \__hook_patch_expand_redefine:NNnn \c_false_bool #1 {#2} {#3} } + { + \tl_set:Nx \l__hook_tmpa_tl + { + \int_compare:nNnTF { \char_value_catcode:n {`\@ } } = { 12 } + { \exp_not:N \makeatletter } { \exp_not:N \makeatother } + } + \tl_set:Nx \l__hook_tmpb_tl + { + \bool_if:NTF \l__kernel_expl_bool + { \ExplSyntaxOff } { \ExplSyntaxOn } + } + \use:x + { + \exp_not:N \__hook_try_patch_with_catcodes:Nnnnw + \exp_not:n { #1 {#2} {#3} } + { \prg_do_nothing: } + { \exp_not:V \l__hook_tmpa_tl } % @ + { \exp_not:V \l__hook_tmpb_tl } % _: + { + \exp_not:V \l__hook_tmpa_tl % @ + \exp_not:V \l__hook_tmpb_tl % _: + } + } + \q_recursion_tail \q_recursion_stop + { + \__kernel_msg_error:nnxx { hooks } { cant-patch } + { \c_backslash_str #2 } { retok } + } + } + } +\cs_new_protected:Npn \__hook_try_patch_with_catcodes:Nnnnw #1 #2 #3 #4 + { + \quark_if_recursion_tail_stop_do:nn {#4} { \use:n } + \__hook_patch_debug:x { ++~trying~to~patch~by~retokenization } + \__hook_cmd_if_scanable:NnTF {#1} {#4} + { + \__hook_patch_debug:x { ++~macro~can~be~retokenized~cleanly } + \__hook_patch_debug:x { ==~retokenizing~macro~now } + \__hook_patch_retokenize:Nnnn #1 {#2} {#3} {#4} + \use_i_delimit_by_q_recursion_stop:nw \use_none:n + } + { + \__hook_patch_debug:x { --~macro~cannot~be~retokenized~cleanly } + \__hook_try_patch_with_catcodes:Nnnnw #1 {#2} {#3} + } + } +\cs_new_eq:NN \kerneltmpDoNotUse ! +\cs_new_protected:Npn \__hook_patch_required_catcodes: + { + \char_set_catcode_escape:N \\ + \char_set_catcode_group_begin:N \{ + \char_set_catcode_group_end:N \} + \char_set_catcode_parameter:N \# + % \int_set:Nn \tex_endlinechar:D { -1 } + % \int_set:Nn \tex_newlinechar:D { -1 } + } +\prg_new_protected_conditional:Npnn \__hook_cmd_if_scanable:Nn #1 #2 { TF } + { + \cs_set_eq:NN \kerneltmpDoNotUse \scan_stop: + \cs_set_eq:NN \__hook_tmp:w \scan_stop: + \use:x + { + \cs_set:Npn \__hook_tmp:w + ####1 \tl_to_str:n { macro: } ####2 -> ####3 \s__hook_mark + { ####1 \def \kerneltmpDoNotUse ####2 {####3} } + \tl_set:Nx \exp_not:N \l__hook_tmpa_tl + { \exp_not:N \__hook_tmp:w \token_to_meaning:N #1 \s__hook_mark } + } + \tl_rescan:nV { #2 \__hook_patch_required_catcodes: } \l__hook_tmpa_tl + \token_if_eq_meaning:NNTF #1 \kerneltmpDoNotUse + { \prg_return_true: } + { \prg_return_false: } + } +\cs_new_protected:Npn \__hook_patch_retokenize:Nnnn #1 #2 #3 #4 + { + \cs_set_eq:NN \kerneltmpDoNotUse \scan_stop: + \cs_set_eq:NN \__hook_tmp:w \scan_stop: + \use:x + { + \cs_set:Npn \__hook_tmp:w + ####1 \tl_to_str:n { macro: } ####2 -> ####3 \s__hook_mark + { + ####1 \def \kerneltmpDoNotUse ####2 + { + \str_if_eq:nnT {#3} { before } + { \token_to_str:N \UseHook { cmd / #2 / #3 } } + ####3 + \str_if_eq:nnT {#3} { after } + { \token_to_str:N \UseHook { cmd / #2 / #3 } } + } + } + \tl_set:Nx \exp_not:N \l__hook_tmpa_tl + { \exp_not:N \__hook_tmp:w \token_to_meaning:N #1 \s__hook_mark } + } + \tl_rescan:nV { #4 \__hook_patch_required_catcodes: } \l__hook_tmpa_tl + \cs_set_eq:NN #1 \kerneltmpDoNotUse + } +\__kernel_msg_new:nnnn { hooks } { wrong-cmd-hook } + { + Command~hook~`cmd/#1/#2'~invalid.\\ + The~hook~should~be~`cmd/#1/before'~or~`cmd/#1/after'. + } + { + You~tried~to~add~a~hook~to~command~\iow_char:N \\#1,~but~`#2'~ + is~an~invalid~position.~Only~`before'~or~`after'~are~allowed. + } +\__kernel_msg_new:nnnn { hooks } { cant-patch } + { + Command~`#1'~cannot~have~hooks~because~it~ + \__hook_unpatchable_cases:n {#2} . + } + { + You~tried~to~add~a~hook~to~`#1',~but~LaTeX~was~not~able~to~ + add~the~hook~to~that~command~because~`#1'~ + \__hook_unpatchable_cases:n {#2} . + } +\cs_new:Npn \__hook_unpatchable_cases:n #1 + { + \str_case:nn {#1} + { + { undef } { doesn't~exist } + { macro } { is~not~a~macro } + { expl3 } { is~a~private~expl3~macro } + { retok } { can't~be~retokenized~cleanly } + } + } +\IncludeInRelease{0000/00/00}{ltcmdhooks}% + {The~hook~management~system~for~commands} + +\cs_set_eq:NN \__hook_cmd_begindocument_code: \prg_do_nothing: + +\EndModuleRelease +\ExplSyntaxOff +%%% From File: ltalloc.dtx +%%% From File: ltcntrl.dtx +%%% From File: lterror.dtx +%%% From File: ltpar.dtx +%% File: ltpara.dtx (C) Copyright 2020-2021 +%%% From File: ltpara.dtx +\def\ltparaversion{v1.0f} +\def\ltparadate{2021/04/16} + + +\ExplSyntaxOn +\NewModuleRelease{2021/06/01}{ltpara} + {Paragraph~handling~and~hooks} +\hook_new_pair:nn{para/before}{para/after} +\hook_new_pair:nn{para/begin}{para/end} +\let \@kernel@before@para@before \@empty +\let \@kernel@before@para@begin \@empty +\let \@kernel@after@para@end \@empty +\let \@kernel@after@para@after \@empty +\tl_new:N \g__para_standard_everypar_tl +\tl_gset:Nn \g__para_standard_everypar_tl { + \box_gset_to_last:N \g_para_indent_box + \group_begin: + \tex_par:D + \group_end: + \tex_everypar:D { \__kernel_msg_error:nnnn {para}{mode}{before}{vertical} } + \@kernel@before@para@before + \hook_use:n {para/before} + \group_begin: + \tex_everypar:D {} + \skip_zero:N \tex_parskip:D + \tex_noindent:D + \group_end: + \tex_everypar:D{\g__para_standard_everypar_tl} + \@kernel@before@para@begin + \hook_use:n {para/begin} + \if_mode_horizontal: \else: + \__kernel_msg_error:nnnn {para}{mode}{begin}{vertical} \fi: + \__para_handle_indent: +} +\tex_everypar:D{\g__para_standard_everypar_tl} +\newtoks \everypar + +\tl_gput_right:Nx \g__para_standard_everypar_tl { + \exp_not:N \the + \exp_not:N \toks + \the \allocationnumber + \c_space_tl +} +\box_new:N \g_para_indent_box + +\cs_new:Npn \__para_handle_indent: { + \box_use_drop:N \g_para_indent_box +} +\cs_new:Npn \para_omit_indent: { + \box_gclear:N \g_para_indent_box +} +\cs_set_eq:NN \IndentBox \g_para_indent_box +\cs_set_eq:NN \OmitIndent \para_omit_indent: +\cs_new_protected:Npn \para_end: { + \mode_if_horizontal:TF { + \mode_if_inner:F { + \tex_unskip:D + \hook_use:n{para/end} + \@kernel@after@para@end + \mode_if_horizontal:TF { + \if_int_compare:w 0 < \tex_lastnodetype:D + \tex_kern:D \c_zero_dim + \fi: + \tex_par:D + \hook_use:n{para/after} + \@kernel@after@para@after + } + { \__kernel_msg_error:nnnn {para}{mode}{end}{horizontal} } + } + } + \tex_par:D +} +\cs_new:Npn \para_raw_indent: { + \mode_if_vertical:TF + { + \tex_everypar:D { + \box_gset_to_last:N \g_para_indent_box + \tex_everypar:D { \g__para_standard_everypar_tl } + \__para_handle_indent: + \the\everypar } + } + { \__kernel_msg_error:nn {para}{raw} } + \tex_indent:D +} +\cs_new:Npn \para_raw_noindent: { + \mode_if_vertical:TF + { + \tex_everypar:D { + \tex_everypar:D { \g__para_standard_everypar_tl } + \the\everypar } + } + { \__kernel_msg_error:nn {para}{raw} } + \tex_noindent:D +} +\cs_new_eq:NN \para_raw_end: \tex_par:D +\cs_set_eq:NN \RawIndent \para_raw_indent: +\cs_set_eq:NN \RawNoindent \para_raw_noindent: +\cs_set_eq:NN \RawParEnd \para_raw_end: +\cs_set_eq:NN \par \para_end: +\cs_set_eq:NN \@@par \para_end: +\cs_set_eq:NN \endgraf \para_end: +\everypar{\@nodocument} %% To get an error if text appears before the +\__kernel_msg_new:nnnn {para} {mode} + { + Illegal~mode~ change~ in~ hook~ 'para/#1'.\\ + Hook~ code~ did~ not~ remain~ in~ #2~ mode. + } { - \str_if_eq:nnTF {#1} { top-level } - { - \msg_error:nnnnn { hooks } { set-top-level } - { to } { SetDefaultHookLabel } {#1} - } - { \tl_gset:Nn \g__hook_hook_curr_name_tl {#1} } + Paragraph~ hooks~ cannot~ change~ the~ TeX~ mode~ without~ causing~ + endless~ recursion.~ The~ hook~ code~ in~ 'para/#1'~ needs~ to~ stay~ + in~ #2~ mode,~ but~ it~ didn't.~ Examine~ the~ hook~ + code~ with~ \ShowHook~ to~ find~ the~ issue. } -\NewDocumentCommand \DeclareDefaultHookLabel { m } +\__kernel_msg_new:nnnn {para} {raw} { - \msg_error:nn { hooks } { ddhl-deprecated } - \SetDefaultHookLabel {#1} + Paragraph started while not in vertical mode. } -\NewDocumentCommand \PushDefaultHookLabel { m } - { \__hook_curr_name_push:n {#1} } -\NewDocumentCommand \PopDefaultHookLabel { } - { \__hook_curr_name_pop: } -\cs_gset_protected:Npn \@expl@push@filename@aux@@ #1#2#3 { - \__hook_curr_name_push:n {#3} - \str_gset:Nx \g_file_curr_name_str {#3} - #1 #2 {#3} + Starting a paragraph with \RawIndent or \RawNoindent + (or \para_raw_indent: or \para_raw_noindent:) is only + allowed if LaTeX is in vertical mode. } -\cs_new:Npn \UseHook { \hook_use:n } -\cs_new:Npn \UseOneTimeHook { \hook_use_once:n } -\cs_new_protected:Npn \ShowHook { \hook_show:n } -\cs_new_protected:Npn \LogHook { \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} } -\cs_new_eq:NN \IfHookExistsTF \hook_if_exist:nTF -\cs_new_eq:NN \IfHookEmptyTF \hook_if_empty:nTF -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 -\cs_new_eq:NN \@expl@@@initialize@all@@ - \__hook_initialize_all: -\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\AddToHookNext#1#2{} -\def\AddToHook#1{\@gobble@AddToHook@args} -\providecommand\@gobble@AddToHook@args[2][]{} - -\def\RemoveFromHook#1{\@gobble@RemoveFromHook@arg} -\providecommand\@gobble@RemoveFromHook@arg[1][]{} +\IncludeInRelease{0000/00/00}% + {ltpara}{Undo~hooks~for~paragraphs} -\def \UseHook #1{} -\def \UseOneTimeHook #1{} -\def \ShowHook #1{} -\let \DebugHooksOn \@empty -\let \DebugHooksOff\@empty +\let \OmitIndent \@undefined +\let \IndentBox \@undefined +\let \RawIndent \@undefined +\let \RawNoindent \@undefined +\let \RawParEnd \@undefined -\def \DeclareHookRule #1#2#3#4{} -\def \DeclareDefaultHookRule #1#2#3{} -\def \ClearHookRule #1#2#3{} -\long\def \IfHookExistsTF #1#2#3{#3} -\long\def \IfHookEmptyTF #1#2#3{#2} +\cs_set_eq:NN \par \tex_par:D +\cs_set_eq:NN \@@par \tex_par:D +\cs_set_eq:NN \endgraf \tex_par:D -\EndIncludeInRelease +\EndModuleRelease +\ExplSyntaxOff %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% From File: ltalloc.dtx -%%% From File: ltcntrl.dtx -%%% From File: lterror.dtx -%%% From File: ltpar.dtx %%% From File: ltspace.dtx \IncludeInRelease{2019/10/01}% {\pagebreak}{Make commands robust}% @@ -5402,8 +6231,6 @@ of this package available from CTAN} \let\expandafter\noexpand\csname __hook env/document/begin\endcsname \noexpand\@empty} -\let \@kernel@before@begindocument \@empty -\let \@kernel@after@begindocument \@empty \EndIncludeInRelease \IncludeInRelease{2017/04/15}% @@ -5668,6 +6495,52 @@ of this package available from CTAN} \DeclareRobustCommand\IfFileExists[1]{% \set@curr@file{#1}% \expandafter\IfFileExists@\expandafter{\@curr@file}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\quote@name}{Quote file names}% + +\let\quote@name\@undefined +\let\quote@@name\@undefined +\let\unquote@name\@undefined + +\long\def \IfFileExists#1#2#3{% + \openin\@inputcheck#1 % + \ifeof\@inputcheck + \ifx\input@path\@undefined + \def\reserved@a{#3}% + \else + \def\reserved@a{\@iffileonpath{#1}{#2}{#3}}% + \fi + \else + \closein\@inputcheck + \edef\@filef@und{#1 }% + \def\reserved@a{#2}% + \fi + \reserved@a} + +\EndIncludeInRelease +\IncludeInRelease{2021/06/01}% + {\IfFileExists@}{manage unbalanced conditionals} +\long\def \IfFileExists@#1#2#3{% + \openin\@inputcheck"#1" % + \ifeof\@inputcheck + \ifx\input@path\@undefined + \let\reserved@a\@secondoftwo + \else + \def\reserved@a{\@iffileonpath{#1}}% + \fi + \else + \closein\@inputcheck + \edef\@filef@und{"#1" }% + \let\reserved@a\@firstoftwo + \fi + \expandafter\def\expandafter\reserved@a + \expandafter{\reserved@a{#2}{#3}}% +\reserved@a} +\EndIncludeInRelease +\IncludeInRelease{2019/10/01}% + {\IfFileExists@}{manage unbalanced conditionals} + \long\def \IfFileExists@#1#2#3{% \openin\@inputcheck"#1" % \ifeof\@inputcheck @@ -5682,6 +6555,16 @@ of this package available from CTAN} \def\reserved@a{#2}% \fi \reserved@a} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\IfFileExists@}{manage unbalanced conditionals} + +\let\IfFileExists@\@undefined + + +\EndIncludeInRelease +\IncludeInRelease{2019/10/01}% + {\@iffileonpath}{Quote file names} \long\def\@iffileonpath#1{% \let\reserved@a\@secondoftwo \expandafter\@tfor\expandafter\reserved@b\expandafter @@ -5696,28 +6579,7 @@ of this package available from CTAN} \reserved@a} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\quote@name}{Quote file names}% - -\let\quote@name\@undefined -\let\quote@@name\@undefined -\let\unquote@name\@undefined - -\let\IfFileExists@\@undefined - -\long\def \IfFileExists#1#2#3{% - \openin\@inputcheck#1 % - \ifeof\@inputcheck - \ifx\input@path\@undefined - \def\reserved@a{#3}% - \else - \def\reserved@a{\@iffileonpath{#1}{#2}{#3}}% - \fi - \else - \closein\@inputcheck - \edef\@filef@und{#1 }% - \def\reserved@a{#2}% - \fi - \reserved@a} + {\quote@name}{Quote file names} \long\def\@iffileonpath#1{% \let\reserved@a\@secondoftwo @@ -6157,13 +7019,25 @@ of this package available from CTAN} }% \fi}% \EndIncludeInRelease +\IncludeInRelease{2021/06/01}% + {\usefont}{Force font face}% +\DeclareRobustCommand\usefont[4]{\fontencoding{#1}% + \edef\f@family{#2}% + \set@target@series{#3}% + \edef\f@shape{#4}% + \let\delayed@f@adjustment\@empty + \selectfont + \ignorespaces} +\EndIncludeInRelease \IncludeInRelease{2020/02/02}% {\usefont}{Drop m in usefont}% + \DeclareRobustCommand\usefont[4]{\fontencoding{#1}% \edef\f@family{#2}% \set@target@series{#3}% \edef\f@shape{#4}\selectfont \ignorespaces} + \EndIncludeInRelease \IncludeInRelease{0000/00/00}% {\usefont}{Drop m in usefont}% @@ -6785,7 +7659,7 @@ of this package available from CTAN} \let\DeclareFontSeriesChangeRule\@undefined \EndIncludeInRelease -\IncludeInRelease{2021/05/01}% +\IncludeInRelease{2021/06/01}% {\fontseries}{delay fontseries update}% \DeclareRobustCommand\fontseries[1]{\@forced@seriesfalse \expandafter\def\expandafter\delayed@f@adjustment\expandafter @@ -6805,9 +7679,7 @@ of this package available from CTAN} \edef\f@series{#1}} \let\delayed@f@adjustment\@undefined -\ifx\@forced@seriestrue\@undefined \else - \expandafter\newif\csname if@forced@series\endcsname -\fi +\expandafter\newif\csname if@forced@series\endcsname \EndIncludeInRelease \IncludeInRelease{0000/00/00}% @@ -6982,7 +7854,7 @@ of this package available from CTAN} \let\sscdefault\@undefined \EndIncludeInRelease -\IncludeInRelease{2021/05/01}% +\IncludeInRelease{2021/06/01}% {\fontshape}{Font shape change}% \DeclareRobustCommand\fontshape[1] {\expandafter\def\expandafter\delayed@f@adjustment\expandafter @@ -7113,7 +7985,7 @@ of this package available from CTAN} %% Copyright (C) 1989-97 by Frank Mittelbach and Rainer Sch\"opf. %% Copyright (C) 1994-97 by LaTeX Project. All rights reserved. -\IncludeInRelease{2021/05/01}% +\IncludeInRelease{2021/06/01}% {\selectfont}{Add hook to \selectfont}% \DeclareRobustCommand\selectfont {% @@ -7137,6 +8009,7 @@ of this package available from CTAN} \fi \let\delayed@f@adjustment\@empty \fi + \@forced@seriesfalse \xdef\font@name{% \csname\curr@fontshape/\f@size\endcsname}% \pickup@font @@ -7714,6 +8587,9 @@ of this package available from CTAN} \prepare@family@series@update{tt}\ttdefault \@ttfamilyhook \selectfont} +\let\@rmfamilyhook\@empty +\let\@sffamilyhook\@empty +\let\@ttfamilyhook\@empty \EndIncludeInRelease @@ -7852,8 +8728,23 @@ of this package available from CTAN} \DeclareRobustCommand\symbol[1]{\char#1\relax} \EndIncludeInRelease -\IncludeInRelease{2020/02/02}% +\IncludeInRelease{2021/06/01}% + {\normalfont}{Add hook to \normalfont}% +\DeclareRobustCommand\normalfont{% + \fontencoding\encodingdefault + \edef\f@family{\familydefault}% + \edef\f@series{\seriesdefault}% + \edef\f@shape{\shapedefault}% + \let\delayed@f@adjustment\@empty + \UseHook{normalfont}% + \@defaultfamilyhook % hookname from 2020/02 will vanish + \selectfont} +\let\reset@font\normalfont +\EndIncludeInRelease + +\IncludeInRelease{2020/10/01}% {\normalfont}{Add hook to \normalfont}% + \DeclareRobustCommand\normalfont{% \fontencoding\encodingdefault \edef\f@family{\familydefault}% @@ -7862,8 +8753,28 @@ of this package available from CTAN} \UseHook{normalfont}% \@defaultfamilyhook % hookname from 2020/02 will vanish \selectfont} + +\let\reset@font\normalfont + +\EndIncludeInRelease + +\IncludeInRelease{2020/02/02}% + {\normalfont}{Add hook to \normalfont}% + +\DeclareRobustCommand\normalfont{% + \fontencoding\encodingdefault + \edef\f@family{\familydefault}% + \edef\f@series{\seriesdefault}% + \edef\f@shape{\shapedefault}% + \@defaultfamilyhook + \selectfont} + \let\reset@font\normalfont + +\let\@defaultfamilyhook\@empty + \EndIncludeInRelease + \IncludeInRelease{0000/00/00}% {\normalfont}{Add hook to \normalfont}% @@ -7958,8 +8869,8 @@ of this package available from CTAN} \let\textssc\@undefined \EndIncludeInRelease %%% From File: lttextcomp.dtx -\IncludeInRelease{2020/02/02}% - {\oldstylenums}{Old style numerals}% +\NewModuleRelease{2020/02/02}{lttextcomp} + {Text Companion symbols} \DeclareRobustCommand\legacyoldstylenums[1]{% \begingroup \spaceskip\fontdimen\tw@\font @@ -7996,24 +8907,6 @@ of this package available from CTAN} \egroup } \def\textcompsubstdefault{\rmsubstdefault} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\oldstylenums}{Old style numerals}% - -\DeclareRobustCommand\oldstylenums[1]{% - \begingroup - \spaceskip\fontdimen\tw@\font - \usefont{OML}{\rmdefault}{\f@series}{it}% - \mathgroup\symletters #1% - \endgroup -} -\let\legacyoldstylenums\@undefined -\def\textcompsubstdefault{cmr} - -\EndIncludeInRelease - -\IncludeInRelease{2020/02/02}% - {\DeclareEncodingSubset}{Text companion symbols}% \def\DeclareEncodingSubset#1#2{% \DeclareEncodingSubset@aux{#1}#2*\DeclareEncodingSubset@aux } @@ -8576,9 +9469,19 @@ of this package available from CTAN} \DeclareTextSymbolDefault{\textlegacyperiodcentered}{OMS} \DeclareTextSymbolDefault{\textlegacysection}{OMS} -\EndIncludeInRelease + \IncludeInRelease{0000/00/00}% - {\DeclareEncodingSubset}{Text companion symbols}% + {lttextcomp}{Undefine text companion symbols}% + +\DeclareRobustCommand\oldstylenums[1]{% + \begingroup + \spaceskip\fontdimen\tw@\font + \usefont{OML}{\rmdefault}{\f@series}{it}% + \mathgroup\symletters #1% + \endgroup +} +\let\legacyoldstylenums\@undefined +\def\textcompsubstdefault{cmr} \let\DeclareEncodingSubset\@undefined \let\CheckEncodingSubset\@undefined @@ -8769,7 +9672,7 @@ of this package available from CTAN} \let\textlegacyperiodcentered\@undefined \let\textlegacysection\@undefined -\EndIncludeInRelease +\EndModuleRelease %%% From File: ltpageno.dtx @@ -8902,7 +9805,7 @@ of this package available from CTAN} \let\@enddocument@kernel@warnings\@undefined \EndIncludeInRelease -\IncludeInRelease{2021/05/01}% +\IncludeInRelease{2021/06/01}% {\@kernel@before@enddocument}{kernel before hook}% \def\@kernel@before@enddocument{\par} \EndIncludeInRelease @@ -9498,7 +10401,7 @@ of this package available from CTAN} \mb@b \kern\z@}} \EndIncludeInRelease -\IncludeInRelease{2021/05/01}% +\IncludeInRelease{2021/06/01}% {\color@begingroup}{color group settings}% \let\color@begingroup\begingroup \def\color@endgroup{\endgraf\endgroup} @@ -9599,7 +10502,7 @@ of this package available from CTAN} \baselineskip\normalbaselineskip \sloppy} \EndIncludeInRelease -\IncludeInRelease{2021/05/01}% +\IncludeInRelease{2021/06/01}% {\@mpfootnotetext}{footnotetext tagging}% \long\def\@mpfootnotetext#1{% \global\setbox\@mpfootins\vbox{% @@ -10574,7 +11477,7 @@ of this package available from CTAN} \@fpbot \@dblfpbot }% \EndIncludeInRelease -\IncludeInRelease{2021/05/01}% +\IncludeInRelease{2021/06/01}% {\@savemarbox}{Explicit par for marginpar}% \long\def \@savemarbox #1#2{% \global\setbox #1% @@ -10642,7 +11545,7 @@ of this package available from CTAN} {\@textsubscript}{subscript baseline}% \let\@textsubscript\@undefined \EndIncludeInRelease -\IncludeInRelease{2021/05/01}% +\IncludeInRelease{2021/06/01}% {\@footnotetext}{footnotetext tagging}% \long\def\@footnotetext#1{\insert\footins{% \reset@font\footnotesize @@ -10677,7 +11580,7 @@ of this package available from CTAN} \color@endgroup}}% \EndIncludeInRelease -\IncludeInRelease{2021/05/01}% +\IncludeInRelease{2021/06/01}% {\footref}{Add footref}% \def\footref#1{% \begingroup @@ -10686,15 +11589,15 @@ of this package available from CTAN} \@footnotemark } \EndIncludeInRelease -%%\IncludeInRelease{0000/00/00}% -%% {\footref}{Add footref}% -%% -%%\let\footref\@undefined -%% -%%\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\footref}{Add footref}% + + % \let\footref\@undefined + +\EndIncludeInRelease %%% From File: ltidxglo.dtx %%% From File: ltbibl.dtx -\IncludeInRelease{2021/05/01}% +\IncludeInRelease{2021/06/01}% {\nocite}{Allow nocite in preamble}% \def\nocite#1{\@bsphack \ifx\@onlypreamble\document @@ -10791,12 +11694,25 @@ of this package available from CTAN} \IncludeInRelease{0000/00/00}{\@pushfilename}% {Add \@expl@push@filename@@ and \@expl@push@filename@aux@@}% +\ifnum\sourceLaTeXdate<20200202\relax + \GenericInfo{}{Defining 00-00-00\string\@pushfilename.} \def\@pushfilename{% \xdef\@currnamestack{% {\@currname}% {\@currext}% {\the\catcode`\@}% \@currnamestack}} +\else + \GenericInfo{}{Defining 2020-02-02\string\@pushfilename.} +\def\@pushfilename{% + \@expl@push@filename@@ + \xdef\@currnamestack{% + {\@currname}% + {\@currext}% + {\the\catcode`\@}% + \@currnamestack}% + \@expl@push@filename@aux@@} +\fi \EndIncludeInRelease \@onlypreamble\@pushfilename @@ -10816,7 +11732,14 @@ of this package available from CTAN} \IncludeInRelease{0000/00/00}{\@popfilename}% {Add \@expl@push@filename@@ and \@expl@push@filename@aux@@}% +\ifnum\sourceLaTeXdate<20200202\relax + \GenericInfo{}{Defining 00-00-00\string\@popfilename.} \def\@popfilename{\expandafter\@p@pfilename\@currnamestack\@nil} +\else + \GenericInfo{}{Defining 2020-02-02\string\@popfilename.} +\def\@popfilename{\expandafter\@p@pfilename\@currnamestack\@nil + \@expl@pop@filename@@} +\fi \EndIncludeInRelease \@onlypreamble\@popfilename @@ -10978,7 +11901,7 @@ of this package available from CTAN} \let\ProvidesClass\ProvidesPackage \@onlypreamble\ProvidesClass \EndIncludeInRelease -\IncludeInRelease{2021/05/01}% +\IncludeInRelease{2021/06/01}% {\@pass@ptions}{Raw option lists}% \def\@pass@ptions#1#2#3{% \@expl@@@filehook@set@curr@file@@nNN @@ -11022,7 +11945,7 @@ of this package available from CTAN} {\csname opt@#3.#1\endcsname,}% \zap@space#2 \@empty}} \EndIncludeInRelease -\IncludeInRelease{2021/05/01}% +\IncludeInRelease{2021/06/01}% {\OptionNotUsed}{filter unused option list}% \def\@remove@eq@value#1=#2\@nil{#1} \def\OptionNotUsed{% @@ -11042,6 +11965,38 @@ of this package available from CTAN} \CurrentOption}% \fi} \EndIncludeInRelease +\IncludeInRelease{2021/06/01}% + {\@xprocess@ptions}{safer @xprocess@ptions}% +\def\@xprocess@ptions{% + \ifx\@currext\@clsextension\else + \ifx\@classoptionslist\relax\else + \@for\CurrentOption:=\@classoptionslist\do{% + \ifx\CurrentOption\@empty\else + \@ifundefined{ds@\CurrentOption}{}{% + \@use@ption + \expandafter\let\csname ds@\CurrentOption\endcsname\@empty + }% + \fi}% + \fi + \fi + \@process@pti@ns} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@xprocess@ptions}{safer @xprocess@ptions}% +\let\@remove@eq@value\@undefined +\def\@xprocess@ptions{% + \ifx\@currext\@clsextension\else + \@for\CurrentOption:=\@classoptionslist\do{% + \ifx\CurrentOption\@empty\else + \@expandtwoargs\in@{,\CurrentOption,}{,\@declaredoptions,}% + \ifin@ + \@use@ption + \expandafter\let\csname ds@\CurrentOption\endcsname\@empty + \fi + \fi}% + \fi + \@process@pti@ns} +\EndIncludeInRelease \IncludeInRelease{2020/10/01}% {\@process@pti@ns}{Unused options issue}% \def\@process@pti@ns{% @@ -11074,7 +12029,7 @@ of this package available from CTAN} \let\@fileswith@pti@ns\@@fileswith@pti@ns \AtEndOfPackage{\let\@unprocessedoptions\relax}} \EndIncludeInRelease -\IncludeInRelease{2021/05/01}% +\IncludeInRelease{2021/06/01}% {\@use@ption}{filter unused option list}% \def\@use@ption{% \@expandtwoargs\@removeelement @@ -11455,14 +12410,12 @@ of this package available from CTAN} \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% + \ifx\@curr@file\reserved@b% \@fileswtrue% \else% \edef\reserved@b{\reserved@b\detokenize{.tex}}% - \ifx\reserved@a\reserved@b + \ifx\@curr@file\reserved@b \@fileswtrue% \fi% \fi% @@ -11752,8 +12705,8 @@ of this package available from CTAN} \endgroup% \EndIncludeInRelease %%% From File: ltfilehook.dtx -\providecommand\ltfilehookversion{v1.0g} -\providecommand\ltfilehookdate{2021/02/08} +\providecommand\ltfilehookversion{v1.0j} +\providecommand\ltfilehookdate{2021/04/29} \IncludeInRelease{2020/10/01}% {\CurrentFile}{Hook management file}% \ExplSyntaxOn @@ -11805,7 +12758,8 @@ of this package available from CTAN} \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 +\seq_if_exist:NF \g__filehook_input_file_seq + { \seq_new:N \g__filehook_input_file_seq } \cs_new_protected:Npn \__filehook_file_push: { \seq_gpush:Nx \g__filehook_input_file_seq @@ -11819,7 +12773,7 @@ of this package available from CTAN} \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 } + \__kernel_msg_error:nnn { hooks } { should-not-happen } { Tried~to~pop~from~an~empty~file~name~stack. } } } @@ -11991,12 +12945,13 @@ of this package available from CTAN} \let \undeclare@file@substitution \@gobble \EndIncludeInRelease -\IncludeInRelease{2021/05/01}% +\IncludeInRelease{2021/06/01}% {\set@curr@file}{Setting current file name}% \def\set@curr@file#1{% \begingroup \escapechar\m@ne \let\protect\string + \edef~{\string~}% \expandafter\def\csname\expandafter\endcsname \expandafter{\csname\endcsname}% \@expl@@@filehook@if@no@extension@@nTF{#1}% @@ -12013,6 +12968,7 @@ of this package available from CTAN} \endgroup} \EndIncludeInRelease \IncludeInRelease{2020/10/01}% + {\set@curr@file}{Setting current file name}% \def\set@curr@file#1{% \begingroup \escapechar\m@ne @@ -12180,7 +13136,7 @@ of this package available from CTAN} \cs_new_eq:NN \@expl@@@filehook@drop@extension@@N \__filehook_drop_extension:N \cs_new_eq:NN \@expl@@@filehook@file@push@@ - \__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 @@ -12199,7 +13155,7 @@ of this package available from CTAN} %% %%% From File: ltshipout.dtx \providecommand\ltshipoutversion{v1.0i} -\providecommand\ltshipoutdate{2021/01/25} +\providecommand\ltshipoutdate{2021/03/17} \IncludeInRelease{2020/10/01}% {\shipout}{Hook management (shipout)}% \ExplSyntaxOn @@ -13670,6 +14626,47 @@ of this package available from CTAN} \xe@alloc@intercharclass=\thr@@ \fi \EndIncludeInRelease +\ifx\directlua\@undefined +\else + \directlua{% + if luatexbase.callbacktypes['input_level_string'] and % + luatexbase.in_callback('input_level_string','tracingstacklevels') then + luatexbase.remove_from_callback('input_level_string','tracingstacklevels') + end}% +\fi +\IncludeInRelease{2021/06/01}{trace_stack_levels}% + {Lua trace_stack_levels function}% +\ifx\directlua\@undefined +\else + \directlua{% + local function trace_stack_levels (input_ptr) + local tracingstacklevels = tex.count.tracingstacklevels + if tex.tracingmacros > 0 or input_ptr < tracingstacklevels then + if tracingstacklevels > 0 then + if input_ptr < tracingstacklevels then + return "\string\n\string~" .. string.rep(".",input_ptr) + else + return "\string~\string~" + end + else + return "\string\n" + end + else + return "" + end + end + if luatexbase.callbacktypes['input_level_string'] then + luatexbase.add_to_callback('input_level_string', + trace_stack_levels,'tracingstacklevels') + end + }% +\fi +\EndIncludeInRelease + +\IncludeInRelease{0000/00/00}{trace_stack_levels}% + {Lua trace_stack_levels function}% +% Nothing here +\EndIncludeInRelease \IncludeInRelease{2016/02/01}% {\XeTeXintercharclasses}{XeTeX character classes}% \ifx\XeTeXinterchartoks\undefined @@ -13735,7 +14732,7 @@ of this package available from CTAN} {\document@default@language}{Save language for hyphenation}% \let\document@default@language\@undefined \EndIncludeInRelease -\IncludeInRelease{2021/05/01}% +\IncludeInRelease{2021/06/01}% {\pdfgentounicode}{Preload glyphtounicode}% \ifx \pdfgentounicode \@undefined \else \input glyphtounicode @@ -13875,6 +14872,21 @@ of this package available from CTAN} \let\DeclareFontEncoding@saved\@undefined \let\inputencodingname\@undefined \EndIncludeInRelease +\@ifundefined{ExplSyntaxOn}% + {\let\ExplSyntaxOn\@undefined + \let\ExplSyntaxOff\@undefined + \@gobble}% + {\ExplSyntaxOn + \@firstofone}% + {% +\tl_map_inline:Nn \l__latexrelease_restores_tl + { + \cs_set_eq:Nc #1 { __latexrelease_ \cs_to_str:N #1 } + \cs_undefine:c { __latexrelease_ \cs_to_str:N #1 } + } +\tl_clear:N \l__latexrelease_restores_tl +\msg_redirect_name:nnn { hooks } { exists } { } + \ExplSyntaxOff}% \endinput %% %% End of file `latexrelease.sty'. diff --git a/Master/texmf-dist/tex/latex-dev/base/letter.cls b/Master/texmf-dist/tex/latex-dev/base/letter.cls index 34a7ae4b023..587e999eebc 100644 --- a/Master/texmf-dist/tex/latex-dev/base/letter.cls +++ b/Master/texmf-dist/tex/latex-dev/base/letter.cls @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. \NeedsTeXFormat{LaTeX2e}[1996/06/01] \ProvidesClass{letter} - [2021/01/07 v1.3c + [2021/03/05 v1.3c Standard LaTeX document class] \newcommand\@ptsize{} \DeclareOption{a4paper} diff --git a/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua b/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua index ee7fcd3df22..193514467b2 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua +++ b/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua @@ -324,6 +324,7 @@ local callbacktypes = callbacktypes or { glyph_stream_provider = exclusive, make_extensible = exclusive, font_descriptor_objnum_provider = exclusive, + input_level_string = exclusive, } luatexbase.callbacktypes=callbacktypes local callback_register = callback_register or callback.register diff --git a/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex b/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex index 74e4779a415..90b6d2dfe7e 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex +++ b/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex @@ -47,7 +47,7 @@ #1#2[#3]{\endgroup\immediate\write-1{File: #1 #3}} \fi \ProvidesFile{ltluatex.tex}% -[2021/01/15 v1.1s +[2021/04/18 v1.1t LuaTeX support for plain TeX (core) ] \edef\etatcatcode{\the\catcode`\@} diff --git a/Master/texmf-dist/tex/latex-dev/base/ltpara.ltx b/Master/texmf-dist/tex/latex-dev/base/ltpara.ltx deleted file mode 100644 index b56859f471e..00000000000 --- a/Master/texmf-dist/tex/latex-dev/base/ltpara.ltx +++ /dev/null @@ -1,171 +0,0 @@ -%% -%% This is file `ltpara.ltx', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% ltpara.dtx (with options: `2ekernel') -%% -%% This is a generated file. -%% -%% The source is maintained by the LaTeX Project team and bug -%% reports for it can be opened at https://latex-project.org/bugs.html -%% (but please observe conditions on bug reports sent to that address!) -%% -%% -%% Copyright (C) 1993-2021 -%% The LaTeX Project and any individual authors listed elsewhere -%% in this file. -%% -%% This file was generated from file(s) of the LaTeX base system. -%% -------------------------------------------------------------- -%% -%% It may be distributed and/or modified under the -%% conditions of the LaTeX Project Public License, either version 1.3c -%% of this license or (at your option) any later version. -%% The latest version of this license is in -%% https://www.latex-project.org/lppl.txt -%% and version 1.3c or later is part of all distributions of LaTeX -%% version 2008 or later. -%% -%% This file has the LPPL maintenance status "maintained". -%% -%% This file may only be distributed together with a copy of the LaTeX -%% base system. You may however distribute the LaTeX base system without -%% such generated files. -%% -%% The list of all files belonging to the LaTeX base distribution is -%% given in the file `manifest.txt'. See also `legal.txt' for additional -%% information. -%% -%% The list of derived (unpacked) files belonging to the distribution -%% and covered by LPPL is defined by the unpacking scripts (with -%% extension .ins) which are part of the distribution. -%% File: ltpara.dtx (C) Copyright 2020-2021 -%%% From File: lthooks.dtx -\def\ltparaversion{v1.0d} -\def\ltparadate{2021/02/18} - - -\ExplSyntaxOn - -\hook_new_pair:nn{para/before}{para/after} -\hook_new_pair:nn{para/begin}{para/end} -\let \@kernel@before@para@before \@empty -\let \@kernel@before@para@begin \@empty -\let \@kernel@after@para@end \@empty -\let \@kernel@after@para@after \@empty -\tl_new:N \g__para_standard_everypar_tl -\tl_gset:Nn \g__para_standard_everypar_tl { - \box_gset_to_last:N \g_para_indentation_box - \group_begin: - \tex_par:D - \group_end: - \tex_everypar:D { \__kernel_msg_error:nnnn {para}{mode}{before}{vertical} } - \@kernel@before@para@before - \hook_use:n {para/before} - \group_begin: - \tex_everypar:D {} - \skip_zero:N \tex_parskip:D - \tex_noindent:D - \group_end: - \tex_everypar:D{\g__para_standard_everypar_tl} - \cs_set_eq:NN \__para_handle_indent: \__para_add_indentation_box: - \@kernel@before@para@begin - \hook_use:n {para/begin} - \if_mode_horizontal: \else: - \__kernel_msg_error:nnnn {para}{mode}{begin}{vertical} \fi: - \__para_handle_indent: -} -\tex_everypar:D{\g__para_standard_everypar_tl} -\newtoks \everypar - -\tl_gput_right:Nx \g__para_standard_everypar_tl { - \exp_not:N \the - \exp_not:N \toks - \the \allocationnumber - \c_space_tl -} -\box_new:N \g_para_indentation_box - -\cs_new:Npn \__para_add_indentation_box: { - \box_use_drop:N \g_para_indentation_box -} -\cs_new_eq:NN \__para_handle_indent: \__para_add_indentation_box: -\cs_new:Npn \para_suppress_indentation: { - \cs_set_eq:NN \__para_handle_indent: \prg_do_nothing: -} -\cs_set_eq:NN \IndentationBox \g_para_indentation_box -\cs_set_eq:NN \SuppressIndentationBox \para_suppress_indentation: -\cs_new_protected:Npn \para_end: { - \mode_if_horizontal:TF { - \mode_if_inner:F { - \tex_unskip:D - \hook_use:n{para/end} - \@kernel@after@para@end - \mode_if_horizontal:TF { - \if_int_compare:w 0 < \tex_lastnodetype:D - \tex_kern:D \c_zero_dim - \fi: - \tex_par:D - \hook_use:n{para/after} - \@kernel@after@para@after - } - { \__kernel_msg_error:nnnn {para}{mode}{end}{horizontal} } - } - } - \tex_par:D -} -\cs_set_eq:NN \par \para_end: -\cs_set_eq:NN \@@par \para_end: -\cs_set_eq:NN \endgraf \para_end: -\everypar{\@nodocument} %% To get an error if text appears before the -\__kernel_msg_new:nnnn {para} {mode} - { - Illegal~mode~ change~ in~ hook~ 'para/#1'.\\ - Hook~ code~ did~ not~ remain~ in~ #2~ mode. - } - { - Paragraph~ hooks~ cannot~ change~ the~ TeX~ mode~ without~ causing~ - endless~ recursion.~ The~ hook~ code~ in~ 'para/#1'~ needs~ to~ stay~ - in~ #2~ mode,~ but~ it~ didn't.~ Examine~ the~ hook~ - code~ with~ \ShowHook~ to~ find~ the~ issue. - } -\ExplSyntaxOff -\IfFormatAtLeastTF{2021/05/01}{} -{ -\long\def \@savemarbox #1#2{% - \global\setbox #1% - \color@vbox - \vtop{% - \hsize\marginparwidth - \@parboxrestore - \@marginparreset - #2\par % <-- needed - \@minipagefalse - \outer@nobreak - }% - \color@endbox -} -\newcounter{paracnt} -\def\@kernel@before@para@begin{% - \stepcounter{paracnt}% - \typeout{PARA: \arabic{paracnt} start - (\@currenvir\space level\on@line)}% -} -\def\@kernel@after@para@end {% - \typeout{PARA: \arabic{paracnt} end \space\space - (\@currenvir\space level\on@line)}% - \addtocounter{paracnt}{-1}% -} -\let\color@begingroup\begingroup -\def\color@endgroup{\endgraf\endgroup} -\def\color@setgroup{\color@begingroup} % \def\color@setgroup{\color@begingroup\set@color} -\def\color@hbox{\hbox\bgroup\color@begingroup} -\def\color@vbox{\vbox\bgroup\color@begingroup} -\def\color@endbox{\color@endgroup\egroup} -} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\endinput -%% -%% End of file `ltpara.ltx'. diff --git a/Master/texmf-dist/tex/latex-dev/base/omlenc.def b/Master/texmf-dist/tex/latex-dev/base/omlenc.def index 3b3ea0cbfc3..bf1bebaba3d 100644 --- a/Master/texmf-dist/tex/latex-dev/base/omlenc.def +++ b/Master/texmf-dist/tex/latex-dev/base/omlenc.def @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. %%% From File: ltoutenc.dtx \ProvidesFile{omlenc.def} - [2021/02/19 v2.0u + [2021/04/29 v2.0v Standard LaTeX file] \DeclareFontEncoding{OML}{}{} \DeclareTextSymbol{\textless}{OML}{`\<} diff --git a/Master/texmf-dist/tex/latex-dev/base/omsenc.def b/Master/texmf-dist/tex/latex-dev/base/omsenc.def index 10f60116098..c07656fd9d4 100644 --- a/Master/texmf-dist/tex/latex-dev/base/omsenc.def +++ b/Master/texmf-dist/tex/latex-dev/base/omsenc.def @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. %%% From File: ltoutenc.dtx \ProvidesFile{omsenc.def} - [2021/02/19 v2.0u + [2021/04/29 v2.0v Standard LaTeX file] \DeclareFontEncoding{OMS}{}{} \DeclareTextSymbol{\textasteriskcentered}{OMS}{3} % "03 diff --git a/Master/texmf-dist/tex/latex-dev/base/ot1enc.def b/Master/texmf-dist/tex/latex-dev/base/ot1enc.def index 00c70e7e971..7ee4e30b0a8 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ot1enc.def +++ b/Master/texmf-dist/tex/latex-dev/base/ot1enc.def @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. %%% From File: ltoutenc.dtx \ProvidesFile{ot1enc.def} - [2021/02/19 v2.0u + [2021/04/29 v2.0v Standard LaTeX file] \DeclareFontEncoding{OT1}{}{} \DeclareTextAccent{\"}{OT1}{127} diff --git a/Master/texmf-dist/tex/latex-dev/base/ot4enc.def b/Master/texmf-dist/tex/latex-dev/base/ot4enc.def index bb1644e5b28..73b55c8f0a2 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ot4enc.def +++ b/Master/texmf-dist/tex/latex-dev/base/ot4enc.def @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. %%% From File: ltoutenc.dtx \ProvidesFile{ot4enc.def} - [2021/02/19 v2.0u + [2021/04/29 v2.0v Standard LaTeX file] \DeclareFontEncoding{OT4}{}{} \DeclareFontSubstitution{OT4}{cmr}{m}{n} diff --git a/Master/texmf-dist/tex/latex-dev/base/structuredlog.sty b/Master/texmf-dist/tex/latex-dev/base/structuredlog.sty index e945e76549d..8257719886b 100644 --- a/Master/texmf-dist/tex/latex-dev/base/structuredlog.sty +++ b/Master/texmf-dist/tex/latex-dev/base/structuredlog.sty @@ -42,8 +42,8 @@ %% and covered by LPPL is defined by the unpacking scripts (with %% extension .ins) which are part of the distribution. %%% From File: ltfilehook.dtx -\providecommand\ltfilehookversion{v1.0g} -\providecommand\ltfilehookdate{2021/02/08} +\providecommand\ltfilehookversion{v1.0j} +\providecommand\ltfilehookdate{2021/04/29} \ProvidesExplPackage {structuredlog}{\ltfilehookdate}{\ltfilehookversion} {Structuring the TeX transcript file} diff --git a/Master/texmf-dist/tex/latex-dev/base/t1enc.def b/Master/texmf-dist/tex/latex-dev/base/t1enc.def index f59a16678ed..dad5bdd3733 100644 --- a/Master/texmf-dist/tex/latex-dev/base/t1enc.def +++ b/Master/texmf-dist/tex/latex-dev/base/t1enc.def @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. %%% From File: ltoutenc.dtx \ProvidesFile{t1enc.def} - [2021/02/19 v2.0u + [2021/04/29 v2.0v Standard LaTeX file] \DeclareFontEncoding{T1}{}{} \DeclareTextAccent{\`}{T1}{0} diff --git a/Master/texmf-dist/tex/latex-dev/base/textcomp-2018-08-11.sty b/Master/texmf-dist/tex/latex-dev/base/textcomp-2018-08-11.sty index 947c26fb0b3..57659edefc1 100644 --- a/Master/texmf-dist/tex/latex-dev/base/textcomp-2018-08-11.sty +++ b/Master/texmf-dist/tex/latex-dev/base/textcomp-2018-08-11.sty @@ -42,7 +42,6 @@ %% and covered by LPPL is defined by the unpacking scripts (with %% extension .ins) which are part of the distribution. %%% From File: lttextcomp.dtx - \ProvidesPackage{textcomp} [2018/08/11 v2.0j Standard LaTeX package] diff --git a/Master/texmf-dist/tex/latex-dev/base/textcomp.sty b/Master/texmf-dist/tex/latex-dev/base/textcomp.sty index 8db7c8b1d86..dd443d4ccf4 100644 --- a/Master/texmf-dist/tex/latex-dev/base/textcomp.sty +++ b/Master/texmf-dist/tex/latex-dev/base/textcomp.sty @@ -42,7 +42,6 @@ %% and covered by LPPL is defined by the unpacking scripts (with %% extension .ins) which are part of the distribution. %%% From File: lttextcomp.dtx - \providecommand\DeclareRelease[3]{} \providecommand\DeclareCurrentRelease[2]{} diff --git a/Master/texmf-dist/tex/latex-dev/base/tracefnt.sty b/Master/texmf-dist/tex/latex-dev/base/tracefnt.sty index cd7f60a26d5..09146d4c0f0 100644 --- a/Master/texmf-dist/tex/latex-dev/base/tracefnt.sty +++ b/Master/texmf-dist/tex/latex-dev/base/tracefnt.sty @@ -44,7 +44,7 @@ %%% From File: ltfsstrc.dtx %% Copyright (C) 1989-97 by Frank Mittelbach and Rainer Sch\"opf. %% Copyright (C) 1994-97 by LaTeX Project. All rights reserved. -\NeedsTeXFormat{LaTeX2e}[2021/05/01] +\NeedsTeXFormat{LaTeX2e}[2021/06/01] \ProvidesPackage{tracefnt} [2020/12/22 v3.0n Standard LaTeX package (font tracing)] \newcount\tracingfonts @@ -126,6 +126,7 @@ \fi \let\delayed@f@adjustment\@empty \fi + \@forced@seriesfalse \xdef\font@name{% \csname\curr@fontshape/\f@size\endcsname}% \pickup@font @@ -137,7 +138,7 @@ \AddToHook{selectfont} {\ifnum \tracingfonts>\tw@ \@font@info{Switching to \font@name}\fi} -\IncludeInRelease{2021/05/01}% +\IncludeInRelease{2021/06/01}% {\selectfont}{Add hook to \selectfont}% \EndIncludeInRelease \IncludeInRelease{0000/00/00}% diff --git a/Master/texmf-dist/tex/latex-dev/base/tuenc.def b/Master/texmf-dist/tex/latex-dev/base/tuenc.def index 90ebea4f728..3bddf30c999 100644 --- a/Master/texmf-dist/tex/latex-dev/base/tuenc.def +++ b/Master/texmf-dist/tex/latex-dev/base/tuenc.def @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. %%% From File: ltoutenc.dtx \ProvidesFile{tuenc.def} - [2021/02/19 v2.0u + [2021/04/29 v2.0v Standard LaTeX file] \providecommand\UnicodeEncodingName{TU} \begingroup\expandafter\expandafter\expandafter\endgroup @@ -488,8 +488,14 @@ \DeclareUnicodeComposite{\v} {o}{"01D2} \DeclareUnicodeComposite{\v} {U}{"01D3} \DeclareUnicodeComposite{\v} {u}{"01D4} +\DeclareUnicodeComposite{\'} \AE{"01FC} +\DeclareUnicodeComposite{\'} {Æ}{"01FC} +\DeclareUnicodeComposite{\'} \ae{"01FD} +\DeclareUnicodeComposite{\'} {æ}{"01FD} \DeclareUnicodeComposite{\=} \AE{"01E2} +\DeclareUnicodeComposite{\=} {Æ}{"01E2} \DeclareUnicodeComposite{\=} \ae{"01E3} +\DeclareUnicodeComposite{\=} {æ}{"01E3} \DeclareUnicodeComposite{\v} {G}{"01E6} \DeclareUnicodeComposite{\v} {g}{"01E7} \DeclareUnicodeComposite{\v} {K}{"01E8} diff --git a/Master/texmf-dist/tex/latex-dev/graphics/color.sty b/Master/texmf-dist/tex/latex-dev/graphics/color.sty index 0f0b974689a..23c90207aa8 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/color.sty +++ b/Master/texmf-dist/tex/latex-dev/graphics/color.sty @@ -12,7 +12,9 @@ %% %% %% color.dtx Copyright (C) 1994--1999 David Carlisle -%% Copyright (C) 2005-2020 David Carlisle, LaTeX3 Project +%% Copyright (C) 2005-2021 +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. %% %% This file is part of the Standard LaTeX `Graphics Bundle'. %% It may be distributed under the terms of the LaTeX Project Public diff --git a/Master/texmf-dist/tex/latex-dev/graphics/dvipdf.def b/Master/texmf-dist/tex/latex-dev/graphics/dvipdf.def index 39d2d8f9835..04f533c35ae 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/dvipdf.def +++ b/Master/texmf-dist/tex/latex-dev/graphics/dvipdf.def @@ -8,7 +8,9 @@ %% %% drivers.dtx Copyright (C) 1994 David Carlisle Sebastian Rahtz %% Copyright (C) 1995 1996 1997 1998 1999 David Carlisle -%% Copyright (C) 2000-2020 David Carlisle, LaTeX3 Project +%% Copyright (C) 2000-2021 +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. %% %% This file is part of the Standard LaTeX `Graphics Bundle'. %% It may be distributed under the terms of the LaTeX Project Public diff --git a/Master/texmf-dist/tex/latex-dev/graphics/dvipsnam.def b/Master/texmf-dist/tex/latex-dev/graphics/dvipsnam.def index 06e7398272f..826161736cd 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/dvipsnam.def +++ b/Master/texmf-dist/tex/latex-dev/graphics/dvipsnam.def @@ -8,7 +8,9 @@ %% %% drivers.dtx Copyright (C) 1994 David Carlisle Sebastian Rahtz %% Copyright (C) 1995 1996 1997 1998 1999 David Carlisle -%% Copyright (C) 2000-2020 David Carlisle, LaTeX3 Project +%% Copyright (C) 2000-2021 +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. %% %% This file is part of the Standard LaTeX `Graphics Bundle'. %% It may be distributed under the terms of the LaTeX Project Public diff --git a/Master/texmf-dist/tex/latex-dev/graphics/dvipsone.def b/Master/texmf-dist/tex/latex-dev/graphics/dvipsone.def index b942a05ae3f..4918f74ba1f 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/dvipsone.def +++ b/Master/texmf-dist/tex/latex-dev/graphics/dvipsone.def @@ -8,7 +8,9 @@ %% %% drivers.dtx Copyright (C) 1994 David Carlisle Sebastian Rahtz %% Copyright (C) 1995 1996 1997 1998 1999 David Carlisle -%% Copyright (C) 2000-2020 David Carlisle, LaTeX3 Project +%% Copyright (C) 2000-2021 +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. %% %% This file is part of the Standard LaTeX `Graphics Bundle'. %% It may be distributed under the terms of the LaTeX Project Public diff --git a/Master/texmf-dist/tex/latex-dev/graphics/dviwin.def b/Master/texmf-dist/tex/latex-dev/graphics/dviwin.def index 07a34e4db2b..db6eac4074a 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/dviwin.def +++ b/Master/texmf-dist/tex/latex-dev/graphics/dviwin.def @@ -8,7 +8,9 @@ %% %% drivers.dtx Copyright (C) 1994 David Carlisle Sebastian Rahtz %% Copyright (C) 1995 1996 1997 1998 1999 David Carlisle -%% Copyright (C) 2000-2020 David Carlisle, LaTeX3 Project +%% Copyright (C) 2000-2021 +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. %% %% This file is part of the Standard LaTeX `Graphics Bundle'. %% It may be distributed under the terms of the LaTeX Project Public diff --git a/Master/texmf-dist/tex/latex-dev/graphics/emtex.def b/Master/texmf-dist/tex/latex-dev/graphics/emtex.def index c3d17aa20d0..d1d405dae14 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/emtex.def +++ b/Master/texmf-dist/tex/latex-dev/graphics/emtex.def @@ -8,7 +8,9 @@ %% %% drivers.dtx Copyright (C) 1994 David Carlisle Sebastian Rahtz %% Copyright (C) 1995 1996 1997 1998 1999 David Carlisle -%% Copyright (C) 2000-2020 David Carlisle, LaTeX3 Project +%% Copyright (C) 2000-2021 +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. %% %% This file is part of the Standard LaTeX `Graphics Bundle'. %% It may be distributed under the terms of the LaTeX Project Public diff --git a/Master/texmf-dist/tex/latex-dev/graphics/epsfig.sty b/Master/texmf-dist/tex/latex-dev/graphics/epsfig.sty index 114460d3493..bb0abac3949 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/epsfig.sty +++ b/Master/texmf-dist/tex/latex-dev/graphics/epsfig.sty @@ -12,7 +12,9 @@ %% %% %% epsfig.dtx Copyright (C) 1994-1996 1999 Sebastian Rahtz -%% Copyright (C) 2000-2020 David Carlisle, LaTeX3 Project +%% Copyright (C) 2000-2021 +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. %% %% This file is part of the Standard LaTeX `Graphics Bundle'. %% It may be distributed under the terms of the LaTeX Project Public diff --git a/Master/texmf-dist/tex/latex-dev/graphics/graphics-2017-06-25.sty b/Master/texmf-dist/tex/latex-dev/graphics/graphics-2017-06-25.sty index 5cfa5df4500..154867d99a4 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/graphics-2017-06-25.sty +++ b/Master/texmf-dist/tex/latex-dev/graphics/graphics-2017-06-25.sty @@ -12,7 +12,7 @@ %% %% %% graphics.dtx Copyright (C) 1994 David Carlisle Sebastian Rahtz -%% Copyright (C) 1995--2017 David Carlisle, LaTeX3 Project +%% Copyright (C) 1995--2017 David Carlisle, LaTeX Project %% %% This file is part of the Standard LaTeX `Graphics Bundle'. %% It may be distributed under the terms of the LaTeX Project Public diff --git a/Master/texmf-dist/tex/latex-dev/graphics/graphics.sty b/Master/texmf-dist/tex/latex-dev/graphics/graphics.sty index 86e3314d9a5..5d0292c3d08 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/graphics.sty +++ b/Master/texmf-dist/tex/latex-dev/graphics/graphics.sty @@ -12,7 +12,9 @@ %% %% %% graphics.dtx Copyright (C) 1994 David Carlisle Sebastian Rahtz -%% Copyright (C) 1995-2020 David Carlisle, LaTeX3 Project +%% Copyright (C) 1995-2021 +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. %% %% This file is part of the Standard LaTeX `Graphics Bundle'. %% It may be distributed under the terms of the LaTeX Project Public @@ -29,7 +31,7 @@ \DeclareCurrentRelease{}{2019-10-01} \ProvidesPackage{graphics} - [2020/08/30 v1.4c Standard LaTeX Graphics (DPC,SPQR)] + [2021/03/04 v1.4d Standard LaTeX Graphics (DPC,SPQR)] \edef\Gin@codes{% \catcode`\noexpand\^^A\the\catcode`\^^A\relax \catcode`\noexpand\"\the\catcode`\"\relax @@ -202,7 +204,7 @@ \ifx\filename@ext\relax \let\filename@ext\Gin@gzext \else - \edef\Gin@ext{\Gin@ext\Gin@sepdefault\Gin@gzext}% + \edef\filename@ext{\filename@ext\Gin@sepdefault\Gin@gzext}% \fi \fi \ifx\filename@ext\relax @@ -216,9 +218,10 @@ \ifx\Gin@ext\relax 1% \else \@ifundefined{Gin@rule@\Gin@ext}{1}{0}% \fi >0 - \let\Gin@ext\relax + \let\Gin@extsaved\Gin@ext \let\Gin@savedbase\filename@base \let\Gin@savedext\filename@ext + \let\Gin@ext\relax \edef\filename@base{\filename@base\Gin@sepdefault\filename@ext}% \let\filename@ext\relax \@for\Gin@temp:=\Gin@extensions\do{% @@ -226,6 +229,7 @@ \Gin@getbase\Gin@temp \fi}% \ifx\Gin@ext\relax + \let\Gin@ext\Gin@extsaved \let\filename@base\Gin@savedbase \let\filename@ext\Gin@savedext \fi diff --git a/Master/texmf-dist/tex/latex-dev/graphics/graphicx.sty b/Master/texmf-dist/tex/latex-dev/graphics/graphicx.sty index 9446a0a5c2f..0a259c8836f 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/graphicx.sty +++ b/Master/texmf-dist/tex/latex-dev/graphics/graphicx.sty @@ -12,7 +12,9 @@ %% %% %% graphicx.dtx Copyright (C) 1994 David Carlisle Sebastian Rahtz -%% Copyright (C) 1995-2020 David Carlisle, LaTeX3 Project +%% Copyright (C) 1995-2021 +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. %% %% This file is part of the Standard LaTeX `Graphics Bundle'. %% It may be distributed under the terms of the LaTeX Project Public @@ -21,7 +23,7 @@ %% \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesPackage{graphicx} - [2020/09/09 v1.2b Enhanced LaTeX Graphics (DPC,SPQR)] + [2020/12/05 v1.2c Enhanced LaTeX Graphics (DPC,SPQR)] \DeclareOption{unknownkeysallowed} {\PassOptionsToPackage\CurrentOption{keyval}} \DeclareOption*{\PassOptionsToPackage\CurrentOption{graphics}} @@ -99,7 +101,7 @@ \define@key{Gin}{decodearray}{% \def\Gin@decode{#1}% } -\define@key{Gin}{quiet}{% +\define@key{Gin}{quiet}[]{% \let\Gin@log\@gobble } \define@key{Gin}{page}{% diff --git a/Master/texmf-dist/tex/latex-dev/graphics/keyval.sty b/Master/texmf-dist/tex/latex-dev/graphics/keyval.sty index ddb6c0a183e..97bbda4f480 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/keyval.sty +++ b/Master/texmf-dist/tex/latex-dev/graphics/keyval.sty @@ -12,7 +12,9 @@ %% %% %% keyval.dtx Copyright (C) 1993 1994 1995 1997 1998 1999 David Carlisle -%% Copyright (C) 2000-2020 David Carlisle, LaTeX3 Project +%% Copyright (C) 2000-2021 David Carlisle, LaTeX Project +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. %% %% This file is part of the Standard LaTeX `Graphics Bundle'. %% It may be distributed under the terms of the LaTeX Project Public diff --git a/Master/texmf-dist/tex/latex-dev/graphics/lscape.sty b/Master/texmf-dist/tex/latex-dev/graphics/lscape.sty index d9f2daee5a8..25342e422fc 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/lscape.sty +++ b/Master/texmf-dist/tex/latex-dev/graphics/lscape.sty @@ -12,7 +12,9 @@ %% %% %% lscape.dtx Copyright (C) 1994 1999-2000 David Carlisle -%% Copyright (C) 2000-2020 David Carlisle, LaTeX3 Project +%% Copyright (C) 2000-2021 +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. %% %% This file is part of the Standard LaTeX `Graphics Bundle'. %% It may be distributed under the terms of the LaTeX Project Public diff --git a/Master/texmf-dist/tex/latex-dev/graphics/pctex32.def b/Master/texmf-dist/tex/latex-dev/graphics/pctex32.def index 58c913cd023..5934c4c0a94 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/pctex32.def +++ b/Master/texmf-dist/tex/latex-dev/graphics/pctex32.def @@ -8,7 +8,9 @@ %% %% drivers.dtx Copyright (C) 1994 David Carlisle Sebastian Rahtz %% Copyright (C) 1995 1996 1997 1998 1999 David Carlisle -%% Copyright (C) 2000-2020 David Carlisle, LaTeX3 Project +%% Copyright (C) 2000-2021 +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. %% %% This file is part of the Standard LaTeX `Graphics Bundle'. %% It may be distributed under the terms of the LaTeX Project Public diff --git a/Master/texmf-dist/tex/latex-dev/graphics/pctexhp.def b/Master/texmf-dist/tex/latex-dev/graphics/pctexhp.def index 341204427d1..76e83d251c4 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/pctexhp.def +++ b/Master/texmf-dist/tex/latex-dev/graphics/pctexhp.def @@ -8,7 +8,9 @@ %% %% drivers.dtx Copyright (C) 1994 David Carlisle Sebastian Rahtz %% Copyright (C) 1995 1996 1997 1998 1999 David Carlisle -%% Copyright (C) 2000-2020 David Carlisle, LaTeX3 Project +%% Copyright (C) 2000-2021 +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. %% %% This file is part of the Standard LaTeX `Graphics Bundle'. %% It may be distributed under the terms of the LaTeX Project Public diff --git a/Master/texmf-dist/tex/latex-dev/graphics/pctexps.def b/Master/texmf-dist/tex/latex-dev/graphics/pctexps.def index 6920dcd739e..85f6f3a13de 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/pctexps.def +++ b/Master/texmf-dist/tex/latex-dev/graphics/pctexps.def @@ -8,7 +8,9 @@ %% %% drivers.dtx Copyright (C) 1994 David Carlisle Sebastian Rahtz %% Copyright (C) 1995 1996 1997 1998 1999 David Carlisle -%% Copyright (C) 2000-2020 David Carlisle, LaTeX3 Project +%% Copyright (C) 2000-2021 +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. %% %% This file is part of the Standard LaTeX `Graphics Bundle'. %% It may be distributed under the terms of the LaTeX Project Public diff --git a/Master/texmf-dist/tex/latex-dev/graphics/pctexwin.def b/Master/texmf-dist/tex/latex-dev/graphics/pctexwin.def index 198644d3b3b..cf44d184547 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/pctexwin.def +++ b/Master/texmf-dist/tex/latex-dev/graphics/pctexwin.def @@ -8,7 +8,9 @@ %% %% drivers.dtx Copyright (C) 1994 David Carlisle Sebastian Rahtz %% Copyright (C) 1995 1996 1997 1998 1999 David Carlisle -%% Copyright (C) 2000-2020 David Carlisle, LaTeX3 Project +%% Copyright (C) 2000-2021 +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. %% %% This file is part of the Standard LaTeX `Graphics Bundle'. %% It may be distributed under the terms of the LaTeX Project Public diff --git a/Master/texmf-dist/tex/latex-dev/graphics/rotating.sty b/Master/texmf-dist/tex/latex-dev/graphics/rotating.sty index 14ba6fb1427..7f3a2df8f47 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/rotating.sty +++ b/Master/texmf-dist/tex/latex-dev/graphics/rotating.sty @@ -11,9 +11,11 @@ %% (but please observe conditions on bug reports sent to that address!) %% %% -%% Copyright (C) 1995--1999 Sebastian Rahtz and Leonor Barroca -%% Copyright (C) 2001--2003,2007--2009 Robin Fairbairns -%% Copyright (C) 2016-2020 LaTeX3 Project +%% Copyright (C) 1995-1999 Sebastian Rahtz and Leonor Barroca +%% Copyright (C) 2001-2003,2007-2009 Robin Fairbairns +%% Copyright (C) 2016-2021 LaTeX Project +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{rotating}% [2016/08/11 v2.16d diff --git a/Master/texmf-dist/tex/latex-dev/graphics/tcidvi.def b/Master/texmf-dist/tex/latex-dev/graphics/tcidvi.def index d4a93d43c38..805384f66e7 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/tcidvi.def +++ b/Master/texmf-dist/tex/latex-dev/graphics/tcidvi.def @@ -8,7 +8,9 @@ %% %% drivers.dtx Copyright (C) 1994 David Carlisle Sebastian Rahtz %% Copyright (C) 1995 1996 1997 1998 1999 David Carlisle -%% Copyright (C) 2000-2020 David Carlisle, LaTeX3 Project +%% Copyright (C) 2000-2021 +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. %% %% This file is part of the Standard LaTeX `Graphics Bundle'. %% It may be distributed under the terms of the LaTeX Project Public diff --git a/Master/texmf-dist/tex/latex-dev/graphics/trig.sty b/Master/texmf-dist/tex/latex-dev/graphics/trig.sty index 1cdc14cb7e3..1147ab46c79 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/trig.sty +++ b/Master/texmf-dist/tex/latex-dev/graphics/trig.sty @@ -11,8 +11,10 @@ %% (but please observe conditions on bug reports sent to that address!) %% %% -%% File: trig.dtx Copyright (C) 1993 1994 1995 1996 1997 1999 David Carlisle -%% Copyright (C) 2000-2020 David Carlisle, LaTeX3 Project +%% File: trig.dtx Copyright (C) 1993-1999 David Carlisle +%% Copyright (C) 2000-2021 +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. %% %% This file is part of the Standard LaTeX `Graphics Bundle'. %% It may be distributed under the terms of the LaTeX Project Public diff --git a/Master/texmf-dist/tex/latex-dev/graphics/truetex.def b/Master/texmf-dist/tex/latex-dev/graphics/truetex.def index 62a4742b863..a2d0fc970ea 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/truetex.def +++ b/Master/texmf-dist/tex/latex-dev/graphics/truetex.def @@ -8,7 +8,9 @@ %% %% drivers.dtx Copyright (C) 1994 David Carlisle Sebastian Rahtz %% Copyright (C) 1995 1996 1997 1998 1999 David Carlisle -%% Copyright (C) 2000-2020 David Carlisle, LaTeX3 Project +%% Copyright (C) 2000-2021 +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. %% %% This file is part of the Standard LaTeX `Graphics Bundle'. %% It may be distributed under the terms of the LaTeX Project Public diff --git a/Master/texmf-dist/tex/latex-dev/tools/array.sty b/Master/texmf-dist/tex/latex-dev/tools/array.sty index 8fae23a89e9..80b0241e965 100644 --- a/Master/texmf-dist/tex/latex-dev/tools/array.sty +++ b/Master/texmf-dist/tex/latex-dev/tools/array.sty @@ -46,7 +46,7 @@ \DeclareCurrentRelease{}{2020-10-01} \ProvidesPackage{array} - [2021/02/10 v2.5d Tabular extension package (FMi)] + [2021/04/20 v2.5e Tabular extension package (FMi)] %% \def\@addtopreamble#1{\xdef\@preamble{\@preamble #1}} @@ -184,7 +184,7 @@ \newdimen \extrarowheight \extrarowheight=0pt \def\@arstrut{\unhcopy\@arstrutbox} -\def\@arraycr{\relax\iffalse{\fi\ifnum 0=`}\fi +\protected\def\@arraycr{\relax\iffalse{\fi\ifnum 0=`}\fi \@ifstar \@xarraycr \@xarraycr} \def\@xarraycr{\@ifnextchar [% \@argarraycr {\ifnum 0=`{}\fi\cr}} diff --git a/Master/texmf-dist/tex/latex-dev/tools/bm.sty b/Master/texmf-dist/tex/latex-dev/tools/bm.sty index b98b7ed2049..18b4c0c9661 100644 --- a/Master/texmf-dist/tex/latex-dev/tools/bm.sty +++ b/Master/texmf-dist/tex/latex-dev/tools/bm.sty @@ -40,11 +40,17 @@ %% Development of this package was commissioned by Y&Y Inc. \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{bm} - [2019/07/24 v1.2d Bold Symbol Support (DPC/FMi)] -\def\bm#1#2{% - \let\bm@pmb\install@mathalphabet - \let\bm@pmb@\getanddefine@fonts - \let\bm@pmb@@\or + [2021/04/25 v1.2e Bold Symbol Support (DPC/FMi)] +\DeclareOption{nopmb}{\let\bm@pmb@\@firstofone} +\DeclareOption{warn}{\def\bm@info{\PackageWarningNoLine{bm}}} +\DeclareOption{info}{\def\bm@info#1{\PackageInfo{bm}{#1\@gobble}}} +\DeclareOption{silent}{\let\bm@info\@gobble} +\ExecuteOptions{info} +\ProcessOptions\relax +\def\bm@setup#1#2{% + \let\bm@install@mathalphabet\install@mathalphabet + \let\bm@getanddefine@fonts\getanddefine@fonts + \let\bm@or\or \edef\bm@general{\f@encoding/\f@family/\f@series/\f@shape/\f@size}% \@tempcnta#2% \count@-\count18% @@ -65,6 +71,8 @@ \@tempb\csname mv@#1\endcsname\@nil \ifx\@tempa\@tempb \bm@define\m@ne + \bm@info{No #1 for \string##2% + \ifx\bm@pmb@\@firstofone\else, using \string\pmb\fi}% \else \edef\@tempa{sym#1\expandafter\@gobblefour\string##1}% \ifnum\@tempcnta<% @@ -105,7 +113,7 @@ \fi \fi \else - \PackageInfo{bm}% + \bm@info {Symbol font \@tempa\space already defined.\MessageBreak Not overwriting it}% \fi @@ -123,9 +131,9 @@ \z@ \noexpand\fi}% \expandafter\split@name\bm@general\@nil - \let\install@mathalphabet\bm@pmb - \let\getanddefine@fonts\bm@pmb@ - \let\or\bm@pmb@@} + \let\install@mathalphabet\bm@install@mathalphabet + \let\getanddefine@fonts\bm@getanddefine@fonts + \let\or\bm@or} \ifx\bmmax\@undefined \chardef\bmmax=4 \fi @@ -133,9 +141,9 @@ \def\bm@boldtable{\m@ne} \AtEndOfPackage{% \def\bm@gr@up#1#2{% - \bm@pmb{#2}}} + \bm@install@mathalphabet{#2}}} \else - \bm{bold}\bmmax + \bm@setup{bold}\bmmax \@ifundefined{symboldoperators} {} {\DeclareSymbolFontAlphabet\mathbf{boldoperators}} @@ -145,7 +153,7 @@ \fi \ifx\mv@heavy\@undefined \else - \bm{heavy}\hmmax + \bm@setup{heavy}\hmmax \fi \begingroup \catcode`\'=\active @@ -176,6 +184,7 @@ \expandafter\@secondoftwo \fi {##2##4}{##3{##4}}}% + \let\kernel@ifnextchar\@ifnextchar \def\GenericWarning##1##2{% \unvcopy{\GenericWarning{##1}{##2}}}% \def\GenericError##1##2##3##4{% @@ -357,6 +366,7 @@ \fi} \def\bm@pmb#1{% \bm@add{\bm@pmb@{#1}}} +\ifx\bm@pmb@\@firstofone\else \def\bm@pmb@#1{{% \setbox\tw@\hbox{$\m@th\mkern.4mu$}% \mathchoice @@ -372,6 +382,7 @@ \raise1.5\dimen@\rlap{\copy\z@}% \kern\dimen@ \box\z@}}% +\fi \def\bm@class{% \ifcase\count@ \or diff --git a/Master/texmf-dist/tex/latex-dev/tools/layout.sty b/Master/texmf-dist/tex/latex-dev/tools/layout.sty index 354a79b9451..bf2d8584829 100644 --- a/Master/texmf-dist/tex/latex-dev/tools/layout.sty +++ b/Master/texmf-dist/tex/latex-dev/tools/layout.sty @@ -37,7 +37,7 @@ %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{layout} - [2020-07-25 v1.2d Show layout parameters] + [2021-03-10 v1.2e Show layout parameters] \DeclareOption{dutch}{% \def\Headertext{Kopregel} \def\Bodytext{Broodtekst} @@ -104,6 +104,14 @@ \def\oneinchtext{un pollice} \def\notshown{non mostrato} } +\DeclareOption{romanian}{% + \def\Headertext{Antet} + \def\Bodytext{Corp} + \def\Footertext{Subsol} + \def\MarginNotestext{Note\\ Marginale} + \def\oneinchtext{un inch} + \def\notshown{neafi\textcommabelow sat} + } \DeclareOption{japanese}{% \def\Headertext{天} \def\Bodytext{基本版面} diff --git a/Master/texmf-dist/tex/latex-dev/tools/longtable.sty b/Master/texmf-dist/tex/latex-dev/tools/longtable.sty index 16eb6a57915..6c3dcc62fb9 100644 --- a/Master/texmf-dist/tex/latex-dev/tools/longtable.sty +++ b/Master/texmf-dist/tex/latex-dev/tools/longtable.sty @@ -39,11 +39,11 @@ \providecommand\DeclareRelease[3]{} \providecommand\DeclareCurrentRelease[2]{} -\DeclareRelease{}{2020-01-02}{longtable-2020-01-07.sty} +\DeclareRelease{v4.13}{2020-01-02}{longtable-2020-01-07.sty} \DeclareCurrentRelease{}{2020-02-07} \ProvidesPackage{longtable} - [2020-02-07 v4.14 Multi-page Table package (DPC)] + [2021-04-21 v4.15 Multi-page Table package (DPC)] \def\LT@err{\PackageError{longtable}} \def\LT@warn{\PackageWarning{longtable}} \def\LT@final@warn{% @@ -162,12 +162,13 @@ \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi \advance\dimen@ \ht\LT@foot - \dimen@ii\vfuzz + \edef\LT@reset@vfuzz{\vfuzz\the\vfuzz\vbadness\the\vbadness\relax}% \vfuzz\maxdimen - \setbox\tw@\copy\z@ - \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox - \setbox\tw@\vbox{\unvbox\tw@}% - \vfuzz\dimen@ii + \vbadness\@M + \setbox\tw@\copy\z@ + \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox + \setbox\tw@\vbox{\unvbox\tw@}% + \LT@reset@vfuzz \advance\dimen@ \ht \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi \advance\dimen@\dp @@ -227,7 +228,7 @@ \else \expandafter\LT@nofcols \fi} -\def\LT@tabularcr{% +\protected\def\LT@tabularcr{% \relax\iffalse{\fi\ifnum0=`}\fi \@ifstar {\def\crcr{\LT@crcr\noalign{\nobreak}}\let\cr\crcr @@ -396,6 +397,7 @@ {\egroup\@xdblarg{\LT@c@ption\@firstofone}}} \def\LT@makecaption#1#2#3{% \LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\LTcapwidth{% + \reset@font \sbox\@tempboxa{#1{#2: }#3}% \ifdim\wd\@tempboxa>\hsize #1{#2: }#3% @@ -459,7 +461,7 @@ \the\LT@p@ftn \global\LT@p@ftn{}% \hfil} -\def\LT@p@ftntext#1{% +\long\def\LT@p@ftntext#1{% \edef\@tempa{\the\LT@p@ftn\noexpand\footnotetext[\the\c@footnote]}% \global\LT@p@ftn\expandafter{\@tempa{#1}}}% \endinput diff --git a/Master/texmf-dist/tex/latex-dev/tools/trace.sty b/Master/texmf-dist/tex/latex-dev/tools/trace.sty index 8306cf8465f..e43c50706bb 100644 --- a/Master/texmf-dist/tex/latex-dev/tools/trace.sty +++ b/Master/texmf-dist/tex/latex-dev/tools/trace.sty @@ -41,7 +41,7 @@ %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{trace} - [2018/10/13 v1.1e trace LaTeX code] + [2021/04/18 v1.1f trace LaTeX code] \NeedsTeXFormat{LaTeX2e}[1998/12/01] \DeclareOption{logonly} {\let\tracingonline@p\z@} @@ -57,19 +57,20 @@ \tr@ce@n} %% \tracinglostchars\z@ - \def\tr@ce@n{% - \@tracingtrue + \edef\tr@ce@n{% + \noexpand\@tracingtrue \tracingstats\tw@ \tracingpages\@ne - \tracinglostchars\@ne + \tracinglostchars\thr@@ \tracingparagraphs\@ne \errorcontextlines\maxdimen - \ifnum\tracingoutput=\@ne - \else + \ifdefined\tracingstacklevels \tracingstacklevels\maxdimen \fi + \noexpand\ifnum\tracingoutput=\@ne + \noexpand\else \tracingoutput\tw@ \showboxbreadth\maxdimen \showboxdepth\maxdimen - \fi + \noexpand\fi \errorstopmode \tracingmacros\tw@ \tracinggroups\@ne @@ -78,18 +79,20 @@ \tracingassigns\@ne \tracingonline\tracingonline@p } - \def\conditionally@traceoff{% + \edef\conditionally@traceoff{% \tracingassigns\z@ \tracingrestores\z@ \tracingcommands\z@ \tracingpages\z@ \tracingmacros\z@ - \ifnum\tracingoutput=\tw@ + \noexpand\ifnum\tracingoutput=\tw@ \tracingoutput\z@ \showboxbreadth\m@ne \showboxdepth\m@ne - \fi + \noexpand\fi \tracingstats\@ne + \ifdefined\tracingstacklevels \tracingstacklevels\z@ \fi + \errorcontextlines\m@ne \tracingparagraphs\z@ \tracinggroups\z@ } -- cgit v1.2.3