summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex-dev/base/latex.ltx
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-08-31 21:23:42 +0000
committerKarl Berry <karl@freefriends.org>2020-08-31 21:23:42 +0000
commit559a5f5789eaa2d6b0c848ebcdbb10d9e4997794 (patch)
tree9bff60e8286b9ddb26d4ffa06cc3e275716821da /Master/texmf-dist/tex/latex-dev/base/latex.ltx
parent0a15ec8dcd6ba524dfb1f80663dd69d0cc2dd899 (diff)
latex-dev (31aug20)
git-svn-id: svn://tug.org/texlive/trunk@56225 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex-dev/base/latex.ltx')
-rw-r--r--Master/texmf-dist/tex/latex-dev/base/latex.ltx3911
1 files changed, 2908 insertions, 1003 deletions
diff --git a/Master/texmf-dist/tex/latex-dev/base/latex.ltx b/Master/texmf-dist/tex/latex-dev/base/latex.ltx
index 67fea591af3..50794044fc7 100644
--- a/Master/texmf-dist/tex/latex-dev/base/latex.ltx
+++ b/Master/texmf-dist/tex/latex-dev/base/latex.ltx
@@ -8,7 +8,9 @@
%% ltplain.dtx (with options: `2ekernel')
%% ltvers.dtx (with options: `2ekernel')
%% ltluatex.dtx (with options: `2ekernel')
+%% ltexpl.dtx (with options: `2ekernel')
%% ltdefns.dtx (with options: `2ekernel')
+%% lthooks.dtx (with options: `2ekernel')
%% ltalloc.dtx (with options: `2ekernel')
%% ltcntrl.dtx (with options: `2ekernel')
%% lterror.dtx (with options: `2ekernel')
@@ -40,8 +42,10 @@
%% ltidxglo.dtx (with options: `2ekernel')
%% ltbibl.dtx (with options: `2ekernel')
%% ltpage.dtx (with options: `2ekernel')
-%% ltoutput.dtx (with options: `2ekernel')
%% ltclass.dtx (with options: `2ekernel,tracerollback')
+%% ltfilehook.dtx (with options: `2ekernel')
+%% ltshipout.dtx (with options: `2ekernel')
+%% ltoutput.dtx (with options: `2ekernel')
%% ltfinal.dtx (with options: `2ekernel')
%%
%% This is a generated file.
@@ -432,11 +436,7 @@
\extrafloats\expandafter{\numexpr#1-1\relax}%
\fi}%
\fi
-\def\alloc@#1#2#3#4#5{\global\advance\count1#1\@ne
- \ch@ck#1#4#2%
- \allocationnumber\count1#1%
- \global#3#5\allocationnumber
- \wlog{\string#5=\string#2\the\allocationnumber}}
+\def\alloc@#1#2#3#4{\e@alloc#2#3{\count1#1}#4\float@count}
\ifx\numexpr\@undefined
\def\newinsert#1{\global\advance\insc@unt \m@ne
\ch@ck0\insc@unt\count
@@ -710,7 +710,7 @@
\def\fmtname{LaTeX2e}
\edef\fmtversion
{2020-10-01}
-\def\patch@level{-7}
+\def\patch@level{-8}
\edef\development@branch@name{develop \the\year-\the\month-\the\day}
\iffalse
\def\reserved@a#1/#2/#3\@nil{%
@@ -820,23 +820,23 @@
\long\def\@firstofone#1{#1}
\ifx\e@alloc@attribute@count\@undefined
\countdef\e@alloc@attribute@count=258
+ \e@alloc@attribute@count=\z@
\fi
\def\newattribute#1{%
\e@alloc\attribute\attributedef
\e@alloc@attribute@count\m@ne\e@alloc@top#1%
}
-\e@alloc@attribute@count=\z@
\def\setattribute#1#2{#1=\numexpr#2\relax}
\def\unsetattribute#1{#1=-"7FFFFFFF\relax}
\ifx\e@alloc@ccodetable@count\@undefined
\countdef\e@alloc@ccodetable@count=259
+ \e@alloc@ccodetable@count=\z@
\fi
\def\newcatcodetable#1{%
\e@alloc\catcodetable\chardef
\e@alloc@ccodetable@count\m@ne{"8000}#1%
\initcatcodetable\allocationnumber
}
-\e@alloc@ccodetable@count=\z@
\newcatcodetable\catcodetable@initex
\newcatcodetable\catcodetable@string
\begingroup
@@ -919,31 +919,32 @@
\endgroup
\ifx\e@alloc@luafunction@count\@undefined
\countdef\e@alloc@luafunction@count=260
+ \e@alloc@luafunction@count=\z@
\fi
\def\newluafunction{%
\e@alloc\luafunction\e@alloc@chardef
\e@alloc@luafunction@count\m@ne\e@alloc@top
}
-\e@alloc@luafunction@count=\z@
\ifx\e@alloc@whatsit@count\@undefined
\countdef\e@alloc@whatsit@count=261
+ \e@alloc@whatsit@count=\z@
\fi
\def\newwhatsit#1{%
\e@alloc\whatsit\e@alloc@chardef
\e@alloc@whatsit@count\m@ne\e@alloc@top#1%
}
-\e@alloc@whatsit@count=\z@
\ifx\e@alloc@bytecode@count\@undefined
\countdef\e@alloc@bytecode@count=262
+ \e@alloc@bytecode@count=\z@
\fi
\def\newluabytecode#1{%
\e@alloc\luabytecode\e@alloc@chardef
\e@alloc@bytecode@count\m@ne\e@alloc@top#1%
}
-\e@alloc@bytecode@count=\z@
\ifx\e@alloc@luachunk@count\@undefined
\countdef\e@alloc@luachunk@count=263
+ \e@alloc@luachunk@count=\z@
\fi
\def\newluachunkname#1{%
\e@alloc\luachunk\e@alloc@chardef
@@ -951,9 +952,13 @@
{\escapechar\m@ne
\directlua{lua.name[\the\allocationnumber]="\string#1"}}%
}
-\e@alloc@luachunk@count=\z@
-\everyjob\expandafter{%
- \the\everyjob
+\def\now@and@everyjob#1{%
+ \everyjob\expandafter{\the\everyjob
+ #1%
+ }%
+ #1%
+}
+\now@and@everyjob{%
\begingroup
\attributedef\attributezero=0 %
\chardef \charzero =0 %
@@ -982,8 +987,86 @@
\expandafter\let\csname ver@luaotfload.sty\endcsname\fmtversion
}
\fi
+%%% From File: ltexpl.dtx
+\def\@expl@sys@load@backend@@{}
+\def\@expl@push@filename@@{}
+\def\@expl@push@filename@aux@@{}
+\def\@expl@pop@filename@@{}
+\def\@expl@finalise@setup@@{}
+\long\def\@gobble#1{}
+\long\def\@firstofone#1{#1}
+\long\def\@firstoftwo#1#2{#1}
+\long\def\@secondoftwo#1#2{#2}
+\long\def\IfFileExists#1{%
+ \openin\@inputcheck"#1" %
+ \ifeof\@inputcheck
+ \expandafter\@secondoftwo
+ \else
+ \closein\@inputcheck
+ \expandafter\@firstoftwo
+ \fi}
+\long\def\@ifnextchar#1#2#3{%
+ \let\reserved@d=#1%
+ \def\reserved@a{#2}%
+ \def\reserved@b{#3}%
+ \futurelet\@let@token\@ifnch}
+\def\@ifnch{%
+ \ifx\@let@token\reserved@d
+ \expandafter\reserved@a
+ \else
+ \expandafter\reserved@b
+ \fi}
+\expandafter\ifx\csname tex\string _let:D\endcsname\relax
+ \expandafter\@firstofone
+\else
+ \GenericInfo{}{Skipping: expl3 code already part of the format}%
+ \expandafter\endinput
+\fi
+ {%
+ \IfFileExists{expl3.ltx}
+ {%
+ \ifnum0%
+ \ifdefined\pdffilesize 1\fi
+ \ifdefined\filesize 1\fi
+ \ifdefined\luatexversion\ifnum\luatexversion>94 1\fi\fi
+ \ifdefined\kanjiskip 1\fi
+ >0 %
+ \expandafter\@firstofone
+ \else
+ \def~{ }\def\MessageBreak{^^J~~~~~~~~~~~~~~~}%
+ \errmessage{LaTeX Error:
+ LaTeX requires the e-TeX primitives and additional\MessageBreak
+ functionality available in the engines:\MessageBreak
+ - pdfTeX v1.40\MessageBreak
+ - XeTeX v0.99992\MessageBreak
+ - LuaTeX v0.95\MessageBreak
+ - e-(u)pTeX mid-2012\MessageBreak
+ or later%
+ }\batchmode \read -1 to \reserved@a
+ \fi
+ }
+ {%
+ \errmessage{LaTeX requires expl3}%
+ \batchmode \read -1 to \reserved@a
+ }%
+ {%
+ \input expl3.ltx
+ \ifdefined\NewDocumentCommand
+ \else
+ \IfFileExists{xparse.ltx}
+ {\input xparse.ltx }
+ {}%
+ \fi
+ }%
+ }
+\ExplSyntaxOn
+\cs_gset_eq:NN \@expl@cs@to@str@@N \cs_to_str:N
+\cs_gset_eq:NN \@expl@str@if@eq@@nnTF \str_if_eq:nnTF
+\cs_gset_eq:NN \@expl@cs@prefix@spec@@N \cs_prefix_spec:N
+\cs_gset_eq:NN \@expl@cs@argument@spec@@N \cs_argument_spec:N
+\cs_gset_eq:NN \@expl@cs@replacement@spec@@N \cs_replacement_spec:N
+\ExplSyntaxOff
%%% From File: ltdefns.dtx
-\input ltexpl.ltx
\def\two@digits#1{\ifnum#1<10 0\fi\number#1}
\protected\long\def\typeout#1{\begingroup
\set@display@protect
@@ -1022,7 +1105,7 @@
\def\@cons#1#2{\begingroup\let\@elt\relax\xdef#1{#1\@elt #2}\endgroup}
\def\@car#1#2\@nil{#1}
\def\@cdr#1#2\@nil{#2}
-\def\@carcube#1#2#3#4\@nil{#1#2#3}
+\long\def\@carcube#1#2#3#4\@nil{#1#2#3}
\def\@preamblecmds{}
\def\@onlypreamble#1{%
\expandafter\gdef\expandafter\@preamblecmds\expandafter{%
@@ -1230,6 +1313,8 @@
\def\restore@protect{\let\protect\@@protect}
\set@typeset@protect
\def\MakeRobust#1{%
+ \count@=\escapechar
+ \escapechar=`\\
\@ifundefined{\expandafter\@gobble\string#1}{%
\@latex@error{The control sequence `\string#1' is undefined!%
\MessageBreak There is nothing here to make robust}%
@@ -1238,8 +1323,9 @@
{%
\@ifundefined{\expandafter\@gobble\string#1\space}%
{%
- \global\expandafter\let\csname
- \expandafter\@gobble\string#1\space\endcsname=#1%
+ \expandafter\@kernel@rename@newcommand
+ \csname\expandafter\@gobble\string#1\space\endcsname
+ #1%
\edef\reserved@a{\string#1}%
\def\reserved@b{#1}%
\edef\reserved@b{\expandafter\strip@prefix\meaning\reserved@b}%
@@ -1251,19 +1337,183 @@
\csname\expandafter\@gobble\string#1\space\endcsname}%
}%
{\@latex@info{The control sequence `\string#1' is already robust}}%
- }%
+ }%
+ \escapechar=\count@
}%
-
+\def\@kernel@rename@newcommand#1#2{%
+ \robust@command@chk@safe#2%
+ {\@if@newcommand#2%
+ {\afterassignment\global
+ \global\@copy@newcommand#1#2%
+ \global\let#2\@undefined
+ \global\expandafter\let\csname\string#2\endcsname\@undefined}%
+ {\global\let#1=#2}}%
+ {\global\let#1=#2}}
\def\kernel@make@fragile#1{%
\@ifundefined{\expandafter\@gobble\string#1\space}%
{}%
{%
\global\expandafter\let\expandafter #1\csname
- \expandafter\@gobble\string#1\space\endcsname
+ \expandafter\@gobble\string#1\space\endcsname
+ \expandafter\@kernel@rename@newcommand
+ \csname\expandafter\@gobble\string#1\expandafter\endcsname
+ \csname\expandafter\@gobble\string#1\space\endcsname
\global\expandafter\let\csname
- \expandafter\@gobble\string#1\space\endcsname\@undefined
+ \expandafter\@gobble\string#1\space\endcsname\@undefined
}%
}
+\long\def\robust@command@act#1#2#3#4{%
+ \robust@command@chk@safe#2%
+ {\expandafter\robust@command@act@loop
+ \expandafter#2%
+ #1{\@nnil\@nnil}%
+ \robust@command@act@end}%
+ {\robust@command@act@end}%
+ {#3}{#4}}%
+\long\def\robust@command@act@loop#1#2{\robust@command@act@loop@aux#1#2}
+\long\def\robust@command@act@loop@aux#1#2#3{%
+ \ifx\@nnil#2%
+ \else
+ #2{#1}%
+ {\robust@command@act@do{#3}}%
+ {\expandafter\robust@command@act@loop\expandafter#1}%
+ \fi}
+\long\def\robust@command@act@do#1%
+ \fi#2%
+ \robust@command@act@end#3#4{%
+ \fi
+ #1#4}
+\long\def\robust@command@act@end#1#2{#1#2}
+\long\def\robust@command@chk@safe#1{%
+ \begingroup
+ \escapechar=`\\
+ \expandafter\endgroup\expandafter
+ \robust@command@act@chk@args\meaning#1:->\@nil}
+\def\robust@command@act@chk@args#1:->#2\@nil{%
+ \@expl@str@if@eq@@nnTF{#1}{macro}%
+ {\@firstoftwo}%
+ {\@expl@str@if@eq@@nnTF{#1}{\protected macro}%
+ {\@firstoftwo}%
+ {\@secondoftwo}}}
+\def\NewCommandCopy{%
+ \declare@commandcopy
+ {\@firstofone}%
+ {\@firstoftwo\@notdefinable}}
+\def\RenewCommandCopy{%
+ \declare@commandcopy
+ {\@latex@error{Command \@backslashchar\reserved@a\space undefined}\@ehc
+ \@firstofone}%
+ {\@firstofone}}
+\def\DeclareCommandCopy{%
+ \declare@commandcopy
+ {\@firstofone}%
+ {\@firstofone}}
+\long\def\declare@commandcopy#1#2#3#4{%
+ \edef\reserved@a{\@expl@cs@to@str@@N#3}%
+ \@ifundefined\reserved@a{#1}{#2}%
+ {\robust@command@act
+ \@declarecommandcopylisthook#4%
+ \declare@commandcopy@let{#3#4}}}
+\def\@declarecommandcopylisthook{%
+ {\@if@DeclareRobustCommand \@copy@DeclareRobustCommand}%
+ {\@if@newcommand \@copy@newcommand}}
+\long\def\declare@commandcopy@let#1#2{\let#1=#2\relax}
+\long\def\ShowCommand#1{%
+ \robust@command@act
+ \@showcommandlisthook#1%
+ \show#1}
+\def\@showcommandlisthook{%
+ {\@if@DeclareRobustCommand \@show@DeclareRobustCommand}%
+ {\@if@newcommand \@show@newcommand}}
+\long\def\@if@DeclareRobustCommand#1{%
+ \begingroup
+ \escapechar=`\\
+ \edef\reserved@a{\string#1}%
+ \edef\reserved@b{\detokenize{#1}}%
+ \xdef\@gtempa{%
+ \ifx\reserved@a\reserved@b
+ \noexpand\x@protect
+ \noexpand#1%
+ \fi
+ \noexpand\protect
+ \expandafter\noexpand\csname\@expl@cs@to@str@@N#1 \endcsname}%
+ \endgroup
+ \ifx\@gtempa#1\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+\long\def\@copy@DeclareRobustCommand#1#2{%
+ \begingroup
+ \escapechar=`\\
+ \edef\reserved@a{\string#1}%
+ \edef\reserved@b{\detokenize{#1}}%
+ \edef\reserved@a{%
+ \endgroup
+ \def\noexpand#1{%
+ \ifx\reserved@a\reserved@b
+ \noexpand\x@protect
+ \noexpand#1%
+ \fi
+ \noexpand\protect
+ \expandafter\noexpand\csname\@expl@cs@to@str@@N#1 \endcsname}%
+ \noexpand\copy@kernel@robust@command
+ \expandafter\noexpand\csname\@expl@cs@to@str@@N#1 \endcsname
+ \expandafter\noexpand\csname\@expl@cs@to@str@@N#2 \endcsname}%
+ \reserved@a}
+\long\def\copy@kernel@robust@command#1#2{%
+ \robust@command@chk@safe#2%
+ {\@if@newcommand#2%
+ {\@copy@newcommand}%
+ {\declare@commandcopy@let}}
+ {\declare@commandcopy@let}%
+ #1#2}
+\long\def\@show@DeclareRobustCommand#1{%
+ \typeout{> \string#1=robust macro:}%
+ \typeout{->\@expl@cs@replacement@spec@@N#1.^^J}%
+ \expandafter\show@kernel@robust@command
+ \csname\@expl@cs@to@str@@N#1 \endcsname}
+\long\def\show@kernel@robust@command#1{%
+ \robust@command@chk@safe#1%
+ {\@if@newcommand#1%
+ {\@show@newcommand}%
+ {\show}}%
+ {\show}%
+ #1}
+\long\def\@if@newcommand#1{%
+ \edef\reserved@a{%
+ \noexpand\@protected@testopt
+ \noexpand#1%
+ \expandafter\noexpand\csname\@backslashchar\@expl@cs@to@str@@N#1\endcsname}%
+ \edef\reserved@b{%
+ \unexpanded\expandafter\expandafter\expandafter
+ {\expandafter\@carcube#1{}{}{}\@nil}}%
+ \ifx\reserved@a\reserved@b
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+\long\def\@copy@newcommand#1#2{%
+ \edef#1{\noexpand\@protected@testopt
+ \noexpand#1%
+ \expandafter\noexpand\csname\@backslashchar\@expl@cs@to@str@@N#1\endcsname
+ \unexpanded\expandafter\expandafter\expandafter
+ {\expandafter\@gobblethree#2}}%
+ \expandafter
+ \let\csname\@backslashchar\@expl@cs@to@str@@N#1\expandafter\endcsname
+ \csname\@backslashchar\@expl@cs@to@str@@N#2\endcsname}
+\long\def\@show@newcommand#1{%
+ \typeout{> \string#1=robust macro:}%
+ \typeout{->\@expl@cs@replacement@spec@@N#1.^^J}%
+ \expandafter\@show@newcommand@aux
+ \csname\@backslashchar\@expl@cs@to@str@@N#1\expandafter\endcsname
+ \expandafter{#1}}
+\long\def\@show@newcommand@aux#1#2{%
+ \typeout{> \string#1=\@expl@cs@prefix@spec@@N#1macro:}%
+ \edef\reserved@a{%
+ default \string##1=\expandafter\detokenize\@gobblethree#2.^^J%
+ \@expl@cs@argument@spec@@N#1->\@expl@cs@replacement@spec@@N#1}%
+ \showtokens\expandafter\expandafter\expandafter{\expandafter\reserved@a}}
\def\@ifundefined#1{%
\ifcsname#1\endcsname\@ifundefin@d@i\else\@ifundefin@d@ii\fi{#1}}
\long\def\@ifundefin@d@i#1\fi#2{\fi
@@ -1355,6 +1605,899 @@
\MakeRobust\smallbreak
\MakeRobust\strut
\MakeRobust\underbar
+\long\def\g@addto@macro#1#2{%
+ \begingroup
+ \toks@\expandafter{#1#2}%
+ \xdef#1{\the\toks@}%
+ \endgroup}
+%%
+%% File: lthooks.dtx (C) Copyright 2020 Frank Mittelbach,
+%% Phelype Oleinik & LaTeX Team
+%%% From File: lthooks.dtx
+\def\lthooksversion{v1.0a}
+\def\lthooksdate{2020/08/31}
+\ExplSyntaxOn
+\bool_new:N \g__hook_debug_bool
+\cs_new_eq:NN \__hook_debug:n \use_none:n
+\cs_new_protected:Npn \hook_debug_on:
+ {
+ \bool_gset_true:N \g__hook_debug_bool
+ \__hook_debug_gset:
+ }
+\cs_new_protected:Npn \hook_debug_off:
+ {
+ \bool_gset_false:N \g__hook_debug_bool
+ \__hook_debug_gset:
+ }
+\cs_new_protected:Npn \__hook_debug_gset:
+ {
+ \cs_gset_protected:Npx \__hook_debug:n ##1
+ { \bool_if:NT \g__hook_debug_bool {##1} }
+ }
+\cs_new_eq:NN \__hook_str_compare:nn \__str_if_eq:nn
+\bool_new:N \l__hook_tmpa_bool
+\tl_new:N \l__hook_return_tl
+\tl_new:N \l__hook_tmpa_tl
+\tl_new:N \l__hook_tmpb_tl
+\seq_new:N \g__hook_all_seq
+\tl_new:N \g__hook_removal_list_tl
+\tl_new:N \l__hook_cur_hook_tl
+\prop_new:N \l__hook_work_prop
+\tl_new:N \g__hook_hook_curr_name_tl
+\seq_new:N \g__hook_name_stack_seq
+\cs_new_eq:NN \__hook_tmp:w ?
+\cs_generate_variant:Nn \tl_gremove_once:Nn { Nx }
+\scan_new:N \s__hook_mark
+\cs_new_protected:Npn \hook_new:n #1
+ {
+ \exp_args:Nx \__hook_new:n
+ { \__hook_parse_label_default:nn {#1} { top-level } }
+ }
+\cs_new_protected:Npn \__hook_new:n #1 {
+ \hook_if_exist:nTF {#1}
+ { \msg_error:nnn { hooks } { exists } {#1} }
+ { \seq_gput_right:Nn \g__hook_all_seq {#1}
+ \tl_new:c { g__hook_#1_code_tl }
+ \__hook_declare:n {#1}
+ \clist_new:c {g__hook_#1_labels_clist}
+ \tl_new:c { g__hook_#1_reversed_tl }
+ \__hook_include_legacy_code_chunk:n {#1}
+ }
+}
+\cs_new_protected:Npn \__hook_declare:n #1
+ {
+ \__hook_if_exist:nF {#1}
+ {
+ \prop_new:c { g__hook_#1_code_prop }
+ \tl_new:c { g__hook_#1_code_next_tl }
+ }
+ }
+\cs_new_protected:Npn \hook_new_reversed:n #1 {
+ \hook_new:n {#1}
+ \tl_gset:cn { g__hook_#1_reversed_tl } { - }
+}
+\cs_new_protected:Npn \hook_new_pair:nn #1#2 {
+ \hook_new:n {#1} \hook_new_reversed:n {#2}
+}
+\cs_new_protected:Npn \__hook_include_legacy_code_chunk:n #1
+ {
+ \debug_suspend:
+ \tl_if_exist:cT { @#1hook }
+ {
+ \tl_if_empty:cF { @#1hook }
+ {
+ \exp_args:Nnnv \__hook_hook_gput_code_do:nnn {#1}
+ { legacy } { @#1hook }
+ \tl_gclear:c { @#1hook }
+ }
+ }
+ \debug_resume:
+ }
+\cs_new:Npn \__hook_parse_label_default:nn #1 #2
+ {
+ \tl_if_novalue:nTF {#1}
+ { \__hook_currname_or_default:n {#2} }
+ { \tl_trim_spaces_apply:nN {#1} \__hook_parse_dot_label:nn {#2} }
+ }
+\cs_generate_variant:Nn \__hook_parse_label_default:nn { V }
+\cs_new:Npn \__hook_parse_dot_label:nn #1 #2
+ {
+ \tl_if_empty:nTF {#1}
+ {
+ \msg_expandable_error:nnn { hooks } { empty-label } {#2}
+ #2
+ }
+ {
+ \str_if_eq:nnTF {#1} { . }
+ { \__hook_currname_or_default:n {#1} }
+ { \__hook_parse_dot_label:nw {#2} #1 ./ \s__hook_mark }
+ }
+ }
+\cs_new:Npn \__hook_parse_dot_label:nw #1 #2 ./ #3 \s__hook_mark
+ {
+ \tl_if_empty:nTF {#2}
+ { \__hook_parse_dot_label_aux:nw {#1} #3 \s__hook_mark }
+ {
+ \tl_if_empty:nTF {#3}
+ {#2}
+ { \__hook_parse_dot_label_cleanup:w #2 ./ #3 \s__hook_mark }
+ }
+ }
+\cs_new:Npn \__hook_parse_dot_label_cleanup:w #1 ./ \s__hook_mark {#1}
+\cs_new:Npn \__hook_parse_dot_label_aux:nw #1 #2 ./ \s__hook_mark
+ { \__hook_currname_or_default:n {#1} / #2 }
+\cs_new:Npn \__hook_currname_or_default:n #1
+ {
+ \tl_if_empty:NTF \g__hook_hook_curr_name_tl
+ {
+ \tl_if_empty:NTF \@currname
+ {#1}
+ { \@currname }
+ }
+ { \g__hook_hook_curr_name_tl }
+ }
+\cs_new_protected:Npn \hook_gput_code:nnn #1 #2
+ {
+ \exp_args:Nxx \__hook_gput_code:nnn
+ { \__hook_parse_label_default:nn {#1} { top-level } }
+ { \__hook_parse_label_default:nn {#2} { top-level } }
+ }
+\cs_new_protected:Npn \__hook_gput_code:nnn #1 #2 #3
+ {
+ \__hook_if_marked_removal:nnTF {#1} {#2}
+ { \__hook_unmark_removal:nn {#1} {#2} }
+ {
+ \hook_if_exist:nTF {#1}
+ {
+ \__hook_hook_gput_code_do:nnn {#1} {#2} {#3}
+ \__hook_update_hook_code:n {#1}
+ }
+ { \__hook_try_declaring_generic_hook:nnn {#1} {#2} {#3} }
+ }
+ }
+\cs_generate_variant:Nn \__hook_gput_code:nnn { nxv }
+\cs_new_protected:Npn \__hook_hook_gput_code_do:nnn #1 #2 #3
+ {
+ \__hook_debug:n{\iow_term:x{****~ Add~ to~
+ \hook_if_exist:nF {#1} { undeclared~ }
+ hook~ #1~ (#2)
+ \on@line\space <-~ \tl_to_str:n{#3}} }
+ \prop_get:cnNTF { g__hook_#1_code_prop } {#2} \l__hook_return_tl
+ {
+ \prop_gput:cno { g__hook_#1_code_prop } {#2}
+ { \l__hook_return_tl #3 }
+ }
+ { \prop_gput:cnn { g__hook_#1_code_prop } {#2} {#3} }
+ }
+\cs_new_protected:Npn \__hook_gput_undeclared_hook:nnn #1 #2 #3
+ {
+ \__hook_declare:n {#1}
+ \__hook_hook_gput_code_do:nnn {#1} {#2} {#3}
+ }
+\cs_new_protected:Npn \__hook_try_declaring_generic_hook:nnn #1
+ {
+ \__hook_try_declaring_generic_hook:nNNnn {#1}
+ \hook_gput_code:nnn \__hook_gput_undeclared_hook:nnn
+ }
+\cs_new_protected:Npn \__hook_try_declaring_generic_next_hook:nn #1
+ {
+ \__hook_try_declaring_generic_hook:nNNnn {#1}
+ \hook_gput_next_code:nn \__hook_gput_next_do:nn
+ }
+\cs_new_protected:Npn \__hook_try_declaring_generic_hook:nNNnn #1
+ {
+ \__hook_if_file_hook:wTF #1 / / \s__hook_mark
+ {
+ \exp_args:Ne \__hook_try_declaring_generic_hook_split:nNNnn
+ { \exp_args:Ne \__hook_file_hook_normalize:n {#1} }
+ }
+ { \__hook_try_declaring_generic_hook_split:nNNnn {#1} }
+ }
+\cs_new_protected:Npn \__hook_try_declaring_generic_hook_split:nNNnn #1 #2 #3
+ {
+ \__hook_try_declaring_generic_hook:wnTF #1 / / / \scan_stop: {#1}
+ { #2 }
+ { #3 } {#1}
+ }
+\prg_new_protected_conditional:Npnn \__hook_try_declaring_generic_hook:wn
+ #1 / #2 / #3 / #4 \scan_stop: #5 { TF }
+ {
+ \tl_if_empty:nTF {#2}
+ { \prg_return_false: }
+ {
+ \prop_if_in:NnTF \c__hook_generics_prop {#1}
+ {
+ \hook_if_exist:nF {#5} { \hook_new:n {#5} }
+ \prop_if_in:NnTF \c__hook_generics_reversed_ii_prop {#2}
+ { \tl_gset:cn { g__hook_#5_reversed_tl } { - } }
+ {
+ \prop_if_in:NnT \c__hook_generics_reversed_iii_prop {#3}
+ { \tl_gset:cn { g__hook_#5_reversed_tl } { - } }
+ }
+ \prg_return_true:
+ }
+ { \prg_return_false: }
+ }
+ }
+\prg_new_conditional:Npnn \__hook_if_file_hook:w
+ #1 / #2 / #3 \s__hook_mark { TF }
+ {
+ \str_if_eq:nnTF {#1} { file }
+ {
+ \bool_lazy_or:nnTF
+ { \tl_if_empty_p:n {#3} }
+ { \str_if_eq_p:nn {#3} { / } }
+ { \prg_return_false: }
+ {
+ \prop_if_in:NnTF \c__hook_generics_file_prop {#2}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+ }
+ { \prg_return_false: }
+ }
+\cs_new:Npn \__hook_file_hook_normalize:n #1
+ { \__hook_strip_double_slash:n {#1} }
+\cs_new:Npn \__hook_strip_double_slash:n #1
+ { \__hook_strip_double_slash:w #1 // \s__hook_mark }
+\cs_new:Npn \__hook_strip_double_slash:w #1 // #2 \s__hook_mark
+ {
+ \tl_if_empty:nTF {#2}
+ {#1}
+ { \__hook_strip_double_slash:w #1 / #2 \s__hook_mark }
+ }
+\prop_const_from_keyval:Nn \c__hook_generics_prop
+ {env=,file=,package=,class=,include=}
+\prop_const_from_keyval:Nn \c__hook_generics_reversed_ii_prop {after=,end=}
+\prop_const_from_keyval:Nn \c__hook_generics_reversed_iii_prop {after=}
+\prop_const_from_keyval:Nn \c__hook_generics_file_prop {before=,after=}
+\cs_new_protected:Npn \hook_gremove_code:nn #1 #2
+ {
+ \exp_args:Nxx \__hook_gremove_code:nn
+ { \__hook_parse_label_default:nn {#1} { top-level } }
+ { \__hook_parse_label_default:nn {#2} { top-level } }
+ }
+\cs_new_protected:Npn \__hook_gremove_code:nn #1 #2
+ {
+ \__hook_if_exist:nTF {#1}
+ {
+ \str_if_eq:nnTF {#2} {*}
+ { \prop_gclear:c { g__hook_#1_code_prop } }
+ {
+ \prop_get:cnNTF { g__hook_#1_code_prop } {#2} \l__hook_return_tl
+ { \__hook_gremove_code_do:nn }
+ { \__hook_mark_removal:nn }
+ {#1} {#2}
+ }
+ \hook_if_exist:nT {#1}
+ { \__hook_update_hook_code:n {#1} }
+ }
+ { \__hook_mark_removal:nn {#1} {#2} }
+ }
+\cs_new_protected:Npn \__hook_gremove_code_do:nn #1 #2
+ { \prop_gremove:cn { g__hook_#1_code_prop } {#2} }
+\cs_new_protected:Npn \__hook_mark_removal:nn #1 #2
+ {
+ \tl_gput_right:Nx \g__hook_removal_list_tl
+ { \__hook_removal_tl:nn {#1} {#2} }
+ }
+\cs_new_protected:Npn \__hook_unmark_removal:nn #1 #2
+ {
+ \tl_gremove_once:Nx \g__hook_removal_list_tl
+ { \__hook_removal_tl:nn {#1} {#2} }
+ }
+\prg_new_protected_conditional:Npnn \__hook_if_marked_removal:nn #1 #2 { TF }
+ {
+ \exp_args:NNx \tl_if_in:NnTF \g__hook_removal_list_tl
+ { \__hook_removal_tl:nn {#1} {#2} }
+ { \prg_return_true: } { \prg_return_false: }
+ }
+\cs_new:Npn \__hook_removal_tl:nn #1 #2
+ { & \tl_to_str:n {#2} $ \tl_to_str:n {#1} $ }
+\prop_new:c {g__hook_??_code_prop}
+\prop_new:c {g__hook_??_code_tl}
+\tl_new:c {g__hook_??_reversed_tl}
+\cs_new_protected:Npn \hook_gset_rule:nnnn #1#2#3#4
+ {
+ \use:x
+ {
+ \__hook_gset_rule:nnnn
+ { \__hook_parse_label_default:nn {#1} { top-level } }
+ { \__hook_parse_label_default:nn {#2} { top-level } }
+ {#3}
+ { \__hook_parse_label_default:nn {#4} { top-level } }
+ }
+ }
+\cs_new_protected:Npn \__hook_gset_rule:nnnn #1#2#3#4
+ {
+ \__hook_declare:n {#1}
+ \__hook_rule_gclear:nnn {#1} {#2} {#4}
+ \debug_suspend:
+ \cs_if_exist_use:cTF { __hook_rule_#3_gset:nnn }
+ {
+ {#1} {#2} {#4}
+ \__hook_update_hook_code:n {#1}
+ }
+ { \msg_error:nnnnnn { hooks } { unknown-rule }
+ {#1} {#2} {#3} {#4} }
+ \debug_resume:
+ }
+\cs_new_protected:Npn \__hook_rule_before_gset:nnn #1#2#3
+ {
+ \tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl }
+ { \__hook_label_ordered:nnTF {#2} {#3} { < } { > } }
+ }
+\cs_new_eq:cN { __hook_rule_<_gset:nnn } \__hook_rule_before_gset:nnn
+\cs_new_protected:Npn \__hook_rule_after_gset:nnn #1#2#3
+ {
+ \tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#3} {#2} _tl }
+ { \__hook_label_ordered:nnTF {#3} {#2} { < } { > } }
+ }
+\cs_new_eq:cN { __hook_rule_>_gset:nnn } \__hook_rule_after_gset:nnn
+\cs_new_protected:Npn \__hook_rule_voids_gset:nnn #1#2#3
+ {
+ \tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl }
+ { \__hook_label_ordered:nnTF {#2} {#3} { -> } { <- } }
+ }
+\cs_new_protected:cpn { __hook_rule_incompatible-error_gset:nnn } #1#2#3
+ { \tl_gset:cn { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl } { xE } }
+\cs_new_protected:cpn { __hook_rule_incompatible-warning_gset:nnn } #1#2#3
+ { \tl_gset:cn { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl } { xW } }
+\cs_new_protected:Npn \__hook_rule_unrelated_gset:nnn #1#2#3 { }
+\cs_new_protected:Npn \__hook_rule_gclear:nnn #1#2#3
+ { \cs_undefine:c { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl } }
+\cs_new:Npn \__hook_label_pair:nn #1#2
+ {
+ \if_case:w \__hook_str_compare:nn {#1} {#2} \exp_stop_f:
+ #1 | #1 % 0
+ \or: #1 | #2 % +1
+ \else: #2 | #1 % -1
+ \fi:
+ }
+\prg_new_conditional:Npnn \__hook_label_ordered:nn #1#2 { TF }
+ {
+ \if_int_compare:w \__hook_str_compare:nn {#1} {#2} > 0 \exp_stop_f:
+ \prg_return_true:
+ \else
+ \prg_return_false:
+ \fi:
+ }
+\cs_new:Npn \__hook_if_label_case:nnnnn #1#2
+ {
+ \cs:w use_
+ \if_case:w \__hook_str_compare:nn {#1} {#2}
+ i \or: ii \else: iii \fi: :nnn
+ \cs_end:
+ }
+\cs_new_eq:NN \__hook_update_hook_code:n \use_none:n
+\cs_new_protected:Npn \__hook_initialize_all: {
+ \cs_gset_eq:NN \__hook_update_hook_code:n \__hook_initialize_hook_code:n
+ \__hook_debug:n { \prop_gclear:N \g__hook_used_prop }
+ \seq_map_inline:Nn \g__hook_all_seq
+ {
+ \__hook_update_hook_code:n {##1}
+ }
+ \__hook_debug:n
+ { \iow_term:x{^^JAll~ initialized~ (non-empty)~ hooks:}
+ \prop_map_inline:Nn \g__hook_used_prop
+ { \iow_term:x{^^J~ ##1~ ->~
+ \exp_not:v {g__hook_##1_code_tl}~ }
+ }
+ }
+ \cs_gset_eq:NN \hook_use:n \__hook_use_initialized:n
+ \cs_gset_eq:NN \__hook_preamble_hook:n \use_none:n
+}
+\cs_new_protected:Npn \__hook_initialize_hook_code:n #1 {
+ \__hook_debug:n{ \iow_term:x{^^JUpdate~ code~ for~ hook~
+ '#1' \on@line :^^J} }
+ \__hook_include_legacy_code_chunk:n {#1}
+ \hook_if_exist:nT {#1}
+ {
+ \prop_if_empty:cTF {g__hook_#1_code_prop}
+ { \tl_gset:co {g__hook_#1_code_tl}
+ {\cs:w g__hook_#1_code_next_tl \cs_end: } }
+ {
+ \__hook_if_reversed:nTF {#1}
+ { \cs_set_eq:NN \__hook_tl_gput:NV \tl_gput_left:NV
+ \cs_set_eq:NN \__hook_clist_gput:NV \clist_gput_left:NV }
+ { \cs_set_eq:NN \__hook_tl_gput:NV \tl_gput_right:NV
+ \cs_set_eq:NN \__hook_clist_gput:NV \clist_gput_right:NV }
+ \prop_set_eq:Nc \l__hook_work_prop { g__hook_#1_code_prop }
+ \__hook_initialize_single:cccn
+ { g__hook_#1_code_tl } { g__hook_#1_code_next_tl }
+ { g__hook_#1_labels_clist } {#1}
+ \__hook_debug:n{ \exp_args:NNx \prop_gput:Nnn
+ \g__hook_used_prop {#1}{} }
+ }
+ }
+}
+\prop_new:N\g__hook_used_prop
+\cs_new:Npn \__hook_tl_csname:n #1 { l__hook_label_#1_tl }
+\cs_new:Npn \__hook_seq_csname:n #1 { l__hook_label_#1_seq }
+\seq_new:N \l__hook_labels_seq
+\int_new:N \l__hook_labels_int
+\tl_new:N \l__hook_front_tl
+\tl_new:N \l__hook_rear_tl
+\tl_new:c { \__hook_tl_csname:n { 0 } }
+\cs_new_protected:Npn \__hook_initialize_single:NNNn #1#2#3#4 {
+ \debug_suspend:
+ \seq_clear:N \l__hook_labels_seq
+ \int_zero:N \l__hook_labels_int
+ \tl_set:Nn \l__hook_cur_hook_tl {#4}
+ \prop_map_inline:Nn \l__hook_work_prop
+ {
+ \int_incr:N \l__hook_labels_int
+ \seq_put_right:Nn \l__hook_labels_seq {##1}
+ \tl_set:cn { \__hook_tl_csname:n {##1} }{0}
+ \seq_clear_new:c { \__hook_seq_csname:n {##1} }
+ }
+ \prop_map_inline:Nn \l__hook_work_prop
+ {
+ \prop_map_inline:Nn \l__hook_work_prop
+ {
+ \__hook_if_label_case:nnnnn {##1} {####1}
+ { \prop_map_break: }
+ { \__hook_apply_label_pair:nnn {##1} {####1} }
+ { \__hook_apply_label_pair:nnn {####1} {##1} }
+ {#4}
+ }
+ }
+ \__hook_debug:n { \__hook_debug_label_data:N \l__hook_work_prop }
+ \tl_set:Nn \l__hook_rear_tl { 0 }
+ \tl_set:cn { \__hook_tl_csname:n { 0 } } { 0 }
+ \seq_map_inline:Nn \l__hook_labels_seq
+ {
+ \int_compare:nNnT { \cs:w \__hook_tl_csname:n {##1} \cs_end: } = 0
+ {
+ \tl_set:cn { \__hook_tl_csname:n { \l__hook_rear_tl } }{##1}
+ \tl_set:Nn \l__hook_rear_tl {##1}
+ }
+ }
+ \tl_set_eq:Nc \l__hook_front_tl { \__hook_tl_csname:n { 0 } }
+ \tl_gclear:N #1
+ \clist_gclear:N #3
+ \bool_while_do:nn { ! \str_if_eq_p:Vn \l__hook_front_tl { 0 } }
+ {
+ \int_decr:N \l__hook_labels_int
+ \prop_get:NVN \l__hook_work_prop \l__hook_front_tl \l__hook_return_tl
+ \__hook_tl_gput:NV #1 \l__hook_return_tl
+ \__hook_clist_gput:NV #3 \l__hook_front_tl
+ \__hook_debug:n{ \iow_term:x{Handled~ code~ for~ \l__hook_front_tl} }
+ \seq_map_inline:cn { \__hook_seq_csname:n { \l__hook_front_tl } }
+ {
+ \tl_set:cx { \__hook_tl_csname:n {##1} }
+ { \int_eval:n
+ { \cs:w \__hook_tl_csname:n {##1} \cs_end: - 1 }
+ }
+ \int_compare:nNnT
+ { \cs:w \__hook_tl_csname:n {##1} \cs_end: } = 0
+ {
+ \tl_set:cn { \__hook_tl_csname:n { \l__hook_rear_tl } } {##1}
+ \tl_set:Nn \l__hook_rear_tl {##1}
+ }
+ }
+ \tl_set_eq:Nc \l__hook_front_tl
+ { \__hook_tl_csname:n { \l__hook_front_tl } }
+ }
+ \int_compare:nNnF \l__hook_labels_int = 0
+ {
+ \iow_term:x{====================}
+ \iow_term:x{Error:~ label~ rules~ are~ incompatible:}
+ \__hook_debug_label_data:N \l__hook_work_prop
+ \iow_term:x{====================}
+ }
+ \tl_gput_right:Nn #1 {#2}
+ \debug_resume:
+}
+\cs_generate_variant:Nn \__hook_initialize_single:NNNn {ccc}
+\cs_new:Npn \__hook_tl_gput:NV {\ERROR}
+\cs_new:Npn \__hook_clist_gput:NV {\ERROR}
+\cs_new_protected:Npn \__hook_apply_label_pair:nnn #1#2#3
+ {
+ \__hook_label_if_exist_apply:nnnF {#1} {#2} {#3}
+ {
+ \__hook_label_if_exist_apply:nnnF {#1} {#2} { ?? } { }
+ }
+ }
+\cs_new_protected:Npn \__hook_label_if_exist_apply:nnnF #1#2#3
+ {
+ \if_cs_exist:w g__hook_ #3 _rule_ #1 | #2 _tl \cs_end:
+ \__hook_apply_rule:nnn {#1} {#2} {#3}
+ \exp_after:wN \use_none:n
+ \else:
+ \use:nn
+ \fi:
+ }
+\cs_new_protected:Npn \__hook_apply_rule:nnn #1#2#3
+ {
+ \cs:w __hook_apply_
+ \cs:w g__hook_#3_reversed_tl \cs_end: rule_
+ \cs:w g__hook_ #3 _rule_ #1 | #2 _tl \cs_end: :nnn \cs_end:
+ {#1} {#2} {#3}
+ }
+\cs_new_protected:cpn { __hook_apply_rule_<:nnn } #1#2#3
+ {
+ \__hook_debug:n { \__hook_msg_pair_found:nnn {#1} {#2} {#3} }
+ \tl_set:cx { \__hook_tl_csname:n {#2} }
+ { \int_eval:n{ \cs:w \__hook_tl_csname:n {#2} \cs_end: + 1 } }
+ \seq_put_right:cn{ \__hook_seq_csname:n {#1} }{#2}
+ }
+\cs_new_protected:cpn { __hook_apply_rule_>:nnn } #1#2#3
+ {
+ \__hook_debug:n { \__hook_msg_pair_found:nnn {#1} {#2} {#3} }
+ \tl_set:cx { \__hook_tl_csname:n {#1} }
+ { \int_eval:n{ \cs:w \__hook_tl_csname:n {#1} \cs_end: + 1 } }
+ \seq_put_right:cn{ \__hook_seq_csname:n {#2} }{#1}
+ }
+\cs_new_protected:cpn { __hook_apply_rule_xE:nnn } #1#2#3
+ {
+ \__hook_debug:n { \__hook_msg_pair_found:nnn {#1} {#2} {#3} }
+ \msg_error:nnnnnn { hooks } { labels-incompatible }
+ {#1} {#2} {#3} { 1 }
+ \use:c { __hook_apply_rule_->:nnn } {#1} {#2} {#3}
+ \use:c { __hook_apply_rule_<-:nnn } {#1} {#2} {#3}
+ }
+\cs_new_protected:cpn { __hook_apply_rule_xW:nnn } #1#2#3
+ {
+ \__hook_debug:n { \__hook_msg_pair_found:nnn {#1} {#2} {#3} }
+ \msg_warning:nnnnnn { hooks } { labels-incompatible }
+ {#1} {#2} {#3} { 0 }
+ }
+\cs_new_protected:cpn { __hook_apply_rule_->:nnn } #1#2#3
+ {
+ \__hook_debug:n
+ {
+ \__hook_msg_pair_found:nnn {#1} {#2} {#3}
+ \iow_term:x{--->~ Drop~ '#2'~ code~ from~
+ \iow_char:N \\ g__hook_ \l__hook_cur_hook_tl _code_prop ~
+ because~ of~ '#1' }
+ }
+ \prop_put:Nnn \l__hook_work_prop {#2} { }
+ }
+\cs_new_protected:cpn { __hook_apply_rule_<-:nnn } #1#2#3
+ {
+ \__hook_debug:n
+ {
+ \__hook_msg_pair_found:nnn {#1} {#2} {#3}
+ \iow_term:x{--->~ Drop~ '#1'~ code~ from~
+ \iow_char:N \\ g__hook_ \l__hook_cur_hook_tl _code_prop ~
+ because~ of~ '#2' }
+ }
+ \prop_put:Nnn \l__hook_work_prop {#1} { }
+ }
+\cs_new_eq:cc { __hook_apply_-rule_<:nnn } { __hook_apply_rule_>:nnn }
+\cs_new_eq:cc { __hook_apply_-rule_>:nnn } { __hook_apply_rule_<:nnn }
+\cs_new_eq:cc { __hook_apply_-rule_<-:nnn } { __hook_apply_rule_<-:nnn }
+\cs_new_eq:cc { __hook_apply_-rule_->:nnn } { __hook_apply_rule_->:nnn }
+\cs_new_eq:cc { __hook_apply_-rule_xE:nnn } { __hook_apply_rule_xE:nnn }
+\cs_new_eq:cc { __hook_apply_-rule_xW:nnn } { __hook_apply_rule_xW:nnn }
+\cs_new_protected:Npn \__hook_msg_pair_found:nnn #1#2#3
+ {
+ \iow_term:x{~ \str_if_eq:nnTF {#3} {??} {default} {~normal} ~
+ rule~ \__hook_label_pair:nn {#1} {#2}:~
+ \use:c { g__hook_#3_rule_ \__hook_label_pair:nn {#1} {#2} _tl } ~
+ found}
+ }
+\cs_new_protected:Npn \__hook_debug_label_data:N #1 {
+ \iow_term:x{Code~ labels~ for~ sorting:}
+ \iow_term:x{~ \seq_use:Nnnn\l__hook_labels_seq {~and~}{,~}{~and~} }
+ \iow_term:x{^^J Data~ structure~ for~ label~ rules:}
+ \prop_map_inline:Nn #1
+ {
+ \iow_term:x{~ ##1~ =~ \tl_use:c{ \__hook_tl_csname:n {##1} }~ ->~
+ \seq_use:cnnn{ \__hook_seq_csname:n {##1} }{~->~}{~->~}{~->~}
+ }
+ }
+ \iow_term:x{}
+}
+\cs_new_protected:Npn \hook_log:n #1
+ {
+ \exp_args:Nx \__hook_log:n
+ { \__hook_parse_label_default:nn {#1} { top-level } }
+ }
+\cs_new_protected:Npn \__hook_log:n #1
+ {
+ \__hook_preamble_hook:n {#1}
+ \iow_term:x{^^JThe~ hook~ '#1':}
+ \hook_if_exist:nF {#1}
+ { \iow_term:x {~Hook~ is~ not~ declared!} }
+ \__hook_if_exist:nTF {#1}
+ {
+ \iow_term:x{~Code~ chunks:}
+ \prop_if_empty:cTF {g__hook_#1_code_prop}
+ { \iow_term:x{\@spaces ---} }
+ {
+ \prop_map_inline:cn {g__hook_#1_code_prop}
+ { \iow_term:x{\@spaces ##1~ ->~ \tl_to_str:n{##2} } }
+ }
+ \iow_term:x{~Extra~ code~ next~ invocation:}
+ \iow_term:x{\@spaces
+ \tl_if_empty:cTF { g__hook_#1_code_next_tl }
+ {---}
+ {->~ \exp_args:Nv
+ \__hook_log_next_code:n {g__hook_#1_code_next_tl} } }
+ \iow_term:x { ~Rules: }
+ \bool_set_true:N \l__hook_tmpa_bool
+ \__hook_list_rules:nn {#1}
+ {
+ \bool_set_false:N \l__hook_tmpa_bool
+ \iow_term:x
+ {
+ \@spaces ##2~ with~
+ \str_if_eq:nnT {##3} {??} { default~ }
+ relation~ ##1 }
+ }
+ \bool_if:NT \l__hook_tmpa_bool
+ { \iow_term:x { \@spaces --- } }
+ \bool_lazy_and:nnT
+ { \hook_if_exist_p:n {#1} }
+ { ! \hook_if_empty_p:n {#1} }
+ { \iow_term:x { ~Execution~ order
+ \bool_if:NTF \l__hook_tmpa_bool
+ { \__hook_if_reversed:nT {#1}
+ { ~ (after~ reversal) }
+ }
+ { ~ (after~
+ \__hook_if_reversed:nT {#1} {reversal~ and~}
+ applying~ rules)
+ }
+ :
+ }
+ \iow_term:x
+ { \@spaces \clist_use:cn {g__hook_#1_labels_clist} { ,~ } }
+ }
+ }
+ { \iow_term:n { ~The~hook~is~empty. } }
+ \iow_term:n { }
+ }
+\cs_new:Npn \__hook_log_next_code:n #1 {
+ \exp_args:No \tl_to_str:n {\use_none:nn #1}
+}
+\cs_new_protected:Npn \__hook_list_rules:nn #1 #2
+ {
+ \cs_set_protected:Npn \__hook_tmp:w ##1 ##2 ##3 {#2}
+ \prop_map_inline:cn { g__hook_#1_code_prop }
+ {
+ \prop_map_inline:cn { g__hook_#1_code_prop }
+ {
+ \__hook_if_label_case:nnnnn {##1} {####1}
+ { \prop_map_break: }
+ { \__hook_list_one_rule:nnn {##1} {####1} }
+ { \__hook_list_one_rule:nnn {####1} {##1} }
+ {#1}
+ }
+ }
+ }
+\cs_new_protected:Npn \__hook_list_one_rule:nnn #1#2#3
+ {
+ \__hook_list_if_rule_exists:nnnF {#1} {#2} {#3} { }
+ { \__hook_list_if_rule_exists:nnnF {#1} {#2} { ?? } { } }
+ }
+\cs_new_protected:Npn \__hook_list_if_rule_exists:nnnF #1#2#3
+ {
+ \if_cs_exist:w g__hook_ #3 _rule_ #1 | #2 _tl \cs_end:
+ \exp_args:Nv \__hook_tmp:w
+ { g__hook_ #3 _rule_ #1 | #2 _tl } { #1 | #2 } {#3}
+ \fi:
+ }
+\cs_new_protected:Npn \__hook_debug_print_rules:n #1
+ {
+ \iow_term:n { The~hook~#1~contains~the~rules: }
+ \cs_set_protected:Npn \__hook_tmp:w ##1
+ {
+ \__hook_list_rules:nn {#1}
+ {
+ \iow_term:x
+ {
+ > ##1 {####2} ##1 => ##1 {####1}
+ \str_if_eq:nnT {####3} {??} { ~(default) }
+ }
+ }
+ }
+ \exp_args:No \__hook_tmp:w { \use:nn { ~ } { ~ } }
+ }
+\cs_new_protected:Npn \hook_gput_next_code:nn #1
+ {
+ \exp_args:Nx \__hook_gput_next_code:nn
+ { \__hook_parse_label_default:nn {#1} { top-level } }
+ }
+\cs_new_protected:Npn \__hook_gput_next_code:nn #1 #2
+ {
+ \__hook_declare:n {#1}
+ \hook_if_exist:nTF {#1}
+ { \__hook_gput_next_do:nn {#1} {#2} }
+ { \__hook_try_declaring_generic_next_hook:nn {#1} {#2} }
+ }
+\cs_new_protected:Npn \__hook_gput_next_do:nn #1
+ {
+ \exp_args:Nc \__hook_gput_next_do:Nnn
+ { g__hook_#1_code_next_tl } {#1}
+ }
+\cs_new_protected:Npn \__hook_gput_next_do:Nnn #1 #2
+ {
+ \tl_if_empty:cT { g__hook_#2_code_tl }
+ { \__hook_update_hook_code:n {#2} }
+ \tl_if_empty:NT #1
+ { \tl_gset:Nn #1 { \tl_gclear:c { g__hook_#2_code_next_tl } } }
+ \tl_gput_right:Nn #1
+ }
+\cs_new_protected:Npn \hook_use:n #1
+ {
+ \tl_if_exist:cTF { g__hook_#1_code_tl }
+ {
+ \__hook_preamble_hook:n {#1}
+ \cs:w g__hook_#1_code_tl \cs_end:
+ }
+ { \__hook_use:wn #1 / \s__hook_mark {#1} }
+ }
+\cs_new:Npn \__hook_use_initialized:n #1
+ {
+ \tl_if_exist:cTF { g__hook_#1_code_tl }
+ { \cs:w g__hook_#1_code_tl \cs_end: }
+ { \__hook_use:wn #1 / \s__hook_mark {#1} }
+ }
+\cs_new_protected:Npn \__hook_preamble_hook:n #1
+ { \__hook_initialize_hook_code:n {#1} }
+\cs_new:Npn \__hook_use:wn #1 / #2 \s__hook_mark #3
+ {
+ \str_if_eq:nnTF {#1} { file }
+ { \__hook_try_file_hook:n {#3} }
+ { } % Hook doesn't exist
+ }
+\cs_new_protected:Npn \__hook_try_file_hook:n #1
+ {
+ \__hook_if_file_hook:wTF #1 / / \s__hook_mark
+ {
+ \exp_args:Ne \__hook_if_exist_use:n
+ { \exp_args:Ne \__hook_file_hook_normalize:n {#1} }
+ }
+ { \__hook_if_exist_use:n {#1} } % file/ generic hook (e.g. file/before)
+ }
+\cs_new_protected:Npn \__hook_if_exist_use:n #1
+ {
+ \tl_if_exist:cT { g__hook_#1_code_tl }
+ {
+ \__hook_preamble_hook:n {#1}
+ \cs:w g__hook_#1_code_tl \cs_end:
+ }
+ }
+\cs_new_protected:Npn \hook_use_once:n #1
+ {
+ \tl_if_exist:cT { g__hook_#1_code_tl }
+ {
+ \clist_gput_left:Nn \g__hook_execute_immediately_clist {#1}
+ \hook_use:n {#1}
+ }
+ }
+\prg_new_conditional:Npnn \hook_if_empty:n #1 { p , T , F , TF }
+ {
+ \__hook_if_exist:nTF {#1}
+ {
+ \bool_lazy_and:nnTF
+ { \prop_if_empty_p:c { g__hook_#1_code_prop } }
+ { \tl_if_empty_p:c { g__hook_#1_code_next_tl } }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+ { \prg_return_true: }
+ }
+\prg_new_conditional:Npnn \hook_if_exist:n #1 { p , T , F , TF }
+ {
+ \tl_if_exist:cTF { g__hook_#1_code_tl }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+\prg_new_conditional:Npnn \__hook_if_exist:n #1 { p , T , F , TF }
+ {
+ \prop_if_exist:cTF { g__hook_#1_code_prop }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+\prg_new_conditional:Npnn \__hook_if_reversed:n #1 { p , T , F , TF }
+ {
+ \if_int_compare:w \cs:w g__hook_#1_reversed_tl \cs_end: 1 < 0 \exp_stop_f:
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+\clist_new:N \g__hook_execute_immediately_clist
+\msg_new:nnnn { hooks } { labels-incompatible }
+ {
+ Labels~`#1'~and~`#2'~are~incompatible
+ \str_if_eq:nnF {#3} {??} { ~in~hook~`#3' } .~
+ \int_compare:nNnTF {#4} = { 1 }
+ { The~ code~ for~ both~ labels~ will~ be~ dropped. }
+ { You~ may~ see~ errors~ later. }
+ }
+ { LaTeX~found~two~incompatible~labels~in~the~same~hook.~
+ This~indicates~an~incompatibility~between~packages. }
+\msg_new:nnnn { hooks } { exists }
+ { Hook~`#1'~ has~ already~ been~ declared. }
+ { There~ already~ exists~ a~ hook~ declaration~ with~ this~
+ name.\\
+ Please~ use~ a~ different~ name~ for~ your~ hook.}
+\msg_new:nnn { hooks } { empty-label }
+ { Empty~code~label~\msg_line_context:.~Using~`#1'~instead. }
+\msg_new:nnnn { hooks } { unknown-rule }
+ { Unknown~ relationship~ `#3'~
+ between~ labels~ `#2'~ and~ `#4'~
+ \str_if_eq:nnF {#1} {??} { ~in~hook~`#1' }. ~
+ Perhaps~ a~ missspelling?
+ }
+ {
+ The~ relation~ used~ not~ known~ to~ the~ system.~ Allowed~ values~ are~
+ `before'~ or~ `<',~
+ `after'~ or~ `>',~
+ `incompatible-warning',~
+ `incompatible-error',~
+ `voids'~ or~
+ `unrelated'.
+ }
+\msg_new:nnn { hooks } { should-not-happen }
+ {
+ ERROR!~This~should~not~happen.~#1 \\
+ Please~report~at~https://github.com/latex3/latex2e.
+ }
+\NewDocumentCommand \NewHook { m }{ \hook_new:n {#1} }
+\NewDocumentCommand \NewReversedHook { m }{ \hook_new_reversed:n {#1} }
+\NewDocumentCommand \NewMirroredHookPair { mm }{ \hook_new_pair:nn {#1}{#2} }
+\NewDocumentCommand \AddToHook { m o +m }
+ {
+ \clist_if_in:NnTF \g__hook_execute_immediately_clist {#1}
+ {#3}
+ { \hook_gput_code:nnn {#1} {#2} {#3} }
+ }
+\NewDocumentCommand \AddToHookNext { m +m }
+ { \hook_gput_next_code:nn {#1} {#2} }
+\NewDocumentCommand \RemoveFromHook { m o }
+ { \hook_gremove_code:nn {#1} {#2} }
+\seq_gpush:Nn \g__hook_name_stack_seq { }
+\cs_new_protected:Npn \__hook_curr_name_push:n #1
+ {
+ \seq_gpush:Nn \g__hook_name_stack_seq {#1}
+ \tl_gset:Nn \g__hook_hook_curr_name_tl {#1}
+ }
+\cs_new_protected:Npn \__hook_curr_name_pop:
+ {
+ \seq_gpop:NN \g__hook_name_stack_seq \l__hook_return_tl
+ \seq_get:NNTF \g__hook_name_stack_seq \l__hook_return_tl
+ { \tl_gset_eq:NN \g__hook_hook_curr_name_tl \l__hook_return_tl }
+ {
+ \msg_error:nnn { hooks } { should-not-happen }
+ { Tried~to~pop~from~an~empty~default~label~stack. }
+ }
+ }
+\NewDocumentCommand \DeclareDefaultHookLabel { m }
+ {
+ \seq_gpop:NN \g__hook_name_stack_seq \l__hook_return_tl
+ \__hook_curr_name_push:n {#1}
+ }
+\newcommand \UseHook { \hook_use:n }
+\newcommand \UseOneTimeHook { \hook_use_once:n }
+\cs_new_protected:Npn \ShowHook { \hook_log:n }
+\cs_new_protected:Npn \DebugHooksOn { \hook_debug_on: }
+\cs_new_protected:Npn \DebugHooksOff { \hook_debug_off: }
+\NewDocumentCommand \DeclareHookRule { m m m m }
+ { \hook_gset_rule:nnnn {#1}{#2}{#3}{#4} }
+\NewDocumentCommand \DeclareDefaultHookRule { m m m }
+ { \hook_gset_rule:nnnn {??}{#1}{#2}{#3} }
+\@onlypreamble\DeclareDefaultHookRule
+\NewDocumentCommand \ClearHookRule { m m m }
+{ \hook_gset_rule:nnnn {#1}{#2}{unrelated}{#3} }
+\NewExpandableDocumentCommand \IfHookExistsTF { m }
+ { \hook_if_exist:nTF {#1} }
+\NewExpandableDocumentCommand \IfHookEmptyTF { m }
+ { \hook_if_empty:nTF {#1} }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+\cs_new_eq:NN \@expl@@@initialize@all@@
+ \__hook_initialize_all:
+\cs_new_eq:NN \@expl@@@hook@curr@name@push@@n
+ \__hook_curr_name_push:n
+\cs_new_eq:NN \@expl@@@hook@curr@name@pop@@
+ \__hook_curr_name_pop:
+\ExplSyntaxOff
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% From File: ltalloc.dtx
\chardef\@xxxii=32
\mathchardef\@Mi=10001
@@ -1900,7 +3043,9 @@ Type H <return> for immediate help.}%
\newif\if@partsw \@partswfalse
\newcount\@clubpenalty
\@clubpenalty \clubpenalty
-\def\document{\endgroup
+\def\document{%
+ \UseOneTimeHook{begindocument/before}%
+ \@kernel@after@begindocument@before
\@expl@sys@load@backend@@
\ifx\@unusedoptionlist\@empty\else
\@latex@warning@no@line{Unused global option(s):^^J%
@@ -1940,8 +3085,9 @@ Type H <return> for immediate help.}%
\fi
\@noskipsecfalse
\let \@refundefined \relax
- \let\AtBeginDocument\@firstofone
- \@begindocumenthook
+ \@kernel@before@begindocument
+ \UseOneTimeHook{begindocument}%
+ \@kernel@after@begindocument
\ifdim\topskip<1sp\global\topskip 1sp\relax\fi
\global\@maxdepth\maxdepth
\global\let\@begindocumenthook\@undefined
@@ -1953,7 +3099,19 @@ Type H <return> for immediate help.}%
\@preamblecmds
\global\let \@nodocument \relax
\global\let\do\noexpand
+ \UseOneTimeHook{begindocument/end}%
\ignorespaces}
+\NewHook{begindocument}
+\NewHook{begindocument/before}
+\NewHook{begindocument/end}
+
+\edef \@kernel@after@begindocument@before {%
+ \let\expandafter\noexpand\csname
+ g__hook_env/document/begin_code_tl\endcsname
+ \noexpand\@empty}
+\let \@kernel@before@begindocument \@empty
+\let \@kernel@after@begindocument \@empty
+
\@onlypreamble\document
\let\normalsfcodes\@empty
\def\nofiles{%
@@ -1975,30 +3133,39 @@ Type H <return> for immediate help.}%
\if@nobreak\ifvmode\nobreak\fi\fi
}
\let\@auxout=\@mainaux
+\def\include#1{\relax
+ \ifnum\@auxout=\@partaux
+ \@latex@error{\string\include\space cannot be nested}\@eha
+ \else
+ \set@curr@file{#1}%
+ \edef\@curr@file{\@strip@tex@ext\@curr@file}%
+ \expandafter\@include\expandafter{\@curr@file} % deliberate space
+ \fi}
\def\includeonly#1{%
\@partswtrue
\let\@partlist\@empty
\@for\reserved@a:=#1 \do
- {
- \expandafter\set@curr@file@trim@spaces\expandafter{\reserved@a}%
+ {%
+ \expandafter\set@curr@file\expandafter{\reserved@a}%
\ifx\@partlist\@empty
- \edef\@partlist{\@curr@file}%
+ \edef\@partlist{\@strip@tex@ext\@curr@file}%
\else
- \edef\@partlist{\@partlist,\@curr@file}%
+ \edef\@partlist{\@partlist,\@strip@tex@ext\@curr@file}%
\fi
}%
}
\@onlypreamble\includeonly
-\def\include#1{\relax
- \ifnum\@auxout=\@partaux
- \@latex@error{\string\include\space cannot be nested}\@eha
- \else
- \set@curr@file@trim@spaces{#1}%
- \expandafter\@include\expandafter{\@curr@file} % deliberate space
- \fi}
-\def\set@curr@file@trim@spaces#1{%
- \@expl@tl@trim@spaces@apply@@nN {#1} \set@curr@file }
-
+\def\reserved@a#1{%
+\def\@strip@tex@ext##1{%
+ \expandafter\@strip@tex@ext@aux
+ ##1\@nil\@nil
+ #1\@nil\relax\@nnil}
+\def\@strip@tex@ext@aux##1#1\@nil##2\@nnil{%
+ \ifx\relax##2\@empty
+ \expandafter\@cdr\expandafter\@empty\@cdr{}##1%
+ \else##1\fi}}%
+\expandafter\reserved@a
+\expandafter{\detokenize{.tex}}
\def\@include#1 {%
\clearpage
\if@filesw
@@ -2017,7 +3184,15 @@ Type H <return> for immediate help.}%
\immediate\openout\@partaux "#1.aux"
\immediate\write\@partaux{\relax}%
\fi
+ \@filehook@set@CurrentFile
+ \UseHook{include/before}%
+ \UseHook{include/before/#1}%
\@input@{#1.tex}%
+ \UseHook{include/end/#1}%
+ \UseHook{include/end}%
+ \clearpage
+ \UseHook{include/after/#1}%
+ \UseHook{include/after}%
\clearpage
\@writeckpt{#1}%
\if@filesw
@@ -2043,7 +3218,6 @@ Type H <return> for immediate help.}%
\gdef\@charlb[{]
\gdef\@charrb[}]
]% }brace matching
-
\def\set@curr@file#1{%
\begingroup
\escapechar\m@ne
@@ -2099,6 +3273,9 @@ Type H <return> for immediate help.}%
\edef\reserved@a{\noexpand\@missingfileerror
{\filename@area\filename@base}%
{\ifx\filename@ext\relax tex\else\filename@ext\fi}}%
+ \reserved@a
+ \edef\reserved@a{\noexpand\@iinput{%
+ \@missingfile@area\@missingfile@base.\@missingfile@ext}}%
\reserved@a}}
\def\@input#1{%
@@ -2112,20 +3289,27 @@ Type H <return> for immediate help.}%
{\endlinechar\m@ne
\global\read\m@ne to\@gtempa}%
\ifx\@gtempa\@empty
+ \let\@missingfile@area\@empty
+ \let\@missingfile@base\@empty
+ \def\@missingfile@ext{tex}%
\else
- \def\reserved@a{x}\ifx\reserved@a\@gtempa\batchmode\@@end\fi
- \def\reserved@a{X}\ifx\reserved@a\@gtempa\batchmode\@@end\fi
+ \def\reserved@b{\batchmode\read-1 to \reserved@a}%
+ \def\reserved@a{x}\ifx\reserved@a\@gtempa\reserved@b\fi
+ \def\reserved@a{X}\ifx\reserved@a\@gtempa\reserved@b\fi
\filename@parse\@gtempa
\edef\filename@ext{%
\ifx\filename@ext\relax#2\else\filename@ext\fi}%
\edef\reserved@a{%
- \noexpand\InputIfFileExists
+ \noexpand\IfFileExists
{\filename@area\filename@base.\filename@ext}%
- {}%
+ {\def\noexpand\@missingfile@area{\filename@area}%
+ \def\noexpand\@missingfile@base{\filename@base}%
+ \def\noexpand\@missingfile@ext {\filename@ext}}%
{\noexpand\@missingfileerror
{\filename@area\filename@base}{\filename@ext}}}%
\reserved@a
- \fi}
+ \fi
+}
\def\@obsoletefile#1#2{%
\@latex@warning@no@line{inputting `#1' instead of obsolete `#2'}}
\@onlypreamble\@obsoletefile
@@ -2272,7 +3456,7 @@ Type H <return> for immediate help.}%
\reserved@a ^^@}}
\catcode\z@=15\relax
\@onlypreamble\DeclareTextComposite
-\DeclareRobustCommand\UseTextAccent[3]{%
+\DeclareRobustCommand*\UseTextAccent[3]{%
\hmode@start@before@group
{%
\let\hmode@start@before@group\@firstofone
@@ -2280,7 +3464,7 @@ Type H <return> for immediate help.}%
\@use@text@encoding{#1}%
#2{\@use@text@encoding\@curr@enc#3}%
}}
-\DeclareRobustCommand\UseTextSymbol[2]{%
+\DeclareRobustCommand*\UseTextSymbol[2]{%
\hmode@start@before@group
{%
\def\@wrong@font@char{\MessageBreak
@@ -3629,6 +4813,8 @@ Type H <return> for immediate help.}%
{\not@math@alphabet\sscshape\relax
\fontshape\sscdefault\selectfont}%
}
+\g@addto@macro\@kernel@after@begindocument@before
+ {\reinstall@nfss@defs\init@series@setup}
%%% From File: ltfsstrc.dtx
%% Copyright (C) 1989-97 by Frank Mittelbach and Rainer Sch\"opf.
%% Copyright (C) 1994-97 by LaTeX3 project. All rights reserved.
@@ -4844,75 +6030,6 @@ Type H <return> for immediate help.}%
\def\mdseries@sf{m}
\def\mdseries@tt{m}
-\def\expand@font@defaults{%
- \edef\rmdef@ult{\rmdefault}%
- \edef\sfdef@ult{\sfdefault}%
- \edef\ttdef@ult{\ttdefault}%
- \series@maybe@drop@one@m\bfdefault\bfdef@ult
- \series@maybe@drop@one@m\mddefault\mddef@ult
- \@expandfontdefaultshook
-}
-
-\DeclareRobustCommand\bfseries{%
- \not@math@alphabet\bfseries\mathbf
- \expand@font@defaults
- \ifx\bfdefault\bfdefault@previous\else
- \expandafter\def\expandafter\bfdefault
- \expandafter{\bfdefault\@empty}%
- \let\bfseries@previous\bfdefault
- \let\bfseries@rm\bfdef@ult
- \let\bfseries@sf\bfdef@ult
- \let\bfseries@tt\bfdef@ult
- \@setbfseriesdefaultshook
- \fi
- \ifx\f@family\rmdef@ult \fontseries\bfseries@rm
- \else\ifx\f@family\sfdef@ult \fontseries\bfseries@sf
- \else\ifx\f@family\ttdef@ult \fontseries\bfseries@tt
- \else \fontseries\bfdefault
- \fi\fi\fi
- \selectfont
-}
-
-\DeclareRobustCommand\mdseries{%
- \not@math@alphabet\mdseries\relax
- \expand@font@defaults
- \ifx\mddefault\mddefault@previous\else
- \expandafter\def\expandafter\mddefault\expandafter{\mddefault\@empty}%
- \let\mdseries@previous\mddefault
- \let\mdseries@rm\mddef@ult
- \let\mdseries@sf\mddef@ult
- \let\mdseries@tt\mddef@ult
- \@setmdseriesdefaultshook
- \fi
- \ifx\f@family\rmdef@ult \fontseries\mdseries@rm
- \else\ifx\f@family\sfdef@ult \fontseries\mdseries@sf
- \else\ifx\f@family\ttdef@ult \fontseries\mdseries@tt
- \else \fontseries\mddefault
- \fi\fi\fi
- \selectfont
-}
-
-\DeclareRobustCommand\rmfamily{%
- \not@math@alphabet\rmfamily\mathrm
- \prepare@family@series@update{rm}\rmdefault
- \@rmfamilyhook
- \selectfont}
-\DeclareRobustCommand\sffamily{%
- \not@math@alphabet\sffamily\mathsf
- \prepare@family@series@update{sf}\sfdefault
- \@sffamilyhook
- \selectfont}
-\DeclareRobustCommand\ttfamily{%
- \not@math@alphabet\ttfamily\mathtt
- \prepare@family@series@update{tt}\ttdefault
- \@ttfamilyhook
- \selectfont}
-\let\@expandfontdefaultshook\@empty
-\let\@setbfseriesdefaultshook\@empty
-\let\@setmdseriesdefaultshook\@empty
-\let\@rmfamilyhook\@empty
-\let\@sffamilyhook\@empty
-\let\@ttfamilyhook\@empty
\def\@meta@family@list{\@elt{rm}\@elt{sf}\@elt{tt}}
\def\prepare@family@series@update#1#2{%
\if@forced@series
@@ -4964,13 +6081,16 @@ Type H <return> for immediate help.}%
}
\def\init@series@setup{%
\ifx\bfseries@rm@kernel\bfseries@rm
- \expandafter\in@\expandafter{\rmdefault}{cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}%
+ \expandafter\in@\expandafter{\rmdefault}%
+ {cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}%
\ifin@ \else \def\bfseries@rm{b}\fi\fi
\ifx\bfseries@sf@kernel\bfseries@sf
- \expandafter\in@\expandafter{\sfdefault}{cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}%
+ \expandafter\in@\expandafter{\sfdefault}%
+ {cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}%
\ifin@ \else \def\bfseries@sf{b}\fi\fi
\ifx\bfseries@tt@kernel\bfseries@tt
- \expandafter\in@\expandafter{\ttdefault}{cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}%
+ \expandafter\in@\expandafter{\ttdefault}%
+ {cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}%
\ifin@ \else \def\bfseries@tt{b}\fi\fi
\reset@font
\ifx\seriesdefault\seriesdefault@kernel
@@ -4979,6 +6099,85 @@ Type H <return> for immediate help.}%
\fi
}%
\expandafter\let\csname ver@mweights.sty\endcsname\fmtversion
+
+\def\expand@font@defaults{%
+ \edef\rmdef@ult{\rmdefault}%
+ \edef\sfdef@ult{\sfdefault}%
+ \edef\ttdef@ult{\ttdefault}%
+ \series@maybe@drop@one@m\bfdefault\bfdef@ult
+ \series@maybe@drop@one@m\mddefault\mddef@ult
+ \UseHook{expand@font@defaults}%
+}
+
+\DeclareRobustCommand\bfseries{%
+ \not@math@alphabet\bfseries\mathbf
+ \expand@font@defaults
+ \ifx\bfdefault\bfdefault@previous\else
+ \expandafter\def\expandafter\bfdefault
+ \expandafter{\bfdefault\@empty}%
+ \let\bfseries@previous\bfdefault
+ \let\bfseries@rm\bfdef@ult
+ \let\bfseries@sf\bfdef@ult
+ \let\bfseries@tt\bfdef@ult
+ \UseHook{bfseries/defaults}%
+ \fi
+ \ifx\f@family\rmdef@ult \fontseries\bfseries@rm
+ \else\ifx\f@family\sfdef@ult \fontseries\bfseries@sf
+ \else\ifx\f@family\ttdef@ult \fontseries\bfseries@tt
+ \else \fontseries\bfdefault
+ \fi\fi\fi
+ \UseHook{bfseries}%
+ \selectfont
+}
+
+\DeclareRobustCommand\mdseries{%
+ \not@math@alphabet\mdseries\relax
+ \expand@font@defaults
+ \ifx\mddefault\mddefault@previous\else
+ \expandafter\def\expandafter\mddefault\expandafter{\mddefault\@empty}%
+ \let\mdseries@previous\mddefault
+ \let\mdseries@rm\mddef@ult
+ \let\mdseries@sf\mddef@ult
+ \let\mdseries@tt\mddef@ult
+ \UseHook{mdseries/defaults}%
+ \fi
+ \ifx\f@family\rmdef@ult \fontseries\mdseries@rm
+ \else\ifx\f@family\sfdef@ult \fontseries\mdseries@sf
+ \else\ifx\f@family\ttdef@ult \fontseries\mdseries@tt
+ \else \fontseries\mddefault
+ \fi\fi\fi
+ \UseHook{mdseries}%
+ \selectfont
+}
+
+\DeclareRobustCommand\rmfamily{%
+ \not@math@alphabet\rmfamily\mathrm
+ \prepare@family@series@update{rm}\rmdefault
+ \UseHook{rmfamily}%
+ \selectfont}
+\DeclareRobustCommand\sffamily{%
+ \not@math@alphabet\sffamily\mathsf
+ \prepare@family@series@update{sf}\sfdefault
+ \UseHook{sffamily}%
+ \selectfont}
+\DeclareRobustCommand\ttfamily{%
+ \not@math@alphabet\ttfamily\mathtt
+ \prepare@family@series@update{tt}\ttdefault
+ \UseHook{ttfamily}%
+ \selectfont}
+\NewHook{rmfamily}
+\NewHook{sffamily}
+\NewHook{ttfamily}
+\NewHook{normalfont}
+\NewHook{expand@font@defaults}
+\NewHook{bfseries}
+\NewHook{bfseries/defaults}
+\NewHook{mdseries}
+\NewHook{mdseries/defaults}
+\let\@rmfamilyhook\@empty
+\let\@sffamilyhook\@empty
+\let\@ttfamilyhook\@empty
+\let\@defaulfamilyhook\@empty
\DeclareRobustCommand\IfFontSeriesContextTF[1]{%
\expand@font@defaults
\@font@series@contextfalse
@@ -5088,10 +6287,11 @@ Type H <return> for immediate help.}%
\edef\f@family{\familydefault}%
\edef\f@series{\seriesdefault}%
\edef\f@shape{\shapedefault}%
- \@defaultfamilyhook
+ \UseHook{normalfont}%
+ \@defaultfamilyhook % hookname from 2020/02 will vanish
\selectfont}
\let\reset@font\normalfont
-\let\@defaultfamilyhook\@empty
+\let\@defaultfamilyhook\@empty %FMi sort out
\def\not@base#1{\@latex@error
{Command \noexpand#1not provided in base LaTeX2e}%
{Load the latexsym or the amsfonts package to
@@ -5830,6 +7030,7 @@ Type H <return> for immediate help.}%
\protected@write\@auxout{}%
{\string\newlabel{#1}{{\@currentlabel}{\thepage}}}%
\@esphack}
+\def\@currentcounter{}
\def\refstepcounter#1{\stepcounter{#1}%
\edef\@currentcounter{#1}%
\protected@edef\@currentlabel
@@ -5847,10 +7048,12 @@ Type H <return> for immediate help.}%
\@ignorefalse
\let\ignorespacesafterend\@ignoretrue
\def\enddocument{%
- \let\AtEndDocument\@firstofone
- \@enddocumenthook
+ \UseOneTimeHook{enddocument}%
+ \@kernel@after@enddocument
\@checkend{document}%
\clearpage
+ \UseOneTimeHook{enddocument/afterlastpage}%
+ \@kernel@after@enddocument@afterlastpage
\begingroup
\if@filesw
\immediate\closeout\@mainaux
@@ -5859,25 +7062,43 @@ Type H <return> for immediate help.}%
\@tempswafalse
\makeatletter \@@input\jobname.aux
\fi
- \@dofilelist
- \ifdim \font@submax >\fontsubfuzz\relax
- \@font@warning{Size substitutions with differences\MessageBreak
- up to \font@submax\space have occurred.\@gobbletwo}%
- \fi
- \@defaultsubs
- \@refundefined
- \if@filesw
- \ifx \@multiplelabels \relax
- \if@tempswa
- \@latex@warning@no@line{Label(s) may have changed.
- Rerun to get cross-references right}%
- \fi
- \else
- \@multiplelabels
- \fi
- \fi
+ \UseHook{enddocument/afteraux}%
+ \UseOneTimeHook{enddocument/info}%
\endgroup
+ \UseOneTimeHook{enddocument/end}%
\deadcycles\z@\@@end}
+\NewHook{enddocument}
+\NewHook{enddocument/afterlastpage}
+\NewHook{enddocument/afteraux}
+\NewHook{enddocument/info}
+\NewHook{enddocument/end}
+\AddToHook{enddocument/info}[kernel/filelist]{\@dofilelist}
+\AddToHook{enddocument/info}[kernel/warnings]{\@enddocument@kernel@warnings}
+\DeclareHookRule{enddocument/info}{kernel/filelist}{before}{kernel/warnings}
+\let\@kernel@after@enddocument\@empty
+\let\@kernel@after@enddocument@afterlastpage\@empty
+\def\@enddocument@kernel@warnings{%
+ \ifdim \font@submax >\fontsubfuzz\relax
+ \@font@warning{Size substitutions with differences\MessageBreak
+ up to \font@submax\space have occurred.\@gobbletwo}%
+ \fi
+ \@defaultsubs
+ \@refundefined
+ \if@filesw
+ \ifx \@multiplelabels \relax
+ \if@tempswa
+ \@latex@warning@no@line{Label(s) may have changed.
+ Rerun to get cross-references right}%
+ \fi
+ \else
+ \@multiplelabels
+ \fi
+ \ifx \@extra@page@added \relax
+ \@latex@warning@no@line{Temporary extra page added at the end.
+ Rerun to get it removed}%
+ \fi
+ \fi
+}
\def\@testdef #1#2#3{%
\def\reserved@a{#3}\expandafter \ifx \csname #1@#2\endcsname
\reserved@a \else \@tempswatrue \fi}
@@ -5908,14 +7129,24 @@ Type H <return> for immediate help.}%
\def\stop{\clearpage\deadcycles\z@\let\par\@@par\@@end}
\everypar{\@nodocument} %% To get an error if text appears before the
\nullfont %% \begin{document}
-\DeclareRobustCommand\begin[1]{%
+\DeclareRobustCommand*\begin[1]{%
+ \UseHook{env/#1/before}%
\@ifundefined{#1}%
{\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}%
{\def\reserved@a{\def\@currenvir{#1}%
- \edef\@currenvline{\on@line}%
- \csname #1\endcsname}}%
+ \edef\@currenvline{\on@line}%
+ \@execute@begin@hook{#1}%
+ \csname #1\endcsname}}%
\@ignorefalse
\begingroup\@endpefalse\reserved@a}
+\def\@execute@begin@hook #1{%
+ \expandafter\ifx\csname #1\endcsname\document
+ \endgroup
+ \gdef\@execute@begin@hook##1{\UseHook{env/##1/begin}}%
+ \@expl@@@initialize@all@@
+ \fi
+ \UseHook{env/#1/begin}%
+}
\edef\end
{\unexpanded{%
\romannumeral
@@ -5935,12 +7166,22 @@ Type H <return> for immediate help.}%
\expandafter\noexpand\csname end \endcsname
}
\@namedef{end }#1{%
- \csname end#1\endcsname\@checkend{#1}%
- \expandafter\endgroup\if@endpe\@doendpe\fi
- \if@ignore\@ignorefalse\ignorespaces\fi}
+ \romannumeral
+ \IfHookEmptyTF{env/#1/end}%
+ {\expandafter\z@}%
+ {\z@\UseHook{env/#1/end}}%
+ \csname end#1\endcsname\@checkend{#1}%
+ \expandafter\endgroup\if@endpe\@doendpe\fi
+ \UseHook{env/#1/after}%
+ \if@ignore\@ignorefalse\ignorespaces\fi
+}
\def\@checkend#1{\def\reserved@a{#1}\ifx
\reserved@a\@currenvir \else\@badend{#1}\fi}
\let\@currenvline\@empty
+\newcommand\AtBeginEnvironment[2][.] {\AddToHook{env/#2/begin}[#1]}
+\newcommand\AtEndEnvironment[2][.] {\AddToHook{env/#2/end}[#1]}
+\newcommand\BeforeBeginEnvironment[2][.]{\AddToHook{env/#2/before}[#1]}
+\newcommand\AfterEndEnvironment[2][.] {\AddToHook{env/#2/after}[#1]}
\message{center,}
\protected\def\@centercr{\ifhmode \unskip\else \@nolnerr\fi
\par\@ifstar{\nobreak\@xcentercr}\@xcentercr}
@@ -6164,13 +7405,13 @@ Type H <return> for immediate help.}%
\setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh}
\def\finsm@sh{\ht\z@\z@ \dp\z@\z@ \leavevmode@ifvmode\box\z@}
\def\buildrel#1\over#2{\mathrel{\mathop{\kern\z@#2}\limits^{#1}}}
-\DeclareRobustCommand\cases[1]{\left\{\,\vcenter{\normalbaselines\m@th
+\DeclareRobustCommand*\cases[1]{\left\{\,\vcenter{\normalbaselines\m@th
\ialign{$##\hfil$&\quad{##}\hfil\crcr#1\crcr}}\right.}
-\DeclareRobustCommand\matrix[1]{\null\,\vcenter{\normalbaselines\m@th
+\DeclareRobustCommand*\matrix[1]{\null\,\vcenter{\normalbaselines\m@th
\ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr
\mathstrut\crcr\noalign{\kern-\baselineskip}
#1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,}
-\DeclareRobustCommand\pmatrix[1]{\left(\matrix{#1}\right)}
+\DeclareRobustCommand*\pmatrix[1]{\left(\matrix{#1}\right)}
\def\bordermatrix#1{\begingroup \m@th
\@tempdima 8.75\p@
\setbox\z@\vbox{%
@@ -6610,7 +7851,8 @@ Type H <return> for immediate help.}%
\def\@makepicbox(#1,#2){%
\@ifnextchar[{\@imakepicbox(#1,#2)}{\@imakepicbox(#1,#2)[]}}
\long\def\@imakepicbox(#1,#2)[#3]#4{%
- \vbox to#2\unitlength
+ \@defaultunitsset\@tempdimc{#2}\unitlength
+ \vbox to\@tempdimc
{\let\mb@b\vss \let\mb@l\hss\let\mb@r\hss
\let\mb@t\vss
\@tfor\reserved@a :=#3\do{%
@@ -6620,7 +7862,8 @@ Type H <return> for immediate help.}%
\expandafter\let\csname mb@\reserved@a\endcsname\relax
\fi}%
\mb@t
- \hb@xt@ #1\unitlength{\mb@l #4\mb@r}%
+ \@defaultunitsset\@tempdimc{#1}\unitlength
+ \hb@xt@\@tempdimc{\mb@l #4\mb@r}%
\mb@b
\kern\z@}}
\let\set@color\relax
@@ -7231,33 +8474,44 @@ Type H <return> for immediate help.}%
\newdimen\unitlength \unitlength =1pt
\newbox\@picbox
\newdimen\@picht
+\def\@defaultunitsset#1#2#3{%
+ \@defaultunits#1\dimexpr#2#3\relax\relax\@nnil}
\long\def\picture#1{\pictur@#1}
\def\pictur@(#1){%
\@ifnextchar({\@picture(#1)}{\@picture(#1)(0,0)}}
\def\@picture(#1,#2)(#3,#4){%
- \@picht#2\unitlength
- \setbox\@picbox\hb@xt@#1\unitlength\bgroup
- \hskip -#3\unitlength
- \lower #4\unitlength\hbox\bgroup
+ \@defaultunitsset\@picht{#2}\unitlength
+ \@defaultunitsset\@tempdimc{#1}\unitlength
+ \setbox\@picbox\hb@xt@\@tempdimc\bgroup
+ \@defaultunitsset\@tempdimc{#3}\unitlength
+ \hskip -\@tempdimc
+ \@defaultunitsset\@tempdimc{#4}\unitlength
+ \lower\@tempdimc\hbox\bgroup
\ignorespaces}
\def\endpicture{%
\egroup\hss\egroup
\ht\@picbox\@picht\dp\@picbox\z@
\mbox{\box\@picbox}}
\long\def\put(#1,#2)#3{%
- \@killglue\raise#2\unitlength
- \hb@xt@\z@{\kern#1\unitlength #3\hss}%
+ \@killglue
+ \@defaultunitsset\@tempdimc{#2}\unitlength
+ \raise\@tempdimc
+ \hb@xt@\z@{%
+ \@defaultunitsset\@tempdimc{#1}\unitlength
+ \kern\@tempdimc
+ #3\hss}%
\ignorespaces}
\def\multiput(#1,#2)#3{%
- \@xdim #1\unitlength
- \@ydim #2\unitlength
+ \@defaultunitsset\@xdim{#1}\unitlength
+ \@defaultunitsset\@ydim{#2}\unitlength
\@multiput(}
\long\def\@multiput(#1,#2)#3#4{%
\@killglue\@multicnt #3\relax
\@whilenum \@multicnt >\z@\do
{\raise\@ydim\hb@xt@\z@{\kern\@xdim #4\hss}%
\advance\@multicnt\m@ne
- \advance\@xdim#1\unitlength\advance\@ydim#2\unitlength}%
+ \@defaultunitsset{\advance\@xdim}{#1}\unitlength
+ \@defaultunitsset{\advance\@ydim}{#2}\unitlength}%
\ignorespaces}
\def\@killglue{\unskip\@whiledim \lastskip >\z@\do{\unskip}}
\DeclareRobustCommand\thinlines{\let\@linefnt\tenln
@@ -7266,7 +8520,7 @@ Type H <return> for immediate help.}%
\DeclareRobustCommand\thicklines{\let\@linefnt\tenlnw
\let\@circlefnt\tencircw
\@wholewidth\fontdimen8\tenlnw \@halfwidth .5\@wholewidth}
-\DeclareRobustCommand\linethickness[1]
+\DeclareRobustCommand*\linethickness[1]
{\@wholewidth #1\relax \@halfwidth .5\@wholewidth \ignorespaces}
\def\shortstack{\@ifnextchar[\@shortstack{\@shortstack[c]}}
\def\@shortstack[#1]{%
@@ -7283,7 +8537,7 @@ Type H <return> for immediate help.}%
\def\@istackcr[#1]{\cr\noalign{\@vspace@calcify{#1}}\ignorespaces}
\newif\if@negarg
\def\line(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
- \@linelen #3\unitlength
+ \@defaultunitsset\@linelen{#3}\unitlength
\ifdim\@linelen<\z@\@badlinearg\else
\ifnum\@xarg =\z@ \@vline
\else \ifnum\@yarg =\z@ \@hline \else \@sline\fi
@@ -7341,7 +8595,7 @@ Type H <return> for immediate help.}%
\def\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
\@tempcnta \ifnum\@xarg<\z@ -\@xarg\else\@xarg\fi
\ifnum\@tempcnta<5\relax
- \@linelen #3\unitlength
+ \@defaultunitsset\@linelen{#3}\unitlength
\ifdim\@linelen<\z@\@badlinearg\else
\ifnum\@xarg =\z@ \@vvector
\else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi
@@ -7394,9 +8648,10 @@ Type H <return> for immediate help.}%
\hss}}
\def\dashbox#1(#2,#3){\leavevmode\hb@xt@\z@{\baselineskip \z@skip
\lineskip \z@skip
-\@dashdim #2\unitlength
+\@defaultunitsset\@dashdim{#2}\unitlength
\@dashcnt \@dashdim \advance\@dashcnt 200
-\@dashdim #1\unitlength\divide\@dashcnt \@dashdim
+\@defaultunitsset\@dashdim{#1}\unitlength
+\divide\@dashcnt \@dashdim
\ifodd\@dashcnt\@dashdim \z@
\advance\@dashcnt \@ne \divide\@dashcnt \tw@
\else \divide\@dashdim \tw@ \divide\@dashcnt \tw@
@@ -7408,15 +8663,19 @@ Type H <return> for immediate help.}%
\put(#2,#3){\hskip-\@dashdim\box\@dashbox}%
\multiply\@dashdim \thr@@
\fi
-\setbox\@dashbox \hbox{\vrule \@height \@halfwidth \@depth \@halfwidth
-\@width #1\unitlength\hskip #1\unitlength}\@tempcnta\z@
+\setbox\@dashbox \hbox{%
+ \@defaultunitsset\@tempdimc{#1}\unitlength
+ \vrule \@height \@halfwidth \@depth \@halfwidth \@width \@tempdimc
+ \hskip\@tempdimc}%
+\@tempcnta\z@
\put(0,0){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt
\do{\copy\@dashbox\advance\@tempcnta \@ne }}\@tempcnta\z@
\put(0,#3){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt
\do{\copy\@dashbox\advance\@tempcnta \@ne }}%
-\@dashdim #3\unitlength
+\@defaultunitsset\@dashdim{#3}\unitlength
\@dashcnt \@dashdim \advance\@dashcnt 200
-\@dashdim #1\unitlength\divide\@dashcnt \@dashdim
+\@defaultunitsset\@dashdim{#1}\unitlength
+\divide\@dashcnt \@dashdim
\ifodd\@dashcnt \@dashdim \z@
\advance\@dashcnt \@ne \divide\@dashcnt \tw@
\else
@@ -7430,13 +8689,15 @@ Type H <return> for immediate help.}%
\put(#2,#3){\lower\@dashdim\copy\@dashbox}%
\multiply\@dashdim \thr@@
\fi
-\setbox\@dashbox\hbox{\vrule \@width \@wholewidth
-\@height #1\unitlength}\@tempcnta\z@
+\@defaultunitsset\@tempdimb{#1}\unitlength
+\setbox\@dashbox\hbox{%
+ \vrule \@width \@wholewidth \@height\@tempdimb}%
+\@tempcnta\z@
\put(0,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta <\@dashcnt
-\do{\vskip #1\unitlength\copy\@dashbox\advance\@tempcnta \@ne }%
+\do{\vskip\@tempdimb\copy\@dashbox\advance\@tempcnta \@ne }%
\vskip\@dashdim}}\@tempcnta\z@
\put(#2,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta<\@dashcnt
-\do{\vskip #1\unitlength\copy\@dashbox\advance\@tempcnta \@ne }%
+\do{\vskip\@tempdimb\copy\@dashbox\advance\@tempcnta \@ne }%
\vskip\@dashdim}}}\@makepicbox(#2,#3)}
\newif\if@ovt
\newif\if@ovb
@@ -7470,9 +8731,10 @@ Type H <return> for immediate help.}%
\def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen
\@ovttrue \@ovbtrue \@ovltrue \@ovrtrue
\@ovvlinefalse \@ovhlinefalse
- \@tfor\reserved@a :=#3\do{\csname @ov\reserved@a false\endcsname}%
- \@ovxx #1\unitlength
- \@ovyy #2\unitlength
+ \@tfor\reserved@a :=#3\do{%
+ \csname @ov\reserved@a false\endcsname}%
+ \@defaultunitsset\@ovxx{#1}\unitlength
+ \@defaultunitsset\@ovyy{#2}\unitlength
\@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx \@ovvlinetrue
\else \@ovyy \ifdim \@ovyy =\@ovxx \else \@ovhlinetrue \fi\fi
\advance \@tempdimb -2\p@
@@ -7507,7 +8769,8 @@ Type H <return> for immediate help.}%
\kern \@ovri}}
\def\circle{\@inmatherr\circle\@ifstar\@dot\@circle}
\def\@circle#1{%
- \begingroup \boxmaxdepth \maxdimen \@tempdimb #1\unitlength
+ \begingroup \boxmaxdepth \maxdimen
+ \@defaultunitsset\@tempdimb{#1}\unitlength
\ifdim \@tempdimb >15.5\p@ \@getcirc\@tempdimb
\@ovro\ht\@tempboxa
\setbox\@tempboxa\hbox{\@circlefnt
@@ -7518,7 +8781,9 @@ Type H <return> for immediate help.}%
\box\@tempboxa}\ht\@tempboxa\z@ \dp\@tempboxa\z@
\@put{-\@ovro}{-\@ovro}{\box\@tempboxa}%
\else \@circ\@tempdimb{96}\fi\endgroup}
-\def\@dot#1{\@tempdimb #1\unitlength \@circ\@tempdimb{112}}
+\def\@dot#1{%
+ \@defaultunitsset\@tempdimb{#1}\unitlength
+ \@circ\@tempdimb{112}}
\def\@circ#1#2{\@tempdima #1\relax \advance\@tempdima .5\p@
\@tempcnta\@tempdima \@tempdima \p@
\divide\@tempcnta\@tempdima
@@ -7548,33 +8813,39 @@ Type H <return> for immediate help.}%
\def\bezier#1)#2(#3)#4({\@bezier#1)(#3)(}
\def\@bezier#1(#2,#3)(#4,#5)(#6,#7){%
\ifnum #1=\z@
- \@ovxx #4\unitlength
- \advance\@ovxx -#2\unitlength
+ \@defaultunitsset\@ovxx{#4}\unitlength
+ \@defaultunitsset{\advance\@ovxx}{-#2}\unitlength
\ifdim \@ovxx<\z@ \@ovxx -\@ovxx \fi
- \@ovdx #6\unitlength
- \advance\@ovdx -#4\unitlength
+ \@defaultunitsset\@ovdx{#6}\unitlength
+ \@defaultunitsset{\advance\@ovdx}{-#4}\unitlength
\ifdim \@ovdx<\z@ \@ovdx -\@ovdx \fi
\ifdim \@ovxx<\@ovdx \@ovxx \@ovdx \fi
- \@ovyy #5\unitlength
- \advance\@ovyy -#3\unitlength
+ \@defaultunitsset\@ovyy{#5}\unitlength
+ \@defaultunitsset{\advance\@ovyy}{-#3}\unitlength
\ifdim \@ovyy<\z@ \@ovyy -\@ovyy \fi
- \@ovdy #7\unitlength
- \advance\@ovdy -#5\unitlength
+ \@defaultunitsset\@ovdy{#7}\unitlength
+ \@defaultunitsset{\advance\@ovdy}{-#5}\unitlength
\ifdim \@ovdy<\z@ \@ovdy -\@ovdy \fi
\ifdim \@ovyy<\@ovdy \@ovyy \@ovdy \fi
\@multicnt
\ifdim \@ovxx>\@ovyy \@ovxx \else \@ovyy \fi
\@ovxx .5\@halfwidth \divide\@multicnt\@ovxx
- \ifnum \qbeziermax<\@multicnt \@multicnt\qbeziermax\relax \fi
+ \ifnum \qbeziermax<\@multicnt
+ \@multicnt\qbeziermax\relax
+ \fi
\else \@multicnt#1\relax \fi
\@tempcnta\@multicnt \advance\@tempcnta\@ne
- \@ovdx #4\unitlength \advance\@ovdx -#2\unitlength
+ \@defaultunitsset\@ovdx{#4}\unitlength
+ \@defaultunitsset{\advance\@ovdx}{-#2}\unitlength
\multiply\@ovdx \tw@
- \@ovxx #6\unitlength \advance\@ovxx -#2\unitlength
+ \@defaultunitsset\@ovxx{#6}\unitlength
+ \@defaultunitsset{\advance\@ovxx}{-#2}\unitlength
\advance\@ovxx -\@ovdx \divide\@ovxx\@multicnt
- \@ovdy #5\unitlength \advance\@ovdy -#3\unitlength
+ \@defaultunitsset\@ovdy{#5}\unitlength
+ \@defaultunitsset{\advance\@ovdy}{-#3}\unitlength
\multiply\@ovdy \tw@
- \@ovyy #7\unitlength \advance\@ovyy -#3\unitlength
+ \@defaultunitsset\@ovyy{#7}\unitlength
+ \@defaultunitsset{\advance\@ovyy}{-#3}\unitlength
\advance\@ovyy -\@ovdy \divide\@ovyy\@multicnt
\setbox\@tempboxa\hbox{%
\hskip -\@halfwidth
@@ -7650,8 +8921,8 @@ Type H <return> for immediate help.}%
%%% From File: ltsect.dtx
\message{title,}
\DeclareRobustCommand\title[1]{\gdef\@title{#1}}
-\DeclareRobustCommand\author[1]{\gdef\@author{#1}}
-\DeclareRobustCommand\date[1]{\gdef\@date{#1}}
+\DeclareRobustCommand*\author[1]{\gdef\@author{#1}}
+\DeclareRobustCommand*\date[1]{\gdef\@date{#1}}
\DeclareRobustCommand\thanks[1]{\footnotemark
\protected@xdef\@thanks{\@thanks
\protect\footnotetext[\the\c@footnote]{#1}}%
@@ -7789,7 +9060,7 @@ Type H <return> for immediate help.}%
\@nobreakfalse
\endgroup}
\def\addcontentsline#1#2#3{%
- \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}%
+ \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}{}%
\protected@file@percent}}
\long\def\addtocontents#1#2{%
\protected@write\@auxout
@@ -8235,7 +9506,7 @@ Type H <return> for immediate help.}%
\hfil}\let\@evenhead\@empty\let\@evenfoot\@oddfoot}
\let\@leftmark\@firstoftwo
\let\@rightmark\@secondoftwo
-\DeclareRobustCommand\markboth[2]{%
+\DeclareRobustCommand*\markboth[2]{%
\begingroup
\let\label\relax \let\index\relax \let\glossary\relax
\unrestored@protected@xdef\@themark {{#1}{#2}}%
@@ -8243,7 +9514,7 @@ Type H <return> for immediate help.}%
\mark{\the\@temptokena}%
\endgroup
\if@nobreak\ifvmode\nobreak\fi\fi}
-\DeclareRobustCommand\markright[1]{%
+\DeclareRobustCommand*\markright[1]{%
\begingroup
\let\label\relax \let\index\relax \let\glossary\relax
\expandafter\@markright\@themark {#1}%
@@ -8273,6 +9544,1445 @@ Type H <return> for immediate help.}%
\hfuzz .1\p@
\vfuzz\hfuzz}
\overfullrule 0pt
+%%% From File: ltclass.dtx
+\newif\if@compatibility
+\def\@documentclasshook{%
+ \ifx\@normalsize\@undefined
+ \let\@normalsize\normalsize
+ \fi
+}
+\let\@declaredoptions\@empty
+\let\@classoptionslist\relax
+\@onlypreamble\@classoptionslist
+\let\@unusedoptionlist\@empty
+\@onlypreamble\@unusedoptionlist
+\let\CurrentOption\@empty
+\let\@currname\@empty
+\global\let\@currext=\@empty
+\def\@clsextension{cls}
+\def\@pkgextension{sty}
+\@onlypreamble\@clsextension
+\@onlypreamble\@pkgextension
+\def\@pushfilename{%
+ \@expl@@@hook@curr@name@push@@n{}%
+ \@expl@push@filename@@
+ \xdef\@currnamestack{%
+ {\@currname}%
+ {\@currext}%
+ {\the\catcode`\@}%
+ \@currnamestack}%
+ \@expl@push@filename@aux@@}
+\@onlypreamble\@pushfilename
+\def\@popfilename{\@expl@@@hook@curr@name@pop@@
+ \expandafter\@p@pfilename\@currnamestack\@nil
+ \@expl@pop@filename@@}
+\@onlypreamble\@popfilename
+\def\@p@pfilename#1#2#3#4\@nil{%
+ \gdef\@currname{#1}%
+ \gdef\@currext{#2}%
+ \catcode`\@#3\relax
+ \gdef\@currnamestack{#4}}
+\@onlypreamble\@p@pfilename
+\gdef\@currnamestack{}
+\@onlypreamble\@currnamestack
+\def\@ptionlist#1{%
+ \@ifundefined{opt@#1}\@empty{\csname opt@#1\endcsname}}
+\@onlypreamble\@ptionlist
+\def\@ifpackageloaded{\@ifl@aded\@pkgextension}
+\def\@ifclassloaded{\@ifl@aded\@clsextension}
+\@onlypreamble\@ifpackageloaded
+\@onlypreamble\@ifclassloaded
+\def\@ifl@aded#1#2{%
+ \expandafter\ifx\csname ver@#2.#1\endcsname\relax
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi}
+\@onlypreamble\@ifl@aded
+\def\@ifpackagelater{\@ifl@ter\@pkgextension}
+\def\@ifclasslater{\@ifl@ter\@clsextension}
+\@onlypreamble\@ifpackagelater
+\@onlypreamble\@ifclasslater
+\def\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
+\let\IfPackageAtLeastTF\@ifpackagelater
+\let\IfClassAtLeastTF\@ifclasslater
+\@onlypreamble\IfFormatAtLeastTF
+\@onlypreamble\IfPackageAtLeastTF
+\@onlypreamble\IfClassAtLeastTF
+\def\@ifl@ter#1#2{%
+ \expandafter\@ifl@t@r
+ \csname ver@#2.#1\endcsname}
+\@onlypreamble\@ifl@ter
+\def\@ifl@t@r#1#2{%
+ \ifnum\expandafter\@parse@version@#1//00\@nil<%
+ \expandafter\@parse@version@#2//00\@nil
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi}
+\def\@parse@version@#1{\@parse@version0#1}
+\@onlypreamble\@ifl@t@r
+\def\@parse@version#1/#2/#3#4#5\@nil{%
+\@parse@version@dash#1-#2-#3#4\@nil
+}
+\def\@parse@version@dash#1-#2-#3#4#5\@nil{%
+ \if\relax#2\relax\else#1\fi#2#3#4 }
+\def\@ifpackagewith{\@if@ptions\@pkgextension}
+\def\@ifclasswith{\@if@ptions\@clsextension}
+\@onlypreamble\@ifpackagewith
+\@onlypreamble\@ifclasswith
+\def\@if@ptions#1#2{%
+ \@expandtwoargs\@if@pti@ns{\@ptionlist{#2.#1}}}
+\@onlypreamble\@if@ptions
+\def\@if@pti@ns#1#2{%
+ \let\reserved@a\@firstoftwo
+ \edef\reserved@b{\zap@space#2 \@empty}%
+ \@for\reserved@b:=\reserved@b\do{%
+ \ifx\reserved@b\@empty
+ \else
+ \expandafter\in@\expandafter{\expandafter,\reserved@b,}{,#1,}%
+ \ifin@
+ \else
+ \let\reserved@a\@secondoftwo
+ \fi
+ \fi
+ }%
+ \reserved@a}
+\@onlypreamble\@if@pti@ns
+\def\ProvidesPackage#1{%
+ \xdef\@gtempa{#1}%
+ \ifx\@gtempa\@currname\else
+ \@latex@warning@no@line{You have requested
+ \@cls@pkg\space`\@currname',\MessageBreak
+ but the \@cls@pkg\space provides `#1'}%
+ \fi
+ \@ifnextchar[\@pr@videpackage{\@pr@videpackage[]}}%]
+\@onlypreamble\ProvidesPackage
+\def\@pr@videpackage[#1]{%
+ \expandafter\protected@xdef % <-- protected...
+ \csname ver@\@currname.\@currext\endcsname{#1}%
+ \ifx\@currext\@clsextension
+ \typeout{Document Class: \@gtempa\space#1}%
+ \else
+ \protected@wlog{Package: \@gtempa\space#1}% <--- protected
+ \fi}
+\long\def\protected@wlog#1{\begingroup
+ \set@display@protect
+ \immediate \write \m@ne {#1}\endgroup }
+\@onlypreamble\@pr@videpackage
+\let\ProvidesClass\ProvidesPackage
+\@onlypreamble\ProvidesClass
+\def\ProvidesFile#1{%
+ \begingroup
+ \catcode`\ 10 %
+ \ifnum \endlinechar<256 %
+ \ifnum \endlinechar>\m@ne
+ \catcode\endlinechar 10 %
+ \fi
+ \fi
+ \@makeother\/%
+ \@makeother\&%
+ \kernel@ifnextchar[{\@providesfile{#1}}{\@providesfile{#1}[]}}
+\def\@pass@ptions#1#2#3{%
+ \expandafter\xdef\csname opt@#3.#1\endcsname{%
+ \@ifundefined{opt@#3.#1}\@empty
+ {\csname opt@#3.#1\endcsname,}%
+ \zap@space#2 \@empty}}
+\@onlypreamble\@pass@ptions
+\def\PassOptionsToPackage{\@pass@ptions\@pkgextension}
+\def\PassOptionsToClass{\@pass@ptions\@clsextension}
+\@onlypreamble\PassOptionsToPackage
+\@onlypreamble\PassOptionsToClass
+\def\DeclareOption{%
+ \let\@fileswith@pti@ns\@badrequireerror
+ \@ifstar\@defdefault@ds\@declareoption}
+\long\def\@declareoption#1#2{%
+ \xdef\@declaredoptions{\@declaredoptions,#1}%
+ \toks@{#2}%
+ \expandafter\edef\csname ds@#1\endcsname{\the\toks@}}
+\long\def\@defdefault@ds#1{%
+ \toks@{#1}%
+ \edef\default@ds{\the\toks@}}
+\@onlypreamble\DeclareOption
+\@onlypreamble\@declareoption
+\@onlypreamble\@defdefault@ds
+\def\OptionNotUsed{%
+ \ifx\@currext\@clsextension
+ \xdef\@unusedoptionlist{%
+ \ifx\@unusedoptionlist\@empty\else\@unusedoptionlist,\fi
+ \CurrentOption}%
+ \fi}
+\@onlypreamble\OptionNotUsed
+\def\ProcessOptions{%
+ \let\ds@\@empty
+ \edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
+ \@ifstar\@xprocess@ptions\@process@ptions}
+\@onlypreamble\ProcessOptions
+\def\@process@ptions{%
+ \@for\CurrentOption:=\@declaredoptions\do{%
+ \ifx\CurrentOption\@empty\else
+ \@expandtwoargs\in@{,\CurrentOption,}{%
+ ,\ifx\@currext\@clsextension\else\@classoptionslist,\fi
+ \@curroptions,}%
+ \ifin@
+ \@use@ption
+ \expandafter\let\csname ds@\CurrentOption\endcsname\@empty
+ \fi
+ \fi}%
+ \@process@pti@ns}
+\@onlypreamble\@process@ptions
+\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}
+\@onlypreamble\@xprocess@ptions
+\def\@process@pti@ns{%
+ \@for\CurrentOption:=\@curroptions\do{%
+ \@ifundefined{ds@\CurrentOption}%
+ {\@use@ption
+ \default@ds}%
+ \@use@ption}%
+ \@for\CurrentOption:=\@declaredoptions\do{%
+ \expandafter\let\csname ds@\CurrentOption\endcsname\relax}%
+ \let\CurrentOption\@empty
+ \let\@fileswith@pti@ns\@@fileswith@pti@ns
+ \AtEndOfPackage{\expandafter\let
+ \csname unprocessedoptions-\@currname.\@currext\endcsname
+ \relax}}
+\@onlypreamble\@process@pti@ns
+\def\@options{\ProcessOptions*}
+\@onlypreamble\@options
+\def\@use@ption{%
+ \@expandtwoargs\@removeelement\CurrentOption
+ \@unusedoptionlist\@unusedoptionlist
+ \csname ds@\CurrentOption\endcsname}
+\@onlypreamble\@use@ption
+\def\ExecuteOptions#1{%
+ \edef\@fortmp{\zap@space#1 \@empty}%
+ \def\reserved@a##1\@nil{%
+ \@for\CurrentOption:=\@fortmp\do
+ {\csname ds@\CurrentOption\endcsname}%
+ \edef\CurrentOption{##1}}%
+ \expandafter\reserved@a\CurrentOption\@nil}
+\@onlypreamble\ExecuteOptions
+\def\documentclass{%
+ \let\documentclass\@twoclasseserror
+ \if@compatibility\else\let\usepackage\RequirePackage\fi
+ \@fileswithoptions\@clsextension}
+\@onlypreamble\documentclass
+\def\documentstyle{%
+ \makeatletter\input{latex209.def}\makeatother
+ \documentclass}
+\@onlypreamble\documentstyle
+\def\RequirePackage{%
+ \@fileswithoptions\@pkgextension}
+\@onlypreamble\RequirePackage
+\def\LoadClass{%
+ \ifx\@currext\@pkgextension
+ \@latex@error
+ {\noexpand\LoadClass in package file}%
+ {You may only use \noexpand\LoadClass in a class file.}%
+ \fi
+ \@fileswithoptions\@clsextension}
+\@onlypreamble\LoadClass
+\def\@loadwithoptions#1#2#3{%
+ \expandafter\let\csname opt@#3.#1\expandafter\endcsname
+ \csname opt@\@currname.\@currext\endcsname
+ #2{#3}}
+\@onlypreamble\@loadwithoptions
+\def\LoadClassWithOptions{%
+ \@loadwithoptions\@clsextension\LoadClass}
+\@onlypreamble\LoadClassWithOptions
+\def\RequirePackageWithOptions{%
+ \AtEndOfPackage{\expandafter\let
+ \csname unprocessedoptions-\@currname.\@currext\endcsname
+ \relax}%
+ \@loadwithoptions\@pkgextension\RequirePackage}
+\@onlypreamble\RequirePackageWithOptions
+
+\def\usepackage#1#{%
+ \@latex@error
+ {\noexpand \usepackage before \string\documentclass}%
+ {\noexpand \usepackage may only appear in the document
+ preamble, i.e.,\MessageBreak
+ between \noexpand\documentclass and
+ \string\begin{document}.}%
+ \@gobble}
+\@onlypreamble\usepackage
+\def\NeedsTeXFormat#1{%
+ \def\reserved@a{#1}%
+ \ifx\reserved@a\fmtname
+ \expandafter\@needsformat
+ \else
+ \@latex@error{This file needs format `\reserved@a'%
+ \MessageBreak but this is `\fmtname'}{%
+ The current input file will not be processed
+ further,\MessageBreak
+ because it was written for some other flavor of
+ TeX.\MessageBreak\@ehd}%
+ \endinput \fi}
+\@onlypreamble\NeedsTeXFormat
+\def\@needsformat{%
+ \@ifnextchar[%]
+ \@needsf@rmat
+ {}}
+\@onlypreamble\@needsformat
+\def\@needsf@rmat[#1]{%
+ \@ifl@t@r\fmtversion{#1}{}%
+ {\@latex@warning@no@line
+ {You have requested release `#1' of LaTeX,\MessageBreak
+ but only release `\fmtversion' is available}}}
+\@onlypreamble\@needsf@rmat
+\def\zap@space#1 #2{%
+ #1%
+ \ifx#2\@empty\else\expandafter\zap@space\fi
+ #2}
+\def\@fileswithoptions#1{%
+ \@ifnextchar[%]
+ {\@fileswith@ptions#1}%
+ {\@fileswith@ptions#1[]}}
+\@onlypreamble\@fileswithoptions
+\def\@fileswith@ptions#1[#2]#3{%
+ \@ifnextchar[%]
+ {\@fileswith@pti@ns#1[{#2}]#3}%
+ {\@fileswith@pti@ns#1[{#2}]#3[]}}
+\@onlypreamble\@fileswith@ptions
+\def\@fileswith@pti@ns#1[#2]#3[#4]{%
+ \ifx#1\@clsextension
+ \ifx\@classoptionslist\relax
+ \xdef\@classoptionslist{\zap@space#2 \@empty}%
+ \def\reserved@a{%
+ \@onefilewithoptions#3[{#2}][{#4}]#1%
+ \@documentclasshook}%
+ \else
+ \def\reserved@a{%
+ \@onefilewithoptions#3[{#2}][{#4}]#1}%
+ \fi
+ \else
+ \def\reserved@b##1,{%
+ \ifx\@nnil##1\relax\else
+ \ifx\@nnil##1\@nnil\else
+ \noexpand\@onefilewithoptions##1[{#2}][{#4}]%
+ \noexpand\@pkgextension
+ \fi
+ \expandafter\reserved@b
+ \fi}%
+ \edef\reserved@a{\zap@space#3 \@empty}%
+ \edef\reserved@a{\expandafter\reserved@b\reserved@a,\@nnil,}%
+ \fi
+ \reserved@a}
+\@onlypreamble\@fileswith@pti@ns
+
+\def\@onefilewithoptions#1[#2][#3]#4{%
+ \@pushfilename
+ \xdef\@currname{#1}%
+ \global\let\@currext#4%
+ \@ifl@aded\@currext\@currname
+ {\@if@ptions\@currext{\@currname}{#2}{}%
+ {\@latex@error
+ {Option clash for \@cls@pkg\space \@currname}%
+ {The package \@currname\space has already been loaded
+ with options:\MessageBreak
+ \space\space[\@ptionlist{\@currname.\@currext}]\MessageBreak
+ There has now been an attempt to load it
+ with options\MessageBreak
+ \space\space[#2]\MessageBreak
+ Adding the global options:\MessageBreak
+ \space\space
+ \@ptionlist{\@currname.\@currext},#2\MessageBreak
+ to your \noexpand\documentclass declaration may fix this.%
+ \MessageBreak
+ Try typing \space <return> \space to proceed.}}%
+ \@firstofone}%
+ {\makeatletter
+ \@reset@ptions
+ \IfFileExists{\@currname.\@currext}{}%
+ {\@missing@onefilewithoptions{#2}}%
+ \ifx\@currname\@empty
+ \expandafter\@gobble
+ \else
+ \@disable@packageload@do{\@currname.\@currext}%
+ {\@expl@@@filehook@file@push@@
+ \set@curr@file{\@currname.\@currext}%
+ \@filehook@set@CurrentFile
+ \load@onefile@withoptions{#2}%
+ \@expl@@@filehook@file@pop@@}%
+ \expandafter\@firstofone
+ \fi}%
+ {\@ifl@ter\@currext{\@currname}{#3}{}%
+ {\@latex@warning@no@line
+ {You have requested,\on@line,
+ version\MessageBreak
+ `#3' of \@cls@pkg\space \@currname,\MessageBreak
+ but only version\MessageBreak
+ `\csname ver@\@currname.\@currext\endcsname'\MessageBreak
+ is available}}%
+ \ifx\@currext\@clsextension\let\LoadClass\@twoloadclasserror\fi}%
+ \@popfilename
+ \@reset@ptions}
+\@onlypreamble\@onefilewithoptions
+\let\@unprocessedoptions\@undefined
+
+\def\@missing@onefilewithoptions#1{%
+ \@missingfileerror\@currname\@currext
+ \xdef\@currname{\@missingfile@area\@missingfile@base}%
+ \global\let\@currext\@missingfile@ext}
+\def\load@onefile@withoptions#1{%
+ \let\CurrentOption\@empty
+ \@reset@ptions
+ \def\reserved@a{%
+ \@pass@ptions\@currext{#1}{\@currname}%
+ \global\expandafter
+ \let\csname ver@\@currname.\@currext\endcsname\@empty
+ \expandafter\let\csname\@currname.\@currext-h@@k\endcsname\@empty
+ \ifx\@currext\@pkgextension
+ \UseHook{package/before}%
+ \UseHook{package/before/\@currname}%
+ \else
+ \ifx\@currext\@clsextension
+ \UseHook{class/before}%
+ \UseHook{class/before/\@currname}%
+ \fi
+ \fi
+ \InputIfFileExists{\@currname.\@currext}{}{}%
+ \expandafter\let\csname unprocessedoptions-\@currname.\@currext\endcsname
+ \@@unprocessedoptions
+ \csname\@currname.\@currext-h@@k\endcsname
+ \expandafter\let\csname\@currname.\@currext-h@@k\endcsname
+ \@undefined
+ \ifx\@unprocessedoptions\relax
+ \let\@unprocessedoptions\@undefined
+ \else
+ \csname unprocessedoptions-\@currname.\@currext\endcsname
+ \fi
+ \expandafter\let
+ \csname unprocessedoptions-\@currname.\@currext\endcsname
+ \@undefined
+ \ifx\@currext\@pkgextension
+ \UseHook{package/after/\@currname}%
+ \UseHook{package/after}%
+ \else
+ \ifx\@currext\@clsextension
+ \UseHook{class/after/\@currname}%
+ \UseHook{class/after}%
+ \fi
+ \fi}%
+ \reserved@a}
+\let\@@fileswith@pti@ns\@fileswith@pti@ns
+\@onlypreamble\@@fileswith@pti@ns
+\def\@reset@ptions{%
+ \global\ifx\@currext\@clsextension
+ \let\default@ds\OptionNotUsed
+ \else
+ \let\default@ds\@unknownoptionerror
+ \fi
+ \global\let\ds@\@empty
+ \global\let\@declaredoptions\@empty}
+\@onlypreamble\@reset@ptions
+\ifx\@begindocumenthook\@undefined
+ \let\@begindocumenthook\@empty
+\fi
+\let\@enddocumenthook\@empty
+\def\AtEndOfPackage{%
+ \expandafter\g@addto@macro\csname\@currname.\@currext-h@@k\endcsname}
+\let\AtEndOfClass\AtEndOfPackage
+\@onlypreamble\AtEndOfPackage
+\@onlypreamble\AtEndOfClass
+\DeclareRobustCommand\AtBeginDocument{\AddToHook{begindocument}}
+\DeclareRobustCommand\AtEndDocument {\AddToHook{enddocument}}
+\@onlypreamble\AtBeginDocument
+\def\@cls@pkg{%
+ \ifx\@currext\@clsextension
+ document class%
+ \else
+ package%
+ \fi}
+\@onlypreamble\@cls@pkg
+\def\@unknownoptionerror{%
+ \@latex@error
+ {Unknown option `\CurrentOption' for \@cls@pkg\space`\@currname'}%
+ {The option `\CurrentOption' was not declared in
+ \@cls@pkg\space`\@currname', perhaps you\MessageBreak
+ misspelled its name.
+ Try typing \space <return>
+ \space to proceed.}}
+\@onlypreamble\@unknownoptionerror
+\def\@@unprocessedoptions{%
+ \ifx\@currext\@pkgextension
+ \edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
+ \@for\CurrentOption:=\@curroptions\do{%
+ \ifx\CurrentOption\@empty\else\@unknownoptionerror\fi}%
+ \fi}
+\@onlypreamble\@unprocessedoptions
+\@onlypreamble\@@unprocessedoptions
+\def\@badrequireerror#1[#2]#3[#4]{%
+ \@latex@error
+ {\noexpand\RequirePackage or \noexpand\LoadClass
+ in Options Section}%
+ {The \@cls@pkg\space `\@currname' is defective.\MessageBreak
+ It attempts to load `#3' in the options section, i.e.,\MessageBreak
+ between \noexpand\DeclareOption and \string\ProcessOptions.}}
+\@onlypreamble\@badrequireerror
+\def\@twoloadclasserror{%
+ \@latex@error
+ {Two \noexpand\LoadClass commands}%
+ {You may only use one \noexpand\LoadClass in a class file}}
+\@onlypreamble\@twoloadclasserror
+\def\@twoclasseserror#1#{%
+ \@latex@error
+ {Two \noexpand\documentclass or \noexpand\documentstyle commands}%
+ {The document may only declare one class.}\@gobble}
+\@onlypreamble\@twoclasseserror
+\def\two@digits#1{\ifnum#1<10 0\fi\number#1}
+\def\filecontents{\@tempswatrue\@fileswtrue
+ \@ifnextchar[\filec@ntents@opt\filec@ntents
+}
+\@namedef{filecontents*}{\@tempswafalse\@fileswtrue
+ \@ifnextchar[\filec@ntents@opt\filec@ntents
+}
+\def\filec@ntents@opt[#1]{%
+ \edef\@fortmp{\zap@space#1 \@empty}%
+ \@for\reserved@a:=\@fortmp\do{%
+ \ifcsname filec@ntents@\reserved@a\endcsname
+ \csname filec@ntents@\reserved@a\endcsname
+ \else
+ \@latex@error{Unknown filecontents option \reserved@a}%
+ {Valid options are force (or overwrite), nosearch, noheader}%
+ \fi}%
+ \filec@ntents
+}
+\let\filec@ntents@force\@fileswfalse
+\let\filec@ntents@overwrite\@fileswfalse % alternative name
+\let\filec@ntents@noheader\@tempswafalse
+\def\filec@ntents@nosearch{%
+ \let\filec@ntents@checkdir\@currdir
+ \def\filec@ntents@where{in current directory}}
+\let\filec@ntents@checkdir\@empty
+\def\filec@ntents@where{exists on the system}
+\begingroup%
+\@tempcnta=1
+\loop
+ \catcode\@tempcnta=12 %
+ \advance\@tempcnta\@ne %
+\ifnum\@tempcnta<32 %
+\repeat %
+\catcode`\*=11 %
+\catcode`\^^M\active%
+\catcode`\^^L\active\let^^L\relax%
+\catcode`\^^I\active%
+\gdef\filec@ntents#1{%
+ \set@curr@file{\filec@ntents@checkdir#1}%
+ \edef\q@curr@file{"\@curr@file"}%
+ \chardef\reserved@c\ifx\directlua\@undefined 15 \else 127 \fi%
+ \openin\@inputcheck\q@curr@file \space %
+ \ifeof\@inputcheck%
+ \@latex@warning@no@line%
+ {Writing file `\@currdir\@curr@file'}%
+ \ch@ck7\reserved@c\write\relax%
+ \immediate\openout\reserved@c\q@curr@file\relax%
+ \else%
+ \if@filesw%
+ \@latex@warning@no@line%
+ {File `\@curr@file' already \filec@ntents@where.\MessageBreak%
+ Not generating it from this source}%
+ \let\write\@gobbletwo%
+ \let\closeout\@gobble%
+ \else%
+ \edef\reserved@a{#1}%
+ \edef\reserved@a{\detokenize\expandafter{\reserved@a}}%
+ \edef\reserved@b{\detokenize\expandafter{\jobname}}%
+ \ifx\reserved@a\reserved@b%
+ \@fileswtrue%
+ \else%
+ \edef\reserved@b{\reserved@b\detokenize{.tex}}%
+ \ifx\reserved@a\reserved@b
+ \@fileswtrue%
+ \fi%
+ \fi%
+ \ch@ck7\reserved@c\write\relax%
+ \if@filesw% % Foul ... trying to overwrite \jobname!
+ \@latex@error{Trying to overwrite `\jobname.tex'}{You can't %
+ write to the file you are reading from!\MessageBreak%
+ Data is written to screen instead.}%
+ \else%
+ \@latex@warning@no@line%
+ {Writing or overwriting file `\@currdir\@curr@file'}%
+ \immediate\openout\reserved@c\q@curr@file\relax%
+ \fi%
+ \fi%
+ \fi%
+ \closein\@inputcheck%
+ \if@tempswa%
+ \immediate\write\reserved@c{%
+ \@percentchar\@percentchar\space%
+ \expandafter\@gobble\string\LaTeX2e file `\@curr@file'^^J%
+ \@percentchar\@percentchar\space generated by the %
+ `\@currenvir' \expandafter\@gobblefour\string\newenvironment^^J%
+ \@percentchar\@percentchar\space from source `\jobname' on %
+ \number\year/\two@digits\month/\two@digits\day.^^J%
+ \@percentchar\@percentchar}%
+ \fi%
+ \let\do\@makeother\dospecials%
+ \count@ 128\relax%
+ \loop%
+ \catcode\count@ 11\relax%
+ \advance\count@ \@ne%
+ \ifnum\count@<\@cclvi%
+ \repeat%
+ \edef\E{\@backslashchar end\string{\@currenvir\string}}%
+ \edef\reserved@b{%
+ \def\noexpand\reserved@b%
+ ####1\E####2\E####3\relax}%
+ \reserved@b{%
+ \ifx\relax##3\relax%
+ \immediate\write\reserved@c{##1}%
+ \else%
+ \edef^^M{\noexpand\end{\@currenvir}}%
+ \ifx\relax##1\relax%
+ \else%
+ \@latex@warning{Writing text `##1' before %
+ \string\end{\@currenvir}\MessageBreak as last line of \@curr@file}%
+ \immediate\write\reserved@c{##1}%
+ \fi%
+ \ifx\relax##2\relax%
+ \else%
+ \@latex@warning{%
+ Ignoring text `##2' after \string\end{\@currenvir}}%
+ \fi%
+ \fi%
+ ^^M}%
+ \catcode`\^^L\active%
+ \let\L\@undefined%
+ \def^^L{\expandafter\ifx\csname L\endcsname\relax\fi ^^J^^J}%
+ \catcode`\^^I\active%
+ \let\I\@undefined%
+ \def^^I{\expandafter\ifx\csname I\endcsname\relax\fi\space}%
+ \catcode`\^^M\active%
+ \edef^^M##1^^M{%
+ \noexpand\reserved@b##1\E\E\relax}}%
+\endgroup%
+\begingroup
+\catcode`|=\catcode`\%
+\catcode`\%=12
+\catcode`\*=11
+\gdef\@percentchar{%}
+\gdef\endfilecontents{|
+ \immediate\closeout\reserved@c
+ \def\T##1##2##3{|
+ \ifx##1\@undefined\else
+ \@latex@warning@no@line{##2 has been converted to Blank ##3e}|
+ \fi}|
+ \T\L{Form Feed}{Lin}|
+ \T\I{Tab}{Spac}|
+ \immediate\write\@unused{}}
+\global\let\endfilecontents*\endfilecontents
+\endgroup
+\let\pkgcls@debug\@gobble
+\def\requestedLaTeXdate{0}
+\ifx\pkgcls@targetdate\@undefined
+ \newcount\pkgcls@targetdate
+\fi
+\let\pkgcls@targetlabel\@empty
+\def\pkgcls@innerdate{\maxdimen}
+\let\pkgcls@candidate\@empty
+\let\pkgcls@releasedate\@empty
+\ifx\load@onefilewithoptions\@undefined
+ \let\load@onefilewithoptions\@onefilewithoptions
+ \def\@onefilewithoptions#1[#2][#3]#4{%
+ \pkgcls@debug{--- File loaded request (\noexpand\usepackage or ...)}%
+ \pkgcls@debug{\@spaces 1: #1}%
+ \pkgcls@debug{\@spaces 2: #2}%
+ \pkgcls@debug{\@spaces 3: #3}%
+ \pkgcls@debug{\@spaces 4: #4}%
+ \def\pkgcls@name{#1}% % for info message
+ \def\pkgcls@arg {#3}% % for info message
+ \pkgcls@parse@date@arg{#3}%
+ \let\pkgcls@candidate\@empty
+ \begingroup
+ \edef\reserved@a{%
+ \endgroup
+ \unexpanded{\load@onefilewithoptions#1[#2]}%
+ [\pkgcls@mindate]%
+ \unexpanded{#4}}%
+ \reserved@a
+ }
+\fi
+\def\pkgcls@parse@date@arg #1{%
+ \ifx\@nil#1\@nil
+ \pkgcls@targetdate\requestedLaTeXdate\relax
+ \let\pkgcls@targetlabel\@empty
+ \let\pkgcls@mindate\@empty
+ \else
+ \pkgcls@parse@date@arg@#1=\@nil\relax
+ \fi
+ }
+\def\pkgcls@parse@date@arg@#1=#2\@nil{%
+ \pkgcls@targetdate
+ \ifx\@nil#1\@nil
+ \@parse@version0#2//00\@nil\relax
+ \ifnum \pkgcls@targetdate=\z@
+ \pkgcls@targetdate\@ne
+ \def\pkgcls@innerdate{\maxdimen}%
+ \pkgcls@parse@date@arg@version#2%
+ \else
+ \edef\pkgcls@innerdate{\the\pkgcls@targetdate}%
+ \fi
+ \let\pkgcls@mindate\@empty
+ \else
+ \requestedLaTeXdate\relax
+ \let\pkgcls@targetlabel\@empty
+ \def\pkgcls@innerdate{\maxdimen}%
+ \def\pkgcls@mindate{#1}%
+ \ifnum \pkgcls@targetdate > \z@
+ \ifnum \@parse@version0#1//00\@nil > \pkgcls@targetdate
+ \@latex@warning@no@line{Suspicious rollback/min-date date given\MessageBreak
+ A minimal date of #1 has been specified for
+ \@cls@pkg\MessageBreak '\pkgcls@name'.\MessageBreak
+ But this is in conflict
+ with a rollback request to \requestedpatchdate}
+ \fi
+ \fi
+ \fi
+}
+\def\pkgcls@parse@date@arg@version#1={%
+ \def\pkgcls@targetlabel{#1}}
+\def\DeclareRelease#1#2#3{%
+ \ifnum\pkgcls@targetdate>\z@ % some sort of rollback request
+ \pkgcls@debug{---\string\DeclareRelease:}%
+ \pkgcls@debug{\@spaces 1: #1}%
+ \pkgcls@debug{\@spaces 2: #2}%
+ \pkgcls@debug{\@spaces 3: #3}%
+ \ifx\@nil#2\@nil
+ \ifnum\pkgcls@targetdate=\@ne % named request
+ \def\reserved@a{#1}%
+ \ifx\pkgcls@targetlabel\reserved@a
+ \pkgcls@use@this@release{#3}{}%
+ \else
+ \pkgcls@debug{Label doesn't match}%
+ \fi
+ \else
+ \pkgcls@debug{Date request: ignored}%
+ \fi
+ \else
+ \ifnum\pkgcls@targetdate>\@ne % a real request
+ \ifnum\@parse@version#2//00\@nil
+ >\pkgcls@targetdate
+ \ifx\pkgcls@candidate\@empty
+ \pkgcls@rollbackdate@error{#2}%
+ \pkgcls@use@this@release{#3}{#2}%
+ \else
+ \pkgcls@use@this@release\pkgcls@candidate
+ \pkgcls@releasedate
+ \fi
+ \else
+ \def\pkgcls@candidate{#3}%
+ \def\pkgcls@releasedate{#2}%
+ \pkgcls@debug{New candidate: #3}%
+ \fi
+ \else
+ \def\reserved@a{#1}%
+ \ifx\pkgcls@targetlabel\reserved@a
+ \pkgcls@use@this@release{#3}{#2}%
+ \else
+ \pkgcls@debug{Label doesn't match}%
+ \fi
+ \fi
+ \fi
+ \fi
+}
+\def\pkgcls@use@this@release#1#2{%
+ \pkgcls@show@selection{#1}{#2}%
+ \pkgcls@targetdate\z@
+ \@@input #1\relax
+ \endinput
+}
+\def\pkgcls@show@selection#1#2{%
+ \pkgcls@debug{Result: use #1}%
+ \GenericInfo
+ {\@spaces\@spaces\space}{Rollback for
+ \@cls@pkg\space'\@currname' requested ->
+ \ifnum\pkgcls@targetdate>\@ne
+ date
+ \ifnum\requestedLaTeXdate=\pkgcls@targetdate
+ \requestedpatchdate
+ \else
+ \expandafter\@gobble\pkgcls@arg
+ \fi.\MessageBreak
+ Best approximation is
+ \else
+ version '\pkgcls@targetlabel'.\MessageBreak
+ This corresponds to
+ \fi
+ \ifx\@nil#2\@nil
+ a special release%
+ \else
+ the release introduced on #2%
+ \fi
+ \@gobble}%
+}
+\def\pkgcls@rollbackdate@error#1{%
+ \@latex@error{Suspicious rollback date given}%
+ {The \@cls@pkg\space'\@currname' claims that it
+ came into existence on #1 which\MessageBreak
+ is after your requested rollback date --- so
+ something is wrong here.\MessageBreak
+ Continue and we use the earliest known release.}}
+\def\DeclareCurrentRelease#1#2{%
+ \ifnum\pkgcls@targetdate>\z@ % some sort of rollback request
+ \pkgcls@debug{---DeclareCurrentRelease}%
+ \pkgcls@debug{ 1: #1}%
+ \pkgcls@debug{ 2: #2}%
+ \ifnum\pkgcls@targetdate>\@ne % a date request
+ \ifnum\@parse@version#2//00\@nil
+ >\pkgcls@targetdate
+ \ifx\pkgcls@candidate\@empty
+ \pkgcls@rollbackdate@error{#2}%
+ \else
+ \pkgcls@use@this@release\pkgcls@candidate
+ \pkgcls@releasedate
+ \fi
+ \else
+ \pkgcls@show@selection{current version}{#2}%
+ \fi
+ \else % a label request
+ \def\reserved@a{#1}%
+ \ifx\pkgcls@targetlabel\reserved@a
+ \pkgcls@show@selection{current version}{#2}%
+ \else
+ \@latex@error{Requested version '\pkgcls@targetlabel' for
+ \@cls@pkg\space'\@currname' is unknown}\@ehc
+ \fi
+ \fi
+ \fi
+}
+\DeclareRobustCommand\IfTargetDateBefore[1]{%
+ \ifnum\pkgcls@innerdate <%
+ \expandafter\@parse@version\expandafter0#1//00\@nil
+ \typeout{Exclude code introduced on #1}%
+ \expandafter\@firstoftwo
+ \else
+ \typeout{Include code introduced on #1}%
+ \expandafter\@secondoftwo
+ \fi
+}
+%%
+%% File: ltfilehook.dtx (C) Copyright 2020 Frank Mittelbach,
+%% Phelype Oleinik & LaTeX Team
+%%% From File: ltshipout.dtx
+\providecommand\ltfilehookversion{v1.0a}
+\providecommand\ltfilehookdate{2020/08/30}
+\ExplSyntaxOn
+\tl_new:N \CurrentFile
+\tl_new:N \CurrentFilePath
+\tl_new:N \CurrentFileUsed
+\tl_new:N \CurrentFilePathUsed
+\ExplSyntaxOff
+\ExplSyntaxOn
+\cs_new:Npn \__filehook_file_parse_full_name:nN #1
+ {
+ \exp_args:Nf \file_parse_full_name_apply:nN
+ {
+ \exp_args:Nf \__filehook_full_name:nn
+ { \file_full_name:n {#1} } {#1}
+ }
+ }
+\cs_new:Npn \__filehook_full_name:nn #1 #2
+ {
+ \tl_if_empty:nTF {#1}
+ { \tl_trim_spaces:n {#2} }
+ { \tl_trim_spaces:n {#1} }
+ }
+\cs_new:Npn \__filehook_if_no_extension:nTF #1
+ {
+ \exp_args:Ne \tl_if_empty:nTF
+ { \file_parse_full_name_apply:nN {#1} \use_iii:nnn }
+ }
+\cs_new_protected:Npn \__filehook_drop_extension:N #1
+ {
+ \tl_gset:Nx #1
+ {
+ \exp_args:NV \__filehook_file_parse_full_name:nN #1
+ \__filehook_drop_extension_aux:nnn
+ }
+ }
+\cs_new:Npn \__filehook_drop_extension_aux:nnn #1 #2 #3
+ { \tl_if_empty:nF {#1} { #1 / } #2 }
+\tl_new:N \l__filehook_internal_tl
+\seq_new:N \g__filehook_input_file_seq
+\cs_new_protected:Npn \__filehook_file_push:
+ {
+ \seq_gpush:Nx \g__filehook_input_file_seq
+ {
+ { \CurrentFilePathUsed } { \CurrentFileUsed }
+ { \CurrentFilePath } { \CurrentFile }
+ }
+ }
+\cs_new_protected:Npn \__filehook_file_pop:
+ {
+ \seq_gpop:NNTF \g__filehook_input_file_seq \l__filehook_internal_tl
+ { \exp_after:wN \__filehook_file_pop_assign:nnnn \l__filehook_internal_tl }
+ {
+ \msg_error:nnn { hooks } { should-not-happen }
+ { Tried~to~pop~from~an~empty~file~name~stack. }
+ }
+ }
+\cs_new_protected:Npn \__filehook_file_pop_assign:nnnn #1 #2 #3 #4
+ {
+ \tl_set:Nn \CurrentFilePathUsed {#1}
+ \tl_set:Nn \CurrentFileUsed {#2}
+ \tl_set:Nn \CurrentFilePath {#3}
+ \tl_set:Nn \CurrentFile {#4}
+ }
+\ExplSyntaxOff
+\let\InputIfFileExists\@undefined
+\DeclareRobustCommand \InputIfFileExists[2]{%
+ \IfFileExists{#1}%
+ {%
+ \@expl@@@filehook@file@push@@
+ \@filehook@set@CurrentFile
+ \edef\reserved@a{\@filef@und
+ \@expl@@@filehook@file@pop@assign@@nnnn
+ {\CurrentFilePathUsed}%
+ {\CurrentFileUsed}%
+ {\CurrentFilePath}%
+ {\CurrentFile}}%
+ \expandafter\@swaptwoargs\expandafter
+ {\reserved@a}%
+ {%
+ #2%
+ \@addtofilelist{#1}%
+ \UseHook{file/before}%
+ \UseHook{file/before/\CurrentFile}%
+ \@@input
+ }%
+ \UseHook{file/after/\CurrentFile}%
+ \UseHook{file/after}%
+ \@expl@@@filehook@file@pop@@
+ }%
+}
+\ExplSyntaxOn
+\cs_new_protected:Npn \__filehook_subst_add:nn #1 #2
+ {
+ \group_begin:
+ \cs_set:cpx { } { \exp_not:o { \cs:w\cs_end: } }
+ \int_set:Nn \tex_escapechar:D { -1 }
+ \cs_gset:cpx { @file-subst@ \__filehook_subst_file_normalize:n {#1} }
+ { \__filehook_subst_file_normalize:n {#2} }
+ \group_end:
+ }
+\cs_new_protected:Npn \__filehook_subst_remove:n #1
+ {
+ \group_begin:
+ \cs_set:cpx { } { \exp_not:o { \cs:w\cs_end: } }
+ \int_set:Nn \tex_escapechar:D { -1 }
+ \cs_undefine:c { @file-subst@ \__filehook_subst_file_normalize:n {#1} }
+ \group_end:
+ }
+\cs_new:Npn \__filehook_subst_file_normalize:n #1
+ {
+ \exp_after:wN \__filehook_subst_empty_name_chk:NN
+ \cs:w \exp_after:wN \cs_end:
+ \cs:w \__filehook_file_parse_full_name:nN {#1} \use_ii_iii:nnn \cs_end:
+ }
+\cs_new:Npn \__filehook_subst_empty_name_chk:NN #1 #2
+ { \if_meaning:w #1 #2 .tex \else: \token_to_str:N #2 \fi: }
+\cs_gset:Npn \use_ii_iii:nnn #1 #2 #3 {#2 #3}
+\ExplSyntaxOff
+\ExplSyntaxOn
+\cs_new_eq:NN \declare@file@substitution \__filehook_subst_add:nn
+\cs_new_eq:NN \undeclare@file@substitution \__filehook_subst_remove:n
+\ExplSyntaxOff
+\ExplSyntaxOff
+\def\set@curr@file#1{%
+ \begingroup
+ \escapechar\m@ne
+ \expandafter\def\csname\expandafter\endcsname
+ \expandafter{\csname\endcsname}%
+ \@expl@@@filehook@if@no@extension@@nTF{#1}%
+ {\@tempswatrue}{\@tempswafalse}%
+ \@kernel@make@file@csname\@curr@file
+ \@expl@@@filehook@resolve@file@subst@@w {#1}%
+ \@expl@@@filehook@if@file@replaced@@TF
+ {\@kernel@make@file@csname\@curr@file@reqd
+ \@expl@@@filehook@normalize@file@name@@w{#1}%
+ \if@tempswa \@expl@@@filehook@drop@extension@@N\@curr@file@reqd \fi}%
+ {\if@tempswa \@expl@@@filehook@drop@extension@@N\@curr@file \fi
+ \global\let\@curr@file@reqd\@curr@file}%
+ \endgroup}
+\def\@kernel@make@file@csname#1#2#3{%
+ \xdef#1{\expandafter\@set@curr@file@aux
+ \csname\expandafter#2\@firstofone#3\@nil\endcsname}}
+\def\@set@curr@file@aux#1{%
+ \expandafter\ifx\csname\endcsname#1%
+ .tex\else\string#1\fi}
+\def\@filehook@set@CurrentFile{%
+ \@expl@@@filehook@set@curr@file@@N{\@curr@file}%
+ \CurrentFileUsed\CurrentFilePathUsed
+ \ifx\@curr@file@reqd\@curr@file
+ \let\CurrentFile\CurrentFileUsed
+ \let\CurrentFilePath\CurrentFilePathUsed
+ \else
+ \@expl@@@filehook@set@curr@file@@N{\@curr@file@reqd}%
+ \CurrentFile\CurrentFilePath
+ \fi}
+\ExplSyntaxOn
+\cs_new_protected:Npn \__filehook_set_curr_file:N #1
+ { \exp_args:NV \__filehook_set_curr_file:nNN #1 }
+\cs_new_protected:Npn \__filehook_set_curr_file:nNN #1
+ {
+ \__filehook_file_parse_full_name:nN {#1}
+ \__filehook_set_curr_file_assign:nnnNN
+ }
+\cs_new_protected:Npn \__filehook_set_curr_file_assign:nnnNN #1 #2 #3 #4 #5
+ {
+ \str_set:Nn #5 {#1}
+ \str_set:Nn #4 {#2#3}
+ }
+\ExplSyntaxOff
+\ExplSyntaxOn
+\cs_new:Npn \__filehook_resolve_file_subst:w #1 \@nil
+ { \__filehook_file_parse_full_name:nN {#1} \__filehook_file_subst_begin:nnn }
+\cs_new:Npn \__filehook_normalize_file_name:w #1 \@nil
+ { \__filehook_file_parse_full_name:nN {#1} \__filehook_file_name_compose:nnn }
+\cs_new:Npn \__filehook_file_name_compose:nnn #1 #2 #3
+ { \tl_if_empty:nF {#1} { #1 / } #2#3 }
+\flag_new:n { __filehook_file_replaced }
+\cs_new:Npn \__filehook_if_file_replaced:TF #1 #2
+ { \flag_if_raised:nTF { __filehook_file_replaced } {#1} {#2} }
+\cs_new:Npn \__filehook_file_subst_begin:nnn #1 #2 #3
+ {
+ \__filehook_file_subst_tortoise_hare:nn { #2#3 } { #2#3 }
+ { \__filehook_file_name_compose:nnn {#1} {#2} {#3} }
+ }
+\ExplSyntaxOff
+\ExplSyntaxOn
+\cs_new:Npn \__filehook_file_subst_tortoise_hare:nn #1 #2 #3
+ {
+ \cs_if_exist:cTF { @file-subst@ #2 }
+ {
+ \flag_if_raised:nF { __filehook_file_replaced }
+ { \flag_raise:n { __filehook_file_replaced } }
+ \cs_if_exist:cTF { @file-subst@ \use:c { @file-subst@ #2 } }
+ {
+ \__filehook_file_subst_loop:cc
+ { @file-subst@ #1 }
+ { @file-subst@ \use:c { @file-subst@ #2 } }
+ }
+ { \use:c { @file-subst@ #2 } }
+ }
+ { #3 }
+ }
+\cs_new:Npn \__filehook_file_subst_loop:NN #1 #2
+ {
+ \token_if_eq_meaning:NNTF #1 #2
+ {
+ .tex
+ \__filehook_file_subst_cycle_error:cN { @file-subst@ #1 } #1
+ }
+ { \__filehook_file_subst_tortoise_hare:nn {#1} {#2} {#2} }
+ }
+\cs_generate_variant:Nn \__filehook_file_subst_loop:NN { cc }
+\cs_new:Npn \__filehook_file_subst_cycle_error:NN #1 #2
+ {
+ \__kernel_msg_expandable_error:nnff { kernel } { file-cycle }
+ {#1} { \use:c { @file-subst@ #1 } }
+ \token_if_eq_meaning:NNF #1 #2
+ { \__filehook_file_subst_cycle_error:cN { @file-subst@ #1 } #2 }
+ }
+\cs_generate_variant:Nn \__filehook_file_subst_cycle_error:NN { c }
+\__kernel_msg_new:nnn { kernel } { file-cycle }
+ { File~loop!~#1~replaced~by~#2... }
+\ExplSyntaxOff
+\def\disable@package@load#1#2{%
+ \global\@namedef{@pkg-disable@#1.\@pkgextension}{#2}}
+\def\@disable@packageload@do#1#2{%
+ \@ifundefined{@pkg-disable@#1}{#2}%
+ {\@nameuse{@pkg-disable@#1}}}
+\def\reenable@package@load#1{%
+ \global\expandafter\let
+ \csname @pkg-disable@#1.\@pkgextension \endcsname \@undefined}
+\ExplSyntaxOn
+\cs_new_eq:NN \@expl@@@filehook@if@no@extension@@nTF
+ \__filehook_if_no_extension:nTF
+\cs_new_eq:NN \@expl@@@filehook@set@curr@file@@N
+ \__filehook_set_curr_file:N
+\cs_new_eq:NN \@expl@@@filehook@resolve@file@subst@@w
+ \__filehook_resolve_file_subst:w
+\cs_new_eq:NN \@expl@@@filehook@normalize@file@name@@w
+ \__filehook_normalize_file_name:w
+\cs_new_eq:NN \@expl@@@filehook@if@file@replaced@@TF
+ \__filehook_if_file_replaced:TF
+
+\cs_new_eq:NN \@expl@@@filehook@drop@extension@@N
+ \__filehook_drop_extension:N
+\cs_new_eq:NN \@expl@@@filehook@file@push@@
+ \__filehook_file_push:
+\cs_new_eq:NN \@expl@@@filehook@file@pop@@
+ \__filehook_file_pop:
+\cs_new_eq:NN \@expl@@@filehook@file@pop@assign@@nnnn
+ \__filehook_file_pop_assign:nnnn
+\ExplSyntaxOff
+\declare@file@substitution{atveryend.sty}{atveryend-ltx.sty}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% File: ltshipout.dtx (C) Copyright 2020 Frank Mittelbach, LaTeX Team
+%%
+%%% From File: ltshipout.dtx
+\providecommand\ltshipoutversion{v1.0a}
+\providecommand\ltshipoutdate{2020/08/31}
+\ExplSyntaxOn
+\bool_new:N \g__shipout_debug_bool
+\cs_new_eq:NN \__shipout_debug:n \use_none:n
+\cs_new_protected:Npn \shipout_debug_on:
+ {
+ \bool_gset_true:N \g__shipout_debug_bool
+ \__shipout_debug_gset:
+ }
+\cs_new_protected:Npn \shipout_debug_off:
+ {
+ \bool_gset_false:N \g__shipout_debug_bool
+ \__shipout_debug_gset:
+ }
+\cs_new_protected:Npn \__shipout_debug_gset:
+ {
+ \cs_gset_protected:Npx \__shipout_debug:n ##1
+ { \bool_if:NT \g__shipout_debug_bool {##1} }
+ }
+\box_new:N \l_shipout_box
+\cs_set_eq:NN \ShipoutBox \l_shipout_box
+\cs_set:Npn\__shipout_execute: {
+ \tl_set:Nx \l__shipout_group_level_tl
+ { \int_value:w \tex_currentgrouplevel:D }
+ \tex_afterassignment:D \__shipout_execute_test_level:
+ \tex_setbox:D \l_shipout_box
+}
+\cs_gset_eq:NN \shipout \__shipout_execute:
+\tl_new:N \l__shipout_group_level_tl
+
+\cs_new:Npn \__shipout_execute_test_level: {
+ \int_compare:nNnT
+ \l__shipout_group_level_tl < \tex_currentgrouplevel:D
+ \tex_aftergroup:D
+ \__shipout_execute_cont:
+}
+\cs_new:Npn \__shipout_execute_cont: {
+ \box_if_empty:NTF \l_shipout_box
+ { \PackageWarning{ltshipout}{Ignoring~ void~ shipout~ box} }
+ {
+ \bool_gset_false:N \g__shipout_discard_bool
+ \cs_set_eq:NN \__shipout_saved_protect: \protect
+ \set@typeset@protect
+ \__shipout_get_box_size:N \l_shipout_box
+ \hook_use:n {shipout/before}
+ \int_gincr:N \g_shipout_totalpages_int
+ \bool_if:NTF \g__shipout_discard_bool
+ { \PackageInfo{ltshipout}{Completed~ page~ discarded}
+ \bool_gset_false:N \g__shipout_discard_bool
+ \tex_deadcycles:D \c_zero_int
+ }
+ { \box_if_empty:NTF \l_shipout_box
+ { \PackageWarning{ltshipout}{
+ Shipout~ box~ was~ voided~ by~ hook,\MessageBreak
+ ignoring~ shipout~ box }
+ }
+ {
+ \int_gincr:N \g_shipout_readonly_int
+ \__shipout_debug:n {
+ \typeout{Absolute~ page~ =~ \int_use:N \g_shipout_readonly_int
+ \space (target:~ \@abspage@last)}
+ }
+ \__shipout_get_box_size:N \l_shipout_box
+ \hook_if_empty:nF {shipout/foreground}
+ { \__shipout_add_foreground_picture:n
+ { \hook_use:n {shipout/foreground} } }
+ \hook_if_empty:nF {shipout/background}
+ { \__shipout_add_background_picture:n
+ { \@kernel@before@shipout@background
+ \hook_use:n {shipout/background} } }
+ \__shipout_execute_firstpage_hook:
+ \int_compare:nNnT \@abspage@last = \g_shipout_readonly_int
+ { \hook_if_empty:nF {shipout/lastpage}
+ { \__shipout_debug:n { \typeout{Executing~ lastpage~ hook~
+ on~ page~ \int_use:N \g_shipout_readonly_int } }
+ \__shipout_add_foreground_box:n { \UseHook{shipout/lastpage}
+ \@kernel@after@shipout@lastpage }
+ }
+ \bool_gset_true:N \g__shipout_lastpage_handled_bool
+ }
+ \cs_set_eq:NN \protect \exp_not:N
+ \tex_shipout:D \box_use:N \l_shipout_box
+ }
+ }
+ \cs_set_eq:NN \protect \__shipout_saved_protect:
+ }
+}
+\cs_new_eq:NN \__shipout_saved_protect: \protect
+\hook_new:n{shipout/before}
+\hook_new:n{shipout/foreground}
+\hook_new:n{shipout/background}
+\hook_new:n{shipout/firstpage}
+\hook_new:n{shipout/lastpage}
+\let\@kernel@after@shipout@lastpage\@empty
+\let\@kernel@before@shipout@background\@empty
+\cs_new:Npn \__shipout_execute_firstpage_hook: {
+ \hook_if_empty:nF {shipout/firstpage}
+ { \__shipout_add_background_box:n { \UseHook{shipout/firstpage} } }
+ \cs_gset_eq:NN \__shipout_execute_firstpage_hook: \prg_do_nothing:
+ \cs_gset:Npn \__shipout_add_firstpage_material:Nn ##1 ##2 {
+ \@latex@warning{
+ First~ page~ is~ already~ shipped~ out,~ ignoring\MessageBreak
+ \string##1 }
+ }
+}
+\bool_new:N \g__shipout_lastpage_handled_bool
+\cs_new:Npn \__shipout_add_firstpage_material:Nn #1#2 {
+ \AddToHook{shipout/firstpage}{#2}
+}
+\cs_new:Npn \__shipout_get_box_size:N #1 {
+ \dim_set:Nn \l_shipout_box_ht_dim { \box_ht:N #1 }
+ \dim_set:Nn \l_shipout_box_dp_dim { \box_dp:N #1 }
+ \dim_set:Nn \l_shipout_box_wd_dim { \box_wd:N #1 }
+ \dim_set:Nn \l_shipout_box_ht_plus_dp_dim { \l_shipout_box_ht_dim +
+ \l_shipout_box_dp_dim }
+}
+\dim_new:N \l_shipout_box_ht_dim
+\dim_new:N \l_shipout_box_dp_dim
+\dim_new:N \l_shipout_box_wd_dim
+\dim_new:N \l_shipout_box_ht_plus_dp_dim
+\bool_new:N \g__shipout_discard_bool
+\box_new:N \l__shipout_tmp_box
+\tl_new:N \l__shipout_saved_badness_tl
+\cs_new:Npn \__shipout_add_background_box:n #1
+{ \__shipout_get_box_size:N \l_shipout_box
+ \box_if_vertical:NTF \l_shipout_box
+ {
+ \tl_set:Nx \l__shipout_saved_badness_tl
+ { \vfuzz=\the\vfuzz\relax
+ \vbadness=\the\vbadness\relax }
+ \vfuzz=\c_max_dim
+ \vbadness=\c_max_int
+ \vbox_set_to_ht:Nnn \l_shipout_box \l_shipout_box_ht_plus_dp_dim
+ {
+ \hbox_set:Nn \l__shipout_tmp_box
+ { \l__shipout_saved_badness_tl #1 }
+ \box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim
+ \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
+ \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
+ \skip_zero:N \baselineskip
+ \skip_zero:N \lineskip
+ \skip_zero:N \lineskiplimit
+ \box_use:N \l__shipout_tmp_box
+ \vbox_unpack:N \l_shipout_box
+ \kern \c_zero_dim
+ }
+ \box_set_ht:Nn \l_shipout_box \l_shipout_box_ht_dim
+ \box_set_dp:Nn \l_shipout_box \l_shipout_box_dp_dim
+ \l__shipout_saved_badness_tl
+ }
+ {
+ \box_if_horizontal:NT \l_shipout_box
+ {
+ \tl_set:Nx \l__shipout_saved_badness_tl
+ { \hfuzz=\the\hfuzz\relax
+ \hbadness=\the\hbadness\relax }
+ \hfuzz=\c_max_dim
+ \hbadness=\c_max_int
+ \hbox_set_to_wd:Nnn \l_shipout_box \l_shipout_box_wd_dim
+ {
+ \hbox_set:Nn \l__shipout_tmp_box
+ { \l__shipout_saved_badness_tl #1 }
+ \box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim
+ \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
+ \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
+ \box_move_up:nn
+ \l_shipout_box_ht_dim
+ { \box_use:N \l__shipout_tmp_box }
+ \hbox_unpack:N \l_shipout_box
+ }
+ \l__shipout_saved_badness_tl
+ }
+ }
+}
+\cs_new:Npn \__shipout_add_foreground_box:n #1
+{
+ \box_if_vertical:NTF \l_shipout_box
+ {
+ \tl_set:Nx \l__shipout_saved_badness_tl
+ { \vfuzz=\the\vfuzz\relax
+ \vbadness=\the\vbadness\relax }
+ \vfuzz=\c_max_dim
+ \vbadness=\c_max_int
+ \vbox_set_to_ht:Nnn \l_shipout_box \l_shipout_box_ht_plus_dp_dim
+ {
+ \hbox_set:Nn \l__shipout_tmp_box
+ { \l__shipout_saved_badness_tl #1 }
+ \box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim
+ \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
+ \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
+ \skip_zero:N \baselineskip
+ \skip_zero:N \lineskip
+ \skip_zero:N \lineskiplimit
+ \vbox_unpack:N \l_shipout_box
+ \kern -\l_shipout_box_ht_plus_dp_dim
+ \box_use:N \l__shipout_tmp_box
+ \kern \l_shipout_box_ht_plus_dp_dim
+ }
+ \l__shipout_saved_badness_tl
+ \box_set_ht:Nn \l_shipout_box \l_shipout_box_ht_dim
+ \box_set_dp:Nn \l_shipout_box \l_shipout_box_dp_dim
+ }
+ {
+ \box_if_horizontal:NT \l_shipout_box
+ {
+ \tl_set:Nx \l__shipout_saved_badness_tl
+ { \hfuzz=\the\hfuzz\relax
+ \hbadness=\the\hbadness\relax }
+ \hfuzz=\c_max_dim
+ \hbadness=\c_max_int
+ \hbox_set_to_wd:Nnn \l_shipout_box \l_shipout_box_wd_dim
+ {
+ \hbox_unpack:N \l_shipout_box
+ \kern -\box_wd:N \l_shipout_box
+ \hbox_set:Nn \l__shipout_tmp_box
+ { \l__shipout_saved_badness_tl #1 }
+ \box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim
+ \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
+ \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
+ \box_move_up:nn { \box_ht:N \l_shipout_box }
+ { \box_use:N \l__shipout_tmp_box }
+ \kern \box_wd:N \l_shipout_box
+ }%
+ \l__shipout_saved_badness_tl
+ }
+ }
+}
+\cs_new:Npn \__shipout_init_page_origins: {
+ \tl_const:Nx \c__shipout_horigin_tl
+ {
+ \cs_if_exist_use:NTF \pdfvariable { horigin }
+ { \cs_if_exist_use:NF \pdfhorigin { 1in } }
+ }
+ \tl_const:Nx \c__shipout_vorigin_tl
+ {
+ \cs_if_exist_use:NTF \pdfvariable { vorigin }
+ { \cs_if_exist_use:NF \pdfvorigin { 1in } }
+ }
+ \cs_gset_eq:NN \__shipout_init_page_origins: \prg_do_nothing:
+}
+\cs_new:Npn \__shipout_picture_overlay:n #1 {
+ \__shipout_init_page_origins:
+ \kern -\c__shipout_horigin_tl \scan_stop:
+ \vbox_to_zero:n {
+ \kern -\c__shipout_vorigin_tl \scan_stop:
+ \unitlength 1pt \scan_stop:
+ \hbox_set_to_wd:Nnn \l__shipout_tmp_box \c_zero_dim { \ignorespaces #1 }
+ \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
+ \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
+ \box_use:N \l__shipout_tmp_box
+ \tex_vss:D
+ }
+}
+\cs_new:Npn \__shipout_add_background_picture:n #1 {
+ \__shipout_add_background_box:n { \__shipout_picture_overlay:n {#1} }
+}
+\cs_new:Npn \__shipout_add_foreground_picture:n #1 {
+ \__shipout_add_foreground_box:n { \__shipout_picture_overlay:n {#1} }
+}
+\cs_new:Npn \shipout_discard: {
+ \bool_gset_true:N \g__shipout_discard_bool
+}
+\int_new:N \g_shipout_readonly_int
+\cs_new_eq:NN \ReadonlyShipoutCounter \g_shipout_readonly_int
+\int_new:N \g_shipout_totalpages_int
+\cs_new_eq:NN \c@totalpages \g_shipout_totalpages_int
+\cs_new:Npn \thetotalpages { \arabic{totalpages} }
+\xdef\@abspage@last{\number\maxdimen}
+\g@addto@macro \@kernel@after@enddocument {
+ \int_compare:nNnT \@abspage@last = \maxdimen
+ {
+ \xdef\@abspage@last{ \int_eval:n {\g_shipout_readonly_int + 1} }
+ }
+}
+\g@addto@macro \@kernel@after@enddocument@afterlastpage {
+ \int_compare:nNnF \g_shipout_readonly_int = 0
+ {
+ \if@filesw
+ \iow_now:Nx \@auxout {
+ \gdef\string\@abspage@last {\int_use:N \g_shipout_readonly_int}}
+ \fi
+ \bool_if:NF \g__shipout_lastpage_handled_bool
+ {
+ \bool_lazy_and:nnF
+ { \hook_if_empty_p:n {shipout/lastpage} }
+ { \tl_if_empty_p:N \@kernel@after@shipout@lastpage }
+ {
+ \tex_shipout:D\vbox to\textheight
+ {
+ \hbox:n { \UseHook{shipout/lastpage}
+ \@kernel@after@shipout@lastpage }
+ \__shipout_excuse_extra_page:
+ \null
+ }
+ \cs_gset_eq:NN \@extra@page@added \relax
+ }
+ }
+ }
+}
+\cs_new:Npn \__shipout_excuse_extra_page: {
+ \vfil
+ \begin{center}
+ \bfseries Temporary~ page!
+ \end{center}
+ \LaTeX{}~ was~ unable~ to~ guess~ the~ total~ number~ of~ pages~
+ correctly.~ ~ As~ there~ was~ some~ unprocessed~ data~ that~
+ should~ have~ been~ added~ to~ the~ final~ page~ this~ extra~
+ page~ has~ been~ added~ to~ receive~ it.
+ \par
+ If~ you~ rerun~ the~ document~ (without~ altering~ it)~ this~
+ surplus~ page~ will~ go~ away,~ because~ \LaTeX{}~ now~ knows~
+ how~ many~ pages~ to~ expect~ for~ this~ document.
+ \vfil
+}
+\def\PreviousTotalPages{0}
+\g@addto@macro\@kernel@before@begindocument
+ {\ifnum\@abspage@last<\maxdimen
+ \xdef\PreviousTotalPages{\@abspage@last}\fi}
+\cs_new_eq:NN \DiscardShipoutBox \shipout_discard:
+\DeclareRobustCommand \AtBeginDvi {\__shipout_add_firstpage_material:Nn \AtBeginDvi}
+\cs_new_eq:NN \DebugShipoutsOn \shipout_debug_on:
+\cs_new_eq:NN \DebugShipoutsOff \shipout_debug_off:
+\cs_set_eq:NN \@expl@@@shipout@add@firstpage@material@@Nn
+ \__shipout_add_firstpage_material:Nn
+\cs_set_eq:NN \@expl@@@shipout@add@background@box@@n
+ \__shipout_add_background_box:n
+\cs_set_eq:NN \@expl@@@shipout@add@foreground@box@@n
+ \__shipout_add_foreground_box:n
+\cs_set_eq:NN \@expl@@@shipout@add@background@picture@@n
+ \__shipout_add_background_picture:n
+\cs_set_eq:NN \@expl@@@shipout@add@foreground@picture@@n
+ \__shipout_add_foreground_picture:n
+\ExplSyntaxOff
+\ExplSyntaxOn
+\cs_new:Npn \AtEndDvi {\AddToHook{shipout/lastpage}}
+\ExplSyntaxOff
+\disable@package@load{atenddvi}
+ {\PackageWarning{atenddvi}
+ {Functionality of this package is already\MessageBreak
+ provided by LaTeX.\MessageBreak\MessageBreak
+ It is there no longer necessary to load it\MessageBreak
+ and you can safely remove it.\MessageBreak
+ Found on}}
+\declare@file@substitution{atbegshi.sty}{atbegshi-ltx.sty}
+\declare@file@substitution{everyshi.sty}{everyshi-ltx.sty}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% From File: ltoutput.dtx
\expandafter\let\csname ver@autoout1.sty\endcsname\fmtversion
\message{output,}
@@ -8338,10 +11048,6 @@ Type H <return> for immediate help.}%
\newdimen\marginparsep
\newdimen\marginparpush
\newbox\@begindvibox
-\DeclareRobustCommand \AtBeginDvi [1]{%
- \global \setbox \@begindvibox
- \vbox{\unvbox \@begindvibox #1}%
-}
\newdimen\@maxdepth
\@maxdepth = \maxdepth
\newdimen\paperheight
@@ -9339,801 +12045,6 @@ Type H <return> for immediate help.}%
\let\topfigrule=\relax
\let\botfigrule=\relax
\let\dblfigrule=\relax
-%%% From File: ltclass.dtx
-\newif\if@compatibility
-\def\@documentclasshook{%
- \ifx\@normalsize\@undefined
- \let\@normalsize\normalsize
- \fi
-}
-\let\@declaredoptions\@empty
-\let\@classoptionslist\relax
-\@onlypreamble\@classoptionslist
-\let\@unusedoptionlist\@empty
-\@onlypreamble\@unusedoptionlist
-\let\CurrentOption\@empty
-\let\@currname\@empty
-\global\let\@currext=\@empty
-\def\@clsextension{cls}
-\def\@pkgextension{sty}
-\@onlypreamble\@clsextension
-\@onlypreamble\@pkgextension
-\def\@pushfilename{%
- \@expl@push@filename@@
- \xdef\@currnamestack{%
- {\@currname}%
- {\@currext}%
- {\the\catcode`\@}%
- \@currnamestack}%
- \@expl@push@filename@aux@@}
-\@onlypreamble\@pushfilename
-\def\@popfilename{\expandafter\@p@pfilename\@currnamestack\@nil
- \@expl@pop@filename@@}
-\@onlypreamble\@popfilename
-\def\@p@pfilename#1#2#3#4\@nil{%
- \gdef\@currname{#1}%
- \gdef\@currext{#2}%
- \catcode`\@#3\relax
- \gdef\@currnamestack{#4}}
-\@onlypreamble\@p@pfilename
-\gdef\@currnamestack{}
-\@onlypreamble\@currnamestack
-\def\@ptionlist#1{%
- \@ifundefined{opt@#1}\@empty{\csname opt@#1\endcsname}}
-\@onlypreamble\@ptionlist
-\def\@ifpackageloaded{\@ifl@aded\@pkgextension}
-\def\@ifclassloaded{\@ifl@aded\@clsextension}
-\@onlypreamble\@ifpackageloaded
-\@onlypreamble\@ifclassloaded
-\def\@ifl@aded#1#2{%
- \expandafter\ifx\csname ver@#2.#1\endcsname\relax
- \expandafter\@secondoftwo
- \else
- \expandafter\@firstoftwo
- \fi}
-\@onlypreamble\@ifl@aded
-\def\@ifpackagelater{\@ifl@ter\@pkgextension}
-\def\@ifclasslater{\@ifl@ter\@clsextension}
-\@onlypreamble\@ifpackagelater
-\@onlypreamble\@ifclasslater
-\def\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
-\let\IfPackageAtLeastTF\@ifpackagelater
-\let\IfClassAtLeastTF\@ifclasslater
-\@onlypreamble\IfFormatAtLeastTF
-\@onlypreamble\IfPackageAtLeastTF
-\@onlypreamble\IfClassAtLeastTF
-\def\@ifl@ter#1#2{%
- \expandafter\@ifl@t@r
- \csname ver@#2.#1\endcsname}
-\@onlypreamble\@ifl@ter
-\def\@ifl@t@r#1#2{%
- \ifnum\expandafter\@parse@version@#1//00\@nil<%
- \expandafter\@parse@version@#2//00\@nil
- \expandafter\@secondoftwo
- \else
- \expandafter\@firstoftwo
- \fi}
-\def\@parse@version@#1{\@parse@version0#1}
-\@onlypreamble\@ifl@t@r
-\def\@parse@version#1/#2/#3#4#5\@nil{%
-\@parse@version@dash#1-#2-#3#4\@nil
-}
-\def\@parse@version@dash#1-#2-#3#4#5\@nil{%
- \if\relax#2\relax\else#1\fi#2#3#4 }
-\def\@ifpackagewith{\@if@ptions\@pkgextension}
-\def\@ifclasswith{\@if@ptions\@clsextension}
-\@onlypreamble\@ifpackagewith
-\@onlypreamble\@ifclasswith
-\def\@if@ptions#1#2{%
- \@expandtwoargs\@if@pti@ns{\@ptionlist{#2.#1}}}
-\@onlypreamble\@if@ptions
-\def\@if@pti@ns#1#2{%
- \let\reserved@a\@firstoftwo
- \edef\reserved@b{\zap@space#2 \@empty}%
- \@for\reserved@b:=\reserved@b\do{%
- \ifx\reserved@b\@empty
- \else
- \expandafter\in@\expandafter{\expandafter,\reserved@b,}{,#1,}%
- \ifin@
- \else
- \let\reserved@a\@secondoftwo
- \fi
- \fi
- }%
- \reserved@a}
-\@onlypreamble\@if@pti@ns
-\def\ProvidesPackage#1{%
- \xdef\@gtempa{#1}%
- \ifx\@gtempa\@currname\else
- \@latex@warning@no@line{You have requested
- \@cls@pkg\space`\@currname',\MessageBreak
- but the \@cls@pkg\space provides `#1'}%
- \fi
- \@ifnextchar[\@pr@videpackage{\@pr@videpackage[]}}%]
-\@onlypreamble\ProvidesPackage
-\def\@pr@videpackage[#1]{%
- \expandafter\protected@xdef % <-- protected...
- \csname ver@\@currname.\@currext\endcsname{#1}%
- \ifx\@currext\@clsextension
- \typeout{Document Class: \@gtempa\space#1}%
- \else
- \protected@wlog{Package: \@gtempa\space#1}% <--- protected
- \fi}
-\long\def\protected@wlog#1{\begingroup
- \set@display@protect
- \immediate \write \m@ne {#1}\endgroup }
-\@onlypreamble\@pr@videpackage
-\let\ProvidesClass\ProvidesPackage
-\@onlypreamble\ProvidesClass
-\def\ProvidesFile#1{%
- \begingroup
- \catcode`\ 10 %
- \ifnum \endlinechar<256 %
- \ifnum \endlinechar>\m@ne
- \catcode\endlinechar 10 %
- \fi
- \fi
- \@makeother\/%
- \@makeother\&%
- \kernel@ifnextchar[{\@providesfile{#1}}{\@providesfile{#1}[]}}
-\def\@pass@ptions#1#2#3{%
- \expandafter\xdef\csname opt@#3.#1\endcsname{%
- \@ifundefined{opt@#3.#1}\@empty
- {\csname opt@#3.#1\endcsname,}%
- \zap@space#2 \@empty}}
-\@onlypreamble\@pass@ptions
-\def\PassOptionsToPackage{\@pass@ptions\@pkgextension}
-\def\PassOptionsToClass{\@pass@ptions\@clsextension}
-\@onlypreamble\PassOptionsToPackage
-\@onlypreamble\PassOptionsToClass
-\def\DeclareOption{%
- \let\@fileswith@pti@ns\@badrequireerror
- \@ifstar\@defdefault@ds\@declareoption}
-\long\def\@declareoption#1#2{%
- \xdef\@declaredoptions{\@declaredoptions,#1}%
- \toks@{#2}%
- \expandafter\edef\csname ds@#1\endcsname{\the\toks@}}
-\long\def\@defdefault@ds#1{%
- \toks@{#1}%
- \edef\default@ds{\the\toks@}}
-\@onlypreamble\DeclareOption
-\@onlypreamble\@declareoption
-\@onlypreamble\@defdefault@ds
-\def\OptionNotUsed{%
- \ifx\@currext\@clsextension
- \xdef\@unusedoptionlist{%
- \ifx\@unusedoptionlist\@empty\else\@unusedoptionlist,\fi
- \CurrentOption}%
- \fi}
-\@onlypreamble\OptionNotUsed
-\def\ProcessOptions{%
- \let\ds@\@empty
- \edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
- \@ifstar\@xprocess@ptions\@process@ptions}
-\@onlypreamble\ProcessOptions
-\def\@process@ptions{%
- \@for\CurrentOption:=\@declaredoptions\do{%
- \ifx\CurrentOption\@empty\else
- \@expandtwoargs\in@{,\CurrentOption,}{%
- ,\ifx\@currext\@clsextension\else\@classoptionslist,\fi
- \@curroptions,}%
- \ifin@
- \@use@ption
- \expandafter\let\csname ds@\CurrentOption\endcsname\@empty
- \fi
- \fi}%
- \@process@pti@ns}
-\@onlypreamble\@process@ptions
-\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}
-\@onlypreamble\@xprocess@ptions
-\def\@process@pti@ns{%
- \@for\CurrentOption:=\@curroptions\do{%
- \@ifundefined{ds@\CurrentOption}%
- {\@use@ption
- \default@ds}%
- \@use@ption}%
- \@for\CurrentOption:=\@declaredoptions\do{%
- \expandafter\let\csname ds@\CurrentOption\endcsname\relax}%
- \let\CurrentOption\@empty
- \let\@fileswith@pti@ns\@@fileswith@pti@ns
- \AtEndOfPackage{\expandafter\let
- \csname unprocessedoptions-\@currname.\@currext\endcsname
- \relax}}
-\@onlypreamble\@process@pti@ns
-\def\@options{\ProcessOptions*}
-\@onlypreamble\@options
-\def\@use@ption{%
- \@expandtwoargs\@removeelement\CurrentOption
- \@unusedoptionlist\@unusedoptionlist
- \csname ds@\CurrentOption\endcsname}
-\@onlypreamble\@use@ption
-\def\ExecuteOptions#1{%
- \edef\@fortmp{\zap@space#1 \@empty}%
- \def\reserved@a##1\@nil{%
- \@for\CurrentOption:=\@fortmp\do
- {\csname ds@\CurrentOption\endcsname}%
- \edef\CurrentOption{##1}}%
- \expandafter\reserved@a\CurrentOption\@nil}
-\@onlypreamble\ExecuteOptions
-\def\documentclass{%
- \let\documentclass\@twoclasseserror
- \if@compatibility\else\let\usepackage\RequirePackage\fi
- \@fileswithoptions\@clsextension}
-\@onlypreamble\documentclass
-\def\documentstyle{%
- \makeatletter\input{latex209.def}\makeatother
- \documentclass}
-\@onlypreamble\documentstyle
-\def\RequirePackage{%
- \@fileswithoptions\@pkgextension}
-\@onlypreamble\RequirePackage
-\def\LoadClass{%
- \ifx\@currext\@pkgextension
- \@latex@error
- {\noexpand\LoadClass in package file}%
- {You may only use \noexpand\LoadClass in a class file.}%
- \fi
- \@fileswithoptions\@clsextension}
-\@onlypreamble\LoadClass
-\def\@loadwithoptions#1#2#3{%
- \expandafter\let\csname opt@#3.#1\expandafter\endcsname
- \csname opt@\@currname.\@currext\endcsname
- #2{#3}}
-\@onlypreamble\@loadwithoptions
-\def\LoadClassWithOptions{%
- \@loadwithoptions\@clsextension\LoadClass}
-\@onlypreamble\LoadClassWithOptions
-\def\RequirePackageWithOptions{%
- \AtEndOfPackage{\expandafter\let
- \csname unprocessedoptions-\@currname.\@currext\endcsname
- \relax}%
- \@loadwithoptions\@pkgextension\RequirePackage}
-\@onlypreamble\RequirePackageWithOptions
-
-\def\usepackage#1#{%
- \@latex@error
- {\noexpand \usepackage before \string\documentclass}%
- {\noexpand \usepackage may only appear in the document
- preamble, i.e.,\MessageBreak
- between \noexpand\documentclass and
- \string\begin{document}.}%
- \@gobble}
-\@onlypreamble\usepackage
-\def\NeedsTeXFormat#1{%
- \def\reserved@a{#1}%
- \ifx\reserved@a\fmtname
- \expandafter\@needsformat
- \else
- \@latex@error{This file needs format `\reserved@a'%
- \MessageBreak but this is `\fmtname'}{%
- The current input file will not be processed
- further,\MessageBreak
- because it was written for some other flavor of
- TeX.\MessageBreak\@ehd}%
- \endinput \fi}
-\@onlypreamble\NeedsTeXFormat
-\def\@needsformat{%
- \@ifnextchar[%]
- \@needsf@rmat
- {}}
-\@onlypreamble\@needsformat
-\def\@needsf@rmat[#1]{%
- \@ifl@t@r\fmtversion{#1}{}%
- {\@latex@warning@no@line
- {You have requested release `#1' of LaTeX,\MessageBreak
- but only release `\fmtversion' is available}}}
-\@onlypreamble\@needsf@rmat
-\def\zap@space#1 #2{%
- #1%
- \ifx#2\@empty\else\expandafter\zap@space\fi
- #2}
-\def\@fileswithoptions#1{%
- \@ifnextchar[%]
- {\@fileswith@ptions#1}%
- {\@fileswith@ptions#1[]}}
-\@onlypreamble\@fileswithoptions
-\def\@fileswith@ptions#1[#2]#3{%
- \@ifnextchar[%]
- {\@fileswith@pti@ns#1[{#2}]#3}%
- {\@fileswith@pti@ns#1[{#2}]#3[]}}
-\@onlypreamble\@fileswith@ptions
-\def\@fileswith@pti@ns#1[#2]#3[#4]{%
- \ifx#1\@clsextension
- \ifx\@classoptionslist\relax
- \xdef\@classoptionslist{\zap@space#2 \@empty}%
- \def\reserved@a{%
- \@onefilewithoptions#3[{#2}][{#4}]#1%
- \@documentclasshook}%
- \else
- \def\reserved@a{%
- \@onefilewithoptions#3[{#2}][{#4}]#1}%
- \fi
- \else
- \def\reserved@b##1,{%
- \ifx\@nnil##1\relax\else
- \ifx\@nnil##1\@nnil\else
- \noexpand\@onefilewithoptions##1[{#2}][{#4}]%
- \noexpand\@pkgextension
- \fi
- \expandafter\reserved@b
- \fi}%
- \edef\reserved@a{\zap@space#3 \@empty}%
- \edef\reserved@a{\expandafter\reserved@b\reserved@a,\@nnil,}%
- \fi
- \reserved@a}
-\@onlypreamble\@fileswith@pti@ns
-\def\@onefilewithoptions#1[#2][#3]#4{%
- \@pushfilename
- \xdef\@currname{#1}%
- \global\let\@currext#4%
- \let\CurrentOption\@empty
- \@reset@ptions
- \makeatletter
- \def\reserved@a{%
- \@ifl@aded\@currext{#1}%
- {\@if@ptions\@currext{#1}{#2}{}%
- {\@latex@error
- {Option clash for \@cls@pkg\space #1}%
- {The package #1 has already been loaded
- with options:\MessageBreak
- \space\space[\@ptionlist{#1.\@currext}]\MessageBreak
- There has now been an attempt to load it
- with options\MessageBreak
- \space\space[#2]\MessageBreak
- Adding the global options:\MessageBreak
- \space\space
- \@ptionlist{#1.\@currext},#2\MessageBreak
- to your \noexpand\documentclass declaration may fix this.%
- \MessageBreak
- Try typing \space <return> \space to proceed.}}}%
- {\@pass@ptions\@currext{#2}{#1}%
- \global\expandafter
- \let\csname ver@\@currname.\@currext\endcsname\@empty
- \expandafter\let\csname\@currname.\@currext-h@@k\endcsname\@empty
- \InputIfFileExists
- {\@currname.\@currext}%
- {}%
- {\@missingfileerror\@currname\@currext}%
- \expandafter\let\csname unprocessedoptions-\@currname.\@currext\endcsname
- \@@unprocessedoptions
- \csname\@currname.\@currext-h@@k\endcsname
- \expandafter\let\csname\@currname.\@currext-h@@k\endcsname
- \@undefined
- \ifx\@unprocessedoptions\relax
- \let\@unprocessedoptions\@undefined
- \else
- \csname unprocessedoptions-\@currname.\@currext\endcsname
- \fi
- \expandafter\let
- \csname unprocessedoptions-\@currname.\@currext\endcsname
- \@undefined}%
- \@ifl@ter\@currext{#1}{#3}{}%
- {\@latex@warning@no@line
- {You have requested,\on@line,
- version\MessageBreak
- `#3' of \@cls@pkg\space #1,\MessageBreak
- but only version\MessageBreak
- `\csname ver@#1.\@currext\endcsname'\MessageBreak
- is available}}%
- \ifx\@currext\@clsextension\let\LoadClass\@twoloadclasserror\fi
- \@popfilename
- \@reset@ptions}%
- \reserved@a}
-\@onlypreamble\@onefilewithoptions
-\let\@unprocessedoptions\@undefined
-\let\@@fileswith@pti@ns\@fileswith@pti@ns
-\@onlypreamble\@@fileswith@pti@ns
-\def\@reset@ptions{%
- \global\ifx\@currext\@clsextension
- \let\default@ds\OptionNotUsed
- \else
- \let\default@ds\@unknownoptionerror
- \fi
- \global\let\ds@\@empty
- \global\let\@declaredoptions\@empty}
-\@onlypreamble\@reset@ptions
-\ifx\@begindocumenthook\@undefined
- \let\@begindocumenthook\@empty
-\fi
-\let\@enddocumenthook\@empty
-\long\def\g@addto@macro#1#2{%
- \begingroup
- \toks@\expandafter{#1#2}%
- \xdef#1{\the\toks@}%
- \endgroup}
-\def\AtEndOfPackage{%
- \expandafter\g@addto@macro\csname\@currname.\@currext-h@@k\endcsname}
-\let\AtEndOfClass\AtEndOfPackage
-\@onlypreamble\AtEndOfPackage
-\@onlypreamble\AtEndOfClass
-\DeclareRobustCommand\AtBeginDocument{\g@addto@macro\@begindocumenthook}
-\DeclareRobustCommand\AtEndDocument{\g@addto@macro\@enddocumenthook}
-\@onlypreamble\AtBeginDocument
-\def\@cls@pkg{%
- \ifx\@currext\@clsextension
- document class%
- \else
- package%
- \fi}
-\@onlypreamble\@cls@pkg
-\def\@unknownoptionerror{%
- \@latex@error
- {Unknown option `\CurrentOption' for \@cls@pkg\space`\@currname'}%
- {The option `\CurrentOption' was not declared in
- \@cls@pkg\space`\@currname', perhaps you\MessageBreak
- misspelled its name.
- Try typing \space <return>
- \space to proceed.}}
-\@onlypreamble\@unknownoptionerror
-\def\@@unprocessedoptions{%
- \ifx\@currext\@pkgextension
- \edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
- \@for\CurrentOption:=\@curroptions\do{%
- \ifx\CurrentOption\@empty\else\@unknownoptionerror\fi}%
- \fi}
-\@onlypreamble\@unprocessedoptions
-\@onlypreamble\@@unprocessedoptions
-\def\@badrequireerror#1[#2]#3[#4]{%
- \@latex@error
- {\noexpand\RequirePackage or \noexpand\LoadClass
- in Options Section}%
- {The \@cls@pkg\space `\@currname' is defective.\MessageBreak
- It attempts to load `#3' in the options section, i.e.,\MessageBreak
- between \noexpand\DeclareOption and \string\ProcessOptions.}}
-\@onlypreamble\@badrequireerror
-\def\@twoloadclasserror{%
- \@latex@error
- {Two \noexpand\LoadClass commands}%
- {You may only use one \noexpand\LoadClass in a class file}}
-\@onlypreamble\@twoloadclasserror
-\def\@twoclasseserror#1#{%
- \@latex@error
- {Two \noexpand\documentclass or \noexpand\documentstyle commands}%
- {The document may only declare one class.}\@gobble}
-\@onlypreamble\@twoclasseserror
-\def\two@digits#1{\ifnum#1<10 0\fi\number#1}
-\def\filecontents{\@tempswatrue\@fileswtrue
- \@ifnextchar[\filec@ntents@opt\filec@ntents
-}
-\@namedef{filecontents*}{\@tempswafalse\@fileswtrue
- \@ifnextchar[\filec@ntents@opt\filec@ntents
-}
-\def\filec@ntents@opt[#1]{%
- \edef\@fortmp{\zap@space#1 \@empty}%
- \@for\reserved@a:=\@fortmp\do{%
- \ifcsname filec@ntents@\reserved@a\endcsname
- \csname filec@ntents@\reserved@a\endcsname
- \else
- \@latex@error{Unknown filecontents option \reserved@a}%
- {Valid options are force (or overwrite), nosearch, noheader}%
- \fi}%
- \filec@ntents
-}
-\let\filec@ntents@force\@fileswfalse
-\let\filec@ntents@overwrite\@fileswfalse % alternative name
-\let\filec@ntents@noheader\@tempswafalse
-\def\filec@ntents@nosearch{%
- \let\filec@ntents@checkdir\@currdir
- \def\filec@ntents@where{in current directory}}
-\let\filec@ntents@checkdir\@empty
-\def\filec@ntents@where{exists on the system}
-\begingroup%
-\@tempcnta=1
-\loop
- \catcode\@tempcnta=12 %
- \advance\@tempcnta\@ne %
-\ifnum\@tempcnta<32 %
-\repeat %
-\catcode`\*=11 %
-\catcode`\^^M\active%
-\catcode`\^^L\active\let^^L\relax%
-\catcode`\^^I\active%
-\gdef\filec@ntents#1{%
- \set@curr@file{\filec@ntents@checkdir#1}%
- \edef\q@curr@file{\expandafter\quote@name\expandafter{\@curr@file}}%
- \chardef\reserved@c\ifx\directlua\@undefined 15 \else 127 \fi%
- \openin\@inputcheck\q@curr@file \space %
- \ifeof\@inputcheck%
- \@latex@warning@no@line%
- {Writing file `\@currdir\@curr@file'}%
- \ch@ck7\reserved@c\write\relax%
- \immediate\openout\reserved@c\q@curr@file\relax%
- \else%
- \if@filesw%
- \@latex@warning@no@line%
- {File `\@curr@file' already \filec@ntents@where.\MessageBreak%
- Not generating it from this source}%
- \let\write\@gobbletwo%
- \let\closeout\@gobble%
- \else%
- \edef\reserved@a{#1}%
- \edef\reserved@a{\detokenize\expandafter{\reserved@a}}%
- \edef\reserved@b{\detokenize\expandafter{\jobname}}%
- \ifx\reserved@a\reserved@b%
- \@fileswtrue%
- \else%
- \edef\reserved@b{\reserved@b\detokenize{.tex}}%
- \ifx\reserved@a\reserved@b
- \@fileswtrue%
- \fi%
- \fi%
- \ch@ck7\reserved@c\write\relax%
- \if@filesw% % Foul ... trying to overwrite \jobname!
- \@latex@error{Trying to overwrite `\jobname.tex'}{You can't %
- write to the file you are reading from!\MessageBreak%
- Data is written to screen instead.}%
- \else%
- \@latex@warning@no@line%
- {Writing or overwriting file `\@currdir\@curr@file'}%
- \immediate\openout\reserved@c\q@curr@file\relax%
- \fi%
- \fi%
- \fi%
- \closein\@inputcheck%
- \if@tempswa%
- \immediate\write\reserved@c{%
- \@percentchar\@percentchar\space%
- \expandafter\@gobble\string\LaTeX2e file `\@curr@file'^^J%
- \@percentchar\@percentchar\space generated by the %
- `\@currenvir' \expandafter\@gobblefour\string\newenvironment^^J%
- \@percentchar\@percentchar\space from source `\jobname' on %
- \number\year/\two@digits\month/\two@digits\day.^^J%
- \@percentchar\@percentchar}%
- \fi%
- \let\do\@makeother\dospecials%
- \count@ 128\relax%
- \loop%
- \catcode\count@ 11\relax%
- \advance\count@ \@ne%
- \ifnum\count@<\@cclvi%
- \repeat%
- \edef\E{\@backslashchar end\string{\@currenvir\string}}%
- \edef\reserved@b{%
- \def\noexpand\reserved@b%
- ####1\E####2\E####3\relax}%
- \reserved@b{%
- \ifx\relax##3\relax%
- \immediate\write\reserved@c{##1}%
- \else%
- \edef^^M{\noexpand\end{\@currenvir}}%
- \ifx\relax##1\relax%
- \else%
- \@latex@warning{Writing text `##1' before %
- \string\end{\@currenvir}\MessageBreak as last line of \@curr@file}%
- \immediate\write\reserved@c{##1}%
- \fi%
- \ifx\relax##2\relax%
- \else%
- \@latex@warning{%
- Ignoring text `##2' after \string\end{\@currenvir}}%
- \fi%
- \fi%
- ^^M}%
- \catcode`\^^L\active%
- \let\L\@undefined%
- \def^^L{\expandafter\ifx\csname L\endcsname\relax\fi ^^J^^J}%
- \catcode`\^^I\active%
- \let\I\@undefined%
- \def^^I{\expandafter\ifx\csname I\endcsname\relax\fi\space}%
- \catcode`\^^M\active%
- \edef^^M##1^^M{%
- \noexpand\reserved@b##1\E\E\relax}}%
-\endgroup%
-\begingroup
-\catcode`|=\catcode`\%
-\catcode`\%=12
-\catcode`\*=11
-\gdef\@percentchar{%}
-\gdef\endfilecontents{|
- \immediate\closeout\reserved@c
- \def\T##1##2##3{|
- \ifx##1\@undefined\else
- \@latex@warning@no@line{##2 has been converted to Blank ##3e}|
- \fi}|
- \T\L{Form Feed}{Lin}|
- \T\I{Tab}{Spac}|
- \immediate\write\@unused{}}
-\global\let\endfilecontents*\endfilecontents
-\endgroup
-\let\pkgcls@debug\@gobble
-\def\requestedLaTeXdate{0}
-\ifx\pkgcls@targetdate\@undefined
- \newcount\pkgcls@targetdate
-\fi
-\let\pkgcls@targetlabel\@empty
-\def\pkgcls@innerdate{\maxdimen}
-\let\pkgcls@candidate\@empty
-\let\pkgcls@releasedate\@empty
-\ifx\load@onefilewithoptions\@undefined
- \let\load@onefilewithoptions\@onefilewithoptions
- \def\@onefilewithoptions#1[#2][#3]#4{%
- \pkgcls@debug{--- File loaded request (\noexpand\usepackage or ...)}%
- \pkgcls@debug{\@spaces 1: #1}%
- \pkgcls@debug{\@spaces 2: #2}%
- \pkgcls@debug{\@spaces 3: #3}%
- \pkgcls@debug{\@spaces 4: #4}%
- \def\pkgcls@name{#1}% % for info message
- \def\pkgcls@arg {#3}% % for info message
- \pkgcls@parse@date@arg{#3}%
- \let\pkgcls@candidate\@empty
- \begingroup
- \edef\reserved@a{%
- \endgroup
- \unexpanded{\load@onefilewithoptions#1[#2]}%
- [\pkgcls@mindate]%
- \unexpanded{#4}}%
- \reserved@a
- }
-\fi
-\def\pkgcls@parse@date@arg #1{%
- \ifx\@nil#1\@nil
- \pkgcls@targetdate\requestedLaTeXdate\relax
- \let\pkgcls@targetlabel\@empty
- \let\pkgcls@mindate\@empty
- \else
- \pkgcls@parse@date@arg@#1=\@nil\relax
- \fi
- }
-\def\pkgcls@parse@date@arg@#1=#2\@nil{%
- \pkgcls@targetdate
- \ifx\@nil#1\@nil
- \@parse@version0#2//00\@nil\relax
- \ifnum \pkgcls@targetdate=\z@
- \pkgcls@targetdate\@ne
- \def\pkgcls@innerdate{\maxdimen}%
- \pkgcls@parse@date@arg@version#2%
- \else
- \edef\pkgcls@innerdate{\the\pkgcls@targetdate}%
- \fi
- \let\pkgcls@mindate\@empty
- \else
- \requestedLaTeXdate\relax
- \let\pkgcls@targetlabel\@empty
- \def\pkgcls@innerdate{\maxdimen}%
- \def\pkgcls@mindate{#1}%
- \ifnum \pkgcls@targetdate > \z@
- \ifnum \@parse@version0#1//00\@nil > \pkgcls@targetdate
- \@latex@warning@no@line{Suspicious rollback/min-date date given\MessageBreak
- A minimal date of #1 has been specified for
- \@cls@pkg\MessageBreak '\pkgcls@name'.\MessageBreak
- But this is in conflict
- with a rollback request to \requestedpatchdate}
- \fi
- \fi
- \fi
-}
-\def\pkgcls@parse@date@arg@version#1={%
- \def\pkgcls@targetlabel{#1}}
-\def\DeclareRelease#1#2#3{%
- \ifnum\pkgcls@targetdate>\z@ % some sort of rollback request
- \pkgcls@debug{---\string\DeclareRelease:}%
- \pkgcls@debug{\@spaces 1: #1}%
- \pkgcls@debug{\@spaces 2: #2}%
- \pkgcls@debug{\@spaces 3: #3}%
- \ifx\@nil#2\@nil
- \ifnum\pkgcls@targetdate=\@ne % named request
- \def\reserved@a{#1}%
- \ifx\pkgcls@targetlabel\reserved@a
- \pkgcls@use@this@release{#3}{}%
- \else
- \pkgcls@debug{Label doesn't match}%
- \fi
- \else
- \pkgcls@debug{Date request: ignored}%
- \fi
- \else
- \ifnum\pkgcls@targetdate>\@ne % a real request
- \ifnum\@parse@version#2//00\@nil
- >\pkgcls@targetdate
- \ifx\pkgcls@candidate\@empty
- \pkgcls@rollbackdate@error{#2}%
- \pkgcls@use@this@release{#3}{#2}%
- \else
- \pkgcls@use@this@release\pkgcls@candidate
- \pkgcls@releasedate
- \fi
- \else
- \def\pkgcls@candidate{#3}%
- \def\pkgcls@releasedate{#2}%
- \pkgcls@debug{New candidate: #3}%
- \fi
- \else
- \def\reserved@a{#1}%
- \ifx\pkgcls@targetlabel\reserved@a
- \pkgcls@use@this@release{#3}{#2}%
- \else
- \pkgcls@debug{Label doesn't match}%
- \fi
- \fi
- \fi
- \fi
-}
-\def\pkgcls@use@this@release#1#2{%
- \pkgcls@show@selection{#1}{#2}%
- \pkgcls@targetdate\z@
- \@@input #1\relax
- \endinput
-}
-\def\pkgcls@show@selection#1#2{%
- \pkgcls@debug{Result: use #1}%
- \GenericInfo
- {\@spaces\@spaces\space}{Rollback for
- \@cls@pkg\space'\@currname' requested ->
- \ifnum\pkgcls@targetdate>\@ne
- date
- \ifnum\requestedLaTeXdate=\pkgcls@targetdate
- \requestedpatchdate
- \else
- \expandafter\@gobble\pkgcls@arg
- \fi.\MessageBreak
- Best approximation is
- \else
- version '\pkgcls@targetlabel'.\MessageBreak
- This corresponds to
- \fi
- \ifx\@nil#2\@nil
- a special release%
- \else
- the release introduced on #2%
- \fi
- \@gobble}%
-}
-\def\pkgcls@rollbackdate@error#1{%
- \@latex@error{Suspicious rollback date given}%
- {The \@cls@pkg\space'\@currname' claims that it
- came into existence on #1 which\MessageBreak
- is after your requested rollback date --- so
- something is wrong here.\MessageBreak
- Continue and we use the earliest known release.}}
-\def\DeclareCurrentRelease#1#2{%
- \ifnum\pkgcls@targetdate>\z@ % some sort of rollback request
- \pkgcls@debug{---DeclareCurrentRelease}%
- \pkgcls@debug{ 1: #1}%
- \pkgcls@debug{ 2: #2}%
- \ifnum\pkgcls@targetdate>\@ne % a date request
- \ifnum\@parse@version#2//00\@nil
- >\pkgcls@targetdate
- \ifx\pkgcls@candidate\@empty
- \pkgcls@rollbackdate@error{#2}%
- \else
- \pkgcls@use@this@release\pkgcls@candidate
- \pkgcls@releasedate
- \fi
- \else
- \pkgcls@show@selection{current version}{#2}%
- \fi
- \else % a label request
- \def\reserved@a{#1}%
- \ifx\pkgcls@targetlabel\reserved@a
- \pkgcls@show@selection{current version}{#2}%
- \else
- \@latex@error{Requested version '\pkgcls@targetlabel' for
- \@cls@pkg\space'\@currname' is unknown}\@ehc
- \fi
- \fi
- \fi
-}
-\DeclareRobustCommand\IfTargetDateBefore[1]{%
- \ifnum\pkgcls@innerdate <%
- \expandafter\@parse@version\expandafter0#1//00\@nil
- \typeout{Exclude code introduced on #1}%
- \expandafter\@firstoftwo
- \else
- \typeout{Include code introduced on #1}%
- \expandafter\@secondoftwo
- \fi
-}
%%% From File: ltfinal.dtx
\tracingstats1
\newcount\@lowpenalty
@@ -10252,7 +12163,7 @@ Type H <return> for immediate help.}%
\def\font@submax{0pt}
\fi
\ifnum0%
- \ifx\Umathchar\@undefined\else 1\fi
+ \ifx\Umathcode\@undefined\else 1\fi
\ifx\mubyte\@undefined\else 1\fi
\ifx\charsubdef\@undefined\else 1\fi
=\z@
@@ -10452,12 +12363,6 @@ Type H <return> for immediate help.}%
\endgroup}
\let\@filelist\@gobble
\def\@addtofilelist#1{\xdef\@filelist{\@filelist,#1}}%
-\input lthooks.ltx
-\input ltshipout.ltx
-\input ltfilehook.ltx
-
-\g@addto@macro\@kernel@after@env@document@begin
- {\reinstall@nfss@defs\init@series@setup}
\makeatother
\errorstopmode
\dump