diff options
author | Karl Berry <karl@freefriends.org> | 2020-10-02 21:49:18 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2020-10-02 21:49:18 +0000 |
commit | 5255c37137345163348d22ab46af2304cf9f55a6 (patch) | |
tree | 88246497477ddcc26834e5708566ad4c1c862a19 /Master/texmf-dist/tex/latex/base/latex.ltx | |
parent | 1922ba4684a59cde742dcef9ed152381d2d7b110 (diff) |
latex2e (2oct20)
git-svn-id: svn://tug.org/texlive/trunk@56514 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/base/latex.ltx')
-rw-r--r-- | Master/texmf-dist/tex/latex/base/latex.ltx | 4530 |
1 files changed, 3332 insertions, 1198 deletions
diff --git a/Master/texmf-dist/tex/latex/base/latex.ltx b/Master/texmf-dist/tex/latex/base/latex.ltx index 4b3cccd20d1..ecf6c5e1518 100644 --- a/Master/texmf-dist/tex/latex/base/latex.ltx +++ b/Master/texmf-dist/tex/latex/base/latex.ltx @@ -7,7 +7,10 @@ %% ltdirchk.dtx (with options: `initex,2ekernel,dircheck') %% 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') @@ -39,9 +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') -%% ltluatex.dtx (with options: `2ekernel') +%% 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 @@ -709,8 +709,8 @@ %%% From File: ltvers.dtx \def\fmtname{LaTeX2e} \edef\fmtversion - {2020-02-02} -\def\patch@level{5} + {2020-10-01} +\def\patch@level{0} \edef\development@branch@name{} \iffalse \def\reserved@a#1/#2/#3\@nil{% @@ -808,10 +808,272 @@ \ifx\@check@IncludeInRelease#2\else \PackageError{latexrelease}{skipped IncludeInRelease for tag \string#2}{}% \fi} +%%% From File: ltluatex.dtx +\ifx\directlua\@undefined\else +\ifnum\luatexversion<60 % + \wlog{***************************************************} + \wlog{* LuaTeX version too old for ltluatex support *} + \wlog{***************************************************} + \expandafter\endinput +\fi +\long\def\@gobble#1{} +\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% +} +\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 +} +\newcatcodetable\catcodetable@initex +\newcatcodetable\catcodetable@string +\begingroup + \def\setrangecatcode#1#2#3{% + \ifnum#1>#2 % + \expandafter\@gobble + \else + \expandafter\@firstofone + \fi + {% + \catcode#1=#3 % + \expandafter\setrangecatcode\expandafter + {\number\numexpr#1 + 1\relax}{#2}{#3} + }% + } + \@firstofone{% + \catcodetable\catcodetable@initex + \catcode0=12 % + \catcode13=12 % + \catcode37=12 % + \setrangecatcode{65}{90}{12}% + \setrangecatcode{97}{122}{12}% + \catcode92=12 % + \catcode127=12 % + \savecatcodetable\catcodetable@string + \endgroup + }% +\newcatcodetable\catcodetable@latex +\newcatcodetable\catcodetable@atletter +\begingroup + \def\parseunicodedataI#1;#2;#3;#4\relax{% + \parseunicodedataII#1;#3;#2 First>\relax + }% + \def\parseunicodedataII#1;#2;#3 First>#4\relax{% + \ifx\relax#4\relax + \expandafter\parseunicodedataIII + \else + \expandafter\parseunicodedataIV + \fi + {#1}#2\relax% + }% + \def\parseunicodedataIII#1#2#3\relax{% + \ifnum 0% + \if L#21\fi + \if M#21\fi + >0 % + \catcode"#1=11 % + \fi + }% + \def\parseunicodedataIV#1#2#3\relax{% + \read\unicoderead to \unicodedataline + \if L#2% + \count0="#1 % + \expandafter\parseunicodedataV\unicodedataline\relax + \fi + }% + \def\parseunicodedataV#1;#2\relax{% + \loop + \unless\ifnum\count0>"#1 % + \catcode\count0=11 % + \advance\count0 by 1 % + \repeat + }% + \def\storedpar{\par}% + \chardef\unicoderead=\numexpr\count16 + 1\relax + \openin\unicoderead=UnicodeData.txt % + \loop\unless\ifeof\unicoderead % + \read\unicoderead to \unicodedataline + \unless\ifx\unicodedataline\storedpar + \expandafter\parseunicodedataI\unicodedataline\relax + \fi + \repeat + \closein\unicoderead + \@firstofone{% + \catcode64=12 % + \savecatcodetable\catcodetable@latex + \catcode64=11 % + \savecatcodetable\catcodetable@atletter + } +\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 +} +\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% +} +\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% +} + +\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 + \e@alloc@luachunk@count\m@ne\e@alloc@top#1% + {\escapechar\m@ne + \directlua{lua.name[\the\allocationnumber]="\string#1"}}% +} +\def\now@and@everyjob#1{% + \everyjob\expandafter{\the\everyjob + #1% + }% + #1% +} +\now@and@everyjob{% + \begingroup + \attributedef\attributezero=0 % + \chardef \charzero =0 % + \countdef \CountZero =0 % + \dimendef \dimenzero =0 % + \mathchardef \mathcharzero =0 % + \muskipdef \muskipzero =0 % + \skipdef \skipzero =0 % + \toksdef \tokszero =0 % + \directlua{require("ltluatex")} + \endgroup +} +\everyjob\expandafter{% + \the\everyjob + \directlua{% + if xpcall(function ()% + require('luaotfload-main')% + end,texio.write_nl) then % + local _void = luaotfload.main ()% + else % + texio.write_nl('Error in luaotfload: reverting to OT1')% + tex.print('\string\\def\string\\encodingdefault{OT1}')% + end % + }% + \let\f@encoding\encodingdefault + \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 +\cs_gset_eq:NN \@expl@str@map@function@@NN \str_map_function:NN +\cs_gset_eq:NN \@expl@char@generate@@nn \char_generate:nn +\ExplSyntaxOff %%% From File: ltdefns.dtx \def\two@digits#1{\ifnum#1<10 0\fi\number#1} -\def\typeout#1{\begingroup\set@display@protect - \immediate\write\@unused{#1}\endgroup} +\protected\long\def\typeout#1{\begingroup + \set@display@protect + \def\par{^^J^^J}% + \immediate\write\@unused{#1}\endgroup} \newlinechar`\^^J \let\@@par=\par \let\@@hyph=\- @@ -845,7 +1107,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{% @@ -1053,6 +1315,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}% @@ -1061,8 +1325,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}% @@ -1074,19 +1339,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 @@ -1142,19 +1571,35 @@ \edef #1{\expandafter\strip@prefix \meaning #1}% } +\def\string@makeletter#1{% + \@expl@str@map@function@@NN#1\@string@makeletter} +\def\@string@makeletter#1{% + \char@if@alph{#1}% + {\@expl@char@generate@@nn{`#1}{11}}% + {#1}} +\def\char@if@alph#1{% + \ifnum0\ifnum`#1<`A 1\fi\ifnum`#1>`z 1\fi + \if\ifnum`#1>`Z @\fi\ifnum`#1<`a @\fi01\fi>0 + \expandafter\@secondoftwo + \else + \expandafter\@firstoftwo + \fi} \DeclareRobustCommand\makeatletter{\catcode`\@11\relax} \DeclareRobustCommand\makeatother{\catcode`\@12\relax} - \def\@latex@info#1{} -\DeclareRobustCommand{\-}{% - \discretionary{% - \char \ifnum\hyphenchar\font<\z@ - \defaulthyphenchar - \else - \hyphenchar\font - \fi - }{}{}% -} +\ifx\directlua\@undefined + \DeclareRobustCommand{\-}{% + \discretionary{% + \char \ifnum\hyphenchar\font<\z@ + \defaulthyphenchar + \else + \hyphenchar\font + \fi + }{}{}% + } +\else + \let\-\@@hyph +\fi \let\@dischyph=\- \newif\if@includeinrelease \@includeinreleasefalse @@ -1174,6 +1619,964 @@ \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.0b} +\def\lthooksdate{2020/09/21} +\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 +\prop_new:N \g__hook_execute_immediately_prop +\prop_new:N \g__hook_used_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 } +\cs_generate_variant:Nn \tl_show:n { x } +\cs_generate_variant:Nn \tl_log:n { x } +\scan_new:N \s__hook_mark +\cs_new_protected:Npn \hook_new:n #1 + { \__hook_normalize_hook_args:Nn \__hook_new:n {#1} } +\cs_new_protected:Npn \__hook_new:n #1 + { + \hook_if_exist:nTF {#1} + { \msg_error:nnn { hooks } { exists } {#1} } + { + \seq_gput_right:Nn \g__hook_all_seq {#1} + \tl_new:c { __hook~#1 } + \__hook_declare:n {#1} + \clist_new:c {g__hook_#1_labels_clist} + \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 { __hook_next~#1 } + } + } +\cs_new_protected:Npn \hook_new_reversed:n #1 + { \__hook_normalize_hook_args:Nn \__hook_new_reversed:n {#1} } +\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:n #1 + { + \tl_if_novalue:nTF {#1} + { \__hook_currname_or_default:n { top-level } } + { + \tl_trim_spaces_apply:nN {#1} + \__hook_parse_dot_label:nn { top-level } + } + } +\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 {#2} } + { \__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} + { \__hook_make_name:n {#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} / \__hook_make_name:n {#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 + { \__hook_make_name:n {#1} } + { \@currname } + } + { \g__hook_hook_curr_name_tl } + } +\cs_new:Npn \__hook_make_name:n #1 + { + \exp_after:wN \exp_after:wN \exp_after:wN \__hook_make_name:w + \exp_after:wN \token_to_str:N \cs:w __hook~ #1 \cs_end: + } +\exp_last_unbraced:NNNNo +\cs_new:Npn \__hook_make_name:w #1 \tl_to_str:n { __hook~ } { } +\cs_new_protected:Npn \__hook_normalize_hook_args_aux:Nn #1 #2 + { + \group_begin: + \use:e + { + \group_end: + \exp_not:N #1 #2 + } + } +\cs_new_protected:Npn \__hook_normalize_hook_args:Nn #1 #2 + { + \__hook_normalize_hook_args_aux:Nn #1 + { { \__hook_parse_label_default:n {#2} } } + } +\cs_new_protected:Npn \__hook_normalize_hook_args:Nnn #1 #2 #3 + { + \__hook_normalize_hook_args_aux:Nn #1 + { + { \__hook_parse_label_default:n {#2} } + { \__hook_parse_label_default:n {#3} } + } + } +\cs_new_protected:Npn \__hook_normalize_hook_rule_args:Nnnnn #1 #2 #3 #4 #5 + { + \__hook_normalize_hook_args_aux:Nn #1 + { + { \__hook_parse_label_default:n {#2} } + { \__hook_parse_label_default:n {#3} } + { \tl_trim_spaces:n {#4} } + { \__hook_parse_label_default:n {#5} } + } + } +\cs_new_protected:Npn \hook_gput_code:nnn #1 #2 + { \__hook_normalize_hook_args:Nnn \__hook_gput_code:nnn {#1} {#2} } +\cs_new_protected:Npn \__hook_gput_code:nnn #1 #2 #3 + { + \prop_if_in:NnTF \g__hook_execute_immediately_prop {#1} + {#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 + { \__hook_normalize_hook_args:Nnn \__hook_gremove_code:nn {#1} {#2} } +\cs_new_protected:Npn \__hook_gremove_code:nn #1 #2 + { + \__hook_if_exist:nTF {#1} + { + \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 {__hook~??} +\tl_new:c {g__hook_??_reversed_tl} +\cs_new_protected:Npn \hook_gset_rule:nnnn #1#2#3#4 + { + \__hook_normalize_hook_rule_args:Nnnnn \__hook_gset_rule:nnnn + {#1} {#2} {#3} {#4} + } +\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 {__hook~##1}~ } + } + } + \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 + { + \debug_suspend: + \__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 { __hook~#1 } + { \cs:w __hook_next~#1 \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 + { __hook~#1 } { __hook_next~#1 } + { g__hook_#1_labels_clist } {#1} + \__hook_debug:n{ \exp_args:NNx \prop_gput:Nnn + \g__hook_used_prop {#1}{} } + } + } + \debug_resume: + } +\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 + { + \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} + } +\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 + { + \cs_set_eq:NN \__hook_log_cmd:x \iow_log:x + \__hook_normalize_hook_args:Nn \__hook_log:nN {#1} \tl_log:x + } +\cs_new_protected:Npn \hook_show:n #1 + { + \cs_set_eq:NN \__hook_log_cmd:x \iow_term:x + \__hook_normalize_hook_args:Nn \__hook_log:nN {#1} \tl_show:x + } +\cs_new_protected:Npn \__hook_log_line:x #1 + { \__hook_log_cmd:x { >~#1 } } +\cs_new_protected:Npn \__hook_log_line_indent:x #1 + { \__hook_log_cmd:x { >~\@spaces #1 } } +\cs_new_protected:Npn \__hook_log:nN #1 #2 + { + \__hook_preamble_hook:n {#1} + \iow_term:x { ^^J ->~The~hook~'#1': } + \hook_if_exist:nF {#1} + { \__hook_log_line:x { is~not~declared! } } + \__hook_if_exist:nTF {#1} + { + \__hook_log_line:x { Code~chunks: } + \prop_if_empty:cTF { g__hook_#1_code_prop } + { \__hook_log_line_indent:x { --- } } + { + \prop_map_inline:cn { g__hook_#1_code_prop } + { \__hook_log_line_indent:x { ##1~->~\tl_to_str:n {##2} } } + } + \__hook_log_line:x { Extra~code~for~next~invocation:} + \__hook_log_line_indent:x + { + \tl_if_empty:cTF { __hook_next~#1 } + { --- } + { ->~ \exp_args:Nv \__hook_log_next_code:n { __hook_next~#1 } } + } + \__hook_log_line:x { Rules: } + \bool_set_true:N \l__hook_tmpa_bool + \__hook_list_rules:nn {#1} + { + \bool_set_false:N \l__hook_tmpa_bool + \__hook_log_line_indent:x + { + ##2~ with~ + \str_if_eq:nnT {##3} {??} { default~ } + relation~ ##1 + } + } + \bool_if:NT \l__hook_tmpa_bool + { \__hook_log_line_indent:x { --- } } + \bool_lazy_and:nnTF + { \hook_if_exist_p:n {#1} } + { ! \hook_if_empty_p:n {#1} } + { + \__hook_log_line: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) + } : + } + #2 % \tl_show:n + { + \@spaces + \clist_if_empty:cTF { g__hook_#1_labels_clist } + { --- } + { \clist_use:cn {g__hook_#1_labels_clist} { ,~ } } + } + } + { + #2 + { + Hook~ \hook_if_exist:nTF {#1} + {code~pool~empty} {not~declared} + } + } + } + { #2 { The~hook~is~empty. } } + } +\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 + { \__hook_normalize_hook_args:Nn \__hook_gput_next_code:nn {#1} } +\cs_new_protected:Npn \__hook_gput_next_code:nn #1 #2 + { + \debug_suspend: + \__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} } + \debug_resume: + } +\cs_new_protected:Npn \__hook_gput_next_do:nn #1 + { + \exp_args:Nc \__hook_gput_next_do:Nnn + { __hook_next~#1 } {#1} + } +\cs_new_protected:Npn \__hook_gput_next_do:Nnn #1 #2 + { + \tl_if_empty:cT { __hook~#2 } + { \__hook_update_hook_code:n {#2} } + \tl_if_empty:NT #1 + { \tl_gset:Nn #1 { \__hook_clear_next:n {#2} } } + \tl_gput_right:Nn #1 + } +\cs_new_protected:Npn \__hook_clear_next:n #1 + { \cs_gset_eq:cN { __hook_next~#1 } \c_empty_tl } +\cs_new_protected:Npn \hook_use:n #1 + { + \tl_if_exist:cTF { __hook~#1 } + { + \__hook_preamble_hook:n {#1} + \cs:w __hook~#1 \cs_end: + } + { \__hook_use:wn #1 / \s__hook_mark {#1} } + } +\cs_new:Npn \__hook_use_initialized:n #1 + { + \if_cs_exist:w __hook~#1 \cs_end: + \else: + \__hook_use_undefined:w + \fi: + \cs:w __hook~#1 \__hook_use_end: + } +\cs_new:Npn \__hook_use_undefined:w #1 #2 __hook~#3 \__hook_use_end: + { + #1 % fi + \__hook_use:wn #3 / \s__hook_mark {#3} + } +\cs_new_protected:Npn \__hook_preamble_hook:n #1 + { \__hook_initialize_hook_code:n {#1} } +\cs_new_eq:NN \__hook_use_end: \cs_end: +\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 { __hook~#1 } + { + \__hook_preamble_hook:n {#1} + \cs:w __hook~#1 \cs_end: + } + } +\cs_new_protected:Npn \hook_use_once:n #1 + { + \tl_if_exist:cT { __hook~#1 } + { + \tl_set:Nn \l__hook_return_tl {#1} + \__hook_normalize_hook_args:Nn \__hook_use_once_store:n + { \l__hook_return_tl } + \hook_use:n {#1} + } + } +\cs_new_protected:Npn \__hook_use_once_store:n #1 + { \prop_gput:Nnn \g__hook_execute_immediately_prop {#1} { } } +\prg_new_conditional:Npnn \hook_if_empty:n #1 { p , T , F , TF } + { + \__hook_if_exist:nTF {#1} + { + \bool_lazy_and:nnTF + { \prop_if_empty_p:c { g__hook_#1_code_prop } } + { \tl_if_empty_p:c { __hook_next~#1 } } + { \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 { __hook~#1 } + { \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: + } +\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 } + { \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} + } +\cs_new:Npn \UseHook { \hook_use:n } +\cs_new:Npn \UseOneTimeHook { \hook_use_once:n } +\cs_new_protected:Npn \ShowHook { \hook_show:n } +\cs_new_protected:Npn \LogHook { \hook_log:n } +\cs_new_protected:Npn \DebugHooksOn { \hook_debug_on: } +\cs_new_protected:Npn \DebugHooksOff { \hook_debug_off: } +\NewDocumentCommand \DeclareHookRule { m m m m } + { \hook_gset_rule:nnnn {#1}{#2}{#3}{#4} } +\NewDocumentCommand \DeclareDefaultHookRule { m m m } + { \hook_gset_rule:nnnn {??}{#1}{#2}{#3} } +\@onlypreamble\DeclareDefaultHookRule +\NewDocumentCommand \ClearHookRule { m m m } +{ \hook_gset_rule:nnnn {#1}{#2}{unrelated}{#3} } +\cs_new_eq:NN \IfHookExistsTF \hook_if_exist:nTF +\cs_new_eq:NN \IfHookEmptyTF \hook_if_empty:nTF +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 +\cs_new_eq:NN \@expl@@@initialize@all@@ + \__hook_initialize_all: +\cs_new_eq:NN \@expl@@@hook@curr@name@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 @@ -1505,12 +2908,14 @@ Type H <return> for immediate help.}% \@xnewline}% \@xnewline} \let\\\@normalcr +\def\@vspace@calcify#1{\begingroup\setlength\skip@{#1}\vskip\skip@\endgroup} + \DeclareRobustCommand\newline{\@normalcr\relax} \def\@xnewline{\@ifnextchar[% ] bracket matching \@newline {\@gnewline\relax}} \def\@newline[#1]{\let \reserved@e \vadjust - \@gnewline {\vskip #1}} + \@gnewline {\@vspace@calcify{#1}}} \def\@gnewline #1{% \ifvmode \@nolnerr @@ -1574,9 +2979,9 @@ Type H <return> for immediate help.}% \ifvmode \if@minipage\else \ifdim \lastskip =\z@ - \vskip #1\relax + \@vspace@calcify{#1}% \else - \@tempskipb#1\relax + \setlength\@tempskipb{#1}% \@xaddvskip \fi \fi @@ -1617,12 +3022,12 @@ Type H <return> for immediate help.}% \DeclareRobustCommand\vspace{\@ifstar\@vspacer\@vspace} \def\@vspace #1{% \ifvmode - \vskip #1 + \@vspace@calcify{#1}% \vskip\z@skip \else \@bsphack \vadjust{\@restorepar - \vskip #1 + \@vspace@calcify{#1}% \vskip\z@skip }% \@esphack @@ -1632,7 +3037,7 @@ Type H <return> for immediate help.}% \dimen@\prevdepth \hrule \@height\z@ \nobreak - \vskip #1 + \@vspace@calcify{#1}% \vskip\z@skip \prevdepth\dimen@ \else @@ -1640,7 +3045,7 @@ Type H <return> for immediate help.}% \vadjust{\@restorepar \hrule \@height\z@ \nobreak - \vskip #1 + \@vspace@calcify{#1}% \vskip\z@skip}% \@esphack \fi} @@ -1669,24 +3074,24 @@ Type H <return> for immediate help.}% \catcode `\~=13 \def~{\nobreakspace{}} \expandafter\let\expandafter\@xobeysp\csname nobreakspace \endcsname -\DeclareRobustCommand{\,}{% - \relax\ifmmode\mskip\thinmuskip\else\thinspace\fi -} \def\@{\spacefactor\@m{}}% \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace} -\def\@hspace#1{\hskip #1\relax} +\def\@hspace#1{\begingroup\setlength\skip@{#1}\hskip\skip@\endgroup} + \def\@hspacer#1{\vrule \@width\z@\nobreak - \hskip #1\hskip \z@skip} + \@hspace{#1}\hskip \z@skip} \newskip\fill \fill = 0pt plus 1fill \def\stretch#1{\z@ \@plus #1fill\relax} -\DeclareRobustCommand\thinspace{\leavevmode@ifvmode\kern .16667em } -\DeclareRobustCommand\negthinspace{\leavevmode@ifvmode\kern-.16667em } \DeclareRobustCommand\enspace{\leavevmode@ifvmode\kern.5em } \protected\def\leavevmode@ifvmode{\ifvmode\expandafter\indent\fi} \def\enskip{\hskip.5em\relax} \def\quad{\hskip1em\relax} \def\qquad{\hskip2em\relax} +\ifx\Umathcode\@undefined\else + \catcode "AD=13 + \def^^ad{\-} +\fi {\catcode`\^^M=13 \gdef\obeycr{\catcode`\^^M13 \def^^M{\\\relax}% \@gobblecr}% {\catcode`\^^M=13 \gdef\@gobblecr{\@ifnextchar @@ -1717,7 +3122,10 @@ 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% \@spaces[\@unusedoptionlist]}% @@ -1756,8 +3164,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 @@ -1769,7 +3178,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 + __hook env/document/begin\endcsname + \noexpand\@empty} +\let \@kernel@before@begindocument \@empty +\let \@kernel@after@begindocument \@empty + \@onlypreamble\document \let\normalsfcodes\@empty \def\nofiles{% @@ -1791,24 +3212,43 @@ Type H <return> for immediate help.}% \if@nobreak\ifvmode\nobreak\fi\fi } \let\@auxout=\@mainaux -\def\includeonly#1{% - \@partswtrue - \set@curr@file{\zap@space#1 \@empty}% - \let\@partlist\@curr@file - } -\@onlypreamble\includeonly \def\include#1{\relax \ifnum\@auxout=\@partaux \@latex@error{\string\include\space cannot be nested}\@eha \else - \set@curr@file{#1 }% - \expandafter\@include\@curr@file + \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\expandafter{\reserved@a}% + \ifx\@partlist\@empty + \edef\@partlist{\@strip@tex@ext\@curr@file}% + \else + \edef\@partlist{\@partlist,\@strip@tex@ext\@curr@file}% + \fi + }% + } +\@onlypreamble\includeonly +\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 - \immediate\write\@mainaux{\string\@input{#1.aux}}% + \immediate\write\@mainaux{\string\@input{"#1.aux"}}% \fi \@tempswatrue \if@partsw @@ -1820,10 +3260,18 @@ Type H <return> for immediate help.}% \if@tempswa \let\@auxout\@partaux \if@filesw - \immediate\openout\@partaux #1.aux + \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 @@ -1849,7 +3297,6 @@ Type H <return> for immediate help.}% \gdef\@charlb[{] \gdef\@charrb[}] ]% }brace matching - \def\set@curr@file#1{% \begingroup \escapechar\m@ne @@ -1905,6 +3352,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{% @@ -1918,20 +3368,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 @@ -2078,7 +3535,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 @@ -2086,7 +3543,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 @@ -2395,7 +3852,7 @@ Type H <return> for immediate help.}% \@latex@error{Font family `#1+#2' unknown}\@eha \else \edef\reserved@a{#3}% - \expandafter\series@maybe@drop@one@m\expandafter{#3}\reserved@b + \series@maybe@drop@one@m\reserved@a\reserved@b \ifx\reserved@a\reserved@b\else \@latex@warning{Font shape declaration has incorrect series value `#3'.\MessageBreak It should not contain an `m'! @@ -3303,15 +4760,18 @@ Type H <return> for immediate help.}% \DeclareFontSeriesChangeRule {m}{sc}{msc}{mc} \def\set@target@series#1{% \edef\f@series{#1}% - \expandafter\series@maybe@drop@one@m\expandafter{\f@series}\f@series + \series@maybe@drop@one@m\f@series\f@series } -\def\series@maybe@drop@one@m#1#2{% +\def\series@maybe@drop@one@m#1{% + \expandafter\series@maybe@drop@one@m@x\expandafter{#1}} + +\def\series@maybe@drop@one@m@x#1#2{% \def\in@@##1,#1,{}% \series@check@toks\expandafter{\in@@ ,ulm,elm,lm,slm,mm,sbm,bm,ebm,ubm,muc,mec,mc,msc,msx,mx,mex,mux,{}{},#1,}% \edef\in@@{\the\series@check@toks}% \ifx\in@@\@empty - \def#2{#1}% + \edef#2{#1}% \else \edef#2{\expandafter\series@drop@one@m #1m\series@drop@one@m}% \fi @@ -3326,14 +4786,17 @@ Type H <return> for immediate help.}% \DeclareRobustCommand\ulcshape {\not@math@alphabet\ulcshape\relax \fontshape\ulcdefault\selectfont} +\let\ulcdefault\@undefined % for rollback \newcommand\ulcdefault{ulc} \DeclareRobustCommand\swshape {\not@math@alphabet\swshape\relax \fontshape\swdefault\selectfont} +\let\swdefault\@undefined % for rollback \newcommand\swdefault{sw} \DeclareRobustCommand\sscshape {\not@math@alphabet\sscshape\relax \fontshape\sscdefault\selectfont} +\let\sscdefault\@undefined % for rollback \newcommand\sscdefault{ssc} \DeclareFontShapeChangeRule {n}{it} {it} {sl} \DeclareFontShapeChangeRule {n}{sl} {sl} {it} @@ -3429,6 +4892,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. @@ -3854,7 +5319,7 @@ Type H <return> for immediate help.}% \@eha \fi \else \expandafter\non@alpherr\fi - #1{#4}% + \expandafter#1\ifx\math@bgroup\bgroup{#4}\else#4\fi }% } \def\process@table{% @@ -3894,10 +5359,10 @@ Type H <return> for immediate help.}% \fi \endgroup \let\select@group\document@select@group - \fontencoding{\encodingdefault}% - \fontfamily{\familydefault}% - \fontseries{\seriesdefault}% - \fontshape{\shapedefault}% + \fontencoding\encodingdefault + \edef\f@family{\familydefault}% + \edef\f@series{\seriesdefault}% + \edef\f@shape{\shapedefault}% \everyjob{}% } \@onlypreamble\process@table @@ -4605,13 +6070,16 @@ Type H <return> for immediate help.}% \DeclareRobustCommand\itshape {\not@math@alphabet\itshape\mathit \fontshape\itdefault\selectfont} +\let\DeclareFontSeriesDefault\@undefined % for rollback \newcommand\DeclareFontSeriesDefault[3][]{% \def\reserved@a{#1}% \ifx\reserved@a\@empty \ifcsname #2series\endcsname % supported are % \[md/bf]default \expandafter\def - \csname #2default\endcsname{#3}% + \csname #2default\endcsname{#3\@empty}% + \expandafter\def + \csname #2default@previous\endcsname{#3\@empty}% \else \@latex@error{Wrong syntax for \string\DeclareFontSeriesDefault}% {Mandatory first argument must be 'md' or 'bf'.} @@ -4641,55 +6109,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}% - \edef\bfdef@ult{\bfdefault}% - \edef\mddef@ult{\mddefault}% - \edef\famdef@ult{\familydefault}% -} - -\DeclareRobustCommand\bfseries{% - \not@math@alphabet\bfseries\mathbf - \expand@font@defaults - \ifx\f@family\rmdef@ult \fontseries\bfseries@rm - \else\ifx\f@family\sfdef@ult \fontseries\bfseries@sf - \else\ifx\f@family\ttdef@ult \fontseries\bfseries@tt - \else \fontseries\bfdefault - \fi\fi\fi - \selectfont -} - -\DeclareRobustCommand\mdseries{% - \not@math@alphabet\mdseries\relax - \expand@font@defaults - \ifx\f@family\rmdef@ult \fontseries\mdseries@rm - \else\ifx\f@family\sfdef@ult \fontseries\mdseries@sf - \else\ifx\f@family\ttdef@ult \fontseries\mdseries@tt - \else \fontseries\mddefault - \fi\fi\fi - \selectfont -} - -\DeclareRobustCommand\rmfamily{% - \not@math@alphabet\rmfamily\mathrm - \prepare@family@series@update{rm}\rmdefault - \@rmfamilyhook - \selectfont} -\DeclareRobustCommand\sffamily{% - \not@math@alphabet\sffamily\mathsf - \prepare@family@series@update{sf}\sfdefault - \@sffamilyhook - \selectfont} -\DeclareRobustCommand\ttfamily{% - \not@math@alphabet\ttfamily\mathtt - \prepare@family@series@update{tt}\ttdefault - \@ttfamilyhook - \selectfont} -\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 @@ -4709,7 +6128,7 @@ Type H <return> for immediate help.}% \ifx \f@series\target@series@value \else \maybe@load@fontshape - \let\f@series\target@series@value + \series@maybe@drop@one@m\target@series@value\f@series \fi \fi \fi @@ -4724,9 +6143,14 @@ Type H <return> for immediate help.}% \csname mdseries@\target@meta@family@value\endcsname \expandafter\let\expandafter\reserved@c \csname bfseries@\target@meta@family@value\endcsname - \expandafter\ifx\csname mdseries@#1\endcsname\f@series + \expandafter\series@maybe@drop@one@m + \csname mdseries@#1\endcsname\reserved@d + \ifx\reserved@d\f@series \let\target@series@value\reserved@b - \else\expandafter\ifx\csname bfseries@#1\endcsname\f@series + \else + \expandafter\series@maybe@drop@one@m + \csname bfseries@#1\endcsname\reserved@d + \ifx\reserved@d\f@series \let\target@series@value\reserved@c \else\ifx\f@series\mddef@ult \let\target@series@value\reserved@b \else\ifx\f@series\bfdef@ult \let\target@series@value\reserved@c @@ -4736,22 +6160,134 @@ 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 + \mdseries + \let\seriesdefault\f@series + \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\bfdefault@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\mddefault@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 - \ifx\famdef@ult\rmdef@ult \rmfamily - \else\ifx\famdef@ult\sfdef@ult \sffamily - \else\ifx\famdef@ult\ttdef@ult \ttfamily + \@font@series@contextfalse + \def\requested@test@context{#1}% + \expandafter\edef\csname ??def@ult\endcsname{\f@family}% + \let\@elt\test@font@series@context + \@meta@family@list + \@elt{??}% + \let\@elt\relax + \if@font@series@context + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi +} + +\def\test@font@series@context#1{% + \edef\reserved@a{\csname #1def@ult\endcsname}% + \ifx\f@family\reserved@a + \let\@elt\@gobble + \expandafter\ifx + \csname\requested@test@context series@#1\endcsname\f@series + \@font@series@contexttrue + \else + \expandafter\ifx + \csname\requested@test@context def@ult\endcsname\f@series + \@font@series@contexttrue \fi\fi\fi -}% -\expandafter\let\csname ver@mweights.sty\endcsname\fmtversion +} + +\newif\if@font@series@context \def\DeclareEmphSequence#1{% \protected@edef\emfontdeclare@clist{\zap@space#1, \@empty\emforce\emreset}% @@ -4810,7 +6346,11 @@ Type H <return> for immediate help.}% \mathversion{normal}} \def\math@version{normal} \def\newfont#1#2{\@ifdefinable#1{\font#1=#2\relax}} -\DeclareRobustCommand\symbol[1]{\char #1\relax} +\ifdefined\XeTeXversion + \DeclareRobustCommand\symbol[1]{\Ucharcat#1 12\relax} +\else + \DeclareRobustCommand\symbol[1]{\char#1\relax} +\fi \def\@setfontsize#1#2#3{\@nomath#1% \ifx\protect\@typeset@protect \let\@currsize#1% @@ -4826,10 +6366,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 @@ -4883,6 +6424,8 @@ Type H <return> for immediate help.}% } {\input{preload.ltx}} \let\@addtofilelist\@gobble +\expandafter\def\expandafter\seriesdefault\expandafter{\seriesdefault\@empty} +\let\seriesdefault@kernel\seriesdefault \let\@acci\' \let\@accii\` \let\@acciii\= %%% From File: ltfntcmd.dtx %% @@ -5197,22 +6740,22 @@ Type H <return> for immediate help.}% \DeclareTextCommandDefault{\newtie} {\tc@check@accent{\t}2\newtie} \DeclareTextCommandDefault{\capitalnewtie} {\tc@check@accent{\t}2\capitalnewtie} \else - \def\capitalacute{\@tabacckludge'} - \def\capitalbreve{\u} - \def\capitalcaron{\v} - \def\capitalcedilla{\c} - \def\capitalcircumflex{\^} - \def\capitaldieresis{\"} - \def\capitaldotaccent{\.} - \def\capitalgrave{\@tabacckludge`} - \def\capitalhungarumlaut{\H} - \def\capitalmacron{\@tabacckludge=} - \def\capitalnewtie{\t} - \def\capitalogonek{\k} - \def\capitalring{\r} - \def\capitaltie{\t} - \def\capitaltilde{\~} - \def\newtie{\t} + \DeclareTextCommandDefault\capitalacute{\@tabacckludge'} + \DeclareTextCommandDefault\capitalbreve{\u} + \DeclareTextCommandDefault\capitalcaron{\v} + \DeclareTextCommandDefault\capitalcedilla{\c} + \DeclareTextCommandDefault\capitalcircumflex{\^} + \DeclareTextCommandDefault\capitaldieresis{\"} + \DeclareTextCommandDefault\capitaldotaccent{\.} + \DeclareTextCommandDefault\capitalgrave{\@tabacckludge`} + \DeclareTextCommandDefault\capitalhungarumlaut{\H} + \DeclareTextCommandDefault\capitalmacron{\@tabacckludge=} + \DeclareTextCommandDefault\capitalnewtie{\t} + \DeclareTextCommandDefault\capitalogonek{\k} + \DeclareTextCommandDefault\capitalring{\r} + \DeclareTextCommandDefault\capitaltie{\t} + \DeclareTextCommandDefault\capitaltilde{\~} + \DeclareTextCommandDefault\newtie{\t} \fi \DeclareTextCommandDefault{\textlbrackdbl} {\tc@check@symbol2\textlbrackdbl} \DeclareTextCommandDefault{\textrbrackdbl} {\tc@check@symbol2\textrbrackdbl} @@ -5566,7 +7109,9 @@ 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 {\csname p@#1\expandafter\endcsname\csname the#1\endcsname}% } @@ -5582,10 +7127,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 @@ -5594,25 +7141,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} @@ -5643,14 +7208,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 @@ -5670,31 +7245,44 @@ 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} \def\@xcentercr{\addvspace{-\parskip}\@ifnextchar [\@icentercr\ignorespaces} -\def\@icentercr[#1]{\vskip #1\ignorespaces} +\def\@icentercr[#1]{\@vspace@calcify{#1}\ignorespaces} \def\center{\trivlist \centering\item\relax} \def\endcenter{\endtrivlist} \DeclareRobustCommand\centering{% \let\\\@centercr \rightskip\@flushglue\leftskip\@flushglue + \finalhyphendemerits=\z@ \parindent\z@\parfillskip\z@skip} \DeclareRobustCommand\raggedright{% \let\\\@centercr\@rightskip\@flushglue \rightskip\@rightskip + \finalhyphendemerits=\z@ \leftskip\z@skip \parindent\z@} \DeclareRobustCommand\raggedleft{% \let\\\@centercr \rightskip\z@skip\leftskip\@flushglue + \finalhyphendemerits=\z@ \parindent\z@\parfillskip\z@skip} \newskip\@rightskip \@rightskip \z@skip \def\flushleft{\trivlist \raggedright\item\relax} @@ -5749,7 +7337,12 @@ Type H <return> for immediate help.}% } \newbox\@verbvisiblespacebox -\def\@sverb#1{% +\@namedef{verbatim*}{\@verbatim + \@setupverbvisiblespace + \frenchspacing\@vobeyspaces\@sxverbatim} +\expandafter\let\csname endverbatim*\endcsname =\endverbatim +\def\@sverb#1{\if\noexpand#1 \expandafter\@sverb\else\@@sverb{#1}\fi} +\def\@@sverb#1{% \catcode`#1\active \lccode`\~`#1% \gdef\verb@balance@group{\verb@egroup @@ -5759,10 +7352,6 @@ Type H <return> for immediate help.}% \ifnum\catcode`\ =\active \else \@setupverbvisiblespace \@vobeyspaces \fi } -\@namedef{verbatim*}{\@verbatim - \@setupverbvisiblespace - \frenchspacing\@vobeyspaces\@sxverbatim} -\expandafter\let\csname endverbatim*\endcsname =\endverbatim \def\@makeother#1{\catcode`#112\relax} \let\verb@balance@group\@empty \def\verb@egroup{\global\let\verb@balance@group\@empty\egroup} @@ -5895,13 +7484,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{% @@ -5931,11 +7520,21 @@ Type H <return> for immediate help.}% #1\crcr}} \let\sp=^ \let\sb=_ -\def\>{\mskip\medmuskip} -\def\;{\mskip\thickmuskip} -\def\!{\mskip-\thinmuskip} + +\DeclareRobustCommand\tmspace[3]{% + \ifmmode\mskip#1#2\else\leavevmode@ifvmode\kern#1#3\fi\relax} +\DeclareRobustCommand\,{\tmspace+\thinmuskip{.16667em}} +\let\thinspace\, +\DeclareRobustCommand\!{\tmspace-\thinmuskip{.16667em}} +\let\negthinspace\! +\DeclareRobustCommand\:{\tmspace+\medmuskip{.2222em}} +\let\medspace\: +\let\>=\: +\DeclareRobustCommand\negmedspace{\tmspace-\medmuskip{.2222em}} +\DeclareRobustCommand\;{\tmspace+\thickmuskip{.2777em}} +\let\thickspace\; +\DeclareRobustCommand\negthickspace{\tmspace-\thickmuskip{.2777em}} \DeclareRobustCommand\*{\discretionary{\thinspace\the\textfont2\char2}{}{}} -\let\:=\> \def\active@math@prime{^\bgroup\prim@s} {\catcode`\'=\active \global\let'\active@math@prime} \def\prim@s{% @@ -6035,7 +7634,7 @@ Type H <return> for immediate help.}% \def\@xeqncr[#1]{% \ifnum0=`{\fi}% \@@eqncr - \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}% + \noalign{\penalty\@eqpen\vskip\jot\@vspace@calcify{#1}}% } \def\@@eqncr{\let\reserved@a\relax \ifcase\@eqcnt \def\reserved@a{& & &}\or \def\reserved@a{& &}% @@ -6331,7 +7930,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{% @@ -6341,7 +7941,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 @@ -6595,6 +8196,7 @@ Type H <return> for immediate help.}% \DeclareRobustCommand\centerline[1]{\@@line{\hss#1\hss}} \DeclareRobustCommand\rlap[1]{\hb@xt@\z@{#1\hss}} \DeclareRobustCommand\llap[1]{\hb@xt@\z@{\hss#1}} +\DeclareRobustCommand\clap[1]{\hb@xt@\z@{\hss#1\hss}} %%% From File: lttab.dtx \expandafter\let\csname ver@autotabg.sty\endcsname\fmtversion \newdimen\@gtempa @@ -6652,7 +8254,7 @@ Type H <return> for immediate help.}% \def\@ifatmargin{\ifdim \wd\@curline =\z@} \def\@tabcr{\@stopline \@ifstar{\penalty \@M \@xtabcr}\@xtabcr} \def\@xtabcr{\@ifnextchar[\@itabcr{\@startline\ignorespaces}} -\def\@itabcr[#1]{\vskip #1\@startline\ignorespaces} +\def\@itabcr[#1]{\@vspace@calcify{#1}\@startline\ignorespaces} \def\tabbing{\lineskip \z@skip\let\>\@rtab\let\<\@ltab\let\=\@settab \let\+\@tabplus\let\-\@tabminus\let\`\@tabrj\let\'\@tablab \let\\=\@tabcr @@ -6787,7 +8389,7 @@ Type H <return> for immediate help.}% \fi} \def\@xargarraycr#1{\@tempdima #1\advance\@tempdima \dp \@arstrutbox \vrule \@height\z@ \@depth\@tempdima \@width\z@ \cr} -\def\@yargarraycr#1{\cr\noalign{\vskip #1}} +\def\@yargarraycr#1{\cr\noalign{\@vspace@calcify{#1}}} \long\def\multicolumn#1#2#3{\multispan{#1}\begingroup \@mkpream{#2}% \def\@sharp{#3}\set@typeset@protect @@ -6951,41 +8553,54 @@ 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 \let\@circlefnt\tencirc +\DeclareRobustCommand\thinlines{\let\@linefnt\tenln + \let\@circlefnt\tencirc \@wholewidth\fontdimen8\tenln \@halfwidth .5\@wholewidth} -\DeclareRobustCommand\thicklines{\let\@linefnt\tenlnw \let\@circlefnt\tencircw +\DeclareRobustCommand\thicklines{\let\@linefnt\tenlnw + \let\@circlefnt\tencircw \@wholewidth\fontdimen8\tenlnw \@halfwidth .5\@wholewidth} -\DeclareRobustCommand\linethickness[1] - {\@wholewidth #1\relax \@halfwidth .5\@wholewidth} +\DeclareRobustCommand*\linethickness[1] + {\@wholewidth #1\relax \@halfwidth .5\@wholewidth \ignorespaces} \def\shortstack{\@ifnextchar[\@shortstack{\@shortstack[c]}} \def\@shortstack[#1]{% \leavevmode @@ -6998,10 +8613,10 @@ Type H <return> for immediate help.}% \def\@ishortstack#1{\ialign{\mb@l {##}\unskip\mb@r\cr #1\crcr}\egroup} \def\@stackcr{\@ifstar\@ixstackcr\@ixstackcr} \def\@ixstackcr{\@ifnextchar[\@istackcr{\cr\ignorespaces}} -\def\@istackcr[#1]{\cr\noalign{\vskip #1}\ignorespaces} +\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 @@ -7059,7 +8674,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 @@ -7112,9 +8727,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@ @@ -7126,15 +8742,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 @@ -7148,13 +8768,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 @@ -7188,9 +8810,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@ @@ -7225,7 +8848,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 @@ -7236,7 +8860,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 @@ -7266,33 +8892,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 @@ -7368,8 +9000,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}}% @@ -7507,7 +9139,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 @@ -7790,11 +9422,11 @@ Type H <return> for immediate help.}% \DeclareRobustCommand*\textsuperscript[1]{% \@textsuperscript{\selectfont#1}} \def\@textsuperscript#1{% - {\m@th\ensuremath{^{\mbox{\fontsize\sf@size\z@#1}}}}} + {\m@th\ensuremath{^{\mbox{\fontsize\sf@size\sf@size#1}}}}} \DeclareRobustCommand*\textsubscript[1]{% \@textsubscript{\selectfont#1}}% \def\@textsubscript#1{% - {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}}}} + {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\sf@size#1}}}}} \newdimen\footnotesep \def\footnote{\@ifnextchar[\@xfootnote{\stepcounter\@mpfn \protected@xdef\@thefnmark{\thempfn}% @@ -7953,7 +9585,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}}% @@ -7961,7 +9593,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}% @@ -7991,6 +9623,1455 @@ 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}% Loaded package + \expandafter\protected@xdef % <-- protected... + \csname ver@\@currpkg@reqd\endcsname{#1}% Requested package + \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{% + \edef\reserved@a{\@expl@@@filehook@resolve@file@subst@@w #3.#1\@nil}% + \expandafter\xdef\csname opt@\reserved@a\endcsname{% + \@ifundefined{opt@\reserved@a}\@empty + {\csname opt@\reserved@a\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 + \edef\@currpkg@reqd{\@currname.\@currext}% + \ifx\CurrentFile\CurrentFileUsed + \else + \filename@parse\@curr@file + \edef\@currname{\string@makeletter\filename@base}% + \edef\@currext{\string@makeletter\filename@ext}% + \fi + \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{\@currpkg@reqd}{}% + {\@latex@error + {The \@cls@pkg\space\@currpkg@reqd\space failed to load.}\@ehd}% + \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}% + \@ifl@aded\@currext\@currname{}{\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: ltfilehook.dtx +\providecommand\ltfilehookversion{v1.0b} +\providecommand\ltfilehookdate{2020/09/26} +\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.0c} +\providecommand\ltshipoutdate{2020/09/27} +\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_protected: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 \hss } + \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_protected: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: +\cs_new_protected:Npn \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_protected: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,} @@ -8056,10 +11137,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 @@ -9057,950 +12134,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{% - \xdef\@currnamestack{% - {\@currname}% - {\@currext}% - {\the\catcode`\@}% - \@currnamestack}} -\@onlypreamble\@pushfilename -\def\@popfilename{\expandafter\@p@pfilename\@currnamestack\@nil} -\@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\@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{\let\@unprocessedoptions\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{\let\@unprocessedoptions\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}% - \let\@unprocessedoptions\@@unprocessedoptions - \csname\@currname.\@currext-h@@k\endcsname - \expandafter\let\csname\@currname.\@currext-h@@k\endcsname - \@undefined - \@unprocessedoptions}% - \@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\@@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: ltluatex.dtx -\ifx\directlua\@undefined\else -\ifnum\luatexversion<60 % - \wlog{***************************************************} - \wlog{* LuaTeX version too old for ltluatex support *} - \wlog{***************************************************} - \expandafter\endinput -\fi -\ifx\e@alloc@attribute@count\@undefined - \countdef\e@alloc@attribute@count=258 -\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 -\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 - \def\setrangecatcode#1#2#3{% - \ifnum#1>#2 % - \expandafter\@gobble - \else - \expandafter\@firstofone - \fi - {% - \catcode#1=#3 % - \expandafter\setrangecatcode\expandafter - {\number\numexpr#1 + 1\relax}{#2}{#3} - }% - } - \@firstofone{% - \catcodetable\catcodetable@initex - \catcode0=12 % - \catcode13=12 % - \catcode37=12 % - \setrangecatcode{65}{90}{12}% - \setrangecatcode{97}{122}{12}% - \catcode92=12 % - \catcode127=12 % - \savecatcodetable\catcodetable@string - \endgroup - }% -\newcatcodetable\catcodetable@latex -\newcatcodetable\catcodetable@atletter -\begingroup - \def\parseunicodedataI#1;#2;#3;#4\relax{% - \parseunicodedataII#1;#3;#2 First>\relax - }% - \def\parseunicodedataII#1;#2;#3 First>#4\relax{% - \ifx\relax#4\relax - \expandafter\parseunicodedataIII - \else - \expandafter\parseunicodedataIV - \fi - {#1}#2\relax% - }% - \def\parseunicodedataIII#1#2#3\relax{% - \ifnum 0% - \if L#21\fi - \if M#21\fi - >0 % - \catcode"#1=11 % - \fi - }% - \def\parseunicodedataIV#1#2#3\relax{% - \read\unicoderead to \unicodedataline - \if L#2% - \count0="#1 % - \expandafter\parseunicodedataV\unicodedataline\relax - \fi - }% - \def\parseunicodedataV#1;#2\relax{% - \loop - \unless\ifnum\count0>"#1 % - \catcode\count0=11 % - \advance\count0 by 1 % - \repeat - }% - \def\storedpar{\par}% - \chardef\unicoderead=\numexpr\count16 + 1\relax - \openin\unicoderead=UnicodeData.txt % - \loop\unless\ifeof\unicoderead % - \read\unicoderead to \unicodedataline - \unless\ifx\unicodedataline\storedpar - \expandafter\parseunicodedataI\unicodedataline\relax - \fi - \repeat - \closein\unicoderead - \@firstofone{% - \catcode64=12 % - \savecatcodetable\catcodetable@latex - \catcode64=11 % - \savecatcodetable\catcodetable@atletter - } -\endgroup -\ifx\e@alloc@luafunction@count\@undefined - \countdef\e@alloc@luafunction@count=260 -\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 -\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 -\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 -\fi -\def\newluachunkname#1{% - \e@alloc\luachunk\e@alloc@chardef - \e@alloc@luachunk@count\m@ne\e@alloc@top#1% - {\escapechar\m@ne - \directlua{lua.name[\the\allocationnumber]="\string#1"}}% -} -\e@alloc@luachunk@count=\z@ -\everyjob\expandafter{% - \the\everyjob - \begingroup - \attributedef\attributezero=0 % - \chardef \charzero =0 % - \countdef \CountZero =0 % - \dimendef \dimenzero =0 % - \mathchardef \mathcharzero =0 % - \muskipdef \muskipzero =0 % - \skipdef \skipzero =0 % - \toksdef \tokszero =0 % - \directlua{require("ltluatex")} - \endgroup -} -\everyjob\expandafter{% - \the\everyjob - \directlua{% - if xpcall(function ()% - require('luaotfload-main')% - end,texio.write_nl) then % - local _void = luaotfload.main ()% - else % - texio.write_nl('Error in luaotfload: reverting to OT1')% - tex.print('\string\\def\string\\encodingdefault{OT1}')% - end % - }% - \let\f@encoding\encodingdefault - \expandafter\let\csname ver@luaotfload.sty\endcsname\fmtversion - } -\fi %%% From File: ltfinal.dtx \tracingstats1 \newcount\@lowpenalty @@ -10086,6 +12219,8 @@ Type H <return> for immediate help.}% \lccode 127=127 % alternate hyphen char \lccode 23 =23 % textcompwordmark in T1 \fi +\@expl@finalise@setup@@ +\def\@expl@finalise@setup@@{} \ifx\XeTeXuseglyphmetrics\@undefined \else \XeTeXuseglyphmetrics=1 % @@ -10117,7 +12252,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@ @@ -10299,7 +12434,6 @@ Type H <return> for immediate help.}% \dh\DH\dj\DJ\l\L\ng\NG\ss\SS\th\TH} \protected@edef\MakeUppercase#1{\MakeUppercase{#1}} \protected@edef\MakeLowercase#1{\MakeLowercase{#1}} -\input{ltexpl.ltx} \let\reserved@a\@filelist \let\reserved@b=\@undefined \let\reserved@c=\@undefined @@ -10318,7 +12452,7 @@ Type H <return> for immediate help.}% \endgroup} \let\@filelist\@gobble \def\@addtofilelist#1{\xdef\@filelist{\@filelist,#1}}% -\AtBeginDocument{\reinstall@nfss@defs\init@series@setup} +\@input{latex2e-first-aid-for-external-files.ltx} \makeatother \errorstopmode \dump |